@seniorsistemas/components-ai 0.0.0-master-d4a804fe
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/CHANGELOG.md +101 -0
- package/CONTRIBUTING.md +317 -0
- package/README.md +161 -0
- package/docs/API.md +486 -0
- package/docs/COMPONENTS.md +272 -0
- package/docs/EXAMPLES.md +559 -0
- package/docs/MIGRATION.md +367 -0
- package/esm2022/lib/angular-components.module.mjs +25 -0
- package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +121 -0
- package/esm2022/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.mjs +176 -0
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +625 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-date.component.mjs +86 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.mjs +103 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-lookup.component.mjs +599 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-number.component.mjs +92 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-text.component.mjs +163 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-textarea.component.mjs +81 -0
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.mjs +93 -0
- package/esm2022/lib/components/dynamic-form/fields/index.mjs +8 -0
- package/esm2022/lib/components/dynamic-form/models/dynamic-form.models.mjs +2 -0
- package/esm2022/lib/components/export-dialog/export-dialog.component.mjs +219 -0
- package/esm2022/lib/config/translation.config.mjs +70 -0
- package/esm2022/lib/directives/cep-mask.directive.mjs +79 -0
- package/esm2022/lib/directives/document-mask.directive.mjs +62 -0
- package/esm2022/lib/directives/phone-mask.directive.mjs +59 -0
- package/esm2022/lib/interceptors/api.interceptor.mjs +55 -0
- package/esm2022/lib/models/base-entity.interface.mjs +2 -0
- package/esm2022/lib/models/entity-list.config.mjs +2 -0
- package/esm2022/lib/pipes/translate.pipe.mjs +74 -0
- package/esm2022/lib/services/auth.service.mjs +169 -0
- package/esm2022/lib/services/cookie.service.mjs +90 -0
- package/esm2022/lib/services/entity.service.mjs +208 -0
- package/esm2022/lib/services/mask.service.mjs +121 -0
- package/esm2022/lib/services/permission.service.mjs +180 -0
- package/esm2022/lib/services/senior-token.service.mjs +209 -0
- package/esm2022/lib/services/theme.service.mjs +85 -0
- package/esm2022/lib/services/translation.service.mjs +232 -0
- package/esm2022/public-api.mjs +90 -0
- package/esm2022/seniorsistemas-components-ai.mjs +5 -0
- package/fesm2022/seniorsistemas-components-ai.mjs +4006 -0
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/angular-components.module.d.ts +13 -0
- package/lib/components/breadcrumb/breadcrumb.component.d.ts +23 -0
- package/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.d.ts +46 -0
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +97 -0
- package/lib/components/dynamic-form/fields/dynamic-field-date.component.d.ts +16 -0
- package/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.d.ts +17 -0
- package/lib/components/dynamic-form/fields/dynamic-field-lookup.component.d.ts +52 -0
- package/lib/components/dynamic-form/fields/dynamic-field-number.component.d.ts +16 -0
- package/lib/components/dynamic-form/fields/dynamic-field-text.component.d.ts +17 -0
- package/lib/components/dynamic-form/fields/dynamic-field-textarea.component.d.ts +16 -0
- package/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.d.ts +20 -0
- package/lib/components/dynamic-form/fields/index.d.ts +7 -0
- package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +178 -0
- package/lib/components/export-dialog/export-dialog.component.d.ts +56 -0
- package/lib/config/translation.config.d.ts +24 -0
- package/lib/directives/cep-mask.directive.d.ts +13 -0
- package/lib/directives/document-mask.directive.d.ts +19 -0
- package/lib/directives/phone-mask.directive.d.ts +11 -0
- package/lib/interceptors/api.interceptor.d.ts +2 -0
- package/lib/models/base-entity.interface.d.ts +7 -0
- package/lib/models/entity-list.config.d.ts +161 -0
- package/lib/pipes/translate.pipe.d.ts +21 -0
- package/lib/services/auth.service.d.ts +82 -0
- package/lib/services/cookie.service.d.ts +31 -0
- package/lib/services/entity.service.d.ts +99 -0
- package/lib/services/mask.service.d.ts +36 -0
- package/lib/services/permission.service.d.ts +91 -0
- package/lib/services/senior-token.service.d.ts +70 -0
- package/lib/services/theme.service.d.ts +16 -0
- package/lib/services/translation.service.d.ts +54 -0
- package/package.json +53 -0
- package/public-api.d.ts +17 -0
- package/src/lib/styles/entity-list.shared.scss +383 -0
- package/src/lib/styles/index.scss +10 -0
|
@@ -0,0 +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/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/pipes/translate.pipe.ts","../../projects/components-ai/src/lib/directives/cep-mask.directive.ts","../../projects/components-ai/src/lib/directives/phone-mask.directive.ts","../../projects/components-ai/src/lib/services/mask.service.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/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/interceptors/api.interceptor.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-ia\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 */\n protected handleError = (error: any): Observable<never> => {\n let errorMessage = 'An error occurred';\n \n if (this.translationService) {\n errorMessage = this.translationService.translate('error.generic');\n }\n \n if (error.status) {\n switch (error.status) {\n case 401:\n errorMessage = this.translationService \n ? this.translationService.translate('error.unauthorized')\n : 'Unauthorized';\n break;\n case 403:\n errorMessage = this.translationService\n ? this.translationService.translate('error.forbidden')\n : 'Forbidden';\n break;\n case 404:\n errorMessage = this.translationService\n ? this.translationService.translate('error.not_found')\n : 'Not found';\n break;\n case 500:\n errorMessage = this.translationService\n ? this.translationService.translate('error.server_error')\n : 'Server error';\n break;\n default:\n if (error.error && error.error.message) {\n errorMessage = error.error.message;\n } else if (error.statusText) {\n errorMessage = error.statusText;\n }\n }\n } else if (error.message) {\n errorMessage = error.message;\n }\n\n console.error('EntityService Error:', error);\n return throwError(() => new Error(errorMessage));\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 * Create new entity\n */\n insert(entity: T): Observable<T> {\n return this.http.post<T>(this.entityUrl, 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}`, 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\nexport type SupportedLanguage = 'pt-BR' | 'en-US' | 'es-ES';\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 = new BehaviorSubject<SupportedLanguage>(\n TRANSLATION_CONFIG.defaultLanguage as SupportedLanguage\n );\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 this.translationLoader = loader;\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 // Para estrutura plana, buscar diretamente pela chave\n const translation = 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 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 // Se há um loader customizado, usar ele\n if (this.translationLoader) {\n const translations = await this.translationLoader.loadTranslations(language);\n this.translations[language] = translations;\n console.log(`Translations loaded for ${language}:`, Object.keys(this.translations[language]).length, 'keys');\n return;\n }\n \n // Caso contrário, avisar que não há traduções\n console.warn(`No translation loader provided. Translations for ${language} not loaded.`);\n this.translations[language] = {};\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 if (this.translationLoader) {\n const fallbackTranslations = await this.translationLoader.loadTranslations(TRANSLATION_CONFIG.fallbackLanguage);\n this.translations[language] = fallbackTranslations;\n console.log(`Fallback translations loaded for ${language}`);\n }\n } catch (fallbackError) {\n console.error(`Error loading fallback translations:`, fallbackError);\n }\n }\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 { Component, EventEmitter, Input, Output, Optional, Inject, 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 autoTable from 'jspdf-autotable';\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// Interface para o serviço de tradução (duck typing)\nexport interface TranslationService {\n translate(key: string, params?: any): 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 ],\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 = 'crmx.business';\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(@Optional() @Inject('TranslationService') private translationService?: TranslationService) {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n ngOnChanges(): void {\n this.initializeFormats();\n this.initializeScopes();\n }\n\n t(key: string): string {\n if (this.translationService) {\n return this.translationService.translate(`${this.translationPrefix}.${key}`);\n }\n return key;\n }\n\n private initializeFormats(): void {\n this.formats = [\n {\n value: 'xlsx',\n label: 'Excel',\n icon: 'pi-file-excel',\n description: this.t('export_excel_description')\n },\n {\n value: 'pdf',\n label: 'PDF',\n icon: 'pi-file-pdf',\n description: this.t('export_pdf_description')\n }\n ];\n }\n\n private initializeScopes(): void {\n this.scopes = [\n {\n value: 'all',\n label: this.t('export_all_records'),\n icon: 'pi-list',\n description: this.t('export_all_records_description')\n },\n {\n value: 'selected',\n label: this.t('export_selected_records'),\n icon: 'pi-check-square',\n description: this.t('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.t('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.t('export_pdf_title'), 14, 20);\n\n // Subtítulo\n doc.setFontSize(10);\n doc.setTextColor(100);\n doc.text(`${this.t('export_exported_at')}: ${new Date().toLocaleString('pt-BR')}`, 14, 28);\n doc.text(`${this.t('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 autoTable(doc, {\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>{{ t('export_data_title') }}</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>{{ t('export_format_title') }}</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>{{ t('export_scope_title') }}</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 }} {{ t('export_records_count') }}\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>{{ t('export_columns_title') }}</h3>\n <div class=\"column-actions\">\n <button type=\"button\" class=\"action-link\" (click)=\"selectAllColumns()\">\n {{ t('export_select_all_columns') }}\n </button>\n <span class=\"separator\">|</span>\n <button type=\"button\" class=\"action-link\" (click)=\"deselectAllColumns()\">\n {{ t('export_clear_selection') }}\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 }} {{ t('export_columns_summary') }} {{ columns.length }} {{ t('export_columns_selected') }}</span>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <p-button\n [label]=\"t('cancel')\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onHide()\"\n ></p-button>\n <p-button\n [label]=\"t('export_button')\"\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, Optional, Inject } 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';\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// Interface para o serviço de tradução (duck typing)\nexport interface TranslationService {\n translate(key: string, params?: any): string;\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 ],\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 = 'crmx.business';\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(@Optional() @Inject('TranslationService') private translationService?: TranslationService) {}\n\n t(key: string, params?: any): string {\n if (this.translationService) {\n const fullKey = `${this.translationPrefix}.${key}`;\n const translated = this.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, key) => {\n return text.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), params[key]);\n }, translated);\n }\n \n return translated;\n }\n return key;\n }\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.t('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.t(`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>{{ t('bulk_delete_title') }}</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]=\"t('bulk_delete_warning', { count: stages.length })\"></span>\n </p>\n <p class=\"summary-description\">\n {{ t('bulk_delete_description') }}\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\">{{ t('bulk_delete_progress') }}</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 }} {{ t('bulk_delete_success_count') }}</span>\n </div>\n @if (errorCount > 0) {\n <div class=\"stat error\">\n <i class=\"pi pi-times-circle\"></i>\n <span>{{ errorCount }} {{ t('bulk_delete_error_count') }}</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\">{{ t('bulk_delete_code_label') }}: {{ 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 {{ t('bulk_delete_success_message') }}\n </p>\n }\n @if (errorCount > 0) {\n <p>\n {{ t('bulk_delete_completed_with_errors', { 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]=\"t('cancel')\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onClose()\"\n ></p-button>\n <p-button\n [label]=\"t('bulk_delete_confirm')\"\n icon=\"pi pi-trash\"\n severity=\"danger\"\n (onClick)=\"startDeletion()\"\n ></p-button>\n }\n @if (isCompleted) {\n <p-button\n [label]=\"t('close')\"\n icon=\"pi pi-check\"\n (onClick)=\"onClose()\"\n ></p-button>\n }\n </div>\n </ng-template>\n</p-dialog>\n","import { Component, OnInit, Optional, Inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, RouterModule, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\nimport { MenuItem } from 'primeng/api';\nimport { filter } from 'rxjs/operators';\n\ninterface BreadcrumbData {\n title: string;\n icon?: string;\n}\n\ninterface TranslationService {\n translate(key: string, params?: any): string;\n}\n\n@Component({\n selector: 'sia-breadcrumb',\n standalone: true,\n imports: [CommonModule, RouterModule, BreadcrumbModule],\n template: `\n <p-breadcrumb \n [model]=\"breadcrumbItems\" \n [home]=\"homeItem\"\n styleClass=\"custom-breadcrumb\"\n ></p-breadcrumb>\n `,\n styles: [`\n ::ng-deep .p-breadcrumb {\n background: transparent;\n border: none;\n padding: 0 !important;\n }\n \n ::ng-deep .custom-breadcrumb {\n background: transparent;\n border: none;\n padding: 0 !important;\n \n .p-breadcrumb-list {\n background: transparent;\n padding: 0 !important;\n \n .p-menuitem {\n .p-menuitem-link {\n color: var(--text-secondary);\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 \n &:hover {\n background: var(--p-primary-50);\n color: var(--p-primary-600);\n }\n \n .p-menuitem-icon {\n margin-right: 8px;\n font-size: 16px;\n display: inline-flex;\n align-items: center;\n }\n }\n \n &:last-child .p-menuitem-link {\n color: var(--p-primary-600);\n font-weight: 600;\n background: var(--p-primary-50);\n }\n }\n \n .p-breadcrumb-separator {\n color: var(--text-muted);\n margin: 0 8px;\n font-size: 14px;\n }\n }\n }\n `]\n})\nexport class BreadcrumbComponent implements OnInit {\n @Input() translationPrefix: string = 'crmx.business';\n @Input() isProduction: boolean = false;\n \n breadcrumbItems: MenuItem[] = [];\n\n constructor(\n private router: Router,\n private activatedRoute: ActivatedRoute,\n @Optional() @Inject('TranslationService') private translationService?: TranslationService\n ) {}\n\n ngOnInit(): void {\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 get homeItem(): MenuItem {\n // Só mostra o link do home em desenvolvimento\n if (!this.isProduction) {\n return {\n icon: 'pi pi-home',\n routerLink: '/main',\n title: this.t('breadcrumb_home')\n };\n }\n \n // Em produção, o home não tem link (apenas ícone)\n return {\n icon: 'pi pi-home',\n title: this.t('breadcrumb_home'),\n disabled: true\n };\n }\n\n private buildBreadcrumbs(): void {\n const breadcrumbs: MenuItem[] = [];\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 routerLink: 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.routerLink = undefined;\n lastItem.disabled = true;\n }\n\n this.breadcrumbItems = breadcrumbs;\n }\n\n private t(key: string): string {\n if (this.translationService) {\n // Se a chave já tem o prefixo, usa diretamente\n if (key.includes('.')) {\n return this.translationService.translate(key);\n }\n // Caso contrário, adiciona o prefixo\n return this.translationService.translate(`${this.translationPrefix}.${key}`);\n }\n return key;\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 { Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[siaCepMask]',\n standalone: true\n})\nexport class CepMaskDirective {\n\n constructor(private el: ElementRef) {}\n\n @HostListener('keypress', ['$event'])\n onKeyPress(event: KeyboardEvent) {\n // Permite apenas números\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 const value = event.target.value;\n this.applyCepMask(value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n const value = event.target.value;\n this.applyCepMask(value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n event.preventDefault();\n const pastedText = event.clipboardData?.getData('text') || '';\n const numbers = pastedText.replace(/\\D/g, '');\n this.applyCepMask(numbers);\n }\n\n private applyCepMask(value: string) {\n if (!value) {\n this.el.nativeElement.value = '';\n return;\n }\n\n // Remove todos os caracteres não numéricos\n const numbers = value.replace(/\\D/g, '');\n \n // Limita a 8 dígitos\n const limitedNumbers = numbers.substring(0, 8);\n \n // Aplica a máscara 00000-000\n let maskedValue = '';\n if (limitedNumbers.length === 0) {\n maskedValue = '';\n } else if (limitedNumbers.length <= 5) {\n maskedValue = limitedNumbers;\n } else {\n maskedValue = limitedNumbers.replace(/(\\d{5})(\\d{0,3})/, '$1-$2');\n }\n\n // Atualizar o valor do input\n this.el.nativeElement.value = maskedValue;\n \n // Disparar evento de input para atualizar o FormControl\n const inputEvent = new Event('input', { bubbles: true });\n this.el.nativeElement.dispatchEvent(inputEvent);\n }\n}","import { Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[siaPhoneMask]',\n standalone: true\n})\nexport class PhoneMaskDirective {\n\n constructor(private el: ElementRef) {}\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value = event.target.value;\n this.applyPhoneMask(value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any) {\n const value = event.target.value;\n this.applyPhoneMask(value);\n }\n\n private applyPhoneMask(value: string) {\n if (!value) return;\n\n // Remove todos os caracteres não numéricos\n const numbers = value.replace(/\\D/g, '');\n \n let maskedValue = '';\n\n if (numbers.length <= 10) {\n // Telefone fixo: (00) 0000-0000\n maskedValue = numbers.replace(/(\\d{2})(\\d{4})(\\d{4})/, '($1) $2-$3');\n } else if (numbers.length === 11) {\n // Celular: (00) 00000-0000\n maskedValue = numbers.replace(/(\\d{2})(\\d{5})(\\d{4})/, '($1) $2-$3');\n } else {\n // Limitar a 11 dígitos\n const limitedNumbers = numbers.substring(0, 11);\n maskedValue = limitedNumbers.replace(/(\\d{2})(\\d{5})(\\d{4})/, '($1) $2-$3');\n }\n\n // Atualizar o valor do input apenas se mudou\n if (maskedValue && maskedValue !== value) {\n this.el.nativeElement.value = maskedValue;\n \n // Disparar evento de input para atualizar o FormControl\n const inputEvent = new Event('input', { bubbles: true });\n this.el.nativeElement.dispatchEvent(inputEvent);\n }\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaskService {\n\n /**\n * Aplica máscara de CPF (999.999.999-99) - 100% numérico\n */\n applyCpfMask(value: string): string {\n if (!value) return '';\n \n // Remove todos os caracteres não numéricos\n const numbers = value.replace(/\\D/g, '');\n \n // Limita a 11 dígitos\n const limitedNumbers = numbers.substring(0, 11);\n \n // Aplica a máscara progressivamente\n if (limitedNumbers.length <= 3) {\n return limitedNumbers;\n } else if (limitedNumbers.length <= 6) {\n return limitedNumbers.replace(/(\\d{3})(\\d+)/, '$1.$2');\n } else if (limitedNumbers.length <= 9) {\n return limitedNumbers.replace(/(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3');\n } else {\n return limitedNumbers.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d+)/, '$1.$2.$3-$4');\n }\n }\n\n /**\n * Aplica máscara de CNPJ alfanumérico (XX.XXX.XXX/XXXX-XX)\n * Aceita letras e números em todos os caracteres\n */\n applyCnpjMask(value: string): string {\n if (!value) return '';\n \n // Remove caracteres especiais, mantém letras e números\n const cleaned = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n \n // Limita a 14 caracteres\n const limitedChars = cleaned.substring(0, 14);\n \n // Aplica a máscara progressivamente\n if (limitedChars.length <= 2) {\n return limitedChars;\n } else if (limitedChars.length <= 5) {\n return limitedChars.replace(/(\\w{2})(\\w+)/, '$1.$2');\n } else if (limitedChars.length <= 8) {\n return limitedChars.replace(/(\\w{2})(\\w{3})(\\w+)/, '$1.$2.$3');\n } else if (limitedChars.length <= 12) {\n return limitedChars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w+)/, '$1.$2.$3/$4');\n } else {\n return limitedChars.replace(/(\\w{2})(\\w{3})(\\w{3})(\\w{4})(\\w+)/, '$1.$2.$3/$4-$5');\n }\n }\n\n /**\n * Aplica a máscara apropriada baseada no tipo de pessoa\n * CPF: 100% numérico (999.999.999-99)\n * CNPJ: alfanumérico (XX.XXX.XXX/XXXX-XX)\n */\n applyDocumentMask(value: string, typePerson: 'NATURAL_PERSON' | 'JURIDICAL_PERSON'): string {\n if (!value) return '';\n \n if (typePerson === 'NATURAL_PERSON') {\n return this.applyCpfMask(value);\n } else {\n return this.applyCnpjMask(value);\n }\n }\n\n /**\n * Remove a máscara de um documento (mantém apenas alfanuméricos)\n */\n removeMask(value: string): string {\n if (!value) return '';\n return value.replace(/[^a-zA-Z0-9]/g, '');\n }\n\n /**\n * Determina se um documento é CPF ou CNPJ baseado no comprimento\n */\n getDocumentType(value: string): 'cpf' | 'cnpj' | 'unknown' {\n if (!value) return 'unknown';\n \n const cleaned = this.removeMask(value);\n \n if (cleaned.length <= 11) {\n return 'cpf';\n } else if (cleaned.length <= 14) {\n return 'cnpj';\n }\n \n return 'unknown';\n }\n\n /**\n * Valida se um CPF tem formato válido (11 dígitos numéricos)\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 /**\n * Valida se um CNPJ tem formato válido (14 caracteres alfanuméricos)\n */\n isValidCnpjFormat(value: string): boolean {\n if (!value) return false;\n const cleaned = this.removeMask(value);\n return cleaned.length === 14;\n }\n}\n","import { Directive, ElementRef, HostListener, Input, OnInit } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { MaskService } from '../services/mask.service';\n\n@Directive({\n selector: '[siaDocumentMask]',\n standalone: true\n})\nexport class DocumentMaskDirective implements OnInit {\n @Input() documentType: 'cpf' | 'cnpj' | 'auto' = 'auto';\n @Input() allowAlphanumeric: boolean = false;\n @Input() typePerson?: 'NATURAL_PERSON' | 'JURIDICAL_PERSON' | null;\n\n constructor(\n private el: ElementRef,\n private control: NgControl,\n private maskService: MaskService\n ) {}\n\n ngOnInit() {\n // Aplicar máscara inicial se já houver valor\n if (this.control.value) {\n this.applyMask(this.control.value);\n }\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any): void {\n const value = event.target.value;\n this.applyMask(value);\n }\n\n @HostListener('blur', ['$event'])\n onBlur(event: any): void {\n const value = event.target.value;\n this.applyMask(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 masked = this.maskService.applyDocumentMask(value, this.typePerson || 'JURIDICAL_PERSON');\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('crmx.business.required_field');\n }\n if (control?.hasError('minlength')) {\n const minLength = this.field.minLength || control.errors?.['minlength'].requiredLength;\n return this.translationService.translate('crmx.business.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('crmx.business.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('crmx.business.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('crmx.business.max_value_error', { value: max });\n }\n return '';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { CepMaskDirective } from '../../../directives/cep-mask.directive';\nimport { PhoneMaskDirective } from '../../../directives/phone-mask.directive';\nimport { DocumentMaskDirective } from '../../../directives/document-mask.directive';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\n\n@Component({\n selector: 'sia-dynamic-field-text',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InputTextModule,\n CepMaskDirective,\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\"\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 CEP -->\n <input\n *ngIf=\"field.mask === 'cep'\"\n pInputText\n appCepMask\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'\"\n pInputText\n appPhoneMask\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 -->\n <input\n *ngIf=\"field.mask === 'document'\"\n pInputText\n appDocumentMask\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 {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\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 isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_search_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || '';\n }\n\n getDocumentType(): 'NATURAL_PERSON' | 'JURIDICAL_PERSON' {\n const typePersonValue = this.form?.get('typePerson')?.value;\n return typePersonValue || 'JURIDICAL_PERSON';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.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 {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\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 isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_search_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || '';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CalendarModule } from 'primeng/calendar';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.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 [inputId]=\"field.field\"\n [formControlName]=\"field.field\"\n [placeholder]=\"getPlaceholder()\"\n [dateFormat]=\"field.dateFormat || 'dd/mm/yy'\"\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\n .p-calendar {\n width: 100%;\n }\n\n input {\n width: 100%;\n }\n }\n `]\n})\nexport class DynamicFieldDateComponent {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\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 isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_select_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || '';\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component';\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 {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\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 isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_select_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || this.translationService.translate('crmx.business.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 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 { 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.form.get(this.field.field);\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 => {\n if (value !== null && value !== undefined && value !== '') {\n this.handleValueDisplay(value);\n } else {\n this.displayValue = '';\n }\n });\n }\n }\n\n private get value(): any {\n return this.form.get(this.field.field)?.value;\n }\n\n get currentValue(): any {\n return this.value;\n }\n\n private setValue(value: any): void {\n this.form.get(this.field.field)?.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 // Em modo filter, manter o objeto completo\n // Em modo form, extrair apenas o ID EXCETO se já temos o objeto completo\n // (evita requisições desnecessárias quando o objeto já está carregado)\n if (this.mode === 'form') {\n // Verificar se o objeto tem o campo de display preenchido\n // Se tiver, significa que já temos os dados completos e não precisamos fazer nada\n const hasDisplayData = this.field?.lookupDisplayFields \n ? this.field.lookupDisplayFields.some(f => this.getFieldValue(value, f))\n : value[this.displayField];\n \n if (!hasDisplayData) {\n // Só extrair o ID se não temos os dados de display\n const newValue = value[this.valueField] || value.id || value;\n if (this.value !== newValue) {\n this.setValue(newValue);\n }\n }\n }\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.form.get(this.field.field);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n\n isFieldDisabled(): boolean {\n const control = this.form.get(this.field.field);\n return control?.disabled || false;\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_search_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || 'Clique para selecionar';\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.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 if (this.mode === 'filter') {\n this.setValue(item);\n this.displayValue = this.formatDisplayValue(item);\n } else {\n const newValue = item[this.valueField];\n this.setValue(newValue);\n this.displayValue = this.formatDisplayValue(item);\n }\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, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { InputTextarea } from 'primeng/inputtextarea';\nimport { DynamicFormFieldConfig } from '../models/dynamic-form.models';\nimport { TranslationService } from '../../../services/translation.service';\nimport { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.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 {\n @Input() field!: DynamicFormFieldConfig;\n @Input() form!: FormGroup;\n @Input() mode: 'form' | 'filter' = 'form';\n\n constructor(private translationService: TranslationService) {}\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 isFieldDirty(): boolean {\n const control = this.form.get(this.field.field);\n return !!(control && control.dirty);\n }\n\n getPlaceholder(): string {\n if (this.mode === 'filter') {\n return this.translationService.translate('crmx.business.filter_search_placeholder', { \n label: this.field.label.toLowerCase() \n });\n }\n return this.field.placeholder || '';\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 { 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('crmx.business.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('crmx.business.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('crmx.business.save');\n }\n\n get cancelLabel(): string {\n return this.cancelButtonLabel || this.translationService.translate('crmx.business.cancel');\n }\n\n constructor(\n private fb: FormBuilder,\n private translationService: TranslationService\n ) {}\n\n ngOnInit(): void {\n this.initForm();\n this.setupConditionalFieldsWatcher();\n this.formReady.emit(this.form);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['entityData'] && this.form) {\n if (this.entityData) {\n this.loadEntityData();\n } else {\n this.resetForm();\n }\n }\n \n // Reset loading and form when dialog/drawer is opened\n if (changes['visible'] && changes['visible'].currentValue === true) {\n this.loading = false;\n \n // If opening without entityData (new record), reset form\n if (!this.entityData && this.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 // If it's an object, extract the ID\n if (fieldValue && typeof fieldValue === 'object') {\n processedValue[field.field] = fieldValue.id || fieldValue[field.lookupValueField || 'id'] || null;\n } else if (fieldValue && fieldValue !== '') {\n // If it's already an ID, keep it\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, extract the ID if it's an object\n const field = this.allFields.find(f => f.field === fieldName);\n if (field?.type === 'lookup' && fieldValue && typeof fieldValue === 'object') {\n fieldValue = fieldValue.id || fieldValue[field.lookupValueField || 'id'];\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 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 const date = typeof value === 'string' ? new Date(value) : value;\n return date.toLocaleDateString('pt-BR');\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 { HttpInterceptorFn, HttpRequest, HttpHandlerFn, HttpErrorResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { catchError, throwError } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\n\nexport const apiInterceptor: HttpInterceptorFn = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const authService = inject(AuthService);\n const router = inject(Router);\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 // Handle 401 Unauthorized errors\n if (error.status === 401) {\n // Redirect to forbidden route\n router.navigate(['/forbidden']);\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 * Public API Surface of @seniorsistemas/components-ia\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';\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';\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';\n\n// ============================================================================\n// CONFIG\n// ============================================================================\nexport { TRANSLATION_CONFIG, SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, mapTokenLocaleToLanguage, getLanguageInfo, type LanguageConfig } from './lib/config/translation.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\n// export * from './lib/directives/cep-mask.directive';\n// export * from './lib/directives/document-mask.directive';\n// export * from './lib/directives/phone-mask.directive';\n\n// PIPES\n// export * from './lib/pipes/translate.pipe';\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","i2","i4","i5","catchError","i1","i3","i1.TranslationService","i2.MaskService","i6","i2.TranslationService","i7","i8"],"mappings":"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"}
|