@praxisui/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"praxisui-core.mjs","sources":["../../../projects/praxis-core/src/lib/praxis-core.ts","../../../projects/praxis-core/src/lib/tokens/api-url.token.ts","../../../projects/praxis-core/src/lib/tokens/global-config.token.ts","../../../projects/praxis-core/src/lib/services/config-storage.service.ts","../../../projects/praxis-core/src/lib/utils/deep-merge.util.ts","../../../projects/praxis-core/src/lib/services/global-config.service.ts","../../../projects/praxis-core/src/lib/tokens/global-config.providers.ts","../../../projects/praxis-core/src/lib/tokens/settings-panel-bridge.token.ts","../../../projects/praxis-core/src/lib/tokens/external-editors.tokens.ts","../../../projects/praxis-core/src/lib/models/api-endpoint.enum.ts","../../../projects/praxis-core/src/lib/helpers/version.helper.ts","../../../projects/praxis-core/src/lib/utils/schema-id.util.ts","../../../projects/praxis-core/src/lib/cache/local-storage-cache-adapter.ts","../../../projects/praxis-core/src/lib/services/schema-normalizer.service.ts","../../../projects/praxis-core/src/lib/services/generic-crud.service.ts","../../../projects/praxis-core/src/lib/models/table-config-v2.model.ts","../../../projects/praxis-core/src/lib/models/table-config.model.ts","../../../projects/praxis-core/src/lib/services/table-config.service.ts","../../../projects/praxis-core/src/lib/services/table-config-reconciler.ts","../../../projects/praxis-core/src/lib/services/connection-storage.service.ts","../../../projects/praxis-core/src/lib/helpers/validators.helper.ts","../../../projects/praxis-core/src/lib/metadata/field-control-type.constants.ts","../../../projects/praxis-core/src/lib/services/dynamic-form.service.ts","../../../projects/praxis-core/src/lib/services/error-message.service.ts","../../../projects/praxis-core/src/lib/services/component-metadata-registry.service.ts","../../../projects/praxis-core/src/lib/services/telemetry.service.ts","../../../projects/praxis-core/src/lib/config/overlay-decision-matrix.ts","../../../projects/praxis-core/src/lib/tokens/overlay-decision-matrix.token.ts","../../../projects/praxis-core/src/lib/services/overlay-decider.service.ts","../../../projects/praxis-core/src/lib/metadata/field-data-type.constants.ts","../../../projects/praxis-core/src/lib/models/component-metadata.interface.ts","../../../projects/praxis-core/src/lib/models/material-field-metadata.interface.ts","../../../projects/praxis-core/src/lib/helpers/ensure-ids.helper.ts","../../../projects/praxis-core/src/lib/helpers/metadata-normalizer.ts","../../../projects/praxis-core/src/lib/models/form/form-config.model.ts","../../../projects/praxis-core/src/lib/models/page/page-config.model.ts","../../../projects/praxis-core/src/lib/models/global-config.model.ts","../../../projects/praxis-core/src/lib/models/global-dialog-config.model.ts","../../../projects/praxis-core/src/lib/metadata/allowed-file-types.constants.ts","../../../projects/praxis-core/src/lib/metadata/icon-position.constants.ts","../../../projects/praxis-core/src/lib/metadata/icon-size.constants.ts","../../../projects/praxis-core/src/lib/metadata/numeric-format.constants.ts","../../../projects/praxis-core/src/lib/metadata/validation-pattern.constants.ts","../../../projects/praxis-core/src/lib/helpers/field-definition-mapper.ts","../../../projects/praxis-core/src/lib/helpers/column-layout.helper.ts","../../../projects/praxis-core/src/lib/utils/text-transform.util.ts","../../../projects/praxis-core/src/lib/widgets/dynamic-widget-loader.directive.ts","../../../projects/praxis-core/src/lib/widgets/connection-manager.service.ts","../../../projects/praxis-core/src/lib/widgets/dynamic-widget-page.component.ts","../../../projects/praxis-core/src/lib/widgets/dynamic-grid-page.component.ts","../../../projects/praxis-core/src/lib/components/empty-state-card/empty-state-card.component.ts","../../../projects/praxis-core/src/lib/components/icon/praxis-icon.directive.ts","../../../projects/praxis-core/src/lib/components/quick-connect/resource-quick-connect.component.ts","../../../projects/praxis-core/src/lib/components/icon-picker/icon-picker.component.ts","../../../projects/praxis-core/src/lib/components/icon-picker/icon-picker.service.ts","../../../projects/praxis-core/src/lib/utils/fetch-with-etag.util.ts","../../../projects/praxis-core/src/lib/schema/schema-metadata-client.ts","../../../projects/praxis-core/src/lib/reconcilers/form-config-reconciler.ts","../../../projects/praxis-core/src/lib/reconcilers/filter-config-reconciler.ts","../../../projects/praxis-core/src/lib/hooks/form-hooks.tokens.ts","../../../projects/praxis-core/src/lib/hooks/form-hooks.registry.ts","../../../projects/praxis-core/src/lib/hooks/defaults/stripMasks.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/prefillFromContext.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/notifySuccess.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/cancelIfCpfInvalid.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/logOnError.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/reportTelemetry.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/ensureNoConflicts.hook.ts","../../../projects/praxis-core/src/lib/hooks/defaults/providers.ts","../../../projects/praxis-core/src/public-api.ts","../../../projects/praxis-core/src/praxisui-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'praxis-praxis-core',\n imports: [],\n template: `\n <p>\n praxis-core works!\n </p>\n `,\n styles: ``\n})\nexport class PraxisCore {\n\n}\n","import { InjectionToken } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\n\nexport interface ApiUrlEntry {\n baseUrl?: string;\n path?: string;\n fullUrl?: string;\n version?: string;\n headers?: HttpHeaders | Record<string, string | string[]>;\n}\n\nexport interface ApiUrlConfig {\n [key: string]: ApiUrlEntry;\n}\n\nexport const API_URL = new InjectionToken<ApiUrlConfig>('API_URL');\n\nexport function buildApiUrl(entry: ApiUrlEntry): string {\n if (!entry) {\n return '';\n }\n if (entry.fullUrl) {\n return entry.fullUrl.replace(/\\/+$/, '');\n }\n let url = (entry.baseUrl ?? '').replace(/\\/+$/, '');\n if (entry.path) {\n url += '/' + entry.path.replace(/^\\/+/, '');\n }\n if (entry.version) {\n url += '/' + entry.version.replace(/^\\/+/, '');\n }\n return url.replace(/\\/+$/, '');\n}\n\nexport function buildHeaders(entry: ApiUrlEntry): HttpHeaders | undefined {\n if (!entry || !entry.headers) {\n return undefined;\n }\n if (entry.headers instanceof HttpHeaders) {\n return entry.headers;\n }\n let headers = new HttpHeaders();\n Object.entries(entry.headers).forEach(([key, value]) => {\n headers = headers.set(key, value as string | string[]);\n });\n return headers;\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport type { GlobalConfig } from '../models/global-config.model';\n\n// Multi-provider token for partial global configurations contributed by apps/libs\nexport const GLOBAL_CONFIG = new InjectionToken<Partial<GlobalConfig>>(\n 'GLOBAL_CONFIG',\n);\n\n// Helper to provide partial global configuration\nexport function provideGlobalConfig(partial: Partial<GlobalConfig>): Provider {\n return { provide: GLOBAL_CONFIG, useValue: partial, multi: true } as const;\n}\n\n","import { inject, Injectable, InjectionToken } from '@angular/core';\n\nexport interface ConfigStorage {\n loadConfig<T>(key: string): T | null;\n saveConfig<T>(key: string, config: T): void;\n clearConfig(key: string): void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageConfigService implements ConfigStorage {\n loadConfig<T>(key: string): T | null {\n try {\n const raw = localStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : null;\n } catch {\n return null;\n }\n }\n\n saveConfig<T>(key: string, config: T): void {\n try {\n localStorage.setItem(key, JSON.stringify(config));\n } catch {\n /* ignore */\n }\n }\n\n clearConfig(key: string): void {\n try {\n localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n }\n}\n\nexport const CONFIG_STORAGE = new InjectionToken<ConfigStorage>(\n 'CONFIG_STORAGE',\n {\n providedIn: 'root',\n factory: () => inject(LocalStorageConfigService),\n },\n);\n","export type PlainObject = { [key: string]: any };\n\nfunction isObject(value: any): value is PlainObject {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Deep merge that prefers values from `right` when defined.\n * - Objects are merged recursively\n * - Arrays are replaced by `right` when defined\n * - Primitive `undefined` on right keeps left's value\n */\nexport function deepMerge<T>(left: T, right: Partial<T> | undefined): T {\n if (right === undefined || right === null) return clone(left);\n if (Array.isArray(left)) {\n return (Array.isArray(right) ? (right as any) : clone(left)) as any as T;\n }\n if (!isObject(left) || !isObject(right)) {\n // Right wins when defined, else left\n return (right !== undefined ? (right as any) : (left as any)) as T;\n }\n const out: PlainObject = { ...left } as any;\n for (const key of Object.keys(right)) {\n const r: any = (right as any)[key];\n const l: any = (left as any)[key];\n if (r === undefined) continue; // keep left as-is\n if (Array.isArray(r)) {\n out[key] = r.map((v) => clone(v));\n } else if (isObject(r) && isObject(l)) {\n out[key] = deepMerge(l, r);\n } else {\n out[key] = clone(r);\n }\n }\n return out as T;\n}\n\n/**\n * Fill only undefined properties in `target` with values from `defaults`.\n * - Objects are traversed recursively\n * - Arrays defaulting replaces when target is undefined/null\n */\nexport function fillUndefined<T>(target: T, defaults: Partial<T> | undefined): T {\n if (defaults === undefined || defaults === null) return clone(target);\n if (!isObject(target) || !isObject(defaults)) {\n return (target === undefined || target === null ? (defaults as any) : target) as T;\n }\n const out: PlainObject = { ...target } as any;\n for (const key of Object.keys(defaults)) {\n const d: any = (defaults as any)[key];\n const t: any = (target as any)[key];\n if (t === undefined || t === null) {\n out[key] = clone(d);\n } else if (isObject(t) && isObject(d)) {\n out[key] = fillUndefined(t, d);\n } else {\n out[key] = t;\n }\n }\n return out as T;\n}\n\nfunction clone<T>(v: T): T {\n if (v == null || typeof v !== 'object') return v;\n try {\n return JSON.parse(JSON.stringify(v));\n } catch {\n return v;\n }\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { GLOBAL_CONFIG } from '../tokens/global-config.token';\nimport { CONFIG_STORAGE, ConfigStorage } from './config-storage.service';\nimport type { GlobalConfig } from '../models/global-config.model';\nimport { deepMerge } from '../utils/deep-merge.util';\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigService {\n private readonly storage = inject<ConfigStorage>(CONFIG_STORAGE);\n private tenant: string | undefined;\n private readonly providerPartials: Partial<GlobalConfig>[] = (() => {\n try {\n const provided = inject(GLOBAL_CONFIG, { optional: true }) as any;\n if (!provided) return [];\n return Array.isArray(provided) ? provided : [provided];\n } catch {\n return [];\n }\n })();\n\n private readonly changes$ = new BehaviorSubject<GlobalConfig | null>(null);\n\n /** Emits when the global configuration changes (e.g., saved to storage). */\n readonly configChanges$ = this.changes$.asObservable();\n\n /** Returns merged global configuration using precedence: defaults < providers < storage */\n private buildConfig(): GlobalConfig {\n let cfg: GlobalConfig = {};\n for (const partial of this.providerPartials) {\n cfg = deepMerge(cfg, partial);\n }\n try {\n const stored = this.storage.loadConfig<GlobalConfig>(this.storageKey());\n if (stored) cfg = deepMerge(cfg, stored);\n } catch {\n // ignore storage errors\n }\n return cfg;\n }\n\n /** Persist and broadcast a new global configuration, merged on top of providers. */\n saveGlobalConfig(partial: Partial<GlobalConfig>): void {\n try {\n // Merge over providers, then persist\n const merged = deepMerge(this.buildConfig(), partial);\n this.storage.saveConfig(this.storageKey(), merged);\n this.changes$.next(merged);\n } catch {\n // ignore persistence errors\n }\n }\n\n /**\n * Retrieve value at a dot-path (e.g., 'crud.defaults.openMode').\n * When no path is provided, returns the entire merged configuration.\n */\n get<T = any>(path?: string): T | undefined {\n const cfg = this.buildConfig();\n if (!path) return cfg as any;\n try {\n return path.split('.').reduce<any>((acc, part) => (acc == null ? acc : acc[part]), cfg) as T | undefined;\n } catch {\n return undefined;\n }\n }\n\n getCrud(): GlobalConfig['crud'] {\n return this.buildConfig().crud;\n }\n\n getDynamicFields(): GlobalConfig['dynamicFields'] {\n return this.buildConfig().dynamicFields;\n }\n\n getTable(): GlobalConfig['table'] {\n return this.buildConfig().table;\n }\n\n getDialog(): GlobalConfig['dialog'] {\n return (this.buildConfig() as GlobalConfig).dialog;\n }\n\n /** Set current tenant (affects storage key). Pass undefined to clear. */\n setTenant(tenantId?: string): void {\n this.tenant = tenantId ? String(tenantId).trim() || undefined : undefined;\n }\n\n /** Get current tenant id (if any). */\n getTenant(): string | undefined {\n return this.tenant;\n }\n\n /** Compute the storage key considering current tenant */\n private storageKey(): string {\n return `praxis:global-config${this.tenant ? ':' + this.tenant : ''}`;\n }\n\n /**\n * Read global schema verification preferences.\n * Returns undefined when not set to allow callers to fallback to library defaults.\n */\n getSchemaPrefsGlobal(): { notifyIfOutdated?: 'none' | 'inline' | 'snackbar' | 'both'; snoozeMs?: number; autoOpenSettingsOnOutdated?: boolean } | undefined {\n try {\n const v = this.storage.loadConfig<any>('schemaPrefs:global');\n if (!v || typeof v !== 'object') return undefined;\n const out: any = {};\n const n = v.notifyIfOutdated;\n if (n === 'none' || n === 'inline' || n === 'snackbar' || n === 'both') out.notifyIfOutdated = n;\n if (typeof v.snoozeMs === 'number' && v.snoozeMs >= 0) out.snoozeMs = v.snoozeMs;\n if (typeof v.autoOpenSettingsOnOutdated === 'boolean') out.autoOpenSettingsOnOutdated = v.autoOpenSettingsOnOutdated;\n return Object.keys(out).length ? out : undefined;\n } catch {\n return undefined;\n }\n }\n}\n","import { APP_INITIALIZER, Provider } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { GlobalConfigService } from '../services/global-config.service';\nimport type { GlobalConfig } from '../models/global-config.model';\n\n/** Set the current tenant for GlobalConfigService at app boot. */\nexport function provideGlobalConfigTenant(tenantId: string): Provider {\n return {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [GlobalConfigService],\n useFactory: (svc: GlobalConfigService) => () => {\n try { svc.setTenant(tenantId); } catch {}\n },\n };\n}\n\n/** Seed global config once when no storage exists yet (idempotent). */\nexport function provideGlobalConfigSeed(seed: Partial<GlobalConfig>): Provider {\n return {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [GlobalConfigService],\n useFactory: (svc: GlobalConfigService) => () => {\n // If storage has values, skip; otherwise save the seed\n try {\n const current = svc.get();\n if (!current || Object.keys(current as any).length === 0) {\n svc.saveGlobalConfig(seed);\n }\n } catch {\n // On error, attempt to save anyway (best effort)\n try { svc.saveGlobalConfig(seed); } catch {}\n }\n },\n };\n}\n\n/** Fetch remote JSON and merge as global config at boot. */\nexport function provideRemoteGlobalConfig(url: string): Provider {\n return {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [HttpClient, GlobalConfigService],\n useFactory: (http: HttpClient, svc: GlobalConfigService) => () =>\n new Promise<void>((resolve) => {\n http.get(url).subscribe({\n next: (cfg: any) => {\n try { svc.saveGlobalConfig(cfg as Partial<GlobalConfig>); } catch {}\n resolve();\n },\n error: () => resolve(),\n complete: () => resolve(),\n });\n }),\n };\n}\n\n","import { InjectionToken, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface SettingsPanelRef<T = any> {\n applied$: Observable<T>;\n saved$: Observable<T>;\n}\n\nexport interface SettingsPanelOpenContent<TInputs = any> {\n component: Type<any>;\n inputs?: TInputs;\n}\n\nexport interface SettingsPanelOpenOptions<TInputs = any> {\n id: string;\n title: string;\n content: SettingsPanelOpenContent<TInputs>;\n}\n\nexport interface SettingsPanelBridge {\n open<TInputs = any, TOut = any>(opts: SettingsPanelOpenOptions<TInputs>): SettingsPanelRef<TOut>;\n}\n\nexport const SETTINGS_PANEL_BRIDGE = new InjectionToken<SettingsPanelBridge>('SETTINGS_PANEL_BRIDGE');\n\n// Optional data token for consumers that still use DI-based data passing.\n// Prefer using component inputs when opening via SettingsPanelBridge.\nexport const SETTINGS_PANEL_DATA = new InjectionToken<any>('SETTINGS_PANEL_DATA');\n\nexport interface SettingsValueProvider {\n isDirty$: Observable<boolean>;\n isValid$: Observable<boolean>;\n isBusy$: Observable<boolean>;\n getSettingsValue(): any;\n onSave?(): any;\n reset?(): void;\n}\n\n","import { InjectionToken, Type } from '@angular/core';\n\nexport const TABLE_CONFIG_EDITOR = new InjectionToken<Type<any>>('TABLE_CONFIG_EDITOR');\nexport const STEPPER_CONFIG_EDITOR = new InjectionToken<Type<any>>('STEPPER_CONFIG_EDITOR');\n\n","export enum ApiEndpoint {\n Default = 'default',\n HumanResources = 'humanResources',\n UiWrappersTest = 'uiWrappersTest',\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { ApiUrlEntry } from '../tokens/api-url.token';\nimport { buildHeaders } from '../tokens/api-url.token';\n\n/**\n * Compose headers including optional API version information.\n * If the entry already defines custom headers, they will be preserved.\n * The version will be added using the provided header name when available.\n */\nexport function composeHeadersWithVersion(entry: ApiUrlEntry, headerName = 'Api-Version'): HttpHeaders | undefined {\n let headers = buildHeaders(entry) ?? new HttpHeaders();\n if (entry.version) {\n headers = headers.set(headerName, entry.version);\n }\n return headers.keys().length ? headers : undefined;\n}\n","export interface SchemaIdParams {\n path: string;\n operation?: string; // default 'get'\n schemaType?: 'response' | 'request';\n includeInternalSchemas?: boolean; // default false\n tenant?: string;\n locale?: string; // BCP 47, e.g., 'pt-BR'\n /** Optional API origin binding to avoid cross-origin collisions (e.g., https://api.example.com) */\n apiOrigin?: string;\n}\n\nexport function normalizePath(p: string): string {\n if (!p) return '';\n let s = p.replace(/\\/+/, '/');\n // Remove trailing slash except root\n if (s.length > 1 && s.endsWith('/')) s = s.slice(0, -1);\n return s;\n}\n\nexport function buildSchemaId(params: SchemaIdParams): string {\n const path = normalizePath(params.path);\n const operation = (params.operation || 'get').toLowerCase();\n const schemaType = (params.schemaType || 'response').toLowerCase();\n const internal = params.includeInternalSchemas ? 'true' : 'false';\n const parts = [path, operation, schemaType, `internal:${internal}`];\n if (params.tenant) parts.push(`tenant:${params.tenant}`);\n if (params.locale) parts.push(`locale:${params.locale}`);\n if (params.apiOrigin) parts.push(`origin:${params.apiOrigin}`);\n return parts.join('|');\n}\n","import { CacheAdapter, CacheEntry } from './cache-adapter';\n\ntype CacheAdapterOptions = {\n /**\n * Optional namespace to isolate storage/broadcast across apps or API origins.\n * If not provided, window.location.origin (hash) is used when available.\n */\n namespace?: string;\n /** Storage key prefix; final key is `${prefix}:${namespace}` */\n storageKeyPrefix?: string;\n /** Broadcast channel name base; final name is `${base}:${namespace}` */\n channelNameBase?: string;\n /** Optional TTL in ms; expired entries are evicted on read */\n ttlMs?: number;\n /** Optional max entries; evicts oldest when limit exceeded */\n maxEntries?: number;\n};\n\nfunction hash(input: string): string {\n let h = 0;\n for (let i = 0; i < input.length; i++) h = (Math.imul(31, h) + input.charCodeAt(i)) | 0;\n return Math.abs(h).toString(36);\n}\n\nexport class LocalStorageCacheAdapter implements CacheAdapter {\n private mem = new Map<string, CacheEntry>();\n private bc?: BroadcastChannel;\n private subscribers = new Set<(schemaId: string, entry?: CacheEntry) => void>();\n private readonly ttlMs?: number;\n private readonly maxEntries?: number;\n private readonly storageKey: string;\n\n constructor(opts: CacheAdapterOptions = {}) {\n const origin = (typeof window !== 'undefined' && (window as any).location?.origin) || '';\n const ns = opts.namespace || (origin ? `o-${hash(origin)}` : 'default');\n const prefix = opts.storageKeyPrefix || 'praxis.ui.schema.cache.v1';\n this.storageKey = `${prefix}:${ns}`;\n this.ttlMs = opts.ttlMs;\n this.maxEntries = opts.maxEntries;\n\n const channelNameBase = opts.channelNameBase || 'praxis-ui-schema-cache';\n if (typeof window !== 'undefined' && 'BroadcastChannel' in window) {\n try {\n this.bc = new BroadcastChannel(`${channelNameBase}:${ns}`);\n this.bc.onmessage = (ev) => {\n const { schemaId, entry } = ev.data || {};\n this.subscribers.forEach((cb) => cb(schemaId, entry));\n };\n } catch {}\n }\n this.loadFromStorage();\n }\n\n private loadFromStorage() {\n if (typeof localStorage === 'undefined') return;\n try {\n const raw = localStorage.getItem(this.storageKey);\n if (raw) {\n const obj = JSON.parse(raw) as Record<string, CacheEntry>;\n Object.entries(obj).forEach(([k, v]) => this.mem.set(k, v));\n }\n } catch {}\n }\n\n private persist() {\n if (typeof localStorage === 'undefined') return;\n try {\n const obj: Record<string, CacheEntry> = {};\n this.mem.forEach((v, k) => (obj[k] = v));\n localStorage.setItem(this.storageKey, JSON.stringify(obj));\n } catch {}\n }\n\n private isExpired(entry?: CacheEntry): boolean {\n if (!entry || !this.ttlMs || !entry.updatedAt) return false;\n return Date.now() - entry.updatedAt > this.ttlMs;\n }\n\n private evictIfNeeded(): void {\n if (!this.maxEntries || this.mem.size <= this.maxEntries) return;\n const items = Array.from(this.mem.entries());\n items.sort((a, b) => (a[1].updatedAt || 0) - (b[1].updatedAt || 0)); // oldest first\n while (this.mem.size > this.maxEntries && items.length) {\n const [k] = items.shift()!;\n this.mem.delete(k);\n }\n }\n\n async get(schemaId: string): Promise<CacheEntry | undefined> {\n const entry = this.mem.get(schemaId);\n if (this.isExpired(entry)) {\n this.mem.delete(schemaId);\n this.persist();\n this.broadcast(schemaId, undefined);\n return undefined;\n }\n return entry;\n }\n\n async set(schemaId: string, entry: CacheEntry): Promise<void> {\n this.mem.set(schemaId, { ...entry, updatedAt: Date.now() });\n this.evictIfNeeded();\n this.persist();\n this.broadcast(schemaId, entry);\n }\n\n async remove(schemaId: string): Promise<void> {\n this.mem.delete(schemaId);\n this.persist();\n this.broadcast(schemaId, undefined);\n }\n\n subscribe(cb: (schemaId: string, entry?: CacheEntry) => void): () => void {\n this.subscribers.add(cb);\n return () => this.subscribers.delete(cb);\n }\n\n private broadcast(schemaId: string, entry?: CacheEntry) {\n try {\n this.bc?.postMessage({ schemaId, entry });\n } catch {}\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FieldDefinition } from '../models/field-definition.model';\n\n/**\n * SchemaNormalizerService\n * -----------------------\n * Serviço responsável por converter um esquema bruto (OpenAPI + x-ui) em uma\n * lista tipada de FieldDefinition consumida pelo restante do sistema\n * (mapeadores de metadata, criador de FormGroup, carregador de campos dinâmicos, etc.).\n *\n * Entrada esperada\n * - Objeto JSON no formato OpenAPI/JSON Schema contendo:\n * - properties: { [name: string]: { type, title, description, ... , 'x-ui': { ... } } }\n * - Em cada propriedade, o objeto 'x-ui' define aspectos de UI/validação.\n *\n * Saída (FieldDefinition[])\n * - Tipagem forte de campos com funções reais (nunca strings) para regras condicionais e validadores customizados.\n * - Todas as propriedades de validação e comportamento consolidadas no mesmo objeto do campo.\n *\n * Segurança e observações\n * - Este serviço aceita funções em formato string dentro do x-ui (ex.: uniqueValidator, conditionalValidation),\n * e as converte via new Function. Isso exige backend confiável e controlado.\n * Em ambientes não confiáveis, evite funções como string ou implemente um sandbox/whitelist.\n * - Valores booleanos/numéricos são normalizados para tipos nativos.\n * - Arrays de opções são convertidos para pares { key, value } previsíveis.\n *\n * Exemplo mínimo de entrada\n * const schema = {\n * properties: {\n * email: {\n * type: 'string',\n * title: 'E-mail',\n * 'x-ui': { controlType: 'input', type: 'string', required: true, email: true }\n * }\n * }\n * };\n * const fields = normalizer.normalizeSchema(schema);\n * // fields: [{ name: 'email', label: 'E-mail', type: 'string', controlType: 'input', required: true, email: true }]\n */\n@Injectable({ providedIn: 'root' })\nexport class SchemaNormalizerService {\n /** Convert value to boolean. Accepts boolean, string or number. */\n private parseBoolean(value: any): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true';\n }\n if (typeof value === 'number') {\n return value !== 0;\n }\n return false;\n }\n\n /** Ensure an array of strings from various inputs. */\n private parseStringArray(value: any): string[] {\n if (Array.isArray(value)) {\n return value.map((v) => String(v));\n }\n if (typeof value === 'string') {\n return [value];\n }\n return [];\n }\n\n /** Parse option arrays into `{ key, value }` objects. */\n private parseOptions(value: any): { key: string; value: string }[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map((opt: any) => {\n if (typeof opt === 'object') {\n const k = opt.key ?? opt.value ?? opt.label ?? '';\n const v = opt.value ?? opt.label ?? opt.key ?? '';\n return { key: String(k), value: String(v) };\n }\n return { key: String(opt), value: String(opt) };\n });\n }\n\n /**\n * Converte string/Function em função real.\n * Atenção: usa `new Function` para avaliar strings – requer backend confiável.\n */\n private parseFunction(fn: any): Function | undefined {\n if (typeof fn === 'function') {\n return fn;\n }\n if (typeof fn === 'string' && fn.trim()) {\n try {\n // eslint-disable-next-line no-new-func\n return new Function(`return (${fn});`)();\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n\n /** Parse a predicate function: () => boolean */\n private parsePredicateFunction(fn: any): (() => boolean) | undefined {\n const parsed = this.parseFunction(fn);\n if (!parsed) return undefined;\n return parsed as () => boolean;\n }\n\n /** Parse a transform function: (val: any) => any */\n private parseTransformFunction(fn: any): ((val: any) => any) | undefined {\n const parsed = this.parseFunction(fn);\n if (!parsed) return undefined;\n return parsed as (val: any) => any;\n }\n\n /**\n * Parse de validador condicional: (value: any, model?: any) => boolean | string | Promise<boolean | string>\n */\n private parseConditionalValidator(\n fn: any,\n ): ((value: any, model?: any) => boolean | string | Promise<boolean | string>) | undefined {\n const parsed = this.parseFunction(fn);\n if (!parsed) return undefined;\n return parsed as (value: any, model?: any) => boolean | string | Promise<boolean | string>;\n }\n\n /**\n * Extrai e normaliza propriedades de validação a partir do objeto x-ui.\n * Suporta: required, min/max, minLength/maxLength, pattern/regex, email, url,\n * matchField, uniqueValidator (+message), conditionalValidation, requiredChecked,\n * arquivos (allowedFileTypes, fileTypeMessage, maxFileSize), custom/async validators,\n * minWords e comportamento (validationTrigger(s), validationDebounce, showInlineErrors, errorPosition).\n */\n private parseValidators(ui: Record<string, any>): Record<string, any> {\n if (!ui || typeof ui !== 'object') {\n return {};\n }\n const out: Record<string, any> = {};\n\n // Basic validators and messages\n if (ui.required !== undefined) out.required = this.parseBoolean(ui.required);\n if (ui.requiredMessage !== undefined) out.requiredMessage = ui.requiredMessage;\n\n if (ui.minLength !== undefined) out.minLength = Number(ui.minLength);\n if (ui.minLengthMessage !== undefined) out.minLengthMessage = ui.minLengthMessage;\n\n if (ui.maxLength !== undefined) out.maxLength = Number(ui.maxLength);\n if (ui.maxLengthMessage !== undefined) out.maxLengthMessage = ui.maxLengthMessage;\n\n if (ui.min !== undefined) out.min = Number(ui.min);\n if (ui.max !== undefined) out.max = Number(ui.max);\n if (ui.minMessage !== undefined) out.minMessage = ui.minMessage;\n if (ui.maxMessage !== undefined) out.maxMessage = ui.maxMessage;\n\n // Range can define both min and max at once. Accept [min, max] or { min, max }\n if (ui.range !== undefined) {\n const r = ui.range;\n if (Array.isArray(r) && r.length >= 2) {\n if (out.min === undefined && r[0] != null) out.min = Number(r[0]);\n if (out.max === undefined && r[1] != null) out.max = Number(r[1]);\n } else if (typeof r === 'object' && r) {\n if (out.min === undefined && r.min != null) out.min = Number(r.min);\n if (out.max === undefined && r.max != null) out.max = Number(r.max);\n }\n }\n if (ui.rangeMessage !== undefined) out.rangeMessage = ui.rangeMessage;\n\n // Pattern / Regex\n if (ui.pattern !== undefined) out.pattern = String(ui.pattern);\n if (ui.patternMessage !== undefined) out.patternMessage = ui.patternMessage;\n // Support alias keys: regex / regexMessage\n if (ui.regex !== undefined && out.pattern === undefined) out.pattern = String(ui.regex);\n if (ui.regexMessage !== undefined && out.patternMessage === undefined)\n out.patternMessage = ui.regexMessage;\n\n // Email and URL pattern helpers\n if (ui.email !== undefined) out.email = this.parseBoolean(ui.email);\n if (ui.emailMessage !== undefined) out.emailMessage = ui.emailMessage;\n if (ui.url !== undefined) out.url = this.parseBoolean(ui.url);\n if (ui.urlMessage !== undefined) out.urlMessage = ui.urlMessage;\n\n // Matching and unique validators\n if (ui.matchField !== undefined) out.matchField = String(ui.matchField);\n if (ui.matchFieldMessage !== undefined) out.matchFieldMessage = ui.matchFieldMessage;\n\n if (ui.uniqueMessage !== undefined) out.uniqueMessage = ui.uniqueMessage;\n if (ui.uniqueValidator !== undefined) {\n const uniq = this.parseFunction(ui.uniqueValidator);\n if (uniq) out.uniqueValidator = uniq as (value: any, model?: any) => boolean | Promise<boolean>;\n }\n\n // Conditional validation rule\n if (ui.conditionalValidation !== undefined) {\n const cond = this.parseConditionalValidator(ui.conditionalValidation);\n if (cond) out.conditionalValidation = cond;\n }\n\n // Checkbox: required to be checked\n if (ui.requiredChecked !== undefined) out.requiredChecked = this.parseBoolean(ui.requiredChecked);\n\n // File validation\n if (ui.allowedFileTypes !== undefined)\n out.allowedFileTypes = this.parseStringArray(ui.allowedFileTypes);\n if (ui.fileTypeMessage !== undefined) out.fileTypeMessage = ui.fileTypeMessage;\n if (ui.maxFileSize !== undefined) out.maxFileSize = Number(ui.maxFileSize);\n\n // Custom validators (sync/async)\n if (ui.customValidator !== undefined) {\n const fn = this.parseFunction(ui.customValidator);\n if (fn) out.customValidator = fn as (value: any, model?: any) => any;\n }\n if (ui.asyncValidator !== undefined) {\n const fn = this.parseFunction(ui.asyncValidator);\n if (fn) out.asyncValidator = fn as (value: any, model?: any) => Promise<any>;\n }\n\n // Word count\n if (ui.minWords !== undefined) out.minWords = Number(ui.minWords);\n\n // Validation behavior\n if (ui.validationTrigger !== undefined) {\n out.validationTriggers = Array.isArray(ui.validationTrigger)\n ? ui.validationTrigger.map((t: any) => String(t))\n : [String(ui.validationTrigger)];\n }\n if (ui.validationDebounce !== undefined) out.validationDebounce = Number(ui.validationDebounce);\n if (ui.showInlineErrors !== undefined) out.showInlineErrors = this.parseBoolean(ui.showInlineErrors);\n if (ui.errorPosition !== undefined) out.errorPosition = String(ui.errorPosition);\n\n return out;\n }\n\n /** Parse array of button definitions. */\n private parseButtons(value: any): any[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.map((v) => ({ ...v }));\n }\n\n /**\n * Converte o schema bruto do backend (OpenAPI + x-ui) em FieldDefinition[] tipado.\n * Regras:\n * - Ignora propriedades sem x-ui.\n * - Garante ordenação por 'order' quando presente.\n * - Funções condicionais/transformações sempre viram funções reais.\n *\n * @param schema Objeto OpenAPI/JSON Schema com properties e x-ui por propriedade.\n * @returns FieldDefinition[] prontos para mapeamento/uso no restante do sistema.\n */\n normalizeSchema(schema: any): FieldDefinition[] {\n if (!schema || typeof schema !== 'object') {\n return [];\n }\n\n const properties: Record<string, any> = schema.properties ?? {};\n const fields: FieldDefinition[] = [];\n\n for (const [name, prop] of Object.entries(properties)) {\n const ui =\n prop &&\n typeof prop === 'object' &&\n !Array.isArray(prop) &&\n prop['x-ui'] &&\n typeof prop['x-ui'] === 'object' &&\n !Array.isArray(prop['x-ui'])\n ? (prop['x-ui'] as Record<string, any>)\n : undefined;\n\n // Skip properties without x-ui metadata\n if (!ui || Object.keys(ui).length === 0) {\n continue;\n }\n\n const field: FieldDefinition = { name };\n\n // -------------------------------------------------------------------\n // Basic information\n // -------------------------------------------------------------------\n field.label = ui.label ?? prop.title ?? name;\n field.type = ui.type ?? prop.type;\n if (ui.controlType) {\n field.controlType = ui.controlType;\n }\n if (ui.description || prop.description) {\n field.description = ui.description ?? prop.description;\n }\n if (ui.order !== undefined) {\n field.order = Number(ui.order);\n }\n if (ui.group !== undefined) {\n field.group = ui.group;\n }\n\n // -------------------------------------------------------------------\n // Behaviour and validation\n // -------------------------------------------------------------------\n if (ui.readOnly !== undefined) {\n field.readOnly = this.parseBoolean(ui.readOnly);\n }\n if (ui.disabled !== undefined) {\n field.disabled = this.parseBoolean(ui.disabled);\n }\n if (ui.inlineEditing !== undefined) {\n field.inlineEditing = this.parseBoolean(ui.inlineEditing);\n }\n if (ui.defaultValue !== undefined) {\n field.defaultValue = ui.defaultValue;\n }\n\n Object.assign(field, this.parseValidators(ui));\n\n // Inline conditional functions\n const condDisplay = this.parsePredicateFunction(ui.conditionalDisplay);\n if (condDisplay) {\n field.conditionalDisplay = condDisplay;\n }\n const condRequired = this.parsePredicateFunction(ui.conditionalRequired);\n if (condRequired) {\n field.conditionalRequired = condRequired;\n }\n const transformFn = this.parseTransformFunction(ui.transformValueFunction);\n if (transformFn) {\n field.transformValueFunction = transformFn;\n }\n\n // -------------------------------------------------------------------\n // Layout and presentation\n // -------------------------------------------------------------------\n if (ui.width !== undefined) {\n field.width = ui.width;\n }\n if (ui.hint !== undefined) {\n field.hint = ui.hint;\n }\n if (ui.icon !== undefined) {\n field.icon = ui.icon;\n }\n if (ui.iconPosition !== undefined) {\n field.iconPosition = ui.iconPosition;\n }\n if (ui.iconSize !== undefined) {\n field.iconSize = ui.iconSize;\n }\n if (ui.tooltipOnHover !== undefined) {\n field.tooltipOnHover = ui.tooltipOnHover;\n }\n\n // -------------------------------------------------------------------\n // Options and dependencies\n // -------------------------------------------------------------------\n if (ui.options !== undefined) {\n field.options = this.parseOptions(ui.options);\n }\n if (ui.optionGroups !== undefined) {\n field.optionGroups = this.parseOptions(ui.optionGroups);\n }\n if (ui.disabledOptions !== undefined) {\n field.disabledOptions = this.parseStringArray(ui.disabledOptions);\n }\n if (ui.endpoint !== undefined) {\n field.endpoint = ui.endpoint;\n }\n if (ui.valueField !== undefined) {\n field.valueField = ui.valueField;\n }\n if (ui.displayField !== undefined) {\n field.displayField = ui.displayField;\n }\n if (ui.multiple !== undefined) {\n field.multiple = this.parseBoolean(ui.multiple);\n }\n if (ui.emptyOptionText !== undefined) {\n field.emptyOptionText = ui.emptyOptionText;\n }\n if (ui.dependentField !== undefined) {\n field.dependentField = ui.dependentField;\n }\n if (ui.resetOnDependentChange !== undefined) {\n field.resetOnDependentChange = this.parseBoolean(\n ui.resetOnDependentChange,\n );\n }\n\n if (ui.buttons !== undefined) {\n field.buttons = this.parseButtons(ui.buttons);\n }\n\n fields.push(field);\n }\n\n // Order by the optional 'order' property when present\n fields.sort((a, b) => {\n const orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n return orderA - orderB;\n });\n\n return fields;\n }\n}\n","import {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpResponse,} from '@angular/common/http';\nimport {EMPTY, from, Observable, of, throwError} from 'rxjs';\nimport {catchError, concatMap, map, shareReplay, takeUntil, tap, toArray,} from 'rxjs/operators';\n\nimport {RestApiResponse} from '../models/rest-api-response.model';\nimport {CursorPage, Page} from './types/pagination';\nimport {OptionDTO} from './types/options';\nimport {CursorRequest, FilterOptions, LocateRequest, PageableRequest,} from './types/common';\n\nimport {FieldDefinition} from '../models/field-definition.model';\nimport {ApiEndpoint} from '../models/api-endpoint.enum';\n\nimport {Inject, Injectable} from '@angular/core';\nimport {API_URL, ApiUrlConfig, ApiUrlEntry, buildApiUrl,} from '../tokens/api-url.token';\nimport {composeHeadersWithVersion} from '../helpers/version.helper';\nimport {SchemaNormalizerService} from './schema-normalizer.service';\nimport { GlobalConfigService } from './global-config.service';\nimport { buildSchemaId } from '../utils/schema-id.util';\nimport { LocalStorageCacheAdapter } from '../cache/local-storage-cache-adapter';\n\n/**\n * Interface para configuração de endpoints personalizados.\n *\n * Esta interface permite definir URLs específicas para cada operação CRUD,\n * substituindo os caminhos padrão gerados pelo serviço.\n *\n * Os caminhos podem ser:\n * - Absolutos (começando com 'http'): usados diretamente, sem modificação\n * - Relativos: anexados ao URL base da API (API_URL)\n *\n * Exemplo:\n * ```typescript\n * const endpoints: EndpointConfig = {\n * getAll: 'produtos/disponiveis', // Relativo: [API_URL]/produtos/disponiveis\n * filter: 'https://api.externa/buscar', // Absoluto: usa URL completa\n * create: 'https://api.externa/criar-produto' // Absoluto: usa URL completa\n * };\n */\nexport interface EndpointConfig {\n getAll?: string;\n getById?: string;\n create?: string;\n update?: string;\n delete?: string;\n filter?: string;\n schema?: string;\n}\n\n/**\n * Opções para operações CRUD que permitem personalizar comportamentos específicos.\n *\n * @interface CrudOperationOptions\n */\nexport interface CrudOperationOptions {\n /**\n * Caminho do recurso pai para recursos aninhados. Exemplo: 'clientes/123'.\n * Quando fornecido, este caminho é incorporado na URL final, permitindo\n * operações em recursos que pertencem a outro recurso.\n *\n * Exemplos de uso:\n * - Obter endereços de um cliente: `getAll({ parentPath: 'clientes/123' })`\n * - Criar item em uma categoria: `create(novoItem, { parentPath: 'categorias/5' })`\n *\n * Este parâmetro é ignorado se um endpoint personalizado estiver configurado\n * para a operação específica sendo executada.\n */\n parentPath?: string;\n /** Chave do endpoint configurado via ApiUrlConfig */\n endpointKey?: ApiEndpoint;\n}\n\nexport interface BatchDeleteProgress<ID = string | number> {\n id: ID;\n success: boolean;\n error?: unknown;\n index: number;\n total: number;\n}\n\nexport interface BatchDeleteResult<ID = string | number> {\n successIds: ID[];\n errors: BatchDeleteProgress<ID>[];\n}\n\nexport interface BatchDeleteOptions<ID = string | number> extends CrudOperationOptions {\n progress?: (event: BatchDeleteProgress<ID>) => void;\n cancel$?: Observable<unknown>;\n}\n\n/**\n * Serviço genérico para operações CRUD em APIs REST padronizadas.\n *\n * Permite também:\n * - Trabalhar com recursos aninhados via parentPath (ex: /clientes/123/enderecos)\n * - Definir endpoints customizados para cada operação\n * - Obter schemas dinâmicos de entidades para geração automática de grids e formulários\n *\n * Utilize configure() sempre antes das operações, informando o recurso que será manipulado.\n *\n * Exemplo de uso:\n *\n * ```typescript\n * crudService.configure('usuarios');\n * crudService.getAll().subscribe(usuarios => { ... });\n * ```\n *\n * @template T Tipo da entidade manipulada pelo serviço.\n */\n@Injectable({\n providedIn: null,\n})\nexport class GenericCrudService<T, ID extends string | number = string | number, > {\n private static readonly ERROR_MESSAGES = {\n emptyResourcePath: 'O caminho do recurso não pode ser vazio.',\n emptyId: 'O ID não pode ser nulo ou vazio.',\n emptyEntity: 'A entidade não pode ser nula ou vazia.',\n unconfiguredService: 'Serviço não configurado. Chame configure() antes de usar.',\n } as const;\n private baseApiUrl!: string; // Root URL for the API\n private apiUrl!: string; // Full base path for the configured resource\n private endpoints: EndpointConfig = {}; // Stores user-defined custom endpoints\n private apiUrlConfig: ApiUrlConfig;\n private currentEndpointKey: ApiEndpoint = ApiEndpoint.Default;\n private resourcePath!: string;\n // Nova propriedade para armazenar a URL do schema\n private _schemaUrl: string | null = null;\n private configured = false;\n // Cache para schemas de filtro (compartilha observáveis para chamadas simultâneas)\n private _filterSchemaCache = new Map<string, import('rxjs').Observable<FieldDefinition[]>>();\n private _schemaCache = new LocalStorageCacheAdapter();\n // Último metadata de recurso derivado do schema carregado (ex.: idField)\n private _lastResourceMeta: { idField?: string; resourcePath?: string } = {};\n // Última informação do schema consumido (para auditoria/merge)\n private _lastSchemaInfo: { schemaId?: string; schemaHash?: string } = {};\n\n /**\n * Cria a instância do serviço genérico.\n *\n * @param http Angular HttpClient.\n * @param schemaNormalizer Serviço para normalização do schema.\n * @param apiUrlInjected URL base da API (via token de injeção).\n */\n constructor(private http: HttpClient, private schemaNormalizer: SchemaNormalizerService, private globalConfig: GlobalConfigService, @Inject(API_URL) apiUrlInjected: ApiUrlConfig,) {\n this.apiUrlConfig = apiUrlInjected;\n }\n\n // Acesso às mensagens de erro\n private get errorMessages() {\n return GenericCrudService.ERROR_MESSAGES;\n }\n\n configure(resourcePath: string, endpointKey?: ApiEndpoint): void {\n if (!resourcePath || !resourcePath.trim()) {\n throw new Error(this.errorMessages.emptyResourcePath);\n }\n\n const nextEndpointKey = endpointKey ?? this.currentEndpointKey;\n const entry = this.resolveEndpointEntry(nextEndpointKey);\n const nextBaseApiUrl = buildApiUrl(entry);\n\n const base = nextBaseApiUrl.replace(/\\/+$/, '');\n let resource = resourcePath.trim();\n\n // Convert absolute URLs to their path component\n if (/^https?:\\/\\//i.test(resource)) {\n try {\n const url = new URL(resource);\n resource = url.pathname;\n } catch {\n // ignore parse errors and treat as relative string\n }\n }\n\n resource = resource.replace(/^\\/+/, '');\n\n // Normalize known suffixes accidentally passed as part of the resource path\n // Avoid cases like \"retaguarda/parametros/filter\" which would lead to \"/filter/filter\" requests\n resource = resource.replace(/\\/(?:filter|all)(?:\\/?$)/i, '');\n\n // Remove duplicated `api` segments only if base URL already contains `/api`\n try {\n const basePath = new URL(base).pathname;\n if (/\\/api(\\/|$)/.test(basePath)) {\n resource = resource.replace(/^(?:api\\/)+/, '');\n }\n } catch {\n // ignore invalid base URLs\n }\n\n const nextApiUrl = `${base}/${resource}`.replace(/\\/+$/, '');\n\n // Short‑circuit if configuration is unchanged to avoid duplicate logs/requests\n if (\n this.configured &&\n this.apiUrl === nextApiUrl &&\n this.baseApiUrl === nextBaseApiUrl &&\n this.currentEndpointKey === nextEndpointKey\n ) {\n // No-op; already configured with same values\n // console.debug('[CRUD:Service] configure (no-op)', { resourcePath, baseApiUrl: nextBaseApiUrl });\n return;\n }\n\n // Apply new configuration\n this.currentEndpointKey = nextEndpointKey;\n this.baseApiUrl = nextBaseApiUrl;\n this.resourcePath = resource;\n this.apiUrl = nextApiUrl;\n this.configured = true;\n console.debug('[CRUD:Service] configure', {\n resourcePath, baseApiUrl: this.baseApiUrl,\n });\n }\n\n /**\n * Configura endpoints personalizados para cada operação CRUD, substituindo as URLs padrão.\n *\n * Este método permite definir caminhos específicos para cada tipo de operação (getAll, getById, etc.)\n * Os endpoints podem ser:\n * - Caminhos relativos: serão anexados ao baseApiUrl (ex: 'usuarios/ativos')\n * - URLs absolutas: usadas diretamente (ex: 'https://api.externa.com/usuarios')\n *\n * Exemplo de uso:\n * ```typescript\n * crudService.configureEndpoints({\n * getAll: 'usuarios/ativos', // GET [baseApiUrl]/usuarios/ativos\n * create: 'https://api.ext/dados', // POST https://api.ext/dados\n * filter: 'usuarios/busca-avancada' // POST [baseApiUrl]/usuarios/busca-avancada\n * });\n * ```\n *\n * @param customEndpoints Objeto com endpoints customizados.\n */\n public configureEndpoints(customEndpoints: EndpointConfig): void {\n this.endpoints = {...this.endpoints, ...customEndpoints};\n }\n\n /**\n * Fluxo de schemas (grid e filtro)\n *\n * - Grid/Lista (colunas e metadados do DTO principal):\n * 1) getSchema() chama GET {resource}/schemas (ex.: /api/human-resources/funcionarios/schemas)\n * 2) O backend responde 302 para /schemas/filtered com query params:\n * - path: {basePath}/all (ex.: /api/human-resources/funcionarios/all)\n * - operation: get\n * - schemaType: response\n * 3) O serviço normaliza o schema retornado (x-ui) para montagem de grids e formulários.\n *\n * - Filtro Avançado (metadados do DTO de filtro específico do recurso):\n * 1) getFilterSchema() deriva o path preservando prefixos (via schemaUrl) e garante sufixo \"/filter\"\n * 2) Em seguida, chama getFilteredSchema({ path, operation: 'post', schemaType: 'request' })\n * 3) O endpoint /schemas/filtered do backend resolve automaticamente o documento/grupo (via OpenApiGroupResolver ou inferência)\n * e retorna o schema do FilterDTO concreto com as propriedades x-ui declaradas por @UISchema/@Filterable.\n *\n * Observações:\n * - schemaUrl() preserva contextPath e prefixos como \"/api\", evitando erros quando há múltiplos grupos OpenAPI.\n * - O parâmetro \"document\" em getFilteredSchema é opcional; quando omitido, o backend o resolve a partir do path.\n */\n /**\n * Obtém o schema (metadados) do recurso, útil para construção dinâmica de grids e formulários.\n *\n * Fluxo:\n * - Faz GET {resource}/schemas; o backend redireciona (302) para /schemas/filtered\n * com path={basePath}/all, operation=get, schemaType=response.\n * - O resultado é normalizado e usado para montar colunas de grid e formulários (x-ui).\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('produtos');\n * crudService.getSchema().subscribe(schema => { // usar metadados });\n * ```\n */\n public getSchema(options?: CrudOperationOptions,): Observable<FieldDefinition[]> {\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('schema', undefined, options?.parentPath, options?.endpointKey,);\n // Armazena a URL para referência posterior\n this._schemaUrl = url;\n console.debug('[CRUD:Service] getSchema:url', {url});\n\n // Derivar path para o /schemas/filtered do grid (response schema)\n const schemaPathBase = this.schemaUrl().replace(/\\/schemas$/, '');\n const path = `${schemaPathBase}/all`;\n const operation = 'get';\n const schemaType = 'response';\n\n // Tenant e locale\n const tenant = this.globalConfig.getTenant();\n const locale = (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined;\n\n // Monta params e headers\n let httpParams = new HttpParams()\n .set('path', path)\n .set('operation', operation)\n .set('schemaType', schemaType);\n\n // Resolve schemas/filtered honoring relative base (dev proxy) when applicable\n let filteredUrl = '/schemas/filtered';\n try {\n const baseUrl = buildApiUrl(entry);\n const u = new URL(baseUrl);\n filteredUrl = `${u.origin}/schemas/filtered`;\n } catch {}\n\n const schemaId = buildSchemaId({ path, operation, schemaType, includeInternalSchemas: false, tenant, locale, apiOrigin: origin });\n const headersBase = composeHeadersWithVersion(entry);\n\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n let headers = headersBase as any;\n if (cached?.schemaHash) {\n headers = (headersBase instanceof HttpHeaders ? headersBase : new HttpHeaders(headersBase as any))\n .set('If-None-Match', `\"${cached.schemaHash}\"`)\n .set('Accept-Language', locale || '')\n .set('X-Tenant', tenant || '');\n } else {\n headers = (headersBase instanceof HttpHeaders ? headersBase : new HttpHeaders(headersBase as any));\n if (locale) headers = headers.set('Accept-Language', locale);\n if (tenant) headers = headers.set('X-Tenant', tenant);\n }\n console.debug('[CRUD:Service] getSchema (filtered fallback):request', { filteredUrl, path, hasCached: !!cached });\n return this.http.get<any>(filteredUrl, { params: httpParams, headers, observe: 'response' });\n }),\n concatMap((resp: HttpResponse<any>) => {\n if (resp.status === 304) {\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n if (cached?.schema) {\n // Extrai idField de x-ui.resource, se presente no schema em cache\n try {\n const idField = cached.schema?.['x-ui']?.resource?.idField as string | undefined;\n this._lastResourceMeta = {\n idField: idField || this._lastResourceMeta.idField,\n resourcePath: this.resourcePath,\n };\n } catch {}\n // Atualiza última info de schema a partir do cache\n try {\n const cachedHash = cached.schemaHash || '';\n this._lastSchemaInfo = { schemaId, schemaHash: cachedHash };\n } catch {}\n return of(this.schemaNormalizer.normalizeSchema(cached.schema));\n }\n const headers = composeHeadersWithVersion(entry);\n let h = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers as any));\n if (locale) h = h.set('Accept-Language', locale);\n if (tenant) h = h.set('X-Tenant', tenant);\n return this.http.get<any>(filteredUrl, { params: httpParams, headers: h }).pipe(\n tap((fresh) => {\n const now = new Date().toISOString();\n const entry = {\n schema: fresh,\n schemaHash: '',\n meta: {\n version: '2.0.0',\n name: 'Grid/Response Schema',\n createdAt: now,\n updatedAt: now,\n resourcePath: this.resourcePath,\n schemaId,\n apiOrigin: origin,\n },\n };\n this._schemaCache.set(schemaId, entry as any);\n }),\n map((fresh) => this.schemaNormalizer.normalizeSchema(fresh)),\n catchError(this.handleError),\n );\n })\n );\n }\n const body = resp.body;\n const etag = resp.headers.get('ETag') || '';\n const xHash = resp.headers.get('X-Schema-Hash');\n const schemaHash = (xHash || etag).replace(/^W\\//, '').replace(/^\"|\"$/g, '');\n const nowIso = new Date().toISOString();\n let idFieldFromBody: string | undefined;\n try { idFieldFromBody = body?.['x-ui']?.resource?.idField as string | undefined; } catch {}\n this._schemaCache.set(schemaId, { schema: body, schemaHash, meta: {\n version: '2.0.0', name: 'Grid/Response Schema', createdAt: nowIso, updatedAt: nowIso,\n resourcePath: this.resourcePath, idField: idFieldFromBody, schemaId, apiOrigin: origin,\n }} as any);\n this._lastSchemaInfo = { schemaId, schemaHash };\n // Extrai idField de x-ui.resource quando presente no body recebido\n try {\n const idField = body?.['x-ui']?.resource?.idField as string | undefined;\n this._lastResourceMeta = { idField, resourcePath: this.resourcePath };\n } catch {}\n return of(this.schemaNormalizer.normalizeSchema(body));\n }),\n // Angular HttpClient treats 304 as error; handle cache reuse here\n catchError((err: HttpErrorResponse) => {\n if (err?.status === 304) {\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n if (cached?.schema) {\n try {\n const idField = (cached.schema as any)?.['x-ui']?.resource?.idField as string | undefined;\n this._lastResourceMeta = {\n idField: idField || this._lastResourceMeta.idField,\n resourcePath: this.resourcePath,\n };\n } catch {}\n return of(this.schemaNormalizer.normalizeSchema(cached.schema));\n }\n // Refetch without If-None-Match if cache is missing\n const baseHeaders = composeHeadersWithVersion(entry);\n let h = (baseHeaders instanceof HttpHeaders ? baseHeaders : new HttpHeaders(baseHeaders as any));\n if (locale) h = h.set('Accept-Language', locale);\n if (tenant) h = h.set('X-Tenant', tenant);\n return this.http\n .get<any>(filteredUrl, { params: httpParams, headers: h })\n .pipe(\n tap((fresh) => {\n const now = new Date().toISOString();\n const entry = {\n schema: fresh,\n schemaHash: '',\n meta: {\n version: '2.0.0',\n name: 'Grid/Response Schema',\n createdAt: now,\n updatedAt: now,\n resourcePath: this.resourcePath,\n schemaId,\n apiOrigin: origin,\n },\n };\n this._schemaCache.set(schemaId, entry as any);\n this._lastSchemaInfo = { schemaId, schemaHash: '' };\n }),\n tap((fresh: any) => {\n try {\n const idField = fresh?.['x-ui']?.resource?.idField as string | undefined;\n this._lastResourceMeta = { idField, resourcePath: this.resourcePath };\n } catch {}\n }),\n map((fresh) => this.schemaNormalizer.normalizeSchema(fresh)),\n catchError(this.handleError),\n );\n }),\n );\n }\n return this.handleError(err);\n }),\n ).pipe(shareReplay(1));\n }\n\n /** Retorna o campo identificador do recurso (ex.: 'id', 'codigo'), quando derivado do schema. */\n public getResourceIdField(): string | undefined {\n const key = (this._lastResourceMeta?.idField || '').trim();\n return key || undefined;\n }\n\n /** Retorna o último schemaId e hash conhecidos após getSchema()/getFilteredSchema(). */\n public getLastSchemaInfo(): { schemaId?: string; schemaHash?: string } {\n return { ...this._lastSchemaInfo };\n }\n\n /**\n * Retorna a URL do último schema solicitado, preservando apenas o pathname.\n *\n * Detalhes:\n * - Se getSchema() já foi chamado, reutiliza a URL armazenada.\n * - Caso contrário, reconstrói a URL de schema e extrai apenas o caminho (ex.: \"/api/usuarios/schemas\").\n * - Esse caminho é usado para derivar o path do /schemas/filtered (grid/filtro) mantendo prefixos/contextPath.\n */\n public schemaUrl(): string {\n this.ensureConfigured();\n let url: string;\n\n // Se já temos a URL do schema armazenada, usá-la\n if (this._schemaUrl) {\n url = this._schemaUrl;\n } else {\n try {\n // Tentar construir a URL mesmo que getSchema() não tenha sido chamado\n url = this.getEndpointUrl('schema');\n } catch (error) {\n // Se o serviço não estiver configurado, retornar string vazia\n return '';\n }\n }\n\n try {\n const urlObj = new URL(url);\n const pathname = urlObj.pathname;\n console.debug('[CRUD:Service] schemaUrl:pathname', {\n pathname, from: url,\n });\n return pathname;\n } catch (error) {\n const cleaned = url.replace(/^(https?:\\/\\/)?[^\\/]+(\\/|$)/, '/');\n console.debug('[CRUD:Service] schemaUrl:cleaned', {cleaned, from: url});\n return cleaned;\n }\n }\n\n /**\n * Obtém um schema filtrado diretamente do endpoint `/schemas/filtered`.\n *\n * Como monta a chamada:\n * - path: por padrão, usa schemaUrl().replace(/\\/schemas$/, '') (ex.: \"/api/usuarios\")\n * - operation, schemaType: informados pelo chamador (ex.: get/response para grid, post/request para filtro)\n * - document: opcional; o backend resolve automaticamente quando omitido\n * - includeInternalSchemas: quando true, o backend expande $ref internos (custo maior)\n */\n public getFilteredSchema(params: {\n path?: string; document?: string; operation?: string; includeInternalSchemas?: boolean; schemaType?: string;\n }): Observable<FieldDefinition[]> {\n this.ensureConfigured();\n\n let httpParams = new HttpParams();\n const path = params.path ?? this.schemaUrl().replace(/\\/schemas$/, '');\n httpParams = httpParams.set('path', path);\n if (params.document) {\n httpParams = httpParams.set('document', params.document);\n }\n if (params.operation) {\n httpParams = httpParams.set('operation', params.operation);\n }\n if (params.schemaType) {\n httpParams = httpParams.set('schemaType', params.schemaType);\n }\n if (params.includeInternalSchemas !== undefined) {\n httpParams = httpParams.set('includeInternalSchemas', String(params.includeInternalSchemas),);\n }\n\n const entry = this.resolveEndpointEntry();\n let url = '/schemas/filtered';\n let origin = '';\n try {\n const baseUrl = buildApiUrl(entry);\n const u = new URL(baseUrl);\n origin = u.origin;\n url = `${origin}/schemas/filtered`;\n } catch {}\n\n const operation = (params.operation ?? 'get').toLowerCase();\n const schemaTypeParam: 'response' | 'request' = ((params.schemaType ?? 'response').toLowerCase() as 'response' | 'request');\n const includeInternal = !!params.includeInternalSchemas;\n const tenant = this.globalConfig.getTenant();\n const locale = (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined;\n\n const schemaId = buildSchemaId({ path, operation, schemaType: schemaTypeParam, includeInternalSchemas: includeInternal, tenant, locale, apiOrigin: origin });\n\n // Prepare headers with If-None-Match when cached\n const headersBase = composeHeadersWithVersion(entry);\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n let headers = headersBase as any;\n if (cached?.schemaHash) {\n headers = (headersBase instanceof HttpHeaders ? headersBase : new HttpHeaders(headersBase as any)).set('If-None-Match', `\"${cached.schemaHash}\"`);\n } else {\n headers = (headersBase instanceof HttpHeaders ? headersBase : new HttpHeaders(headersBase as any));\n }\n if (locale) headers = headers.set('Accept-Language', locale);\n if (tenant) headers = headers.set('X-Tenant', tenant);\n console.debug('[CRUD:Service] getFilteredSchema:request', { url, params: { path, operation, schemaType: schemaTypeParam, includeInternalSchemas: includeInternal }, hasCached: !!cached });\n return this.http.get<any>(url, { params: httpParams, headers, observe: 'response' });\n }),\n concatMap((resp: HttpResponse<any>) => {\n if (resp.status === 304) {\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n if (cached?.schema) {\n try {\n const cachedHash = cached.schemaHash || '';\n this._lastSchemaInfo = { schemaId, schemaHash: cachedHash };\n } catch {}\n return of(this.schemaNormalizer.normalizeSchema(cached.schema));\n }\n // Fallback: refetch without If-None-Match (com tenant/locale)\n const headers = composeHeadersWithVersion(entry);\n let h = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers as any));\n if (locale) h = h.set('Accept-Language', locale);\n if (tenant) h = h.set('X-Tenant', tenant);\n return this.http.get<any>(url, { params: httpParams, headers: h }).pipe(\n tap((fresh) => {\n const now = new Date().toISOString();\n const entry = {\n schema: fresh,\n schemaHash: '',\n meta: {\n version: '2.0.0',\n name: (schemaTypeParam === 'request' ? 'Filter/Request Schema' : 'Schema'),\n createdAt: now,\n updatedAt: now,\n resourcePath: this.resourcePath,\n schemaId,\n apiOrigin: origin,\n },\n };\n this._schemaCache.set(schemaId, entry as any);\n }),\n map((fresh) => this.schemaNormalizer.normalizeSchema(fresh)),\n catchError(this.handleError),\n );\n })\n );\n }\n const body = resp.body;\n const etag = resp.headers.get('ETag') || '';\n const xHash = resp.headers.get('X-Schema-Hash');\n const schemaHash = (xHash || etag).replace(/^W\\//, '').replace(/^\"|\"$/g, '');\n const nowIso2 = new Date().toISOString();\n let idFieldFromBody2: string | undefined;\n try { idFieldFromBody2 = body?.['x-ui']?.resource?.idField as string | undefined; } catch {}\n const entryToCache = { schema: body, schemaHash, meta: { version: '2.0.0', name: (schemaTypeParam === 'request' ? 'Filter/Request Schema' : 'Schema'), createdAt: nowIso2, updatedAt: nowIso2, resourcePath: this.resourcePath, idField: idFieldFromBody2, schemaId, apiOrigin: origin } };\n this._schemaCache.set(schemaId, entryToCache as any);\n return of(this.schemaNormalizer.normalizeSchema(body));\n }),\n // Angular HttpClient may surface 304 as error; handle reuse and refetch\n catchError((err: HttpErrorResponse) => {\n if (err?.status === 304) {\n return from(this._schemaCache.get(schemaId)).pipe(\n concatMap((cached) => {\n if (cached?.schema) {\n try {\n const cachedHash = cached.schemaHash || '';\n this._lastSchemaInfo = { schemaId, schemaHash: cachedHash };\n } catch {}\n return of(this.schemaNormalizer.normalizeSchema(cached.schema));\n }\n const headers = composeHeadersWithVersion(entry);\n let h = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers as any));\n if (locale) h = h.set('Accept-Language', locale);\n if (tenant) h = h.set('X-Tenant', tenant);\n return this.http.get<any>(url, { params: httpParams, headers: h }).pipe(\n tap((fresh) => {\n const now = new Date().toISOString();\n const entry = { schema: fresh, schemaHash: '', meta: { version: '2.0.0', name: (schemaTypeParam === 'request' ? 'Filter/Request Schema' : 'Schema'), createdAt: now, updatedAt: now, resourcePath: this.resourcePath, schemaId, apiOrigin: origin } };\n this._schemaCache.set(schemaId, entry as any);\n }),\n map((fresh) => this.schemaNormalizer.normalizeSchema(fresh)),\n catchError(this.handleError),\n );\n })\n );\n }\n return this.handleError(err);\n }),\n ).pipe(shareReplay(1));\n }\n\n /**\n * Retorna todos os registros do recurso.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('clientes');\n * crudService.getAll().subscribe(clientes => { ... });\n * ```\n *\n * Para recurso aninhado:\n * ```typescript\n * crudService.configure('enderecos');\n * crudService.getAll({ parentPath: 'clientes/123' }).subscribe(enderecos => { ... });\n * ```\n *\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable com array de entidades.\n */\n public getAll(options?: CrudOperationOptions): Observable<T[]> {\n return this.getAllResponse(options).pipe(map((r) => r.data));\n }\n\n public getAllResponse(options?: CrudOperationOptions,): Observable<RestApiResponse<T[]>> {\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('getAll', undefined, options?.parentPath, options?.endpointKey,);\n return this.http\n .get<RestApiResponse<T[]>>(url, {headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Retorna um registro pelo seu ID.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('usuarios');\n * crudService.getById(10).subscribe(usuario => { ... });\n * ```\n *\n * Para recurso aninhado:\n * ```typescript\n * crudService.configure('enderecos');\n * crudService.getById(5, { parentPath: 'clientes/123' }).subscribe(endereco => { ... });\n * ```\n *\n * @param id Identificador único do registro.\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable com a entidade encontrada.\n */\n public getById(id: ID, options?: CrudOperationOptions): Observable<T> {\n return this.getByIdResponse(id, options).pipe(map((r) => r.data));\n }\n\n public getByIdResponse(id: ID, options?: CrudOperationOptions,): Observable<RestApiResponse<T>> {\n if (id === undefined || id === null) throw new Error(this.errorMessages.emptyId);\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('getById', id, options?.parentPath, options?.endpointKey,);\n console.debug('[CRUD:Service] getById:url', {url});\n return this.http\n .get<RestApiResponse<T>>(url, {headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Cria um novo registro.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('produtos');\n * crudService.create({ nome: 'Mouse', preco: 50 }).subscribe(produto => { ... });\n * ```\n *\n * Para recurso aninhado:\n * ```typescript\n * crudService.configure('enderecos');\n * crudService.create({ rua: 'Rua Nova' }, { parentPath: 'clientes/123' }).subscribe(endereco => { ... });\n * ```\n *\n * @param entity Entidade a ser criada.\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable com a entidade criada.\n */\n public create(entity: T, options?: CrudOperationOptions): Observable<T> {\n return this.createResponse(entity, options).pipe(map((r) => r.data));\n }\n\n public createResponse(entity: T, options?: CrudOperationOptions,): Observable<RestApiResponse<T>> {\n if (!entity) throw new Error(this.errorMessages.emptyEntity);\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('create', undefined, options?.parentPath, options?.endpointKey,);\n return this.http\n .post<RestApiResponse<T>>(url, entity, {headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Atualiza um registro existente.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('usuarios');\n * crudService.update(10, { nome: 'Novo Nome' }).subscribe(usuario => { ... });\n * ```\n *\n * Para recurso aninhado:\n * ```typescript\n * crudService.configure('enderecos');\n * crudService.update(2, { rua: 'Rua Alterada' }, { parentPath: 'clientes/123' }).subscribe(endereco => { ... });\n * ```\n *\n * @param id Identificador único do registro.\n * @param entity Entidade atualizada.\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable com a entidade atualizada.\n */\n public update(id: ID, entity: T, options?: CrudOperationOptions,): Observable<T> {\n return this.updateResponse(id, entity, options).pipe(map((r) => r.data));\n }\n\n public updateResponse(id: ID, entity: T, options?: CrudOperationOptions,): Observable<RestApiResponse<T>> {\n if (id === undefined || id === null) throw new Error(this.errorMessages.emptyId);\n if (!entity) throw new Error(this.errorMessages.emptyEntity);\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('update', id, options?.parentPath, options?.endpointKey,);\n return this.http\n .put<RestApiResponse<T>>(url, entity, {headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Remove um registro pelo ID.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('usuarios');\n * crudService.delete(5).subscribe(() => { ... });\n * ```\n *\n * Para recurso aninhado:\n * ```typescript\n * crudService.configure('enderecos');\n * crudService.delete(2, { parentPath: 'clientes/123' }).subscribe(() => { ... });\n * ```\n *\n * @param id Identificador único do registro.\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable vazio quando a remoção for bem-sucedida.\n */\n public delete(id: ID, options?: CrudOperationOptions): Observable<void> {\n return this.deleteResponse(id, options).pipe(map(() => undefined));\n }\n\n public deleteResponse(id: ID, options?: CrudOperationOptions,): Observable<RestApiResponse<void>> {\n if (id === undefined || id === null) throw new Error(this.errorMessages.emptyId);\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = this.getEndpointUrl('delete', id, options?.parentPath, options?.endpointKey,);\n try {\n console.debug('[CRUD:Service] delete:request', {\n url,\n id,\n parentPath: options?.parentPath,\n endpointKey: options?.endpointKey,\n });\n } catch {}\n return this.http\n .delete<RestApiResponse<void>>(url, {headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Realiza exclusão de múltiplos registros sequencialmente.\n * Emite progresso opcionalmente e permite cancelamento via Observable.\n */\n public deleteMany(ids: Array<ID>, options?: BatchDeleteOptions<ID>,): Observable<BatchDeleteResult<ID>> {\n this.ensureConfigured();\n if (!ids || ids.length === 0) {\n return of({successIds: [], errors: []});\n }\n const total = ids.length;\n return from(ids).pipe(takeUntil(options?.cancel$ ?? EMPTY), concatMap((id, index) => this.delete(id, options).pipe(map(() => ({\n id, success: true, index: index + 1, total,\n })), catchError((error) => of({\n id, success: false, error, index: index + 1, total,\n }),), tap((event) => options?.progress?.(event)),),), toArray(), map((events) => ({\n successIds: events.filter((e) => e.success).map((e) => e.id), errors: events.filter((e) => !e.success),\n })),);\n }\n\n /**\n * Realiza busca paginada e filtrada conforme critérios informados.\n *\n * Exemplo:\n * ```typescript\n * crudService.configure('produtos');\n * crudService.filter({ categoria: 'Eletrônicos' }, { pageNumber: 0, pageSize: 10 })\n * .subscribe(page => { ... });\n * ```\n *\n * @param filterCriteria Critérios para filtragem.\n * @param pageable Opções de paginação.\n * @param options Parâmetros opcionais, incluindo parentPath.\n * @returns Observable com página de entidades.\n */\n filter(filterCriteria: any, pageable: PageableRequest): Observable<Page<T>>;\n\n filter(filterCriteria: any, pageable: PageableRequest, opts: FilterOptions,): Observable<Page<T> & {\n dataVersion?: string\n }>;\n\n filter(filterCriteria: any, pageable: PageableRequest, opts: FilterOptions & CrudOperationOptions,): Observable<Page<T> & {\n dataVersion?: string\n }>;\n\n filter(filterCriteria: any, pageable: PageableRequest, opts?: FilterOptions & CrudOperationOptions,): Observable<any> {\n let params = new HttpParams()\n .set('page', pageable.pageNumber)\n .set('size', pageable.pageSize);\n pageable.sort?.forEach((s) => (params = params.append('sort', s)));\n opts?.includeIds?.forEach((id) => {\n params = params.append('includeIds', String(id));\n });\n\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(opts?.endpointKey);\n const url = this.getEndpointUrl('filter', undefined, opts?.parentPath, opts?.endpointKey,);\n\n const observeVersion = !!opts?.observeVersionHeader;\n const req$ = observeVersion ? this.http.post<Page<T>>(url, filterCriteria, {\n params, observe: 'response', headers: composeHeadersWithVersion(entry),\n }) : this.http.post<Page<T>>(url, filterCriteria, {\n params, headers: composeHeadersWithVersion(entry),\n });\n\n return observeVersion ? (req$ as Observable<HttpResponse<any>>).pipe(map((resp) => {\n const raw = resp.body;\n const body = this.unwrapPageResponse<Page<T>>(raw);\n const version = resp.headers.get('X-Data-Version') || undefined;\n return version ? {...body, dataVersion: version} : body;\n }), catchError(this.handleError),) : (req$ as Observable<any>).pipe(map((raw) => this.unwrapPageResponse<Page<T>>(raw)), catchError(this.handleError),);\n }\n\n /** GET /by-ids */\n getByIds(ids: ID[], options?: CrudOperationOptions): Observable<T[]> {\n if (!ids?.length) return of([]);\n let params = new HttpParams();\n ids.forEach((id) => (params = params.append('ids', String(id))));\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = `${this.getResourceBaseUrl(options)}/by-ids`;\n return this.http\n .get<T[]>(url, {params, headers: composeHeadersWithVersion(entry)})\n .pipe(catchError(this.handleError));\n }\n\n /** OPTIONS: POST /options/filter */\n filterOptions(criteria: any, pageable: PageableRequest, opts: FilterOptions<ID> & CrudOperationOptions,): Observable<Page<OptionDTO<ID>> & {\n dataVersion?: string\n }>;\n\n filterOptions(criteria: any, pageable: PageableRequest, opts?: FilterOptions<ID> & CrudOperationOptions,): Observable<any> {\n let params = new HttpParams()\n .set('page', pageable.pageNumber)\n .set('size', pageable.pageSize);\n pageable.sort?.forEach((s) => (params = params.append('sort', s)));\n opts?.includeIds?.forEach((id) => {\n params = params.append('includeIds', String(id));\n });\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(opts?.endpointKey);\n const base = `${this.getResourceBaseUrl(opts)}/options`;\n const url = `${base}/filter`;\n const observeVersion = !!opts?.observeVersionHeader;\n const req$ = observeVersion ? this.http.post<Page<OptionDTO<ID>>>(url, criteria, {\n params, observe: 'response', headers: composeHeadersWithVersion(entry),\n }) : this.http.post<Page<OptionDTO<ID>>>(url, criteria, {\n params, headers: composeHeadersWithVersion(entry),\n });\n if (!observeVersion) return (req$ as Observable<Page<OptionDTO<ID>>>).pipe(catchError(this.handleError));\n return (req$ as Observable<HttpResponse<Page<OptionDTO<ID>>>>).pipe(map((resp) => {\n const body = resp.body as Page<OptionDTO<ID>>;\n const version = resp.headers.get('X-Data-Version') || undefined;\n return version ? {...body, dataVersion: version} : body;\n }), catchError(this.handleError),);\n }\n\n /** OPTIONS: GET /options/by-ids */\n getOptionsByIds(ids: ID[], options?: CrudOperationOptions,): Observable<OptionDTO<ID>[]> {\n if (!ids?.length) return of([]);\n let params = new HttpParams();\n ids.forEach((id) => (params = params.append('ids', String(id))));\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const base = `${this.getResourceBaseUrl(options)}/options`;\n const url = `${base}/by-ids`;\n return this.http\n .get<OptionDTO<ID>[]>(url, {\n params, headers: composeHeadersWithVersion(entry),\n })\n .pipe(catchError(this.handleError));\n }\n\n /** CURSOR: POST /filter/cursor */\n filterByCursor(criteria: any, cursorReq: CursorRequest = {}, options?: CrudOperationOptions,): Observable<CursorPage<T>> {\n let params = new HttpParams();\n if (cursorReq.size != null) params = params.set('size', cursorReq.size);\n if (cursorReq.after) params = params.set('after', cursorReq.after);\n if (cursorReq.before) params = params.set('before', cursorReq.before);\n cursorReq.sort?.forEach((s) => (params = params.append('sort', s)));\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = `${this.getResourceBaseUrl(options)}/filter/cursor`;\n return this.http\n .post<any>(url, criteria, {\n params, headers: composeHeadersWithVersion(entry),\n })\n .pipe(map((raw) => this.unwrapPageResponse<CursorPage<T>>(raw)), catchError(this.handleError),);\n }\n\n /** LOCATE: POST /locate */\n locate(criteria: any, id: ID, locateReq: LocateRequest, options?: CrudOperationOptions,): Observable<{\n position: number;\n page: number\n }> {\n let params = new HttpParams()\n .set('id', String(id))\n .set('size', String(locateReq.size));\n locateReq.sort?.forEach((s) => (params = params.append('sort', s)));\n this.ensureConfigured();\n const entry = this.resolveEndpointEntry(options?.endpointKey);\n const url = `${this.getResourceBaseUrl(options)}/locate`;\n return this.http\n .post<{ position: number; page: number }>(url, criteria, {\n params, headers: composeHeadersWithVersion(entry),\n })\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Realiza uma requisição HTTP genérica.\n *\n * Exemplo:\n * ```typescript\n * crudService.genericEndpoint<{ resultado: string }>(\n * 'https://api.meusite.com/teste', 'POST', { parametro: 123 }\n * ).subscribe(resposta => { ... });\n * ```\n *\n * @template R Tipo do dado esperado na resposta.\n * @param url URL completa da requisição.\n * @param method Método HTTP (GET, POST, PUT, DELETE, PATCH).\n * @param body Corpo da requisição (opcional).\n * @param params HttpParams opcionais.\n * @returns Observable de resposta do tipo informado.\n */\n public genericEndpoint<R>(url: string, method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET', body?: any, params?: HttpParams,): Observable<R> {\n return this.http\n .request<R>(method, url, {body, params})\n .pipe(catchError(this.handleError));\n }\n\n /**\n * Obtém o schema do DTO de filtro do endpoint POST /{resource}/filter.\n *\n * Fluxo:\n * - Deriva o path a partir de schemaUrl() e garante o sufixo \"/filter\"\n * - Chama getFilteredSchema com operation='post' e schemaType='request'\n * - Usa cache por chave (endpointKey|path|post|request|includeInternal) para compartilhamento entre assinantes\n */\n public getFilterSchema(options?: {\n path?: string; includeInternalSchemas?: boolean; endpointKey?: ApiEndpoint; cache?: boolean;\n }): import('rxjs').Observable<FieldDefinition[]> {\n this.ensureConfigured();\n\n // Seleciona endpoint base (se diferente)\n if (options?.endpointKey && options.endpointKey !== this.currentEndpointKey) {\n // Não reconfigura o serviço, apenas usa a chave como parte da cacheKey\n }\n\n // Deriva path base do schema preservando prefixos\n const basePath = (this.schemaUrl() || '')\n .replace(/\\/+$/, '')\n .replace(/\\/schemas$/, '');\n const requestedPath = options?.path;\n let path = (requestedPath && requestedPath.trim()) || (basePath ? `${basePath}/filter` : '');\n\n if (!path) {\n try {\n const url = new URL(this.getEndpointUrl('filter'));\n path = url.pathname;\n } catch {\n path = `/${this.resourcePath.replace(/^\\/+|\\/+$/g, '')}/filter`;\n }\n }\n\n if (!/\\/filter$/.test(path)) {\n path = `${path.replace(/\\/+$/, '')}/filter`;\n }\n\n const includeInternal = !!options?.includeInternalSchemas;\n const cacheEnabled = options?.cache !== false;\n const cacheKey = `${options?.endpointKey ?? this.currentEndpointKey}|${path}|post|request|${includeInternal ? '1' : '0'}`;\n\n console.debug('[CRUD:Service] getFilterSchema:derived', {\n path, includeInternal, cacheEnabled, cacheKey,\n });\n\n if (cacheEnabled) {\n const cached = this._filterSchemaCache.get(cacheKey);\n if (cached) {\n console.debug('[CRUD:Service] getFilterSchema:cache-hit', {cacheKey});\n return cached;\n }\n }\n\n const request$ = this.getFilteredSchema({\n path, operation: 'post', schemaType: 'request', includeInternalSchemas: includeInternal,\n }).pipe(shareReplay(1), catchError((err) => {\n if (cacheEnabled) {\n this._filterSchemaCache.delete(cacheKey);\n }\n return throwError(() => err);\n }),);\n\n if (cacheEnabled) {\n this._filterSchemaCache.set(cacheKey, request$);\n }\n\n return request$;\n }\n\n private ensureConfigured(): void {\n if (!this.configured) {\n throw new Error(this.errorMessages.unconfiguredService);\n }\n }\n\n private resolveEndpointEntry(key?: ApiEndpoint): ApiUrlEntry {\n const cfgKey = key ?? this.currentEndpointKey;\n return this.apiUrlConfig[cfgKey] || this.apiUrlConfig['default'];\n }\n\n /**\n * Constrói a URL completa para uma determinada operação CRUD, considerando endpoints personalizados e caminhos pai.\n *\n * Este método usa a seguinte ordem de prioridade:\n * 1. Endpoint personalizado definido pelo usuário (via configureEndpoints)\n * 2. Construção padrão de URL baseada no recurso configurado\n *\n * Para recursos aninhados, o parentPath é incorporado na URL final (ex: /clientes/123/enderecos).\n *\n * @param operation - A operação CRUD a ser executada (getAll, getById, create, update, delete, filter, schema)\n * @param id - Identificador opcional para operações que exigem ID (getById, update, delete)\n * @param parentPath - Caminho do recurso pai opcional para recursos aninhados (ex: 'clientes/123')\n * @param endpointKey - Chave de endpoint (quando houver múltiplas bases configuradas)\n * @returns A URL completa para a requisição à API\n * @throws Error quando o ID é obrigatório mas não fornecido, ou quando o serviço não está configurado\n */\n private getEndpointUrl(operation: keyof EndpointConfig, id?: ID, parentPath?: string, endpointKey?: ApiEndpoint,): string {\n const entry = this.resolveEndpointEntry(endpointKey);\n const baseApiUrl = buildApiUrl(entry);\n const customUserEndpoint = this.endpoints[operation];\n\n // Priority 1: User-defined custom endpoint\n if (customUserEndpoint) {\n if (customUserEndpoint.startsWith('http')) {\n // Absolute HTTP/HTTPS URL\n let url = customUserEndpoint.replace(/\\/+$/, '');\n if ((operation === 'getById' || operation === 'update' || operation === 'delete') && id !== undefined && id !== null) {\n url += `/${id}`;\n }\n return url;\n } else {\n // Relative custom path (relative to baseApiUrl)\n const endpoint = customUserEndpoint.replace(/^\\/+/, '');\n let url = `${baseApiUrl}/${endpoint}`;\n url = url.replace(/\\/+$/, '');\n if ((operation === 'getById' || operation === 'update' || operation === 'delete') && id !== undefined && id !== null) {\n url += `/${id}`;\n }\n return url;\n }\n }\n\n // Priority 2: Standard path construction (no custom endpoint for this operation)\n if (!this.resourcePath) {\n // requires configure()\n throw new Error(GenericCrudService.ERROR_MESSAGES.unconfiguredService);\n }\n\n let resourceUrl = `${baseApiUrl}/${this.resourcePath}`; // Default base for the resource e.g. [baseApiUrl]/addresses\n\n if (parentPath) {\n const resourceNameOnly = this.resourcePath\n .replace(/^\\/+/, '')\n .replace(/\\/+$/, '');\n\n const cleanedParentPath = parentPath\n .trim()\n .replace(/^\\/+/, '')\n .replace(/\\/+$/, '');\n\n resourceUrl = `${baseApiUrl}/${cleanedParentPath}`;\n if (resourceNameOnly) {\n resourceUrl += `/${resourceNameOnly}`;\n }\n }\n\n resourceUrl = resourceUrl.replace(/\\/+$/, ''); // Ensure no trailing slash before appending suffixes\n\n switch (operation) {\n case 'getAll':\n return `${resourceUrl}/all`;\n case 'getById':\n if (id === undefined || id === null) throw new Error(`ID is required for ${operation} operation.`);\n return `${resourceUrl}/${id}`;\n case 'create':\n return resourceUrl;\n case 'update':\n if (id === undefined || id === null) throw new Error(`ID is required for ${operation} operation.`);\n return `${resourceUrl}/${id}`;\n case 'delete':\n if (id === undefined || id === null) throw new Error(`ID is required for ${operation} operation.`);\n return `${resourceUrl}/${id}`;\n case 'filter':\n return `${resourceUrl}/filter`;\n case 'schema':\n return `${resourceUrl}/schemas`;\n default:\n throw new Error(`Unknown operation: ${operation as string}`);\n }\n }\n\n private getResourceBaseUrl(options?: CrudOperationOptions): string {\n const url = this.getEndpointUrl('filter', undefined, options?.parentPath, options?.endpointKey,);\n return url.replace(/\\/filter$/, '');\n }\n\n /**\n * Resolve `/schemas/filtered` base URL honoring ApiUrlConfig (supports APIs on another origin).\n */\n public getSchemasFilteredBaseUrl(endpointKey?: ApiEndpoint): string {\n const entry = this.resolveEndpointEntry(endpointKey);\n const baseUrl = buildApiUrl(entry);\n try {\n const origin = new URL(baseUrl).origin;\n return `${origin}/schemas/filtered`;\n } catch {\n return '/schemas/filtered';\n }\n }\n\n /**\n * Manipula erros de requisição HTTP.\n */\n private handleError(error: HttpErrorResponse): Observable<never> {\n console.error('Erro na API:', error);\n // Repassa o HttpErrorResponse completo para permitir tratamentos mais ricos (status, body, etc.)\n return throwError(() => error);\n }\n\n /**\n * Desembrulha respostas no formato RestApiResponse<Page<T>> para Page<T>.\n * Mantém compatibilidade quando a API já retorna Page<T> diretamente.\n */\n private unwrapPageResponse<R>(raw: any): R {\n if (raw && typeof raw === 'object' && 'data' in raw && raw.data) {\n return raw.data as R;\n }\n return raw as R;\n }\n}\n","/**\n * Nova arquitetura modular do TableConfig v2.0\n * Preparada para crescimento exponencial e alinhada com as 5 abas do editor\n */\n\n// =============================================================================\n// DEFINIÇÕES DE COLUNA\n// =============================================================================\n\nexport interface ColumnDefinition {\n /** Campo da fonte de dados */\n field: string;\n\n /** Cabeçalho da coluna */\n header: string;\n\n /** Tipo de dados para formatação */\n type?:\n | 'string'\n | 'number'\n | 'date'\n | 'boolean'\n | 'currency'\n | 'percentage'\n | 'custom';\n\n /** Largura da coluna */\n width?: string;\n\n /** Visibilidade da coluna */\n visible?: boolean;\n\n /** Permitir ordenação */\n sortable?: boolean;\n\n /** Permitir filtragem */\n filterable?: boolean;\n\n /** Permitir redimensionamento */\n resizable?: boolean;\n\n /** Coluna fixa (sticky). true/\"start\" fixa no início; \"end\" fixa no fim */\n sticky?: boolean | 'start' | 'end';\n\n /** Alinhamento do conteúdo */\n align?: 'left' | 'center' | 'right';\n\n /** Ordem de exibição */\n order?: number;\n\n /** Campo do backend usado para ordenação (quando diferente de field) */\n sortField?: string;\n\n /** Estilo CSS personalizado */\n style?: string;\n\n /** Estilo CSS do cabeçalho */\n headerStyle?: string;\n\n /** Classe CSS personalizada */\n cssClass?: string;\n\n /** Classe CSS do cabeçalho */\n headerCssClass?: string;\n\n /** Formato de exibição dos dados */\n format?: any;\n\n /** Mapeamento de valores para exibição */\n valueMapping?: { [key: string | number]: string };\n\n /**\n * Renderizador de célula (Fase 1): opções básicas para ícone, imagem ou badge.\n * Mantém compatibilidade com type/format/valueMapping; quando definido, tem precedência na exibição.\n */\n renderer?: {\n /** Tipo calculado por expressão (tem precedência sobre o tipo estático) */\n typeExpr?: string | { expr: string };\n /** Tipo do renderizador */\n type: 'icon' | 'image' | 'badge';\n /** Configuração de ícone (Material/SVG por nome) */\n icon?: {\n /** Nome fixo do ícone (ex.: 'check_circle') */\n name?: string;\n /** Campo do row que contém o nome do ícone */\n nameField?: string;\n /** Cor do ícone (primary/accent/warn ou CSS color) */\n color?: string;\n /** Tamanho em px (opcional) */\n size?: number;\n /** Label acessível (fixo) */\n ariaLabel?: string;\n };\n /** Configuração de imagem */\n image?: {\n /** URL fixa da imagem */\n src?: string;\n /** Campo do row com a URL da imagem */\n srcField?: string;\n /** Texto alternativo fixo */\n alt?: string;\n /** Campo do row com ALT */\n altField?: string;\n /** Dimensões */\n width?: number;\n height?: number;\n /** Forma de recorte */\n shape?: 'square' | 'rounded' | 'circle';\n /** Ajuste do objeto */\n fit?: 'cover' | 'contain';\n /** Lazy loading */\n lazy?: boolean;\n };\n /** Configuração de badge */\n badge?: {\n /** Texto fixo */\n text?: string;\n /** Campo do row com texto */\n textField?: string;\n /** Cor do badge (primary/accent/warn ou CSS) */\n color?: string;\n /** Variante visual */\n variant?: 'filled' | 'outlined' | 'soft';\n /** Ícone opcional dentro do badge */\n icon?: string;\n };\n };\n\n /**\n * Regras de estilo condicionais por coluna (experimental)\n * Cada regra contém uma expressão/DSL em `condition` e o efeito visual a aplicar.\n */\n conditionalStyles?: Array<{\n condition: string;\n cssClass?: string;\n style?: { [key: string]: string };\n description?: string;\n }>;\n\n /** Estado serializado do construtor visual de regras (round‑trip) */\n _styleRulesState?: any;\n\n /** Getter personalizado para valor calculado */\n _generatedValueGetter?: string;\n\n /** Tipo original da API */\n _originalApiType?: string;\n\n /** Flag indicando se veio da API */\n _isApiField?: boolean;\n}\n\n// =============================================================================\n// METADADOS E VERSIONAMENTO\n// =============================================================================\n\nexport interface ConfigMetadata {\n /** Versão da configuração para migração automática */\n version?: string;\n\n /** Identificador único da configuração */\n id?: string;\n\n /** Nome amigável da configuração */\n name?: string;\n\n /** Descrição da configuração */\n description?: string;\n\n /** Tags para categorização e busca */\n tags?: string[];\n\n /** Data de criação */\n createdAt?: string;\n\n /** Data de última modificação */\n updatedAt?: string;\n\n /** Autor da configuração */\n author?: string;\n\n /** Se é um template ou configuração específica */\n isTemplate?: boolean;\n\n /** Configuração derivada de outra (parent ID) */\n derivedFrom?: string;\n\n /** Identidade do schema de origem (path|operation|schemaType|internal:<bool>|tenant|locale) */\n schemaId?: string;\n\n /** ETag/hash do schema do servidor usado para a última reconciliação */\n serverHash?: string;\n\n /** Campo identificador preferido pelo usuário para o recurso (ex.: 'id', 'codigo') */\n idField?: string;\n\n /** Contexto de schema associado (útil para auditoria/telemetria) */\n schemaContext?: {\n path: string;\n operation: string;\n schemaType: 'response' | 'request';\n internal?: boolean;\n tenant?: string;\n locale?: string;\n };\n}\n\n// =============================================================================\n// ABA: VISÃO GERAL & COMPORTAMENTO\n// =============================================================================\n\nexport interface TableBehaviorConfig {\n /** Configurações de paginação */\n pagination?: PaginationConfig;\n\n /** Configurações de ordenação */\n sorting?: SortingConfig;\n\n /** Configurações de filtragem */\n filtering?: FilteringConfig;\n\n /** Configurações de seleção de linhas */\n selection?: SelectionConfig;\n\n /** Configurações de interação do usuário */\n interaction?: InteractionConfig;\n\n /** Configurações de carregamento e estados */\n loading?: LoadingConfig;\n\n /** Configurações para estado vazio */\n emptyState?: EmptyStateConfig;\n\n /** Configurações de virtualização para performance */\n virtualization?: VirtualizationConfig;\n\n /** Configurações de redimensionamento */\n resizing?: ResizingConfig;\n\n /** Configurações de reorganização por drag & drop */\n dragging?: DraggingConfig;\n}\n\nexport interface PaginationConfig {\n /** Habilitar paginação */\n enabled: boolean;\n\n /** Tamanho inicial da página */\n pageSize: number;\n\n /** Opções de tamanho de página disponíveis */\n pageSizeOptions: number[];\n\n /** Mostrar botões primeira/última página */\n showFirstLastButtons: boolean;\n\n /** Mostrar números das páginas */\n showPageNumbers: boolean;\n\n /** Mostrar info de página (ex: \"1-10 de 100\") */\n showPageInfo: boolean;\n\n /** Posição da paginação */\n position: 'top' | 'bottom' | 'both';\n\n /** Estilo da paginação */\n style: 'default' | 'simple' | 'advanced' | 'compact';\n\n /** Total de itens (para paginação server-side) */\n totalItems?: number;\n\n /** Estratégia de paginação */\n strategy: 'client' | 'server';\n\n /** Configurações avançadas */\n advanced?: {\n /** Jump to page input */\n showJumpToPage?: boolean;\n /** Page size customization */\n allowCustomPageSize?: boolean;\n /** Maximum page size allowed */\n maxPageSize?: number;\n };\n}\n\nexport interface SortingConfig {\n /** Habilitar ordenação */\n enabled: boolean;\n\n /** Ordenação padrão inicial (suporta múltiplas entradas) */\n defaultSort?:\n | { column: string; direction: 'asc' | 'desc' }\n | Array<{ column: string; direction: 'asc' | 'desc' }>;\n\n /** Permitir ordenação múltipla */\n multiSort: boolean;\n\n /** Estratégia de ordenação */\n strategy: 'client' | 'server';\n\n /** Mostrar indicadores visuais de ordenação */\n showSortIndicators: boolean;\n\n /** Posição dos indicadores */\n indicatorPosition: 'start' | 'end';\n\n /** Permitir remover ordenação (terceiro clique) */\n allowClearSort: boolean;\n\n /** Configurações avançadas */\n advanced?: {\n /** Função de comparação customizada para ordenação client-side */\n customComparators?: { [column: string]: (a: any, b: any) => number };\n /** Preservar ordenação entre atualizações de dados */\n preserveSort?: boolean;\n };\n}\n\nexport interface FilteringConfig {\n /** Habilitar filtragem */\n enabled: boolean;\n\n /** Filtros por coluna */\n columnFilters?: {\n enabled: boolean;\n /** Tipo de filtro padrão */\n defaultType: 'text' | 'select' | 'date' | 'number' | 'boolean';\n /** Posição dos filtros */\n position: 'header' | 'subheader' | 'sidebar';\n };\n\n /** Filtros avançados */\n advancedFilters?: {\n enabled: boolean;\n /** Interface de query builder */\n queryBuilder?: boolean;\n /** Salvar filtros como presets */\n savePresets?: boolean;\n /** Configurações específicas do componente praxis-filter */\n settings?: {\n /** Campo de busca rápida */\n quickField?: string;\n /** Campos sempre visíveis */\n alwaysVisibleFields?: string[];\n /** Placeholder da busca */\n placeholder?: string;\n /** Exibir opções avançadas por padrão */\n showAdvanced?: boolean;\n /** Permitir salvar tags/atalhos de filtro */\n allowSaveTags?: boolean;\n /** Debounce de alterações para auto-aplicar filtros (ms) */\n changeDebounceMs?: number;\n /** Modo de exibição do componente de filtro */\n mode?: 'auto' | 'filter' | 'card';\n };\n };\n\n /** Estratégia de filtragem */\n strategy: 'client' | 'server';\n\n /** Debounce para filtros em tempo real (ms) */\n debounceTime: number;\n}\n\nexport interface SelectionConfig {\n /** Habilitar seleção de linhas */\n enabled: boolean;\n\n /** Tipo de seleção */\n type: 'single' | 'multiple';\n\n /** Modo de seleção */\n mode: 'checkbox' | 'row' | 'both';\n\n /** Permitir selecionar todas as linhas */\n allowSelectAll: boolean;\n\n /** Posição do checkbox de seleção */\n checkboxPosition: 'start' | 'end';\n\n /** Manter seleção entre páginas */\n persistSelection: boolean;\n\n /** Manter seleção entre atualizações de dados */\n persistOnDataUpdate: boolean;\n\n /** Máximo de itens selecionáveis */\n maxSelections?: number;\n\n /** Configurações visuais */\n visual?: {\n /** Highlight da linha selecionada */\n highlightSelected: boolean;\n /** Cor do highlight */\n highlightColor?: string;\n /** Mostrar contador de selecionados */\n showSelectionCount: boolean;\n };\n}\n\nexport interface InteractionConfig {\n /** Ação ao clicar na linha */\n rowClick?: {\n enabled: boolean;\n action: 'select' | 'edit' | 'view' | 'custom';\n /** Função customizada para row click */\n customAction?: string;\n };\n\n /** Ação ao dar duplo clique na linha */\n rowDoubleClick?: {\n enabled: boolean;\n action: 'edit' | 'view' | 'custom';\n customAction?: string;\n };\n\n /** Hover effects */\n hover?: {\n enabled: boolean;\n /** Highlight na linha */\n highlightRow: boolean;\n /** Mostrar ações no hover */\n showActionsOnHover: boolean;\n };\n\n /** Configurações de teclado */\n keyboard?: {\n enabled: boolean;\n /** Navegação com setas */\n arrowNavigation: boolean;\n /** Seleção com espaço */\n spaceSelection: boolean;\n /** Atalhos personalizados */\n customShortcuts?: { [key: string]: string };\n };\n}\n\nexport interface LoadingConfig {\n /** Tipo de loading indicator */\n type: 'spinner' | 'skeleton' | 'progress' | 'custom';\n\n /** Posição do loading */\n position: 'overlay' | 'inline' | 'replace';\n\n /** Texto durante carregamento */\n text?: string;\n\n /** Mostrar loading para operações rápidas */\n showForQuickOperations: boolean;\n\n /** Delay antes de mostrar loading (ms) */\n delay: number;\n\n /** Configurações de skeleton loading */\n skeleton?: {\n rows: number;\n /** Animar skeleton */\n animated: boolean;\n /** Cor base do skeleton */\n baseColor?: string;\n /** Cor do highlight */\n highlightColor?: string;\n };\n}\n\nexport interface EmptyStateConfig {\n /** Mensagem para estado vazio */\n message: string;\n\n /** Ícone para estado vazio */\n icon?: string;\n\n /** Imagem para estado vazio */\n image?: string;\n\n /** Ações disponíveis no estado vazio */\n actions?: Array<{\n label: string;\n action: string;\n icon?: string;\n primary?: boolean;\n }>;\n\n /** Template customizado */\n customTemplate?: string;\n\n /** Configurações específicas por contexto */\n contexts?: {\n /** Estado inicial (sem dados carregados) */\n initial?: Partial<EmptyStateConfig>;\n /** Após filtros aplicados */\n filtered?: Partial<EmptyStateConfig>;\n /** Após busca sem resultados */\n searched?: Partial<EmptyStateConfig>;\n };\n}\n\nexport interface VirtualizationConfig {\n /** Habilitar virtualização */\n enabled?: boolean;\n\n /** Altura de cada linha (px) */\n itemHeight?: number;\n\n /** Número de itens para buffer */\n bufferSize?: number;\n\n /** Altura mínima do container (px ou CSS) */\n minContainerHeight?: number | string;\n\n /** Estratégia de virtualização */\n strategy?: 'fixed' | 'dynamic';\n}\n\nexport interface ResizingConfig {\n /** Habilitar redimensionamento de colunas */\n enabled: boolean;\n\n /** Largura mínima das colunas */\n minColumnWidth: number;\n\n /** Largura máxima das colunas */\n maxColumnWidth?: number;\n\n /** Auto-fit ao conteúdo */\n autoFit: boolean;\n\n /** Preservar larguras entre sessões */\n persistWidths: boolean;\n}\n\nexport interface DraggingConfig {\n /** Habilitar reorganização de colunas */\n columns: boolean;\n\n /** Habilitar reorganização de linhas */\n rows: boolean;\n\n /** Indicador visual durante drag */\n showDragIndicator: boolean;\n\n /** Zona de drop para colunas */\n columnDropZones?: string[];\n}\n\n// =============================================================================\n// ABA: VISÃO GERAL & COMPORTAMENTO - APARÊNCIA\n// =============================================================================\n\nexport interface TableAppearanceConfig {\n /** Densidade da tabela */\n density: 'compact' | 'comfortable' | 'spacious';\n\n /** Configurações de bordas */\n borders?: BorderConfig;\n\n /** Configurações de cores */\n colors?: ColorConfig;\n\n /** Configurações de fonte */\n typography?: TypographyConfig;\n\n /** Configurações de espaçamento */\n spacing?: SpacingConfig;\n\n /** Configurações de animações */\n animations?: AnimationConfig;\n\n /** Configurações de responsividade */\n responsive?: ResponsiveConfig;\n\n /** Configurações de elevação/sombra */\n elevation?: ElevationConfig;\n}\n\nexport interface BorderConfig {\n /** Mostrar bordas entre linhas */\n showRowBorders: boolean;\n\n /** Mostrar bordas entre colunas */\n showColumnBorders: boolean;\n\n /** Mostrar borda externa */\n showOuterBorder: boolean;\n\n /** Estilo da borda */\n style: 'solid' | 'dashed' | 'dotted';\n\n /** Largura da borda */\n width: number;\n\n /** Cor da borda */\n color?: string;\n\n /** Bordas específicas */\n specific?: {\n header?: Partial<BorderConfig>;\n footer?: Partial<BorderConfig>;\n sticky?: Partial<BorderConfig>;\n };\n}\n\nexport interface ColorConfig {\n /** Cor de fundo da tabela */\n background?: string;\n\n /** Cor de fundo do cabeçalho */\n headerBackground?: string;\n\n /** Cor de fundo de linhas alternadas */\n alternateRowBackground?: string;\n\n /** Cor de fundo no hover */\n hoverBackground?: string;\n\n /** Cor de fundo para linhas selecionadas */\n selectedBackground?: string;\n\n /** Cor do texto */\n textColor?: string;\n\n /** Cor do texto do cabeçalho */\n headerTextColor?: string;\n\n /** Paleta de cores para estados */\n states?: {\n error?: string;\n warning?: string;\n success?: string;\n info?: string;\n };\n}\n\nexport interface TypographyConfig {\n /** Família da fonte */\n fontFamily?: string;\n\n /** Tamanho da fonte do conteúdo */\n fontSize?: string;\n\n /** Tamanho da fonte do cabeçalho */\n headerFontSize?: string;\n\n /** Peso da fonte */\n fontWeight?: number | string;\n\n /** Peso da fonte do cabeçalho */\n headerFontWeight?: number | string;\n\n /** Altura da linha */\n lineHeight?: string;\n\n /** Espaçamento entre letras */\n letterSpacing?: string;\n\n /** Transformação do texto do cabeçalho */\n headerCase?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n}\n\nexport interface SpacingConfig {\n /** Padding das células */\n cellPadding?: string;\n\n /** Padding do cabeçalho */\n headerPadding?: string;\n\n /** Altura das linhas */\n rowHeight?: number;\n\n /** Altura do cabeçalho */\n headerHeight?: number;\n\n /** Espaçamento entre tabela e container */\n containerSpacing?: string;\n}\n\nexport interface AnimationConfig {\n /** Habilitar animações */\n enabled: boolean;\n\n /** Duração das animações (ms) */\n duration: number;\n\n /** Função de easing */\n easing: string;\n\n /** Animações específicas */\n specific?: {\n /** Animação ao carregar */\n loading?: boolean;\n /** Animação de hover */\n hover?: boolean;\n /** Animação de seleção */\n selection?: boolean;\n /** Animação de ordenação */\n sorting?: boolean;\n };\n}\n\nexport interface ResponsiveConfig {\n /** Pontos de quebra */\n breakpoints?: {\n mobile?: number;\n tablet?: number;\n desktop?: number;\n };\n\n /** Comportamento em dispositivos móveis */\n mobile?: {\n /** Scroll horizontal */\n horizontalScroll?: boolean;\n /** Colapsar colunas */\n collapseColumns?: boolean;\n /** Colunas prioritárias */\n priorityColumns?: string[];\n /** Modo de cards em mobile */\n cardMode?: boolean;\n };\n\n /** Ajustes automáticos */\n autoAdjust?: {\n /** Ocultar colunas automaticamente */\n hideColumns?: boolean;\n /** Reduzir font size */\n scaleFontSize?: boolean;\n /** Ajustar padding */\n adjustPadding?: boolean;\n };\n}\n\nexport interface ElevationConfig {\n /** Nível de elevação */\n level: number;\n\n /** Cor da sombra */\n shadowColor?: string;\n\n /** Elevação no hover */\n hoverElevation?: number;\n}\n\n// =============================================================================\n// ABA: BARRA DE FERRAMENTAS & AÇÕES\n// =============================================================================\n\nexport interface ToolbarConfig {\n /** Visibilidade da toolbar */\n visible: boolean;\n\n /** Posição da toolbar */\n position: 'top' | 'bottom' | 'both';\n\n /** Configurações de layout */\n layout?: ToolbarLayoutConfig;\n\n /** Título da tabela */\n title?: string;\n\n /** Subtítulo da tabela */\n subtitle?: string;\n\n /** Ações da toolbar */\n actions?: ToolbarAction[];\n\n /** Configurações de filtros na toolbar */\n filters?: ToolbarFilterConfig;\n\n /** Menu de configurações */\n settingsMenu?: ToolbarSettingsConfig;\n}\n\nexport interface ToolbarLayoutConfig {\n /** Alinhamento do conteúdo */\n alignment: 'start' | 'center' | 'end' | 'space-between';\n\n /** Altura da toolbar */\n height?: number;\n\n /** Padding da toolbar */\n padding?: string;\n\n /** Cor de fundo */\n backgroundColor?: string;\n\n /** Mostrar separador */\n showSeparator: boolean;\n}\n\nexport interface ToolbarAction {\n /** ID único da ação */\n id: string;\n\n /** Label da ação */\n label: string;\n\n /** Ícone da ação */\n icon?: string;\n\n /** Tipo do botão */\n type: 'button' | 'icon' | 'fab' | 'menu';\n\n /** Cor do Material */\n color?: 'primary' | 'accent' | 'warn';\n\n /** Aparência do botão Material: filled (flat), outlined (stroked), elevated (raised), text, tonal (custom) */\n appearance?: 'filled' | 'outlined' | 'elevated' | 'text' | 'tonal';\n\n /** Ação desabilitada */\n disabled?: boolean;\n\n /** Função a executar */\n action: string;\n\n /** Tooltip */\n tooltip?: string;\n\n /** Tecla de atalho */\n shortcut?: string;\n\n /** Posição na toolbar */\n position: 'start' | 'end';\n\n /** Ordem de exibição */\n order?: number;\n\n /** Visibilidade condicional */\n visibleWhen?: string;\n\n /** Sub-ações (para menus) */\n children?: ToolbarAction[];\n}\n\nexport interface ToolbarFilterConfig {\n /** Habilitar filtros rápidos na toolbar */\n enabled: boolean;\n\n /** Filtros rápidos disponíveis */\n quickFilters?: Array<{\n id: string;\n label: string;\n filter: any;\n icon?: string;\n }>;\n\n /** Mostrar botão de filtros avançados */\n showAdvancedButton: boolean;\n}\n\nexport interface ToolbarSettingsConfig {\n /** Habilitar menu de configurações */\n enabled: boolean;\n\n /** Configurações disponíveis */\n options?: Array<{\n id: string;\n label: string;\n type: 'toggle' | 'select' | 'action';\n value?: any;\n options?: any[];\n }>;\n}\n\nexport interface TableActionsConfig {\n /** Ações por linha */\n row?: RowActionsConfig;\n\n /** Ações em lote */\n bulk?: BulkActionsConfig;\n\n /** Ações de contexto (menu com botão direito) */\n context?: ContextActionsConfig;\n\n /** Configurações de confirmação */\n confirmations?: ConfirmationConfig;\n}\n\nexport interface RowActionsConfig {\n /** Habilitar ações por linha */\n enabled: boolean;\n\n /** Posição das ações */\n position: 'start' | 'end';\n\n /** Largura da coluna de ações */\n width?: string;\n\n /** Fixar a coluna de ações */\n sticky?: boolean | 'start' | 'end';\n\n /** Ações disponíveis */\n actions: RowAction[];\n\n /** Formato de exibição */\n display: 'menu' | 'buttons' | 'icons';\n\n /** Trigger para mostrar ações */\n trigger: 'hover' | 'always' | 'click';\n\n /** Ícone do menu de ações */\n menuIcon?: string;\n\n /** Cor do botão do menu de ações (overflow) */\n menuButtonColor?: 'basic' | 'primary' | 'accent' | 'warn';\n\n /** Configurações do cabeçalho da coluna de ações */\n header?: {\n /** Texto exibido no cabeçalho (ex.: \"Ações\") */\n label?: string;\n /** Ícone exibido ao lado do texto */\n icon?: string;\n /** Tooltip do cabeçalho */\n tooltip?: string;\n /** Alinhamento do conteúdo no cabeçalho */\n align?: 'start' | 'center' | 'end';\n };\n\n /** Número máximo de ações visíveis */\n maxVisibleActions?: number;\n\n /** Comportamento de overflow de ações */\n behavior?: {\n /** Habilitar comportamento de overflow */\n enabled?: boolean;\n /** Número máximo de ações inline */\n maxInline?: number | 'auto' | { xs?: number; sm?: number; md?: number; lg?: number };\n /** Estratégia para auto determinar número de ações inline */\n autoStrategy?: 'measure' | 'breakpoints';\n };\n}\n\nexport interface RowAction {\n /** ID único da ação */\n id: string;\n\n /** Label da ação */\n label: string;\n\n /** Ícone da ação */\n icon?: string;\n\n /** Cor da ação */\n color?: string;\n\n /** Ação desabilitada */\n disabled?: boolean;\n\n /** Função a executar */\n action: string;\n\n /** Tooltip */\n tooltip?: string;\n\n /** Requer confirmação */\n requiresConfirmation?: boolean;\n\n /** Visibilidade condicional */\n visibleWhen?: string;\n\n /** Separador após esta ação */\n separator?: boolean;\n\n /** Habilita exclusão automática ao acionar */\n autoDelete?: boolean;\n\n /** Endpoint personalizado para exclusão */\n deleteEndpoint?: string;\n}\n\nexport interface BulkActionsConfig {\n /** Habilitar ações em lote */\n enabled: boolean;\n\n /** Posição das ações em lote */\n position: 'toolbar' | 'floating' | 'both';\n\n /** Ações disponíveis */\n actions: BulkAction[];\n\n /** Configurações do floating action button */\n floating?: {\n position: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';\n /** Ocultar quando nada selecionado */\n hideWhenEmpty: boolean;\n };\n}\n\nexport interface BulkAction {\n /** ID único da ação */\n id: string;\n\n /** Label da ação */\n label: string;\n\n /** Ícone da ação */\n icon?: string;\n\n /** Cor da ação */\n color?: string;\n\n /** Função a executar */\n action: string;\n\n /** Requer confirmação */\n requiresConfirmation?: boolean;\n\n /** Mínimo de itens selecionados */\n minSelections?: number;\n\n /** Máximo de itens selecionados */\n maxSelections?: number;\n\n /** Habilita exclusão automática ao acionar */\n autoDelete?: boolean;\n\n /** Endpoint personalizado para exclusão */\n deleteEndpoint?: string;\n}\n\nexport interface ContextActionsConfig {\n /** Habilitar menu de contexto */\n enabled: boolean;\n\n /** Ações do menu de contexto */\n actions: ContextAction[];\n\n /** Trigger para menu de contexto */\n trigger: 'right-click' | 'long-press' | 'both';\n}\n\nexport interface ContextAction {\n /** ID único da ação */\n id: string;\n\n /** Label da ação */\n label: string;\n\n /** Ícone da ação */\n icon?: string;\n\n /** Função a executar */\n action: string;\n\n /** Separador após esta ação */\n separator?: boolean;\n\n /** Visibilidade condicional */\n visibleWhen?: string;\n}\n\nexport interface ConfirmationConfig {\n /** Configurações padrão de confirmação */\n default?: {\n title: string;\n message: string;\n confirmText: string;\n cancelText: string;\n };\n\n /** Configurações específicas por ação */\n specific?: { [actionId: string]: Partial<ConfirmationConfig['default']> };\n}\n\n// =============================================================================\n// ABA: BARRA DE FERRAMENTAS & AÇÕES - EXPORTAÇÃO\n// =============================================================================\n\nexport interface ExportConfig {\n /** Habilitar exportação */\n enabled: boolean;\n\n /** Formatos disponíveis */\n formats: ExportFormat[];\n\n /** Configurações por formato */\n excel?: ExcelExportConfig;\n pdf?: PdfExportConfig;\n csv?: CsvExportConfig;\n json?: JsonExportConfig;\n\n /** Configurações gerais */\n general?: GeneralExportConfig;\n\n /** Templates personalizados */\n templates?: ExportTemplate[];\n}\n\nexport type ExportFormat = 'excel' | 'pdf' | 'csv' | 'json' | 'print';\n\nexport interface GeneralExportConfig {\n /** Incluir cabeçalhos */\n includeHeaders: boolean;\n\n /** Incluir filtros aplicados na exportação */\n respectFilters: boolean;\n\n /** Incluir apenas linhas selecionadas */\n selectedRowsOnly?: boolean;\n\n /** Máximo de linhas para exportar */\n maxRows?: number;\n\n /** Nome do arquivo padrão */\n defaultFileName?: string;\n\n /** Colunas a incluir na exportação */\n includeColumns?: string[] | 'all' | 'visible';\n\n /** Aplicar formatações das colunas */\n applyFormatting: boolean;\n}\n\nexport interface ExcelExportConfig {\n /** Nome da planilha */\n sheetName: string;\n\n /** Incluir fórmulas nas células */\n includeFormulas: boolean;\n\n /** Congelar linha de cabeçalho */\n freezeHeaders: boolean;\n\n /** Auto-ajustar largura das colunas */\n autoFitColumns: boolean;\n\n /** Configurações de estilo */\n styling?: ExcelStylingConfig;\n\n /** Múltiplas planilhas */\n multipleSheets?: boolean;\n}\n\nexport interface ExcelStylingConfig {\n /** Estilo do cabeçalho */\n headerStyle?: {\n backgroundColor?: string;\n fontColor?: string;\n fontWeight?: 'bold' | 'normal';\n fontSize?: number;\n };\n\n /** Estilo das células */\n cellStyle?: {\n fontSize?: number;\n borderStyle?: 'thin' | 'medium' | 'thick';\n };\n\n /** Linhas alternadas */\n alternateRows?: {\n enabled: boolean;\n color?: string;\n };\n}\n\nexport interface PdfExportConfig {\n /** Orientação da página */\n orientation: 'portrait' | 'landscape';\n\n /** Tamanho da página */\n pageSize: 'A4' | 'A3' | 'Letter' | 'Legal';\n\n /** Margens da página */\n margins: MarginConfig;\n\n /** Cabeçalho do documento */\n header?: string;\n\n /** Rodapé do documento */\n footer?: string;\n\n /** Marca d'água */\n watermark?: string;\n\n /** Configurações de fonte */\n font?: {\n family?: string;\n size?: number;\n };\n\n /** Quebra de página automática */\n autoPageBreak: boolean;\n}\n\nexport interface MarginConfig {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface CsvExportConfig {\n /** Separador de campos */\n delimiter: ',' | ';' | '|' | '\\t';\n\n /** Caractere de escape */\n escapeChar: string;\n\n /** Encoding do arquivo */\n encoding: 'utf-8' | 'utf-16' | 'iso-8859-1';\n\n /** Incluir BOM */\n includeBOM: boolean;\n}\n\nexport interface JsonExportConfig {\n /** Formato do JSON */\n format: 'pretty' | 'compact';\n\n /** Incluir metadados */\n includeMetadata: boolean;\n\n /** Estrutura dos dados */\n structure: 'array' | 'object';\n}\n\nexport interface ExportTemplate {\n /** ID único do template */\n id: string;\n\n /** Nome do template */\n name: string;\n\n /** Descrição */\n description?: string;\n\n /** Formato do template */\n format: ExportFormat;\n\n /** Configurações específicas */\n config: any;\n\n /** Template padrão do sistema */\n isDefault?: boolean;\n}\n\n// =============================================================================\n// ABA: MENSAGENS & LOCALIZAÇÃO\n// =============================================================================\n\nexport interface MessagesConfig {\n /** Mensagens de estado */\n states?: StateMessagesConfig;\n\n /** Mensagens de ações */\n actions?: ActionMessagesConfig;\n\n /** Mensagens de validação */\n validation?: ValidationMessagesConfig;\n\n /** Mensagens de exportação */\n export?: ExportMessagesConfig;\n\n /** Mensagens customizadas */\n custom?: { [key: string]: string };\n\n /** Templates de mensagem com interpolação */\n templates?: MessageTemplate[];\n}\n\nexport interface StateMessagesConfig {\n /** Carregando dados */\n loading: string;\n\n /** Nenhum dado disponível */\n empty: string;\n\n /** Erro ao carregar */\n error: string;\n\n /** Nenhum resultado encontrado */\n noResults: string;\n\n /** Carregando mais dados */\n loadingMore: string;\n\n /** Mensagens dinâmicas com contador */\n dynamic?: {\n /** Função para mensagem de loading com contagem */\n loadingWithCount?: (count: number) => string;\n /** Função para estado vazio com filtros */\n emptyWithFilter?: (filterCount: number) => string;\n /** Função para resultado de busca */\n searchResults?: (resultCount: number, searchTerm: string) => string;\n };\n}\n\nexport interface ActionMessagesConfig {\n /** Mensagens de confirmação */\n confirmations?: {\n delete: string;\n deleteMultiple: string;\n save: string;\n cancel: string;\n export: string;\n };\n\n /** Mensagens de sucesso */\n success?: {\n save: string;\n delete: string;\n export: string;\n import: string;\n };\n\n /** Mensagens de progresso */\n progress?: {\n delete: string;\n deleteMultiple: string;\n };\n\n /** Mensagens de cancelamento */\n canceled?: {\n delete: string;\n deleteMultiple: string;\n };\n\n /** Mensagens de erro */\n errors?: {\n save: string;\n delete: string;\n export: string;\n network: string;\n permission: string;\n };\n}\n\nexport interface ValidationMessagesConfig {\n /** Mensagens de validação de dados */\n required: string;\n invalid: string;\n tooLong: string;\n tooShort: string;\n\n /** Mensagens específicas por tipo */\n types?: {\n email: string;\n url: string;\n number: string;\n date: string;\n };\n}\n\nexport interface ExportMessagesConfig {\n /** Iniciando exportação */\n starting: string;\n\n /** Processando dados */\n processing: string;\n\n /** Download pronto */\n ready: string;\n\n /** Erro na exportação */\n error: string;\n\n /** Mensagens por formato */\n formats?: {\n excel: string;\n pdf: string;\n csv: string;\n json: string;\n };\n}\n\nexport interface MessageTemplate {\n /** ID único do template */\n id: string;\n\n /** Template da mensagem com placeholders */\n template: string;\n\n /** Variáveis disponíveis */\n variables?: string[];\n\n /** Função de interpolação customizada */\n interpolate?: (template: string, data: any) => string;\n}\n\nexport interface LocalizationConfig {\n /** Idioma principal */\n locale: string;\n\n /** Idiomas disponíveis */\n availableLocales?: string[];\n\n /** Direção do texto */\n direction: 'ltr' | 'rtl';\n\n /** Configurações de data/hora */\n dateTime?: DateTimeLocaleConfig;\n\n /** Configurações de números */\n number?: NumberLocaleConfig;\n\n /** Configurações de moeda */\n currency?: CurrencyLocaleConfig;\n\n /** Dicionário de traduções */\n translations?: { [locale: string]: { [key: string]: string } };\n\n /** Configurações de formatação */\n formatting?: FormattingLocaleConfig;\n}\n\nexport interface DateTimeLocaleConfig {\n /** Formato de data padrão */\n dateFormat: string;\n\n /** Formato de hora padrão */\n timeFormat: string;\n\n /** Formato de data e hora */\n dateTimeFormat: string;\n\n /** Primeiro dia da semana (0 = domingo) */\n firstDayOfWeek: number;\n\n /** Nomes dos meses */\n monthNames?: string[];\n\n /** Nomes dos dias da semana */\n dayNames?: string[];\n\n /** Formato relativo (há 2 dias) */\n relativeTime?: boolean;\n}\n\nexport interface NumberLocaleConfig {\n /** Separador decimal */\n decimalSeparator: string;\n\n /** Separador de milhares */\n thousandsSeparator: string;\n\n /** Número de casas decimais padrão */\n defaultPrecision: number;\n\n /** Símbolo de negativo */\n negativeSign: string;\n\n /** Posição do símbolo de negativo */\n negativeSignPosition: 'before' | 'after';\n}\n\nexport interface CurrencyLocaleConfig {\n /** Código da moeda (ISO 4217) */\n code: string;\n\n /** Símbolo da moeda */\n symbol: string;\n\n /** Posição do símbolo */\n position: 'before' | 'after';\n\n /** Espaço entre símbolo e valor */\n spacing: boolean;\n\n /** Precisão padrão */\n precision: number;\n}\n\nexport interface FormattingLocaleConfig {\n /** Formato de porcentagem */\n percentageFormat: string;\n\n /** Formato de arquivos/tamanhos */\n fileSizeFormat: 'binary' | 'decimal';\n\n /** Unidades de medida */\n units?: {\n [type: string]: {\n [unit: string]: string;\n };\n };\n}\n\n// =============================================================================\n// CONFIGURAÇÕES AVANÇADAS\n// =============================================================================\n\nexport interface DataConfig {\n /** Estratégia de carregamento */\n loadingStrategy: 'eager' | 'lazy' | 'on-demand';\n\n /** Configurações de cache */\n cache?: CacheConfig;\n\n /** Configurações de sincronização */\n sync?: SyncConfig;\n\n /** Configurações de validação */\n validation?: DataValidationConfig;\n\n /** Transformações de dados */\n transformations?: DataTransformation[];\n\n /** Configurações de polling */\n polling?: PollingConfig;\n}\n\nexport interface CacheConfig {\n /** Habilitar cache */\n enabled: boolean;\n\n /** Tempo de vida do cache (ms) */\n ttl: number;\n\n /** Tamanho máximo do cache */\n maxSize: number;\n\n /** Estratégia de invalidação */\n invalidationStrategy: 'ttl' | 'manual' | 'on-update';\n}\n\nexport interface SyncConfig {\n /** Sincronização automática */\n autoSync: boolean;\n\n /** Intervalo de sincronização (ms) */\n interval: number;\n\n /** Sincronizar apenas mudanças */\n deltaSync: boolean;\n\n /** Resolver conflitos */\n conflictResolution: 'client' | 'server' | 'manual';\n}\n\nexport interface DataValidationConfig {\n /** Validação no cliente */\n clientSide: boolean;\n\n /** Validação no servidor */\n serverSide: boolean;\n\n /** Regras de validação */\n rules?: ValidationRule[];\n\n /** Mostrar erros inline */\n showInlineErrors: boolean;\n}\n\nexport interface ValidationRule {\n /** Campo a validar */\n field: string;\n\n /** Tipo de validação */\n type: 'required' | 'format' | 'range' | 'custom';\n\n /** Parâmetros da validação */\n params?: any;\n\n /** Mensagem de erro */\n message: string;\n}\n\nexport interface DataTransformation {\n /** ID da transformação */\n id: string;\n\n /** Campo a transformar */\n field: string;\n\n /** Tipo de transformação */\n type: 'format' | 'calculate' | 'aggregate' | 'custom';\n\n /** Função de transformação */\n transform: string;\n\n /** Aplicar na exibição ou nos dados */\n applyTo: 'display' | 'data' | 'both';\n}\n\nexport interface PollingConfig {\n /** Habilitar polling */\n enabled: boolean;\n\n /** Intervalo de polling (ms) */\n interval: number;\n\n /** Polling apenas quando ativo */\n onlyWhenActive: boolean;\n\n /** Backoff exponencial em caso de erro */\n exponentialBackoff: boolean;\n}\n\nexport interface ThemeConfig {\n /** Tema principal */\n primary?: string;\n\n /** Tema secundário */\n secondary?: string;\n\n /** Modo escuro */\n darkMode?: boolean;\n\n /** Tema customizado */\n custom?: {\n [property: string]: string;\n };\n\n /** Variáveis CSS personalizadas */\n cssVariables?: {\n [variable: string]: string;\n };\n}\n\nexport interface PerformanceConfig {\n /** Configurações de virtualização */\n virtualization?: VirtualizationConfig;\n\n /** Configurações de debounce */\n debounce?: DebounceConfig;\n\n /** Configurações de memória */\n memory?: MemoryConfig;\n\n /** Otimizações de renderização */\n rendering?: RenderingConfig;\n\n /** Lazy loading de recursos */\n lazyLoading?: LazyLoadingConfig;\n}\n\nexport interface DebounceConfig {\n /** Debounce para busca (ms) */\n search: number;\n\n /** Debounce para filtros (ms) */\n filter: number;\n\n /** Debounce para redimensionamento (ms) */\n resize: number;\n\n /** Debounce para scroll (ms) */\n scroll: number;\n}\n\nexport interface MemoryConfig {\n /** Máximo de linhas em memória */\n maxRows: number;\n\n /** Limpeza automática */\n autoCleanup: boolean;\n\n /** Intervalo de limpeza (ms) */\n cleanupInterval: number;\n}\n\nexport interface RenderingConfig {\n /** Usar requestAnimationFrame */\n useRAF: boolean;\n\n /** Batch de updates */\n batchUpdates: boolean;\n\n /** Tamanho do batch */\n batchSize: number;\n\n /** Otimizar re-renders */\n optimizeReRenders: boolean;\n}\n\nexport interface LazyLoadingConfig {\n /** Lazy loading de imagens */\n images: boolean;\n\n /** Lazy loading de componentes */\n components: boolean;\n\n /** Distância para carregar (px) */\n threshold: number;\n}\n\nexport interface PluginConfig {\n /** ID único do plugin */\n id: string;\n\n /** Nome do plugin */\n name: string;\n\n /** Versão do plugin */\n version: string;\n\n /** Plugin habilitado */\n enabled: boolean;\n\n /** Configurações específicas do plugin */\n settings?: any;\n\n /** Hooks do plugin */\n hooks?: {\n [eventName: string]: string;\n };\n}\n\nexport interface AccessibilityConfig {\n /** Habilitar recursos de acessibilidade */\n enabled: boolean;\n\n /** Anúncios para screen readers */\n announcements?: AnnouncementConfig;\n\n /** Navegação por teclado */\n keyboard?: KeyboardAccessibilityConfig;\n\n /** Contraste alto */\n highContrast?: boolean;\n\n /** Reduzir movimento */\n reduceMotion?: boolean;\n\n /** Labels ARIA personalizados */\n ariaLabels?: { [key: string]: string };\n}\n\nexport interface AnnouncementConfig {\n /** Anunciar mudanças de dados */\n dataChanges: boolean;\n\n /** Anunciar ações do usuário */\n userActions: boolean;\n\n /** Anunciar estados de carregamento */\n loadingStates: boolean;\n\n /** Região live para anúncios */\n liveRegion: 'polite' | 'assertive';\n}\n\nexport interface KeyboardAccessibilityConfig {\n /** Navegação com Tab */\n tabNavigation: boolean;\n\n /** Navegação com setas */\n arrowNavigation: boolean;\n\n /** Atalhos de teclado */\n shortcuts: boolean;\n\n /** Skip links */\n skipLinks: boolean;\n\n /** Focus trap em modais */\n focusTrap: boolean;\n}\n\n// =============================================================================\n// NOVA INTERFACE PRINCIPAL - MODULAR E EXTENSÍVEL\n// =============================================================================\n\n/**\n * Configuração principal da tabela - Nova arquitetura v2.0\n * Estrutura modular alinhada com as 5 abas do editor\n * Preparada para crescimento exponencial\n */\nexport interface TableConfigV2 {\n /** Metadados da configuração */\n meta?: ConfigMetadata;\n\n /** Definições de colunas */\n columns: ColumnDefinition[];\n\n /** Comportamento geral da tabela (Aba: Visão Geral & Comportamento) */\n behavior?: TableBehaviorConfig;\n\n /** Configurações de aparência e layout (Aba: Visão Geral & Comportamento) */\n appearance?: TableAppearanceConfig;\n\n /** Barra de ferramentas (Aba: Barra de Ferramentas & Ações) */\n toolbar?: ToolbarConfig;\n\n /** Ações por linha e em lote (Aba: Barra de Ferramentas & Ações) */\n actions?: TableActionsConfig;\n\n /** Configurações de exportação (Aba: Barra de Ferramentas & Ações) */\n export?: ExportConfig;\n\n /** Mensagens personalizadas (Aba: Mensagens & Localização) */\n messages?: MessagesConfig;\n\n /** Localização e i18n (Aba: Mensagens & Localização) */\n localization?: LocalizationConfig;\n\n /** Configurações avançadas de dados */\n data?: DataConfig;\n\n /** Temas e customização visual */\n theme?: ThemeConfig;\n\n /** Configurações de performance */\n performance?: PerformanceConfig;\n\n /** Plugins e extensões */\n plugins?: PluginConfig[];\n\n /** Configurações de acessibilidade */\n accessibility?: AccessibilityConfig;\n\n /**\n * Regras de estilo condicionais aplicadas à linha inteira (escopo global)\n */\n rowConditionalStyles?: Array<{\n condition: string;\n cssClass?: string;\n style?: { [key: string]: string };\n description?: string;\n }>;\n\n /** Estado serializado do construtor para regras de linha (round‑trip) */\n _rowStyleRulesState?: any;\n}\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Type guard to check if config is V2\n */\nexport function isTableConfigV2(config: any): config is TableConfigV2 {\n return (\n config &&\n typeof config === 'object' &&\n Array.isArray(config.columns) &&\n (!config.meta || config.meta.version === '2.0.0' || !config.meta.version)\n );\n}\n","// =============================================================================\n// PRAXIS TABLE CONFIG - UNIFIED ARCHITECTURE\n// =============================================================================\n\n/**\n * Re-export da arquitetura unificada V2\n * Esta é agora a única interface suportada para TableConfig\n */\nexport * from './table-config-v2.model';\n\n// Alias para a interface principal - sempre usa a estrutura V2\nexport type TableConfig = import('./table-config-v2.model').TableConfigV2;\n\n// Re-export dos tipos principais com nomes simplificados\nexport type {\n TableConfigV2 as TableConfigModern,\n ColumnDefinition,\n ConfigMetadata,\n TableBehaviorConfig,\n TableAppearanceConfig,\n ToolbarConfig,\n TableActionsConfig,\n ExportConfig,\n MessagesConfig,\n LocalizationConfig,\n DataConfig,\n ThemeConfig,\n PerformanceConfig,\n PluginConfig,\n AccessibilityConfig,\n\n // Behavior sub-configs\n PaginationConfig,\n SortingConfig,\n FilteringConfig,\n SelectionConfig,\n InteractionConfig,\n ResizingConfig,\n DraggingConfig,\n\n // Appearance sub-configs\n BorderConfig,\n ElevationConfig,\n SpacingConfig,\n TypographyConfig,\n\n // Toolbar sub-configs\n ToolbarLayoutConfig,\n ToolbarFilterConfig,\n ToolbarSettingsConfig,\n\n // Actions sub-configs\n RowActionsConfig,\n BulkActionsConfig,\n\n // Messages sub-configs\n StateMessagesConfig,\n ActionMessagesConfig,\n ValidationMessagesConfig,\n\n // Localization sub-configs\n DateTimeLocaleConfig,\n NumberLocaleConfig,\n CurrencyLocaleConfig,\n FormattingLocaleConfig,\n\n // Export sub-configs\n GeneralExportConfig,\n CsvExportConfig,\n ExcelExportConfig,\n PdfExportConfig,\n\n // Performance sub-configs\n VirtualizationConfig,\n LazyLoadingConfig,\n\n // Accessibility sub-configs\n KeyboardAccessibilityConfig,\n} from './table-config-v2.model';\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Cria uma configuração padrão para TableConfig\n */\nexport function createDefaultTableConfig(): TableConfig {\n return {\n meta: {\n version: '2.0.0',\n name: 'Default Table',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n },\n columns: [],\n behavior: {\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [5, 10, 25, 50],\n showFirstLastButtons: true,\n showPageNumbers: true,\n showPageInfo: true,\n position: 'bottom',\n style: 'default',\n strategy: 'client',\n },\n sorting: {\n enabled: true,\n multiSort: false,\n strategy: 'client',\n showSortIndicators: true,\n indicatorPosition: 'end',\n allowClearSort: true,\n },\n filtering: {\n enabled: true,\n strategy: 'client',\n debounceTime: 300,\n columnFilters: {\n enabled: false,\n defaultType: 'text',\n position: 'header',\n },\n advancedFilters: {\n enabled: false,\n },\n },\n selection: {\n enabled: false,\n type: 'single',\n mode: 'checkbox',\n allowSelectAll: true,\n checkboxPosition: 'start',\n persistSelection: false,\n persistOnDataUpdate: false,\n },\n interaction: {\n rowClick: {\n enabled: true,\n action: 'select',\n },\n // hoverHighlight: {\n // enabled: true,\n // style: 'background'\n // },\n // cellClick: {\n // enabled: false\n // } // Property doesn't exist in InteractionConfig\n },\n resizing: {\n enabled: false,\n autoFit: false,\n persistWidths: true,\n minColumnWidth: 50,\n maxColumnWidth: 500,\n },\n dragging: {\n columns: false,\n rows: false,\n showDragIndicator: false,\n },\n },\n appearance: {\n density: 'comfortable',\n borders: {\n showRowBorders: true,\n showColumnBorders: false,\n showOuterBorder: true,\n style: 'solid',\n width: 1,\n color: '#e0e0e0',\n },\n elevation: {\n level: 1,\n shadowColor: 'rgba(0, 0, 0, 0.1)',\n },\n spacing: {\n cellPadding: '8px 16px',\n headerPadding: '12px 16px',\n // verticalGap: '0px' // Property doesn't exist\n },\n typography: {\n headerFontWeight: '500',\n fontWeight: '400',\n fontSize: '14px',\n headerFontSize: '14px',\n },\n },\n toolbar: {\n visible: false,\n position: 'top',\n },\n actions: {\n row: {\n enabled: true,\n position: 'end',\n width: '120px',\n display: 'icons',\n trigger: 'hover',\n actions: [\n {\n id: 'view',\n label: 'Visualizar',\n icon: 'visibility',\n action: 'view',\n },\n { id: 'edit', label: 'Editar', icon: 'edit', action: 'edit' },\n {\n id: 'delete',\n label: 'Excluir',\n icon: 'delete',\n action: 'delete',\n autoDelete: false,\n },\n ],\n },\n bulk: {\n enabled: false,\n position: 'toolbar',\n actions: [],\n },\n },\n export: {\n enabled: false,\n formats: ['csv', 'excel'],\n // defaultFormat: 'csv' // Property doesn't exist in ExportConfig\n },\n messages: {\n states: {\n loading: 'Carregando...',\n empty: 'Nenhum dado disponível',\n error: 'Erro ao carregar dados',\n noResults: 'Nenhum resultado encontrado',\n loadingMore: 'Carregando mais dados...',\n },\n },\n localization: {\n locale: 'pt-BR',\n direction: 'ltr',\n },\n // data: {\n // source: 'local',\n // strategy: 'client'\n // },\n performance: {\n virtualization: {\n enabled: false,\n itemHeight: 48,\n bufferSize: 10,\n minContainerHeight: 200,\n strategy: 'fixed',\n },\n lazyLoading: {\n threshold: 100,\n images: true,\n components: true,\n },\n },\n accessibility: {\n enabled: true,\n announcements: {\n dataChanges: true,\n userActions: true,\n loadingStates: true,\n liveRegion: 'polite',\n },\n keyboard: {\n shortcuts: true,\n tabNavigation: true,\n arrowNavigation: true,\n skipLinks: false,\n focusTrap: false,\n },\n highContrast: false,\n reduceMotion: false,\n },\n };\n}\n\n/**\n * Valida se uma configuração TableConfig é válida\n */\nexport function isValidTableConfig(config: any): config is TableConfig {\n return (\n config &&\n typeof config === 'object' &&\n Array.isArray(config.columns) &&\n (!config.meta || typeof config.meta === 'object')\n );\n}\n\n/**\n * Clona profundamente uma configuração TableConfig\n */\nexport function cloneTableConfig(config: TableConfig): TableConfig {\n return JSON.parse(JSON.stringify(config));\n}\n\n/**\n * Merge duas configurações TableConfig, priorizando a segunda\n */\nexport function mergeTableConfigs(\n base: TableConfig,\n override: Partial<TableConfig>,\n): TableConfig {\n const cloned = cloneTableConfig(base);\n return {\n ...cloned,\n ...override,\n meta: {\n ...cloned.meta,\n ...override.meta,\n updatedAt: new Date().toISOString(),\n },\n columns: override.columns || cloned.columns,\n behavior: override.behavior\n ? {\n ...cloned.behavior,\n ...override.behavior,\n }\n : cloned.behavior,\n appearance: override.appearance\n ? {\n ...cloned.appearance,\n ...override.appearance,\n }\n : cloned.appearance,\n toolbar: override.toolbar\n ? {\n ...cloned.toolbar,\n ...override.toolbar,\n }\n : cloned.toolbar,\n actions: override.actions\n ? {\n ...cloned.actions,\n ...override.actions,\n }\n : cloned.actions,\n messages: override.messages\n ? {\n ...cloned.messages,\n ...override.messages,\n }\n : cloned.messages,\n localization: override.localization\n ? {\n ...cloned.localization,\n ...override.localization,\n }\n : cloned.localization,\n };\n}\n\n/**\n * Extrai apenas as configurações essenciais para compatibilidade\n */\nexport function getEssentialConfig(config: TableConfig): Partial<TableConfig> {\n return {\n columns: config.columns,\n behavior: {\n pagination: config.behavior?.pagination,\n sorting: config.behavior?.sorting,\n filtering: config.behavior?.filtering,\n selection: config.behavior?.selection,\n },\n toolbar: config.toolbar,\n actions: config.actions,\n messages: config.messages,\n };\n}\n\n// =============================================================================\n// DEPRECATED EXPORTS (For gradual migration)\n// =============================================================================\n\n/**\n * @deprecated Use TableConfig instead\n */\nexport type LegacyTableConfig = TableConfig;\n\n/**\n * @deprecated Use createDefaultTableConfig instead\n */\nexport const DEFAULT_TABLE_CONFIG = createDefaultTableConfig();\n","/**\n * Serviço Unificado de Configuração de Tabela\n * Gerencia configurações usando apenas a arquitetura modular V2\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { \n TableConfig,\n ColumnDefinition,\n createDefaultTableConfig,\n isValidTableConfig,\n cloneTableConfig,\n mergeTableConfigs\n} from '../models/table-config.model';\n\nexport interface TableConfigState {\n config: TableConfig;\n isLoading: boolean;\n error?: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TableConfigService {\n \n private readonly _state$: BehaviorSubject<TableConfigState>;\n public readonly state$: Observable<TableConfigState>;\n\n constructor() {\n // Initialize with default configuration\n this._state$ = new BehaviorSubject<TableConfigState>({\n config: createDefaultTableConfig(),\n isLoading: false\n });\n \n this.state$ = this._state$.asObservable();\n }\n\n /**\n * Obtém o estado atual da configuração\n */\n get currentState(): TableConfigState {\n return this._state$.value;\n }\n\n /**\n * Obtém a configuração atual\n */\n get currentConfig(): TableConfig {\n return this.currentState.config;\n }\n\n /**\n * Observable da configuração atual\n */\n get config$(): Observable<TableConfig> {\n return this.state$.pipe(\n map(state => state.config)\n );\n }\n\n /**\n * Carrega uma nova configuração\n */\n loadConfig(config: TableConfig): void {\n if (!isValidTableConfig(config)) {\n this.updateState({ \n error: 'Invalid table configuration provided',\n isLoading: false \n });\n return;\n }\n\n this.updateState({ \n config: cloneTableConfig(config),\n isLoading: false,\n error: undefined \n });\n }\n\n /**\n * Atualiza a configuração atual\n */\n updateConfig(configUpdate: Partial<TableConfig>): void {\n const currentConfig = this.currentConfig;\n const updatedConfig = mergeTableConfigs(currentConfig, configUpdate);\n \n this.updateState({ \n config: updatedConfig,\n error: undefined \n });\n }\n\n /**\n * Atualiza configuração de coluna específica\n */\n updateColumn(columnIndex: number, columnUpdate: Partial<ColumnDefinition>): void {\n const currentConfig = this.currentConfig;\n const updatedColumns = [...currentConfig.columns];\n \n if (columnIndex >= 0 && columnIndex < updatedColumns.length) {\n updatedColumns[columnIndex] = {\n ...updatedColumns[columnIndex],\n ...columnUpdate\n };\n \n this.updateConfig({ columns: updatedColumns });\n }\n }\n\n /**\n * Adiciona nova coluna\n */\n addColumn(column: ColumnDefinition): void {\n const currentConfig = this.currentConfig;\n const updatedColumns = [...currentConfig.columns, column];\n \n this.updateConfig({ columns: updatedColumns });\n }\n\n /**\n * Remove coluna por índice\n */\n removeColumn(columnIndex: number): void {\n const currentConfig = this.currentConfig;\n const updatedColumns = currentConfig.columns.filter((_, index) => index !== columnIndex);\n \n this.updateConfig({ columns: updatedColumns });\n }\n\n /**\n * Reordena colunas\n */\n reorderColumns(fromIndex: number, toIndex: number): void {\n const currentConfig = this.currentConfig;\n const updatedColumns = [...currentConfig.columns];\n \n if (fromIndex >= 0 && fromIndex < updatedColumns.length && \n toIndex >= 0 && toIndex < updatedColumns.length) {\n const [movedColumn] = updatedColumns.splice(fromIndex, 1);\n updatedColumns.splice(toIndex, 0, movedColumn);\n \n this.updateConfig({ columns: updatedColumns });\n }\n }\n\n /**\n * Obtém coluna por índice\n */\n getColumn(columnIndex: number): ColumnDefinition | undefined {\n const currentConfig = this.currentConfig;\n return currentConfig.columns[columnIndex];\n }\n\n /**\n * Obtém coluna por field\n */\n getColumnByField(field: string): ColumnDefinition | undefined {\n const currentConfig = this.currentConfig;\n return currentConfig.columns.find(col => col.field === field);\n }\n\n /**\n * Verifica se um recurso está habilitado\n */\n isFeatureEnabled(feature: keyof TableConfig): boolean {\n const config = this.currentConfig;\n \n switch (feature) {\n case 'behavior':\n return config.behavior !== undefined;\n case 'toolbar':\n return config.toolbar?.visible === true;\n case 'actions':\n return config.actions?.row?.enabled === true || config.actions?.bulk?.enabled === true;\n case 'export':\n return config.export?.enabled === true;\n case 'performance':\n return config.performance?.virtualization?.enabled === true || \n (config.performance?.lazyLoading?.threshold ?? 0) > 0;\n default:\n return config[feature] !== undefined;\n }\n }\n\n /**\n * Obtém configuração de paginação\n */\n getPaginationConfig() {\n return this.currentConfig.behavior?.pagination;\n }\n\n /**\n * Obtém configuração de ordenação\n */\n getSortingConfig() {\n return this.currentConfig.behavior?.sorting;\n }\n\n /**\n * Obtém configuração de filtragem\n */\n getFilteringConfig() {\n return this.currentConfig.behavior?.filtering;\n }\n\n /**\n * Obtém configuração de seleção\n */\n getSelectionConfig() {\n return this.currentConfig.behavior?.selection;\n }\n\n /**\n * Obtém configuração da toolbar\n */\n getToolbarConfig() {\n return this.currentConfig.toolbar;\n }\n\n /**\n * Obtém configuração de ações\n */\n getActionsConfig() {\n return this.currentConfig.actions;\n }\n\n /**\n * Obtém configuração de aparência\n */\n getAppearanceConfig() {\n return this.currentConfig.appearance;\n }\n\n /**\n * Obtém configuração de mensagens\n */\n getMessagesConfig() {\n return this.currentConfig.messages;\n }\n\n /**\n * Obtém configuração de localização\n */\n getLocalizationConfig() {\n return this.currentConfig.localization;\n }\n\n /**\n * Reset para configuração padrão\n */\n resetToDefault(): void {\n this.loadConfig(createDefaultTableConfig());\n }\n\n /**\n * Valida a configuração atual\n */\n validateCurrentConfig(): { isValid: boolean; errors: string[] } {\n const config = this.currentConfig;\n const errors: string[] = [];\n\n // Validação básica\n if (!isValidTableConfig(config)) {\n errors.push('Invalid table configuration structure');\n }\n\n // Validação de colunas\n if (!Array.isArray(config.columns)) {\n errors.push('Columns must be an array');\n } else {\n config.columns.forEach((column, index) => {\n if (!column.field) {\n errors.push(`Column at index ${index} is missing required 'field' property`);\n }\n if (!column.header) {\n errors.push(`Column at index ${index} is missing required 'header' property`);\n }\n });\n }\n\n // Validação de paginação\n const pagination = config.behavior?.pagination;\n if (pagination?.enabled && pagination.pageSize <= 0) {\n errors.push('Page size must be greater than 0');\n }\n\n return {\n isValid: errors.length === 0,\n errors\n };\n }\n\n /**\n * Exporta configuração como JSON\n */\n exportConfig(): string {\n return JSON.stringify(this.currentConfig, null, 2);\n }\n\n /**\n * Importa configuração de JSON\n */\n importConfig(jsonConfig: string): { success: boolean; error?: string } {\n try {\n const config = JSON.parse(jsonConfig);\n \n if (!isValidTableConfig(config)) {\n return { success: false, error: 'Invalid configuration format' };\n }\n\n this.loadConfig(config);\n return { success: true };\n } catch (error) {\n return { \n success: false, \n error: error instanceof Error ? error.message : 'Invalid JSON format' \n };\n }\n }\n\n /**\n * Clona a configuração atual\n */\n cloneCurrentConfig(): TableConfig {\n return cloneTableConfig(this.currentConfig);\n }\n\n /**\n * Atualiza o estado interno\n */\n private updateState(stateUpdate: Partial<TableConfigState>): void {\n const currentState = this.currentState;\n const newState = { ...currentState, ...stateUpdate };\n \n // Update metadata if config changed\n if (stateUpdate.config) {\n newState.config = {\n ...newState.config,\n meta: {\n ...newState.config.meta,\n updatedAt: new Date().toISOString()\n }\n };\n }\n \n this._state$.next(newState);\n }\n\n /**\n * Obtém estatísticas da configuração atual\n */\n getConfigurationStats() {\n const config = this.currentConfig;\n \n return {\n totalColumns: config.columns.length,\n visibleColumns: config.columns.filter(col => col.visible !== false).length,\n sortableColumns: config.columns.filter(col => col.sortable !== false).length,\n filterableColumns: config.columns.filter(col => (col as any).filterable === true).length,\n stickyColumns: config.columns.filter(col => col.sticky).length,\n hasToolbar: config.toolbar?.visible === true,\n hasRowActions: config.actions?.row?.enabled === true,\n hasBulkActions: config.actions?.bulk?.enabled === true,\n hasPagination: config.behavior?.pagination?.enabled === true,\n hasSorting: config.behavior?.sorting?.enabled === true,\n hasFiltering: config.behavior?.filtering?.enabled === true,\n hasSelection: config.behavior?.selection?.enabled === true,\n hasExport: config.export?.enabled === true,\n hasVirtualScroll: config.performance?.virtualization?.enabled === true,\n hasLazyLoading: (config.performance?.lazyLoading?.threshold ?? 0) > 0\n };\n }\n}","import { TableConfigV2, ColumnDefinition } from '../models/table-config-v2.model';\nimport { FieldDefinition } from '../models/field-definition.model';\n\nexport function buildBaseColumnFromDef(def: FieldDefinition): ColumnDefinition {\n return {\n field: def.name,\n header: def.label || def.name,\n type: inferType(def),\n visible: def.tableHidden === true ? false : true,\n sortable: def.sortable !== false,\n filterable: def.filterable === true,\n resizable: true,\n order: typeof def.order === 'number' ? def.order : undefined,\n } as ColumnDefinition;\n}\n\nexport function applyLocalCustomizations(baseCol: ColumnDefinition, localCol: ColumnDefinition): ColumnDefinition {\n // Server-authoritative keys\n const result: ColumnDefinition = {\n ...baseCol,\n field: baseCol.field,\n header: baseCol.header, // label comes from server\n type: baseCol.type, // type comes from server (authoritative)\n sortable: baseCol.sortable,\n } as ColumnDefinition;\n\n // Merge presentation/customization from local, keeping user's preferences\n // and only cleaning conflicting ones if server type changed.\n const typeChanged = localCol.type && baseCol.type && localCol.type !== baseCol.type;\n\n result.width = localCol.width ?? baseCol.width;\n result.visible = localCol.visible ?? baseCol.visible;\n result.filterable = localCol.filterable ?? baseCol.filterable;\n result.resizable = localCol.resizable ?? baseCol.resizable;\n result.sticky = localCol.sticky ?? baseCol.sticky;\n result.align = localCol.align ?? baseCol.align;\n result.order = localCol.order ?? baseCol.order;\n result.sortField = localCol.sortField ?? baseCol.sortField;\n result.style = localCol.style ?? baseCol.style;\n result.headerStyle = localCol.headerStyle ?? baseCol.headerStyle;\n result.cssClass = localCol.cssClass ?? baseCol.cssClass;\n result.headerCssClass = localCol.headerCssClass ?? baseCol.headerCssClass;\n\n // If server type changed, drop potentially incompatible formatting/renderers.\n if (!typeChanged) {\n result.format = localCol.format ?? baseCol.format;\n result.valueMapping = localCol.valueMapping ?? baseCol.valueMapping;\n result.renderer = localCol.renderer ?? baseCol.renderer;\n } else {\n // Keep no format/renderer to avoid conflicts with server type\n result.format = undefined;\n result.valueMapping = undefined;\n result.renderer = undefined;\n }\n\n return result;\n}\n\nexport function reconcileTableConfig(layout: TableConfigV2, serverDefs: FieldDefinition[]): TableConfigV2 {\n const local = layout || { columns: [] } as TableConfigV2;\n const localByField = new Map((local.columns || []).map((c) => [c.field, c] as const));\n\n const baseColumns = serverDefs.map(buildBaseColumnFromDef);\n\n const mergedColumns: ColumnDefinition[] = baseColumns.map((base) => {\n const localCol = localByField.get(base.field);\n return localCol ? applyLocalCustomizations(base, localCol) : base;\n });\n\n const serverFields = new Set(serverDefs.map((d) => d.name));\n const orphans = (local.columns || []).filter((c) => !serverFields.has(c.field));\n const hiddenOrphans = orphans.map((c) => ({ ...c, visible: false } as ColumnDefinition));\n\n const next: TableConfigV2 = {\n ...local,\n columns: [...mergedColumns, ...hiddenOrphans],\n meta: {\n ...local.meta,\n updatedAt: new Date().toISOString(),\n },\n };\n\n return next;\n}\n\nfunction inferType(def: FieldDefinition): ColumnDefinition['type'] | undefined {\n const t = (def.type || '').toLowerCase();\n if (t.includes('date')) return 'date';\n if (t.includes('bool')) return 'boolean';\n if (t.includes('number') || t.includes('int') || t.includes('decimal')) return 'number';\n return 'string';\n}\n","import { Inject, Injectable, InjectionToken, inject } from '@angular/core';\nimport { CONFIG_STORAGE, type ConfigStorage } from './config-storage.service';\n\nexport interface ConnectionConfigV1 {\n resourcePath: string;\n version: 1;\n updatedAt: string;\n origin?: 'quick-connect' | 'editor' | 'input';\n}\n\nexport interface ConnectionStorage {\n loadConnection(key: string): ConnectionConfigV1 | null;\n saveConnection(key: string, cfg: ConnectionConfigV1): void;\n clearConnection(key: string): void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LocalConnectionStorage implements ConnectionStorage {\n constructor(@Inject(CONFIG_STORAGE) private storage: ConfigStorage) {}\n\n loadConnection(key: string): ConnectionConfigV1 | null {\n try {\n return this.storage.loadConfig<ConnectionConfigV1>(key);\n } catch {\n return null;\n }\n }\n\n saveConnection(key: string, cfg: ConnectionConfigV1): void {\n try {\n this.storage.saveConfig(key, cfg);\n } catch {\n /* ignore */\n }\n }\n\n clearConnection(key: string): void {\n try {\n this.storage.clearConfig(key);\n } catch {\n /* ignore */\n }\n }\n}\n\nexport const CONNECTION_STORAGE = new InjectionToken<ConnectionStorage>(\n 'CONNECTION_STORAGE',\n {\n providedIn: 'root',\n factory: () => inject(LocalConnectionStorage),\n },\n);\n\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { FieldDefinition } from '../models/field-definition.model';\nimport { ValidatorOptions } from '../models/component-metadata.interface';\n\nexport interface BuiltValidators {\n validators: ValidatorFn[];\n asyncValidators: AsyncValidatorFn[];\n}\n\n// ----------------------- Utils -----------------------\nfunction toMessageError(key: string, base: any, message?: string): ValidationErrors {\n if (!message) return { [key]: base };\n return { [key]: { ...base, message } } as ValidationErrors;\n}\n\nexport function withMessage(validator: ValidatorFn, key: string, message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const res = validator(control);\n if (!res) return null;\n return toMessageError(key, (res as any)[key] ?? res, message);\n };\n}\n\n// ----------------------- Custom Validators -----------------------\nexport function urlValidator(message?: string): ValidatorFn {\n const urlRegex = /^(https?:\\/\\/)([\\w.-]+)(:[0-9]+)?(\\/[^\\s]*)?$/i;\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (value == null || value === '') return null;\n const valid = typeof value === 'string' && urlRegex.test(value.trim());\n return valid ? null : toMessageError('url', { url: true, actual: value }, message);\n };\n}\n\nexport function matchFieldValidator(otherField: string, message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const parent = control.parent as any;\n if (!parent || !otherField) return null;\n const other = parent.get?.(otherField);\n if (!other) return null;\n const ok = control.value === other.value;\n return ok ? null : toMessageError('matchField', { expectedField: otherField }, message);\n };\n}\n\nexport function minWordsValidator(minWords: number, message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (value == null || value === '') return null;\n const text = String(value).trim();\n const words = text ? text.split(/\\s+/).filter(Boolean) : [];\n const ok = words.length >= minWords;\n return ok ? null : toMessageError('minWords', { required: minWords, actual: words.length }, message);\n };\n}\n\nexport function requiredCheckedValidator(message?: string): ValidatorFn {\n return withMessage(Validators.requiredTrue, 'requiredTrue', message);\n}\n\nexport function fileTypeValidator(allowed: string[], message?: string): ValidatorFn {\n const normalized = (allowed || []).map((s) => String(s).toLowerCase());\n const hasExt = (s: string) => s.startsWith('.');\n const getExt = (name: string) => {\n const dot = name.lastIndexOf('.');\n return dot >= 0 ? name.substring(dot).toLowerCase() : '';\n };\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as File | File[] | null | undefined;\n if (!value) return null;\n const files = Array.isArray(value) ? value : [value];\n const invalid = files.find((f) => {\n const type = (f as any).type ? String((f as any).type).toLowerCase() : '';\n const ext = (f as any).name ? getExt(String((f as any).name)) : '';\n return !normalized.some((a) => (hasExt(a) ? a === ext : a === type));\n });\n return invalid ? toMessageError('fileType', { allowed }, message) : null;\n };\n}\n\nexport function maxFileSizeValidator(maxBytes: number, message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as File | File[] | null | undefined;\n if (!value) return null;\n const files = Array.isArray(value) ? value : [value];\n const tooBig = files.find((f) => (f as any).size > maxBytes);\n return tooBig ? toMessageError('maxFileSize', { max: maxBytes }, message) : null;\n };\n}\n\nexport function uniqueAsyncValidator(\n fn: (value: any, model?: any) => boolean | Promise<boolean>,\n message?: string,\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise<ValidationErrors | null> => {\n const value = control.value;\n const model = (control.root as any)?.value;\n try {\n const ok = await Promise.resolve(fn(value, model));\n return ok ? null : toMessageError('unique', { unique: false }, message);\n } catch (e) {\n return toMessageError('unique', { error: true }, message);\n }\n };\n}\n\nexport function conditionalAsyncValidator(\n fn: (value: any, model?: any) => boolean | string | Promise<boolean | string>,\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise<ValidationErrors | null> => {\n const result = await Promise.resolve(fn(control.value, (control.root as any)?.value));\n if (result === true) return null;\n if (result === false) return { conditionalValidation: true };\n if (typeof result === 'string') return { conditionalValidation: { message: result } } as any;\n return null;\n };\n}\n\nexport function customValidatorFn(\n fn: (value: any, model?: any) => boolean | string | null,\n key = 'custom',\n): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const result = fn(control.value, (control.root as any)?.value);\n if (result === true || result === null) return null;\n if (result === false) return { [key]: true } as any;\n return { [key]: { message: result as string } } as any;\n };\n}\n\nexport function customAsyncValidatorFn(\n fn: (value: any, model?: any) => Promise<boolean | string | null>,\n key = 'customAsync',\n): AsyncValidatorFn {\n return async (control: AbstractControl): Promise<ValidationErrors | null> => {\n const result = await fn(control.value, (control.root as any)?.value);\n if (result === true || result === null) return null;\n if (result === false) return { [key]: true } as any;\n return { [key]: { message: result as string } } as any;\n };\n}\n\n// Debounce wrapper for async validators per-control instance\nexport function debounceAsyncValidator(validator: AsyncValidatorFn, waitMs: number): AsyncValidatorFn {\n let timer: any;\n let lastReject: ((reason?: any) => void) | null = null;\n return (control) => {\n if (lastReject) {\n // cancel previous pending promise by rejecting it (optional)\n lastReject();\n lastReject = null;\n }\n return new Promise<ValidationErrors | null>((resolve, reject) => {\n lastReject = reject;\n clearTimeout(timer);\n timer = setTimeout(async () => {\n try {\n const res = await validator(control);\n resolve(res);\n } catch (e) {\n resolve({ asyncError: true } as any);\n } finally {\n lastReject = null;\n }\n }, Math.max(0, waitMs || 0));\n });\n };\n}\n\n// ----------------------- Conditional rules (metadata) -----------------------\nfunction composeConditionalValidators(rules: NonNullable<ValidatorOptions['conditionalValidation']>): { sync?: ValidatorFn; async?: AsyncValidatorFn } {\n // Build per-rule validators once\n const built = rules.map((r) => buildValidatorsFromValidatorOptions(r.validators));\n\n const sync: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const model = (control.root as any)?.value;\n let errors: ValidationErrors | null = null;\n rules.forEach((rule, idx) => {\n if (rule.condition(model)) {\n for (const vf of built[idx].validators) {\n const res = vf(control);\n if (res) errors = { ...(errors ?? {}), ...res };\n }\n }\n });\n return errors;\n };\n\n const asyncV: AsyncValidatorFn = async (control: AbstractControl): Promise<ValidationErrors | null> => {\n const model = (control.root as any)?.value;\n let errors: ValidationErrors | null = null;\n for (let idx = 0; idx < rules.length; idx++) {\n const rule = rules[idx];\n if (!rule.condition(model)) continue;\n const avs = built[idx].asyncValidators;\n for (const av of avs) {\n const res = await av(control);\n if (res) errors = { ...(errors ?? {}), ...res };\n }\n }\n return errors;\n };\n\n return { sync, async: asyncV };\n}\n\n// ----------------------- Custom CPF/CNPJ Validators -----------------------\n\nfunction cleanNumbers(value: string | null | undefined): string {\n return (value || '').replace(/\\D/g, '');\n}\n\nfunction cleanAlphanumeric(value: string | null | undefined): string {\n return (value || '').replace(/[^A-Z0-9]/ig, '').toUpperCase();\n}\n\nfunction isBlockedSequence(value: string): boolean {\n return /^(.)\\1+$/.test(value);\n}\n\n// --- Legacy (Numeric) Validators ---\n\nfunction isValidLegacyCpf(cpf: string): boolean {\n const cleaned = cleanNumbers(cpf);\n if (cleaned.length !== 11 || isBlockedSequence(cleaned)) {\n return false;\n }\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += parseInt(cleaned.charAt(i), 10) * (10 - i);\n }\n let remainder = (sum * 10) % 11;\n if (remainder === 10 || remainder === 11) remainder = 0;\n if (remainder !== parseInt(cleaned.charAt(9), 10)) return false;\n\n sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += parseInt(cleaned.charAt(i), 10) * (11 - i);\n }\n remainder = (sum * 10) % 11;\n if (remainder === 10 || remainder === 11) remainder = 0;\n if (remainder !== parseInt(cleaned.charAt(10), 10)) return false;\n\n return true;\n}\n\nfunction isValidLegacyCnpj(cnpj: string): boolean {\n const cleaned = cleanNumbers(cnpj);\n if (cleaned.length !== 14 || isBlockedSequence(cleaned)) {\n return false;\n }\n let sum = 0;\n let weight = 5;\n for (let i = 0; i < 12; i++) {\n sum += parseInt(cleaned.charAt(i), 10) * weight;\n weight = weight === 2 ? 9 : weight - 1;\n }\n let remainder = sum % 11;\n let digit = remainder < 2 ? 0 : 11 - remainder;\n if (digit !== parseInt(cleaned.charAt(12), 10)) return false;\n\n sum = 0;\n weight = 6;\n for (let i = 0; i < 13; i++) {\n sum += parseInt(cleaned.charAt(i), 10) * weight;\n weight = weight === 2 ? 9 : weight - 1;\n }\n remainder = sum % 11;\n digit = remainder < 2 ? 0 : 11 - remainder;\n if (digit !== parseInt(cleaned.charAt(13), 10)) return false;\n\n return true;\n}\n\nexport function legacyCpfValidator(message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (value == null || value === '') return null;\n return isValidLegacyCpf(value) ? null : toMessageError('cpf', { cpf: true }, message);\n };\n}\n\nexport function legacyCnpjValidator(message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (value == null || value === '') return null;\n return isValidLegacyCnpj(value) ? null : toMessageError('cnpj', { cnpj: true }, message);\n };\n}\n\n// --- Alpha Validators ---\n\nconst CNPJ_ALPHA_WEIGHTS: number[] = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];\nconst CNPJ_ALPHA_BASE_CHAR_CODE: number = \"0\".charCodeAt(0);\n\nfunction calculateCnpjAlphaDV(cnpjBase: string): string {\n let sum1 = 0;\n let sum2 = 0;\n for (let i = 0; i < 12; i++) {\n const asciiValue = cnpjBase.charCodeAt(i) - CNPJ_ALPHA_BASE_CHAR_CODE;\n sum1 += asciiValue * CNPJ_ALPHA_WEIGHTS[i + 1];\n sum2 += asciiValue * CNPJ_ALPHA_WEIGHTS[i];\n }\n const dv1 = sum1 % 11 < 2 ? 0 : 11 - (sum1 % 11);\n sum2 += dv1 * CNPJ_ALPHA_WEIGHTS[12];\n const dv2 = sum2 % 11 < 2 ? 0 : 11 - (sum2 % 11);\n return `${dv1}${dv2}`;\n}\n\nfunction isValidCnpjAlpha(cnpj: string): boolean {\n const cleaned = cleanAlphanumeric(cnpj);\n if (!/^([A-Z0-9]){12}(\\d){2}$/.test(cleaned) || isBlockedSequence(cleaned.substring(0, 12))) {\n return false;\n }\n const base = cleaned.substring(0, 12);\n const dv = cleaned.substring(12);\n return calculateCnpjAlphaDV(base) === dv;\n}\n\nexport function cnpjAlphaValidator(message?: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value;\n if (value == null || value === '') return null;\n\n const hasInvalidChars = /[^A-Z0-9./-]/i.test(value);\n if (hasInvalidChars) {\n return toMessageError('cnpjAlpha', { cnpjAlpha: true, reason: 'Invalid characters' }, message);\n }\n const hasLowercase = /[a-z]/.test(value);\n if (hasLowercase) {\n return toMessageError('cnpjAlpha', { cnpjAlpha: true, reason: 'Lowercase not allowed' }, message);\n }\n return isValidCnpjAlpha(value) ? null : toMessageError('cnpjAlpha', { cnpjAlpha: true, reason: 'Invalid DV' }, message);\n };\n}\n\n/**\n * Creates a dynamic validator for CPF/CNPJ that dispatches to the correct\n * legacy or alphanumeric validator based on the field's metadata and value.\n * @param metadata The metadata for the CPF/CNPJ field.\n * @returns A ValidatorFn that performs the appropriate validation.\n */\nexport function createCpfCnpjValidator(metadata: import('../models/material-field-metadata.interface').MaterialCpfCnpjMetadata): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as string | null;\n if (value == null || value === '') {\n return null; // Don't validate empty values, that's for `required`\n }\n\n const version = metadata.version || 'auto';\n const docType = metadata.documentType || 'auto';\n const validators = metadata.validators || {};\n\n // Determine the effective document type if set to 'auto'\n let effectiveDocType = docType;\n if (docType === 'auto') {\n const cleaned = cleanAlphanumeric(value);\n effectiveDocType = cleaned.length <= 11 ? 'cpf' : 'cnpj';\n }\n\n // Dispatch to the correct validator\n if (effectiveDocType === 'cpf') {\n // CPF is always legacy/numeric\n return legacyCpfValidator(validators.cpfMessage)(control);\n } else { // 'cnpj'\n // Determine effective version for CNPJ if set to 'auto'\n let effectiveVersion = version;\n if (version === 'auto') {\n effectiveVersion = /[a-zA-Z]/.test(value) ? 'alpha' : 'legacy';\n }\n\n if (effectiveVersion === 'alpha') {\n return cnpjAlphaValidator(validators.cnpjAlphaMessage)(control);\n } else {\n return legacyCnpjValidator(validators.cnpjMessage)(control);\n }\n }\n };\n}\n\n// ----------------------- Builders -----------------------\nexport function buildAngularValidators(field: FieldDefinition): BuiltValidators {\n const v: ValidatorFn[] = [];\n let av: AsyncValidatorFn[] = [];\n\n // Required / requiredChecked\n if (field.required) v.push(withMessage(Validators.required, 'required', field.requiredMessage));\n if (field.requiredChecked) v.push(requiredCheckedValidator());\n\n // Length\n if (field.minLength != null) v.push(withMessage(Validators.minLength(field.minLength), 'minlength', field.minLengthMessage));\n if (field.maxLength != null) v.push(withMessage(Validators.maxLength(field.maxLength), 'maxlength', field.maxLengthMessage));\n\n // Numeric min/max\n if (field.min != null) v.push(withMessage(Validators.min(field.min), 'min', field.minMessage));\n if (field.max != null) v.push(withMessage(Validators.max(field.max), 'max', field.maxMessage));\n\n // Pattern / Email / URL\n if (field.pattern) v.push(withMessage(Validators.pattern(field.pattern as any), 'pattern', field.patternMessage));\n if (field.email) v.push(withMessage(Validators.email, 'email', field.emailMessage));\n if (field.url) v.push(urlValidator(field.urlMessage));\n\n // Text helpers\n if (field.minWords != null) v.push(minWordsValidator(field.minWords));\n\n // Cross-field\n if (field.matchField) v.push(matchFieldValidator(field.matchField, field.matchFieldMessage));\n\n // Files\n if ((field as any).allowedFileTypes && (field as any).allowedFileTypes.length) v.push(fileTypeValidator((field as any).allowedFileTypes, (field as any).fileTypeMessage));\n if ((field as any).maxFileSize != null) v.push(maxFileSizeValidator((field as any).maxFileSize));\n\n // Custom\n if (field.customValidator) v.push(customValidatorFn(field.customValidator as any));\n if (field.asyncValidator) av.push(customAsyncValidatorFn(field.asyncValidator as any));\n if (field.uniqueValidator) av.push(uniqueAsyncValidator(field.uniqueValidator as any, field.uniqueMessage));\n\n // Conditional (function-based)\n if ((field as any).conditionalValidation && typeof (field as any).conditionalValidation === 'function') {\n av.push(conditionalAsyncValidator((field as any).conditionalValidation));\n }\n\n // Debounce async validators if requested\n const debounceMs = (field as any).validationDebounce as number | undefined;\n if (debounceMs && debounceMs > 0 && av.length) {\n av = av.map((fn) => debounceAsyncValidator(fn, debounceMs));\n }\n\n return { validators: v, asyncValidators: av };\n}\n\nexport function buildValidatorsFromValidatorOptions(opts: ValidatorOptions = {}): BuiltValidators {\n const v: ValidatorFn[] = [];\n let av: AsyncValidatorFn[] = [];\n\n if (opts.required) v.push(withMessage(Validators.required, 'required', opts.requiredMessage));\n if (opts.minLength != null) v.push(withMessage(Validators.minLength(opts.minLength), 'minlength', opts.minLengthMessage));\n if (opts.maxLength != null) v.push(withMessage(Validators.maxLength(opts.maxLength), 'maxlength', opts.maxLengthMessage));\n\n if (opts.min != null) v.push(withMessage(Validators.min(opts.min), 'min', opts.minMessage));\n if (opts.max != null) v.push(withMessage(Validators.max(opts.max), 'max', opts.maxMessage));\n\n if (opts.pattern) v.push(withMessage(Validators.pattern(opts.pattern as any), 'pattern', opts.patternMessage));\n if (opts.email) v.push(withMessage(Validators.email, 'email', opts.emailMessage));\n if (opts.url) v.push(urlValidator(opts.urlMessage));\n\n const mw = (opts as any).minWords;\n if (mw != null) v.push(minWordsValidator(mw));\n if ((opts as any).requiredChecked) v.push(requiredCheckedValidator());\n\n if (opts.matchField) v.push(matchFieldValidator(opts.matchField, opts.matchFieldMessage));\n\n if ((opts as any).customValidator) v.push(customValidatorFn((opts as any).customValidator));\n if ((opts as any).asyncValidator) av.push(customAsyncValidatorFn((opts as any).asyncValidator));\n\n if (opts.uniqueValidator) av.push(uniqueAsyncValidator(opts.uniqueValidator as any, opts.uniqueMessage));\n\n // Arquivos\n const allowed = (opts as any).allowedFileTypes as string[] | undefined;\n if (allowed && allowed.length) v.push(fileTypeValidator(allowed, (opts as any).fileTypeMessage));\n const mfs = (opts as any).maxFileSize as number | undefined;\n if (mfs != null) v.push(maxFileSizeValidator(mfs));\n\n // Conditional (metadata array-based)\n if (opts.conditionalValidation && Array.isArray(opts.conditionalValidation)) {\n const composed = composeConditionalValidators(opts.conditionalValidation);\n if (composed.sync) v.push(composed.sync);\n if (composed.async) av.push(composed.async);\n }\n // Conditional function support via 'conditionalValidationFn' ad-hoc entry\n const condFn = (opts as any).conditionalValidationFn;\n if (typeof condFn === 'function') {\n av.push(conditionalAsyncValidator(condFn));\n }\n\n // Debounce async validators if requested\n const debounceMs = (opts as any).validationDebounce as number | undefined;\n if (debounceMs && debounceMs > 0 && av.length) {\n av = av.map((fn) => debounceAsyncValidator(fn, debounceMs));\n }\n\n return { validators: v, asyncValidators: av };\n}\n","/**\n * Enum que define os tipos de controle (`CONTROL_TYPE`) disponíveis para a apresentação dos campos de formulário.\n *\n * O `CONTROL_TYPE` especifica o tipo de elemento de UI (User Interface) que será usado para capturar ou exibir dados do campo.\n * Essa configuração permite que a camada de apresentação saiba como renderizar o campo e oferecer a interação adequada ao usuário.\n * Em casos onde o `CONTROL_TYPE` não é especificado, a camada de apresentação pode usar o valor de `TYPE` (definido em `FieldDataType`)\n * para decidir o controle mais adequado de forma automática.\n */\nexport const FieldControlType = {\n AI_PROMPT: 'aiPrompt',\n APP_BAR: 'appBar',\n ARC_GAUGE: 'arcGauge',\n ARRAY_INPUT: 'array',\n AUTO_COMPLETE: 'autoComplete',\n AVATAR: 'avatar',\n BARCODE_GENERATOR: 'barcodeGenerator',\n BOTTOM_NAVIGATION: 'bottomNavigation',\n BREADCRUMB: 'breadcrumb',\n BUTTON: 'button',\n BUTTON_GROUP: 'buttonGroup',\n BUTTON_TOGGLE: 'buttonToggle',\n CALENDAR: 'calendar',\n CARD: 'card',\n CHECKBOX: 'checkbox',\n CHIP_INPUT: 'chipInput',\n CHIP_LIST: 'chipList',\n CIRCULAR_GAUGE: 'circularGauge',\n COLOR_GRADIENT: 'colorGradient',\n CPF_CNPJ_INPUT: 'cpfCnpjInput',\n COLOR_PALETTE: 'colorPalette',\n COLOR_PICKER: 'colorPicker',\n COLOR_INPUT: 'color',\n CRON_BUILDER: 'cronBuilder',\n CONTEXT_MENU: 'contextMenu',\n CONVERSATIONAL_UI: 'conversationalUI',\n CURRENCY_INPUT: 'currency',\n DATE_INPUT: 'dateInput',\n DATE_PICKER: 'date',\n DATE_RANGE: 'dateRange',\n DATE_TIME_PICKER: 'dateTime',\n DATE_TIME_RANGE: 'dateTimeRange',\n DATETIME_LOCAL_INPUT: 'dateTimeLocal',\n DIALOG: 'dialog',\n DRAWER: 'drawer',\n DROP_DOWN_TREE: 'dropDownTree',\n EMAIL_INPUT: 'email',\n EXPANSION_PANEL: 'expansionPanel',\n FILE_SAVER: 'fileSaver',\n FILE_SELECT: 'fileSelect',\n FILE_UPLOAD: 'upload',\n FILTER: 'filter',\n FLOATING_LABEL: 'floatingLabel',\n FLOATING_ACTION_BUTTON: 'floatingActionButton',\n GRID: 'grid',\n GRID_LAYOUT: 'gridLayout',\n INPUT: 'input',\n LINEAR_GAUGE: 'linearGauge',\n LIST_VIEW: 'listView',\n MAP: 'map',\n MASKED_TEXT_BOX: 'maskedTextBox',\n MONTH_INPUT: 'month',\n MULTI_COLUMN_COMBO_BOX: 'multiColumnComboBox',\n MULTI_SELECT: 'multiSelect',\n MULTI_SELECT_TREE: 'multiSelectTree',\n TRANSFER_LIST: 'transferList',\n NOTIFICATION: 'notification',\n NUMERIC_TEXT_BOX: 'numericTextBox',\n PAGER: 'pager',\n PAGINATOR: 'paginator',\n PASSWORD: 'password',\n PDF_VIEWER: 'pdfViewer',\n PHONE: 'phone',\n PIVOT_GRID: 'pivotGrid',\n POPUP: 'popup',\n PROGRESS_BAR: 'progressBar',\n PROGRESS_SPINNER: 'progressSpinner',\n QR_CODE: 'qrCode',\n RADIO: 'radio',\n RADIAL_GAUGE: 'radialGauge',\n RANGE_SLIDER: 'rangeSlider',\n PRICE_RANGE: 'priceRange',\n RATING: 'rating',\n RICH_TEXT_EDITOR: 'richTextEditor',\n RIPPLE: 'ripple',\n SCROLL_VIEW: 'scrollView',\n SEARCH_INPUT: 'search',\n SELECTION_LIST: 'selectionList',\n SELECT: 'select',\n SIGNATURE: 'signature',\n SLIDER: 'slider',\n SORTABLE: 'sortable',\n SORTABLE_TABLE: 'sortableTable',\n SPLITTER: 'splitter',\n SPREADSHEET: 'spreadsheet',\n STACK_LAYOUT: 'stackLayout',\n STEP_BAR: 'stepBar',\n STEPPER: 'stepper',\n SVG_ICON: 'svgIcon',\n TABS: 'tabs',\n TEXTAREA: 'textarea',\n TIME_INPUT: 'time',\n TIME_PICKER: 'timePicker',\n TIME_RANGE: 'timeRange',\n TIMELINE: 'timeline',\n TOGGLE: 'toggle',\n TOOLBAR: 'toolbar',\n TOOLTIP: 'tooltip',\n TREE_VIEW: 'treeView',\n TREE_SELECT: 'treeSelect',\n TYPOGRAPHY: 'typography',\n URL_INPUT: 'url',\n WEEK_INPUT: 'week',\n WINDOW: 'window',\n YEAR_INPUT: 'year',\n} as const;\n\nexport type FieldControlType =\n (typeof FieldControlType)[keyof typeof FieldControlType];\n","import { Injectable } from '@angular/core';\nimport {\n AbstractControl,\n FormControl,\n FormGroup,\n ValidatorFn,\n} from '@angular/forms';\nimport { FieldDefinition } from '../models/field-definition.model';\nimport {\n FieldMetadata,\n ValidatorOptions,\n} from '../models/component-metadata.interface';\nimport {\n BuiltValidators,\n withMessage,\n buildAngularValidators,\n buildValidatorsFromValidatorOptions,\n} from '../helpers/validators.helper';\nimport { FieldControlType } from '../metadata/field-control-type.constants';\nimport type {\n MaterialDatepickerMetadata,\n MaterialDateRangeMetadata,\n MaterialRangeSliderMetadata,\n} from '../models/material-field-metadata.interface';\nimport type {\n DateRangeValue,\n RangeSliderValue,\n} from '../models/component-metadata.interface';\n\n/**\n * DynamicFormService\n * -------------------\n * Serviço utilitário central para criação e atualização de formulários dinâmicos\n * (Reactive Forms) a partir de metadados corporativos (FieldMetadata) ou\n * definições do servidor (FieldDefinition).\n *\n * Principais responsabilidades\n * - Converter ValidatorOptions/FieldDefinition em ValidatorFn/AsyncValidatorFn.\n * - Aplicar updateOn por campo a partir de validationTrigger (change/blur/submit).\n * - Injetar validadores específicos de UI conforme o controlType:\n * - DATE_PICKER: minDate/maxDate (datas limites).\n * - DATE_RANGE: verificação de ordem (start <= end) e min/max date.\n * - RANGE_SLIDER: verificação de ordem e min/max numérico.\n * - Tratar campos múltiplos (checkbox/multi-select): valor inicial [] quando não informado.\n * - Reconfigurar controles existentes (validators, asyncValidators, enabled/disabled, defaultValue).\n *\n * Fluxos suportados\n * - createFormGroupFromMetadata(fields): cria FormGroup diretamente dos metadados normalizados.\n * - createFormGroupFromFields(defs): cria FormGroup a partir de definições cruas do backend.\n * - updateControlFromMetadata/Field: reavalia e aplica validadores/estado em controles existentes.\n *\n * Boas práticas\n * - Prefira trabalhar com FieldMetadata + ValidatorOptions (camada normalizada) no app.\n * - Use updateControlFromMetadata quando regras dinâmicas alterarem validators (ex.: required, min, pattern, etc.).\n * - Para validação em blur/submit, configure validators.validationTrigger no metadata.\n *\n * Exemplo de uso básico\n * const group = dynamicForm.createFormGroupFromMetadata(fieldMetadata);\n * // Em regras dinâmicas\n * dynamicForm.updateControlFromMetadata(group, { ...meta, validators: { ...meta.validators, required: true }});\n */\n@Injectable({ providedIn: 'root' })\nexport class DynamicFormService {\n // ------------------- Path helpers (nested groups) -------------------\n private isPath(name: string): boolean {\n return name.includes('.');\n }\n\n private splitPath(name: string): string[] {\n return name.split('.').filter((s) => !!s);\n }\n\n private ensureParentGroup(form: FormGroup, name: string): { parent: FormGroup; leaf: string } {\n if (!this.isPath(name)) {\n return { parent: form, leaf: name };\n }\n const segments = this.splitPath(name);\n const leaf = segments.pop() as string;\n let group: FormGroup = form;\n for (const seg of segments) {\n const existing = group.get(seg);\n if (existing instanceof FormGroup) {\n group = existing;\n continue;\n }\n const next = new FormGroup({});\n group.addControl(seg, next);\n group = next;\n }\n return { parent: group, leaf };\n }\n\n private getControlAtPath(form: FormGroup, name: string): AbstractControl | null {\n if (!this.isPath(name)) {\n return form.get(name);\n }\n // Angular understands dot-paths in form.get, but only if groups exist.\n return form.get(name);\n }\n // ------------------- Helpers -------------------\n /**\n * Converte uma lista de gatilhos (validationTrigger) no valor aceito pelo Angular (updateOn).\n * @param triggers 'change' | 'blur' | 'submit' (primeiro item é considerado quando array)\n * @returns updateOn compatível com Angular Forms ou undefined para padrão ('change')\n */\n private toUpdateOnFromTriggers(\n triggers?: string[] | string,\n ): 'change' | 'blur' | 'submit' | undefined {\n const t = Array.isArray(triggers) ? triggers[0] : triggers;\n if (!t) return undefined;\n const v = String(t).toLowerCase();\n return v === 'blur' || v === 'submit' ? (v as any) : 'change';\n }\n\n /**\n * Obtém updateOn a partir de FieldDefinition.validationTriggers.\n */\n private getUpdateOnFromField(\n field: FieldDefinition,\n ): 'change' | 'blur' | 'submit' | undefined {\n // FieldDefinition usa validationTriggers: string[]\n const triggers = (field as any).validationTriggers as string[] | undefined;\n return this.toUpdateOnFromTriggers(triggers ?? undefined);\n }\n\n /**\n * Obtém updateOn a partir de FieldMetadata.validators.validationTrigger.\n */\n private getUpdateOnFromMetadata(\n meta: FieldMetadata & { validators?: ValidatorOptions },\n ): 'change' | 'blur' | 'submit' | undefined {\n // FieldMetadata.validators.validationTrigger: enum\n const trig = meta.validators?.validationTrigger as any;\n return this.toUpdateOnFromTriggers(trig ?? undefined);\n }\n\n /**\n * Retorna validadores adicionais específicos para determinados tipos de UI.\n * Aplicado automaticamente em criação/atualização de controles.\n */\n private getUiSpecificValidators(meta: FieldMetadata): ValidatorFn[] {\n const v: ValidatorFn[] = [];\n\n if (meta.controlType === (FieldControlType as any).DATE_PICKER) {\n const md = meta as unknown as MaterialDatepickerMetadata;\n const min = md.minDate\n ? typeof md.minDate === 'string'\n ? new Date(md.minDate)\n : md.minDate\n : null;\n const max = md.maxDate\n ? typeof md.maxDate === 'string'\n ? new Date(md.maxDate)\n : md.maxDate\n : null;\n if (min) {\n v.push((c) => {\n const val = c.value ? new Date(c.value) : null;\n return !val || val >= min ? null : { minDate: true };\n });\n }\n if (max) {\n v.push((c) => {\n const val = c.value ? new Date(c.value) : null;\n return !val || val <= max ? null : { maxDate: true };\n });\n }\n } else if (meta.controlType === (FieldControlType as any).DATE_RANGE) {\n const md = meta as unknown as MaterialDateRangeMetadata;\n const parse = (d: Date | string | null | undefined): Date | null =>\n typeof d === 'string' ? new Date(d) : (d ?? null);\n const min = parse(md.minDate);\n const max = parse(md.maxDate);\n v.push((c) => {\n const val = c.value as DateRangeValue | null;\n if (!val) return null;\n const start = val.startDate ? new Date(val.startDate) : null;\n const end = val.endDate ? new Date(val.endDate) : null;\n if (start && end && start > end) return { rangeOrder: true } as any;\n if (min && ((start && start < min) || (end && end < min)))\n return { minDate: true } as any;\n if (max && ((start && start > max) || (end && end > max)))\n return { maxDate: true } as any;\n return null;\n });\n } else if (meta.controlType === (FieldControlType as any).RANGE_SLIDER) {\n const md = meta as unknown as MaterialRangeSliderMetadata;\n const min = md.min ?? null;\n const max = md.max ?? null;\n v.push((c) => {\n const val = c.value as RangeSliderValue | null;\n if (!val) return md.required ? ({ required: true } as any) : null;\n const start = (val as any).start ?? (val as any).minPrice;\n const end = (val as any).end ?? (val as any).maxPrice;\n if (md.required && (start == null || end == null))\n return { required: true } as any;\n if (start != null && end != null && start > end)\n return { rangeOrder: true } as any;\n if (\n min != null &&\n ((start != null && start < min) || (end != null && end < min))\n )\n return { minValue: true } as any;\n if (\n max != null &&\n ((start != null && start > max) || (end != null && end > max))\n )\n return { maxValue: true } as any;\n return null;\n });\n }\n\n return v;\n }\n\n /**\n * Indica se o campo deve ser tratado como seleção múltipla (valor padrão []).\n */\n private isMultipleField(meta: FieldMetadata): boolean {\n return (\n meta.controlType === (FieldControlType as any).CHECKBOX ||\n meta.controlType === (FieldControlType as any).MULTI_SELECT ||\n (meta as any).multiple === true\n );\n }\n\n // ------------------- Wrappers -------------------\n /**\n * Envelopa um ValidatorFn Angular para padronizar a saída de erro com mensagem.\n * Útil quando deseja-se forçar uma mensagem customizada em um validador nativo.\n */\n wrapAngularValidator(\n validator: ValidatorFn,\n key: string,\n message?: string,\n ): ValidatorFn {\n return withMessage(validator, key, message);\n }\n\n // ------------------- Builders -------------------\n /**\n * Constrói validadores (sync/async) a partir de FieldDefinition (modelo do backend).\n * Normalmente usado em fluxos diretos com schemas remotos.\n */\n buildFromFieldDefinition(field: FieldDefinition): BuiltValidators {\n return buildAngularValidators(field);\n }\n\n /**\n * Constrói validadores (sync/async) a partir de ValidatorOptions (metadados normalizados).\n * É o caminho preferencial quando a aplicação já opera com FieldMetadata.\n */\n buildFromValidatorOptions(options?: ValidatorOptions): BuiltValidators {\n return buildValidatorsFromValidatorOptions(options ?? {});\n }\n\n // ------------------- FormControl creation -------------------\n /**\n * Cria um FormControl a partir de um FieldDefinition.\n * - Aplica validators e asyncValidators construídos.\n * - Define updateOn conforme validationTriggers.\n * - Aplica validadores específicos de UI quando aplicável.\n * - Valor inicial: [] para campos múltiplos quando ausente; caso contrário defaultValue.\n */\n createControlFromField(field: FieldDefinition): FormControl {\n const { validators, asyncValidators } =\n this.buildFromFieldDefinition(field);\n const updateOn = this.getUpdateOnFromField(field);\n const initialValue = (field as any).defaultValue ?? null;\n const value =\n (field as any).multiple && initialValue == null ? [] : initialValue;\n const ctrl = new FormControl(\n { value, disabled: !!field.disabled },\n {\n validators,\n asyncValidators,\n ...(updateOn ? { updateOn } : {}),\n },\n );\n // Ensure initial validation state\n ctrl.addValidators(this.getUiSpecificValidators(field as any));\n ctrl.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return ctrl;\n }\n\n /**\n * Cria um FormControl a partir de FieldMetadata.\n * - Aplica ValidatorOptions (normalizados) e validadores de UI por tipo.\n * - Define updateOn conforme validators.validationTrigger.\n * - Valor inicial: [] para campos múltiplos quando ausente.\n */\n createControlFromMetadata(\n meta: FieldMetadata & {\n validators?: ValidatorOptions;\n defaultValue?: any;\n disabled?: boolean;\n },\n ): FormControl {\n const { validators, asyncValidators } = this.buildFromValidatorOptions(\n meta.validators,\n );\n const updateOn = this.getUpdateOnFromMetadata(meta);\n const initialValue = (meta as any).defaultValue ?? null;\n const value =\n this.isMultipleField(meta) && initialValue == null ? [] : initialValue;\n const ctrl = new FormControl(\n { value, disabled: !!(meta as any).disabled },\n {\n validators,\n asyncValidators,\n ...(updateOn ? { updateOn } : {}),\n },\n );\n ctrl.addValidators(this.getUiSpecificValidators(meta));\n ctrl.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n return ctrl;\n }\n\n // ------------------- Update existing FormControl -------------------\n /**\n * Reconfigura um controle existente a partir de FieldDefinition.\n * Atualiza: validators, asyncValidators, estado enabled/disabled e defaultValue (com suporte a múltiplos).\n */\n updateControlFromField(\n form: FormGroup,\n field: FieldDefinition,\n opts: { emitEvent?: boolean } = {},\n ): void {\n const control = form.get(field.name) as FormControl | null;\n if (!control) {\n // If control does not exist, add it\n this.addControlFromField(form, field, opts);\n return;\n }\n\n const { validators, asyncValidators } =\n this.buildFromFieldDefinition(field);\n control.setValidators(validators);\n control.setAsyncValidators(asyncValidators);\n control.addValidators(this.getUiSpecificValidators(field as any));\n\n // Update disabled/enabled state\n if (field.disabled) control.disable({ emitEvent: opts.emitEvent ?? false });\n else control.enable({ emitEvent: opts.emitEvent ?? false });\n\n // Optionally reset/default value if provided\n if (field.defaultValue !== undefined) {\n const raw = field.defaultValue;\n const next = (field as any).multiple && raw == null ? [] : raw;\n control.setValue(next, { emitEvent: opts.emitEvent ?? false });\n }\n\n control.updateValueAndValidity({ emitEvent: opts.emitEvent ?? false });\n }\n\n /**\n * Reconfigura um controle existente a partir de FieldMetadata.\n * Use em conjunto com regras dinâmicas para alterar ValidatorOptions em tempo de execução.\n */\n updateControlFromMetadata(\n form: FormGroup,\n meta: FieldMetadata & {\n validators?: ValidatorOptions;\n defaultValue?: any;\n disabled?: boolean;\n },\n opts: { emitEvent?: boolean } = {},\n ): void {\n const name = meta.name;\n const control = this.getControlAtPath(form, name) as FormControl | null;\n if (!control) {\n this.addControlFromMetadata(form, meta, opts);\n return;\n }\n\n const { validators, asyncValidators } = this.buildFromValidatorOptions(\n meta.validators,\n );\n control.setValidators(validators);\n control.setAsyncValidators(asyncValidators);\n control.addValidators(this.getUiSpecificValidators(meta));\n\n if ((meta as any).disabled)\n control.disable({ emitEvent: opts.emitEvent ?? false });\n else control.enable({ emitEvent: opts.emitEvent ?? false });\n\n if ((meta as any).defaultValue !== undefined) {\n const raw = (meta as any).defaultValue;\n const next = this.isMultipleField(meta) && raw == null ? [] : raw;\n control.setValue(next, { emitEvent: opts.emitEvent ?? false });\n }\n\n control.updateValueAndValidity({ emitEvent: opts.emitEvent ?? false });\n }\n\n // ------------------- Add control -------------------\n /**\n * Adiciona um novo controle ao FormGroup a partir de FieldDefinition.\n */\n addControlFromField(\n form: FormGroup,\n field: FieldDefinition,\n opts: { emitEvent?: boolean } = {},\n ): void {\n const ctrl = this.createControlFromField(field);\n const { parent, leaf } = this.ensureParentGroup(form, field.name);\n parent.addControl(leaf, ctrl, { emitEvent: opts.emitEvent ?? false });\n }\n\n /**\n * Adiciona um novo controle ao FormGroup a partir de FieldMetadata.\n */\n addControlFromMetadata(\n form: FormGroup,\n meta: FieldMetadata & {\n validators?: ValidatorOptions;\n defaultValue?: any;\n disabled?: boolean;\n },\n opts: { emitEvent?: boolean } = {},\n ): void {\n const ctrl = this.createControlFromMetadata(meta);\n const { parent, leaf } = this.ensureParentGroup(form, meta.name);\n parent.addControl(leaf, ctrl, { emitEvent: opts.emitEvent ?? false });\n }\n\n // ------------------- Create FormGroup -------------------\n /**\n * Cria um FormGroup completo a partir de uma lista de FieldDefinition.\n */\n createFormGroupFromFields(fields: FieldDefinition[]): FormGroup {\n const root = new FormGroup({});\n fields.forEach((f) => {\n const ctrl = this.createControlFromField(f);\n const { parent, leaf } = this.ensureParentGroup(root, f.name);\n parent.addControl(leaf, ctrl);\n });\n return root;\n }\n\n /**\n * Cria um FormGroup completo a partir de uma lista de FieldMetadata.\n * Este é o caminho recomendado quando os metadados já foram normalizados pela aplicação.\n */\n createFormGroupFromMetadata(\n fields: Array<\n FieldMetadata & {\n validators?: ValidatorOptions;\n defaultValue?: any;\n disabled?: boolean;\n }\n >,\n ): FormGroup {\n const root = new FormGroup({});\n fields.forEach((m) => {\n const ctrl = this.createControlFromMetadata(m);\n const { parent, leaf } = this.ensureParentGroup(root, m.name);\n parent.addControl(leaf, ctrl);\n });\n return root;\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Maps HTTP or network errors to user-friendly messages.\n * This service centralizes error messaging so UI components don't\n * need to know about HTTP status codes or low level error objects.\n */\n@Injectable({ providedIn: 'root' })\nexport class ErrorMessageService {\n /**\n * Returns a generic message for an error returned during a form submit.\n * @param error Error object possibly containing an HTTP status code\n */\n getSubmitErrorMessage(error: unknown): string {\n const status = (error as any)?.status;\n if (status === 0) {\n return 'Não foi possível conectar ao servidor. Verifique sua conexão ou se o servidor está disponível.';\n }\n if (status >= 500) {\n return 'Erro interno no servidor. Tente novamente mais tarde.';\n }\n if (status === 400 || status === 422) {\n return 'Dados inválidos ou inconsistentes. Verifique os campos e tente novamente.';\n }\n return (error as any)?.message || 'Falha ao salvar. Tente novamente.';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentDocMeta } from '../models/component-doc-metadata.interface';\n\n/**\n * Simple in-memory registry of component documentation metadata.\n *\n * Libraries can register their components so tools like\n * visual builders or configurators can discover them.\n */\n@Injectable({ providedIn: 'root' })\nexport class ComponentMetadataRegistry {\n private readonly metadataMap = new Map<string, ComponentDocMeta>();\n\n /** Register a component metadata entry. */\n register(meta: ComponentDocMeta): void {\n const normalized = this.normalizeMeta(meta);\n this.metadataMap.set(normalized.id, normalized);\n }\n\n /** Retrieve metadata by its unique id. */\n get(id: string): ComponentDocMeta | undefined {\n return this.metadataMap.get(id);\n }\n\n /** List all registered metadata entries. */\n getAll(): ComponentDocMeta[] {\n return Array.from(this.metadataMap.values());\n }\n\n /**\n * Ensure friendly labels/descriptions for common inputs/outputs when missing.\n * This helps diagrams/builders present consistent naming across components.\n */\n private normalizeMeta(meta: ComponentDocMeta): ComponentDocMeta {\n const inputDefaults: Record<string, { label: string; description?: string }> = {\n resourceId: { label: 'ID do recurso', description: 'Identificador único do recurso atual (ex.: payload.id).'},\n resourcePath: { label: 'Caminho do recurso', description: 'Endpoint/base ou caminho do recurso (ex.: human-resources/funcionarios).'},\n formId: { label: 'Formulário', description: 'Identificador do formulário a ser exibido/atualizado.'},\n tableId: { label: 'Tabela', description: 'Identificador da tabela a ser exibida/atualizada.'},\n config: { label: 'Configuração', description: 'Objeto de configuração declarativo para o componente.'},\n mode: { label: 'Modo', description: 'Modo de operação (ex.: view, edit, create).'},\n filterCriteria: { label: 'Filtro', description: 'Critérios de filtro (JSON/expressão) aplicados a dados/listas.'},\n bindingOrder: { label: 'Ordem de Binding', description: 'Ordem de avaliação/atribuição das entradas do componente.'},\n };\n const outputDefaults: Record<string, { label: string; description?: string }> = {\n rowClick: { label: 'Clique na linha', description: 'Emitido ao clicar/selecionar uma linha na tabela.'},\n widgetEvent: { label: 'Evento do widget', description: 'Eventos internos reemitidos com contexto do container.'},\n submit: { label: 'Enviar', description: 'Emitido quando o formulário é enviado.'},\n valueChange: { label: 'Mudança de valor', description: 'Emitido quando o valor é alterado.'},\n selectionChange: { label: 'Mudança de seleção', description: 'Alterações na seleção de itens/linhas.'},\n loaded: { label: 'Carregado', description: 'Sinaliza conclusão de carregamento inicial.'},\n error: { label: 'Erro', description: 'Erros durante operações/ações.'},\n change: { label: 'Alteração', description: 'Eventos genéricos de alteração.'},\n };\n\n const normInputs = (meta.inputs || []).map((inp) => {\n const d = inputDefaults[inp.name];\n if (!d) return inp;\n return {\n ...inp,\n label: inp.label || d.label,\n description: inp.description || d.description,\n };\n });\n const normOutputs = (meta.outputs || []).map((out) => {\n const d = outputDefaults[out.name];\n if (!d) return out;\n return {\n ...out,\n label: out.label || d.label,\n description: out.description || d.description,\n };\n });\n\n return { ...meta, inputs: normInputs, outputs: normOutputs };\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport interface TelemetryEvent {\n name: string;\n payload?: any;\n timestamp: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TelemetryService {\n record(name: string, payload?: any): void {\n const evt: TelemetryEvent = { name, payload, timestamp: new Date().toISOString() };\n try { (console.log || console.info)('[Telemetry]', evt); } catch {}\n }\n}\n\n","import type { OverlayDecisionMatrix } from '../models/overlay-decision.model';\n\nexport const defaultMatrix: OverlayDecisionMatrix = {\n version: '1.0.0',\n description: 'Matriz de decisão para escolher entre modal, drawer ou página com base em device, quantidade de campos e dependências.',\n thresholds: {\n fieldCount: { small_max: 12, medium_max: 24 },\n dependencyCount: { low_max: 3, medium_max: 7 },\n },\n rules_ordered: [\n {\n match: { device: ['mobile'], fieldCount: { max: 4 }, dependencyCount: { max: 0 } },\n use: { pattern: 'bottom-sheet', config: { blockBackdrop: true, trapFocus: true, height: 'auto' }, reason: 'Formulários curtíssimos sem dependências em telas pequenas.' },\n },\n {\n match: { device: ['mobile'], fieldCount: { max: 12 }, dependencyCount: { max: 3 } },\n use: { pattern: 'full-screen-dialog', config: { trapFocus: true }, reason: 'Mobile com poucos campos e dependência baixa: foco total.' },\n },\n {\n match: { device: ['mobile'], fieldCount: { min: 13 } },\n use: { pattern: 'page', config: { preserveScrollPosition: true }, reason: 'Formulário extenso no mobile deve ser promovido para página.' },\n },\n {\n match: { device: ['tablet'], fieldCount: { max: 12 }, dependencyCount: { max: 3 } },\n use: { pattern: 'modal', config: { width: 'min(70vw, 720px)', footerFixed: true, trapFocus: true }, reason: 'Tablet com poucos campos e dependência baixa.' },\n },\n {\n match: { device: ['tablet'], fieldCount: { min: 13, max: 24 }, dependencyCount: { max: 7 } },\n use: { pattern: 'drawer', config: { side: 'end', width: 'min(65vw, 840px)', modal: true, footerFixed: true }, reason: 'Tamanho médio: manter contexto ao lado.' },\n },\n {\n match: { device: ['tablet'], fieldCount: { min: 25 } },\n use: { pattern: 'page', config: {}, reason: 'Grande: melhor navegação em página dedicada.' },\n },\n {\n match: { device: ['desktop'], fieldCount: { max: 12 }, dependencyCount: { max: 3 } },\n use: { pattern: 'modal', config: { width: 'min(50vw, 860px)', footerFixed: true, trapFocus: true }, reason: 'Casos simples e focados funcionam melhor em modal central.' },\n },\n {\n match: { device: ['desktop'], fieldCount: { min: 13, max: 24 }, dependencyCount: { max: 7 } },\n use: { pattern: 'drawer', config: { side: 'end', width: 'min(45vw, 920px)', modal: true, footerFixed: true }, reason: 'Formulário médio: manter contexto (lista ao fundo).' },\n },\n {\n match: { device: ['desktop'], any: [{ fieldCount: { min: 25 } }, { dependencyCount: { min: 8 } }] },\n use: { pattern: 'page', config: {}, reason: 'Muito grande/complexo: requer URL, navegação e performance.' },\n },\n ],\n fallback: { pattern: 'modal', config: { width: 'min(60vw, 900px)', footerFixed: true, trapFocus: true }, reason: 'Padrão seguro quando não houver correspondência.' },\n ui_hints: {\n modal: { headerSticky: true, bodyScroll: true, footerFixed: true },\n drawer: { modal: true, headerSticky: true, footerFixed: true },\n page: { breadcrumbs: true, actionsToolbar: true },\n },\n};\n\n","import {\n EnvironmentProviders,\n InjectionToken,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { OverlayDecisionMatrix } from '../models/overlay-decision.model';\nimport { defaultMatrix } from '../config/overlay-decision-matrix';\n\nexport const OVERLAY_DECISION_MATRIX =\n new InjectionToken<OverlayDecisionMatrix>('OVERLAY_DECISION_MATRIX');\n\nexport function provideOverlayDecisionMatrix(\n matrix?: OverlayDecisionMatrix,\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: OVERLAY_DECISION_MATRIX,\n useValue: matrix ?? (defaultMatrix as OverlayDecisionMatrix),\n },\n ]);\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { OVERLAY_DECISION_MATRIX } from '../tokens/overlay-decision-matrix.token';\nimport {\n OverlayDecision,\n OverlayDecisionContext,\n OverlayDecisionMatrix,\n OverlayPattern,\n OverlayRule,\n OverlayRuleMatch,\n} from '../models/overlay-decision.model';\n\nexport const OVERLAY_DECIDER_DEBUG = new InjectionToken<boolean>(\n 'OVERLAY_DECIDER_DEBUG',\n {\n providedIn: 'root',\n factory: () => false,\n },\n);\n\n@Injectable({ providedIn: 'root' })\nexport class OverlayDeciderService {\n private readonly matrix: OverlayDecisionMatrix = inject(\n OVERLAY_DECISION_MATRIX,\n );\n private readonly debug: boolean = inject(OVERLAY_DECIDER_DEBUG);\n decide(ctx: OverlayDecisionContext): OverlayDecision {\n const decision = this.evaluate(ctx);\n this.log(ctx, decision);\n return decision;\n }\n\n explain(ctx: OverlayDecisionContext): string {\n return this.evaluate(ctx).reason ?? '';\n }\n\n private evaluate(ctx: OverlayDecisionContext): OverlayDecision {\n for (const rule of this.matrix.rules_ordered as OverlayRule[]) {\n if (this.matches(ctx, rule.match)) {\n return {\n pattern: rule.use.pattern as OverlayPattern,\n config: rule.use.config,\n reason: rule.use.reason,\n };\n }\n }\n return {\n pattern: this.matrix.fallback.pattern as OverlayPattern,\n config: this.matrix.fallback.config,\n reason: this.matrix.fallback.reason,\n };\n }\n\n private matches(\n ctx: OverlayDecisionContext,\n match: OverlayRuleMatch,\n ): boolean {\n if (match.device && !match.device.includes(ctx.device)) {\n return false;\n }\n if (match.fieldCount) {\n if (\n match.fieldCount.min !== undefined &&\n ctx.fieldCount < match.fieldCount.min\n ) {\n return false;\n }\n if (\n match.fieldCount.max !== undefined &&\n ctx.fieldCount > match.fieldCount.max\n ) {\n return false;\n }\n }\n if (match.dependencyCount) {\n if (\n match.dependencyCount.min !== undefined &&\n ctx.dependencyCount < match.dependencyCount.min\n ) {\n return false;\n }\n if (\n match.dependencyCount.max !== undefined &&\n ctx.dependencyCount > match.dependencyCount.max\n ) {\n return false;\n }\n }\n if (Array.isArray(match.any)) {\n return match.any.some((sub) => this.matches(ctx, sub));\n }\n return true;\n }\n\n private log(ctx: OverlayDecisionContext, decision: OverlayDecision): void {\n if (this.debug) {\n console.debug('Overlay decision', {\n device: ctx.device,\n fieldCount: ctx.fieldCount,\n dependencyCount: ctx.dependencyCount,\n pattern: decision.pattern,\n });\n }\n }\n}\n","/**\n * Enum que define os tipos de dados (`TYPE`) disponíveis para configuração dos campos de formulário.\n */\nexport const FieldDataType = {\n TEXT: 'text',\n NUMBER: 'number',\n EMAIL: 'email',\n DATE: 'date',\n PASSWORD: 'password',\n FILE: 'file',\n URL: 'url',\n BOOLEAN: 'boolean',\n JSON: 'json',\n} as const;\n\nexport type FieldDataType = typeof FieldDataType[keyof typeof FieldDataType];\n","/**\n * @fileoverview Base metadata interfaces for dynamic Angular Material components\n *\n * This file implements a hierarchical system of metadata interfaces designed for\n * maximum flexibility, type safety, and Angular Material integration.\n *\n * Architecture:\n * - ComponentMetadata (universal base)\n * - FieldMetadata (form fields)\n * - Specialized interfaces (MaterialInput, MaterialSelect, etc.)\n *\n * Design Principles:\n * - Configuration over Code\n * - JSON serializable\n * - Type-safe with strict TypeScript\n * - Backward compatible\n * - Angular Material 3 native support\n */\n\nimport { FieldDataType } from '../metadata/field-data-type.constants';\nimport { FieldControlType } from '../metadata/field-control-type.constants';\n\n// Re-export para compatibilidade\nexport { FieldControlType, FieldDataType };\n\n// =============================================================================\n// BASE INTERFACES\n// =============================================================================\n\n/**\n * Universal base interface for all dynamic components.\n *\n * Provides maximum extensibility through index signature while maintaining\n * essential metadata properties for component lifecycle management.\n *\n * @example\n * ```typescript\n * const buttonMetadata: ComponentMetadata = {\n * id: 'submit-btn',\n * version: '1.0.0',\n * context: 'form',\n * customProperty: 'any value'\n * };\n * ```\n */\nexport interface ComponentMetadata {\n /** Unique identifier for the component instance */\n id?: string;\n\n /** Metadata schema version for migration support */\n version?: string;\n\n /** Application context where component is used */\n context?: 'form' | 'filter' | 'table' | 'dialog' | 'standalone';\n\n /** Timestamp when metadata was created */\n createdAt?: string;\n\n /** Timestamp when metadata was last updated */\n updatedAt?: string;\n\n /** Tags for categorization and filtering */\n tags?: string[];\n\n /** Custom CSS classes to apply to the component */\n cssClass?: string;\n\n /** Inline styles as CSS properties object */\n style?: Record<string, string>;\n\n /** Data attributes for testing or analytics */\n dataAttributes?: Record<string, string>;\n\n /** Extensibility: allow any additional properties */\n [key: string]: any;\n}\n\n/**\n * Enhanced validation configuration for comprehensive field validation.\n *\n * Supports both built-in Angular validators and custom validation logic\n * with internationalization support for error messages.\n */\nexport interface ValidatorOptions {\n // =============================================================================\n // BASIC VALIDATORS\n // =============================================================================\n\n /** Field is required */\n required?: boolean;\n\n /** Custom message for required validation */\n requiredMessage?: string;\n\n /** Minimum text length */\n minLength?: number;\n\n /** Custom message for minLength validation */\n minLengthMessage?: string;\n\n /** Maximum text length */\n maxLength?: number;\n\n /** Custom message for maxLength validation */\n maxLengthMessage?: string;\n\n /** Minimum numeric value */\n min?: number;\n\n /** Custom message for min validation */\n minMessage?: string;\n\n /** Maximum numeric value */\n max?: number;\n\n /** Custom message for max validation */\n maxMessage?: string;\n\n // =============================================================================\n // PATTERN VALIDATORS\n // =============================================================================\n\n /** RegExp pattern for validation */\n pattern?: string | RegExp;\n\n /** Custom message for pattern validation */\n patternMessage?: string;\n\n /** Custom message for legacy CPF validation */\n cpfMessage?: string;\n\n /** Custom message for legacy CNPJ validation */\n cnpjMessage?: string;\n\n /** Custom message for alphanumeric CNPJ validation */\n cnpjAlphaMessage?: string;\n\n /** Built-in legacy CPF validation */\n cpf?: boolean;\n /** Built-in legacy CNPJ validation */\n cnpj?: boolean;\n /** Built-in auto-detect CPF/CNPJ validation */\n cpfCnpj?: boolean;\n /** Built-in alphanumeric CNPJ validation */\n cnpjAlpha?: boolean;\n\n /** Built-in email validation */\n email?: boolean;\n\n /** Custom message for email validation */\n emailMessage?: string;\n\n /** Built-in URL validation */\n url?: boolean;\n\n /** Custom message for URL validation */\n urlMessage?: string;\n\n // =============================================================================\n // ADVANCED VALIDATORS\n // =============================================================================\n\n /** Minimum number of words for text content */\n minWords?: number;\n\n /** Require checkbox to be checked (for checkbox fields) */\n requiredChecked?: boolean;\n\n /** Custom synchronous validator function */\n customValidator?: (value: any, context?: any) => boolean | string | null;\n\n /** Custom asynchronous validator function */\n asyncValidator?: (\n value: any,\n context?: any,\n ) => Promise<boolean | string | null>;\n\n /** Cross-field validation - must match another field */\n matchField?: string;\n\n /** Custom message for field matching validation */\n matchFieldMessage?: string;\n\n /** Unique value validation via API call */\n uniqueValidator?: (value: any) => Promise<boolean>;\n\n /** Custom message for unique validation */\n uniqueMessage?: string;\n\n /** Conditional validation rules */\n conditionalValidation?: {\n condition: (formValue: any) => boolean;\n validators: Omit<ValidatorOptions, 'conditionalValidation'>;\n }[];\n\n // =============================================================================\n // VALIDATION BEHAVIOR\n // =============================================================================\n\n /** When to trigger validation */\n validationTrigger?: 'change' | 'blur' | 'submit' | 'immediate';\n\n /** Debounce time for validation in milliseconds */\n validationDebounce?: number;\n\n /** Show validation errors inline */\n showInlineErrors?: boolean;\n\n /** Custom error display position */\n errorPosition?: 'bottom' | 'top' | 'tooltip';\n}\n\n/**\n * Configuration for field options in selection components.\n *\n * Supports both static arrays and dynamic loading from APIs\n * with flexible data transformation capabilities.\n */\nexport interface FieldOption {\n /** The actual value to be stored */\n value: any;\n\n /** Display text shown to user */\n text: string;\n\n /** Optional grouping for organized display */\n group?: string;\n\n /** Whether this option is disabled */\n disabled?: boolean;\n\n /** Additional data associated with option */\n data?: any;\n\n /** CSS class for styling */\n cssClass?: string;\n\n /** Alternative CSS class property name */\n class?: string;\n\n /** Icon to display with option */\n icon?: string;\n\n /** Tooltip text for option */\n tooltip?: string;\n\n /** Detailed description for the option */\n description?: string;\n}\n\n/**\n * Angular Material specific styling and behavior options.\n *\n * Covers appearance, theming, density, and interaction patterns\n * specific to Material Design 3 components.\n */\nexport interface MaterialDesignConfig {\n /** Material appearance variant */\n appearance?: 'fill' | 'outline';\n\n /** Material color theme */\n color?: 'primary' | 'accent' | 'warn';\n\n /** Label floating behavior */\n floatLabel?: 'auto' | 'always';\n\n /** Subscript sizing strategy */\n subscriptSizing?: 'fixed' | 'dynamic';\n\n /** Hide required marker asterisk */\n hideRequiredMarker?: boolean;\n\n /** Component density */\n density?: 'comfortable' | 'compact' | 'dense';\n\n /** Disable ripple effects */\n disableRipple?: boolean;\n\n /** Custom theme palette override */\n customPalette?: {\n primary?: string;\n accent?: string;\n warn?: string;\n };\n\n /** Animation configuration */\n animations?: {\n disabled?: boolean;\n duration?: number;\n easing?: string;\n };\n}\n\n// =============================================================================\n// FIELD METADATA - CORE INTERFACE\n// =============================================================================\n\n/**\n * Comprehensive metadata interface for form fields.\n *\n * This is the main interface that extends ComponentMetadata with field-specific\n * properties covering behavior, validation, data binding, and UI configuration.\n *\n * @example\n * ```typescript\n * const emailField: FieldMetadata = {\n * name: 'email',\n * label: 'Email Address',\n * controlType: 'input',\n * required: true,\n * validators: {\n * required: true,\n * email: true,\n * requiredMessage: 'Email is required',\n * emailMessage: 'Please enter a valid email'\n * },\n * materialDesign: {\n * appearance: 'outline',\n * color: 'primary'\n * }\n * };\n * ```\n */\nexport interface FieldMetadata extends ComponentMetadata {\n // =============================================================================\n // IDENTITY AND STRUCTURE\n // =============================================================================\n\n /** Unique field identifier (required) */\n name: string;\n\n /** Display label for the field */\n label: string;\n\n /** Field control type for component resolution */\n controlType: FieldControlType;\n\n /** Data type for processing and validation */\n dataType?: FieldDataType;\n\n /** Display order in form */\n order?: number;\n\n /** Logical grouping of related fields */\n group?: string;\n\n /** Detailed description for tooltips */\n description?: string;\n\n // =============================================================================\n // BEHAVIOR AND STATE\n // =============================================================================\n\n /** Field is required */\n required?: boolean;\n\n /** Field is disabled */\n disabled?: boolean;\n\n /** Field is read-only */\n readOnly?: boolean;\n\n /** Field is hidden from display */\n hidden?: boolean;\n\n /** Default value when form initializes */\n defaultValue?: any;\n\n /** Placeholder text for empty fields */\n placeholder?: string;\n\n /** Help text displayed below field */\n hint?: string;\n\n /** Tooltip text on hover */\n tooltip?: string;\n\n // =============================================================================\n // VALIDATION CONFIGURATION\n // =============================================================================\n\n /** Comprehensive validation rules */\n validators?: ValidatorOptions;\n\n /** When to validate field changes */\n validationMode?: 'immediate' | 'blur' | 'submit';\n\n /** Debounce time for validation (ms) */\n debounceTime?: number;\n\n /** Validate uniqueness via API */\n unique?: boolean;\n\n // =============================================================================\n // DATA BINDING AND OPTIONS\n // =============================================================================\n\n /** Static options for selection fields */\n options?: FieldOption[];\n\n /** API endpoint for dynamic data loading */\n endpoint?: string;\n\n /** Field name for option values */\n valueField?: string;\n\n /** Field name for option display text */\n displayField?: string;\n\n /** Field name for option filtering */\n filterField?: string;\n\n /** Additional query parameters for API calls */\n queryParams?: Record<string, any>;\n\n /** Cache duration for remote data (ms) */\n cacheDuration?: number;\n\n // =============================================================================\n // UI CONFIGURATION\n // =============================================================================\n\n /** Field width specification */\n width?: string | number;\n\n /** Use flexbox sizing */\n isFlex?: boolean;\n\n /** Icons configuration */\n prefixIcon?: string;\n suffixIcon?: string;\n iconPosition?: 'start' | 'end';\n iconSize?: 'small' | 'medium' | 'large';\n\n /** Input masking pattern */\n mask?: string;\n\n /** Format for display values */\n format?: string;\n\n /** Material Design specific configuration */\n materialDesign?: MaterialDesignConfig;\n\n // =============================================================================\n // ADVANCED BEHAVIOR\n // =============================================================================\n\n /** Fields this field depends on */\n dependencyFields?: string[];\n\n /** Conditional required based on other fields */\n conditionalRequired?: string | ((formValue: any) => boolean);\n\n /** Conditional visibility rules */\n conditionalDisplay?: string | ((formValue: any) => boolean);\n\n /** Reset value when dependency changes */\n resetOnDependentChange?: boolean;\n\n /** Enable native field-to-field dependency cascade inside the same form */\n enableDependencyCascade?: boolean;\n\n /**\n * Map dependent field name -> backend filter key or { key, valuePath }\n * Supports dot-path in 'key' to build nested filter objects\n */\n dependencyFilterMap?: Record<string, string | { key: string; valuePath?: string }>;\n\n /** Value path for extracting the dependent value (string or per-field map) */\n dependencyValuePath?: string | Record<string, string>;\n\n /** Debounce (ms) applied to combined dependencies */\n dependencyDebounceMs?: number;\n\n /** How to merge calculated fragment: 'replace' | 'merge' */\n dependencyMergeStrategy?: 'replace' | 'merge';\n\n /** When to reload on dependency change */\n dependencyLoadOnChange?: 'respectLoadOn' | 'immediate' | 'manual';\n\n /** Optional: suppress inline errors briefly when cascade resets value */\n suppressInlineErrorsOnCascade?: boolean;\n\n /** Allow inline editing in tables */\n inlineEditing?: boolean;\n\n /** Transform value before display */\n transformDisplayValue?: (value: any) => any;\n\n /** Transform value before saving */\n transformSaveValue?: (value: any) => any;\n\n /** Where to apply optional text transformation (editor setting) */\n textTransformApply?: 'displayOnly' | 'saveOnly' | 'both';\n\n // =============================================================================\n // CONTEXT VISIBILITY\n // =============================================================================\n\n /** Contexts where field should be visible */\n visibleIn?: Array<'form' | 'filter' | 'table' | 'dialog'>;\n\n /** Hide in specific form contexts */\n formHidden?: boolean;\n\n /** Hide in table contexts */\n tableHidden?: boolean;\n\n /** Hide in filter contexts */\n filterHidden?: boolean;\n\n // =============================================================================\n // ACCESSIBILITY\n // =============================================================================\n\n /** ARIA label for screen readers */\n ariaLabel?: string;\n\n /** ARIA described by element IDs */\n ariaDescribedBy?: string;\n\n /** Tab index for keyboard navigation */\n tabIndex?: number;\n\n /** Keyboard shortcuts */\n accessKey?: string;\n}\n\n// =============================================================================\n// CONTROL TYPE CONSTANTS\n// =============================================================================\n\n// FieldControlType é importado das constantes para evitar duplicação\n\n// FieldDataType é importado das constantes para evitar duplicação\n\n// =============================================================================\n// DATE RANGE SPECIFIC INTERFACES\n// =============================================================================\n\n/**\n * Date range value object for daterange control type.\n *\n * Represents a date range selection with start and end dates,\n * commonly used in corporate reporting and analytics scenarios.\n *\n * @example\n * ```typescript\n * const quarterRange: DateRangeValue = {\n * startDate: new Date('2024-01-01'),\n * endDate: new Date('2024-03-31'),\n * preset: 'thisQuarter',\n * timezone: 'America/New_York'\n * };\n * ```\n */\nexport interface DateRangeValue {\n /** Start date of the range */\n startDate: Date | null;\n\n /** End date of the range */\n endDate: Date | null;\n\n /** Applied preset name if range was selected via preset */\n preset?: string;\n\n /** Timezone context for the range */\n timezone?: string;\n\n /** User-friendly label for the range */\n label?: string;\n\n /** Whether this is a comparison range */\n isComparison?: boolean;\n}\n\n/**\n * Numeric range value object for price range fields.\n *\n * Represents a monetary range with minimum and maximum values.\n */\nexport interface PriceRangeValue {\n /** Lower bound of the range */\n minPrice: number | null;\n\n /** Upper bound of the range */\n maxPrice: number | null;\n}\n\n/**\n * The value for a generic numeric range slider.\n */\nexport interface RangeSliderValue {\n /** Start value of the range */\n start: number | null;\n\n /** End value of the range */\n end: number | null;\n}\n\n/**\n * Corporate preset configuration for date ranges.\n *\n * Defines common business date ranges used in enterprise applications\n * for reporting, analytics, and compliance purposes.\n */\nexport interface DateRangePreset {\n /** Unique identifier for the preset */\n id: string;\n\n /** Display label for the preset */\n label: string;\n\n /** Icon to display with the preset */\n icon?: string;\n\n /** Category for grouping presets */\n category?: 'standard' | 'fiscal' | 'custom' | 'comparison';\n\n /** Function to calculate the date range */\n calculateRange: (referenceDate?: Date) => DateRangeValue;\n\n /** Whether this preset is commonly used */\n isPopular?: boolean;\n\n /** Tooltip description */\n description?: string;\n\n /** Display order in preset list */\n order?: number;\n}\n\n// =============================================================================\n// TYPE UTILITIES\n// =============================================================================\n\n/** Helper type for partial field metadata updates */\nexport type PartialFieldMetadata = Partial<FieldMetadata> & {\n name: string;\n};\n\n/** Helper type for required core field properties */\nexport type CoreFieldMetadata = Pick<\n FieldMetadata,\n 'name' | 'label' | 'controlType'\n>;\n\n/** Helper type for field metadata without computed properties */\nexport type SerializableFieldMetadata = Omit<\n FieldMetadata,\n | 'conditionalRequired'\n | 'conditionalDisplay'\n | 'transformDisplayValue'\n | 'transformSaveValue'\n>;\n","/**\n * @fileoverview Specialized metadata interfaces for Angular Material components\n *\n * This file extends the base FieldMetadata interface with component-specific\n * properties for each Material Design component type.\n *\n * Each interface follows the pattern:\n * - Extends FieldMetadata\n * - Adds component-specific properties\n * - Maintains type safety with literal types\n * - Supports Material Design 3 specifications\n */\n\nimport {\n FieldMetadata,\n FieldControlType,\n} from './component-metadata.interface';\nexport type {\n DateRangeValue,\n PriceRangeValue,\n RangeSliderValue,\n} from './component-metadata.interface';\nimport { ThemePalette } from '@angular/material/core';\nimport { ValidationErrors } from '@angular/forms';\n\n// =============================================================================\n// ENHANCED VALIDATION TYPES (CRITICAL ISSUE #11)\n// =============================================================================\n\n/**\n * Enhanced validation context with type safety\n * Provides comprehensive context for custom validation functions\n */\nexport interface ValidationContext {\n /** Current form values */\n formValue: Record<string, any>;\n /** Current field name */\n fieldName: string;\n /** Field metadata configuration */\n metadata: FieldMetadata;\n /** Form state information */\n formState?: {\n pristine: boolean;\n dirty: boolean;\n touched: boolean;\n submitted: boolean;\n };\n}\n\n/**\n * Type-safe validation result\n * Can return null (valid), string (error message), or ValidationErrors object\n */\nexport type ValidationResult = null | string | ValidationErrors;\n\n/**\n * Enhanced validator function with proper typing\n * Replaces the generic (value: any, context?: any) => boolean | string | null\n */\nexport type ValidatorFunction = (\n value: any,\n context: ValidationContext,\n) => ValidationResult | Promise<ValidationResult>;\n\n/**\n * Validation configuration with enhanced options\n */\nexport interface EnhancedValidationConfig {\n /** Custom validator function with proper typing */\n customValidator?: ValidatorFunction;\n /** Async validator function */\n asyncValidator?: ValidatorFunction;\n /** Debounce time for async validation (ms) */\n asyncDebounceTime?: number;\n /** Validation triggers */\n validationTriggers?: ('change' | 'blur' | 'submit')[];\n /** Show validation errors immediately */\n showErrorsImmediately?: boolean;\n}\n\n// =============================================================================\n// INPUT FIELD INTERFACES\n// =============================================================================\n\n/**\n * Base interface for all Material input-like components.\n *\n * Centraliza propriedades compartilhadas entre os 13 componentes de input\n * planejados (color, date, datetime-local, email, month, number, password,\n * search, tel, text, time, url e week). Interfaces especializadas devem\n * estender esta base e definir `controlType` e `inputType` apropriados.\n */\nexport interface BaseMaterialInputMetadata extends FieldMetadata {\n /** Máximo de caracteres permitidos */\n maxLength?: number;\n\n /** Mínimo de caracteres exigidos */\n minLength?: number;\n\n /** Dica para autofill do navegador */\n autocomplete?: string;\n\n /** Atributo nativo readonly do input */\n readonly?: boolean;\n}\n\n/**\n * Specialized metadata for Material Input components.\n *\n * Interface baseada na especificação oficial do Angular Material Input (matInput directive).\n * Projetada especificamente para ambientes corporativos com foco em:\n * - Validação robusta e estados de erro customizáveis\n * - Integração completa com mat-form-field (labels, hints, errors)\n * - Suporte completo aos tipos HTML5 oficialmente suportados\n * - Acessibilidade WCAG 2.1 AA automática\n * - Recursos empresariais como readonly, disabled interactive, autofill\n *\n * @see https://material.angular.dev/components/input/api - Documentação oficial\n *\n * @example Configuração típica corporativa\n * ```typescript\n * const corporateEmailInput: MaterialInputMetadata = {\n * name: 'email',\n * label: 'Email Corporativo',\n * controlType: 'input',\n * inputType: 'email', // Tipo oficialmente suportado\n * autocomplete: 'email', // Integração com autofill corporativo\n * maxLength: 100,\n * required: true,\n * spellcheck: false,\n * readonly: false, // Material Input native property\n * disabledInteractive: false, // Mantém interatividade quando disabled\n * errorStateMatcher: 'showOnDirtyAndInvalid', // Controle corporativo de erros\n * hint: 'Use seu email institucional (@empresa.com)',\n * showCharacterCount: true\n * };\n * ```\n *\n * @example Input numérico para formulários financeiros\n * ```typescript\n * const financialInput: MaterialInputMetadata = {\n * name: 'valor',\n * label: 'Valor (R$)',\n * controlType: 'input',\n * inputType: 'number', // Suporte nativo a number\n * inputMode: 'decimal', // Teclado otimizado mobile\n * prefix: 'R$', // mat-form-field prefix\n * suffix: '.00', // mat-form-field suffix\n * required: true,\n * readonly: false,\n * autoFocus: true, // Foco automático para workflows\n * hint: 'Digite apenas números'\n * };\n * ```\n */\nexport interface MaterialInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.INPUT;\n\n /**\n * HTML5 input type - APENAS tipos oficialmente suportados pelo matNativeControl\n *\n * Tipos suportadas conforme documentação oficial:\n * - 'text': Texto padrão (mais comum em corporativo)\n * - 'email': Validação automática de email + teclado mobile otimizado\n * - 'password': Mascaramento automático + recursos de segurança\n * - 'tel': Formatação telefone + teclado numérico mobile\n * - 'url': Validação de URL + autocompletar navegador\n * - 'search': Interface de busca + botão clear automático\n * - 'number': Input numérico + controles spinner + validação\n * - 'date': Datepicker nativo do navegador\n * - 'datetime-local': Data e hora local\n * - 'time': Seletor de hora\n * - 'month': Seletor de mês/ano\n * - 'week': Seletor de semana\n * - 'color': Seletor de cor nativo\n *\n * ⚠️ IMPORTANTE: Usar tipos não suportados causará erro \"Input type isn't supported by matInput\"\n *\n * @default 'text'\n */\n inputType?:\n | 'text'\n | 'email'\n | 'password'\n | 'tel'\n | 'url'\n | 'search'\n | 'number'\n | 'date'\n | 'datetime-local'\n | 'time'\n | 'month'\n | 'week'\n | 'color';\n\n // maxLength, minLength e autocomplete foram movidos para\n // BaseMaterialInputMetadata para eliminar duplicação entre\n // componentes especializados.\n\n /**\n * Atributo HTML spellcheck - Verificação ortográfica\n *\n * Configuração recomendada:\n * - true: Campos de texto livre (comentários, descrições)\n * - false: Códigos, emails, URLs, senhas, dados técnicos\n *\n * @default true (comportamento padrão do navegador)\n */\n spellcheck?: boolean;\n\n /**\n * Transformação de texto via CSS text-transform\n *\n * Aplicações corporativas:\n * - 'uppercase': Códigos, siglas, placas\n * - 'lowercase': URLs, emails padronizados\n * - 'capitalize': Nomes próprios, títulos\n * - 'none': Texto livre, preservar entrada do usuário\n */\n textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n\n /**\n * HTML inputmode - Otimização de teclado mobile\n *\n * Essencial para apps corporativas mobile:\n * - 'text': Teclado padrão com predição\n * - 'numeric': Apenas números (0-9)\n * - 'decimal': Números com ponto decimal\n * - 'tel': Layout de telefone\n * - 'email': Layout otimizado para email\n * - 'url': Layout para URLs\n * - 'search': Layout de busca\n *\n * ⚠️ Não confundir com inputType - inputMode é só visual mobile\n */\n inputMode?:\n | 'text'\n | 'numeric'\n | 'decimal'\n | 'tel'\n | 'email'\n | 'url'\n | 'search';\n\n /**\n * Foco automático no carregamento do componente\n *\n * Usar com cuidado em ambientes corporativos:\n * ✅ Bom: Primeiro campo de formulários de login\n * ✅ Bom: Campo de busca em páginas de consulta\n * ❌ Evitar: Formulários longos (UX ruim)\n * ❌ Evitar: Múltiplos campos com autoFocus\n *\n * Chama automaticamente o método focus() do Material Input\n */\n autoFocus?: boolean;\n\n /**\n * Exibir contador de caracteres visual\n *\n * Renderizado como mat-hint align=\"end\" automático\n * Funciona em conjunto com maxLength para mostrar \"N / Max\"\n *\n * Útil para:\n * - Campos com limite rígido (descrições, comentários)\n * - Feedback visual em tempo real\n * - Compliance com guidelines de UX corporativo\n */\n showCharacterCount?: boolean;\n\n /**\n * Configuração de botão \"limpar\" integrado\n *\n * Implementado como mat-icon-button no suffix do mat-form-field\n * Comum em:\n * - Campos de busca corporativa\n * - Formulários de filtros\n * - Campos opcionais que precisam reset rápido\n */\n clearButton?: {\n /** Habilitar funcionalidade de clear */\n enabled: boolean;\n /** Nome do ícone Material (default: 'clear') */\n icon?: string;\n /** Posição fixa no 'end' conforme Material Design */\n position?: 'end';\n /** Tooltip text for accessibility */\n tooltip?: string;\n /** ARIA label for screen readers */\n ariaLabel?: string;\n /** Show only when field has value */\n showOnlyWhenFilled?: boolean;\n };\n\n // =============================================================================\n // PROPRIEDADES NATIVAS DO MATERIAL INPUT (conforme API oficial)\n // =============================================================================\n\n /**\n * Manter interatividade quando disabled\n *\n * ⚠️ NÃO IMPLEMENTADO: Funcionalidade planejada mas não desenvolvida\n * Será implementada em versão futura\n *\n * @todo Implementar na próxima iteração\n * @see MatInput.disabledInteractive property\n */\n disabledInteractive?: boolean;\n\n /**\n * Estratégia customizada para exibição de erros\n *\n * ⚠️ PARCIALMENTE IMPLEMENTADO: Interface existe mas lógica não aplicada\n * Atualmente usa apenas comportamento padrão do Material\n *\n * @todo Implementar ErrorStateMatcher na próxima iteração\n * @see MatInput.errorStateMatcher property\n */\n errorStateMatcher?:\n | 'default'\n | 'showOnDirtyAndInvalid'\n | 'showOnSubmitted'\n | 'showImmediately';\n\n // =============================================================================\n // INTEGRAÇÃO COM MAT-FORM-FIELD (recursos automáticos)\n // =============================================================================\n\n /**\n * Texto de prefixo (antes do input)\n *\n * Renderizado como <mat-icon matPrefix> ou <span matPrefix>\n * Exemplos corporativos:\n * - Símbolos monetários: 'R$', '$', '€'\n * - Códigos: 'REF:', 'ID:'\n * - Ícones: 'person', 'email', 'phone'\n */\n prefix?: string;\n\n /**\n * Texto de sufixo (após o input)\n *\n * Renderizado como <mat-icon matSuffix> ou <span matSuffix>\n * Exemplos corporativos:\n * - Unidades: 'kg', 'm²', '%'\n * - Ações: Botão de busca, clear, etc.\n * - Status: Ícones de validação\n */\n suffix?: string;\n\n /**\n * Texto de dica contextual\n *\n * Renderizado como <mat-hint>\n * Posicionamento automático ou customizável\n *\n * Boas práticas corporativas:\n * - Exemplo de formato esperado\n * - Instruções de preenchimento\n * - Limitações ou regras de negócio\n */\n hint?: string;\n\n /**\n * Alinhamento da dica (hint)\n *\n * - 'start': Alinhado à esquerda\n * - 'end': Alinhado à direita (comum para contadores)\n *\n * @default 'start'\n */\n hintAlign?: 'start' | 'end';\n\n // =============================================================================\n // PROPRIEDADES ÓRFÃS IMPLEMENTADAS - Alinhamento com componentes\n // =============================================================================\n\n /**\n * Configuração de aparência Material Design\n *\n * Propriedades usadas pelos componentes mas que estavam ausentes da interface.\n * Adicionadas para alinhamento entre interface e implementação.\n */\n materialDesign?: {\n /** Aparência do mat-form-field */\n appearance?: 'fill' | 'outline';\n /** Cor do tema Material */\n color?: 'primary' | 'accent' | 'warn';\n /** Comportamento do float label */\n floatLabel?: 'always' | 'auto';\n /** Dimensionamento do subscript */\n subscriptSizing?: 'fixed' | 'dynamic';\n /** Ocultar marcador de obrigatório */\n hideRequiredMarker?: boolean;\n };\n\n /**\n * Ícone de prefixo (usado pela implementação)\n * Renderizado como mat-icon matPrefix\n */\n prefixIcon?: string;\n\n /**\n * Cor do ícone de prefixo\n * Aceita paleta Material ('primary' | 'accent' | 'warn') ou qualquer cor CSS (hex, rgb(), var(--...))\n * Quando paleta Material é usada, aplica-se via [color]; caso contrário, via [style.color]\n */\n prefixIconColor?: string;\n\n /**\n * Ícone de sufixo (usado pela implementação)\n * Renderizado como mat-icon matSuffix\n */\n suffixIcon?: string;\n\n /**\n * Cor do ícone de sufixo\n * Aceita paleta Material ('primary' | 'accent' | 'warn') ou qualquer cor CSS (hex, rgb(), var(--...))\n * Quando paleta Material é usada, aplica-se via [color]; caso contrário, via [style.color]\n */\n suffixIconColor?: string;\n\n /**\n * Valor mínimo para inputs numéricos\n * Usado pela implementação em inputs type=\"number\"\n */\n min?: number;\n\n /**\n * Valor máximo para inputs numéricos\n * Usado pela implementação em inputs type=\"number\"\n */\n max?: number;\n\n /**\n * Incremento para inputs numéricos\n * Usado pela implementação em inputs type=\"number\"\n */\n step?: number;\n\n /**\n * @deprecated Use 'readonly' instead. Will be removed in next version.\n * This property exists for backward compatibility only.\n */\n readOnly?: boolean;\n}\n\n/**\n * Specialized metadata for Material Textarea components.\n *\n * Interface baseada na especificação oficial do Angular Material Textarea (matInput directive).\n * Projetada para ambientes corporativos com foco em:\n * - Entrada de texto multi-linha com controle preciso de dimensionamento\n * - Auto-resize inteligente usando CDK Textarea Autosize\n * - Integração completa com mat-form-field (mesmos recursos do input)\n * - Validação robusta para campos de texto longo\n * - Recursos empresariais específicos para formulários complexos\n *\n * @see https://material.angular.dev/components/input/api - Documentação oficial\n * @see https://material.angular.dev/cdk/text-field/api - CDK TextareaAutosize\n *\n * @example Configuração típica para comentários corporativos\n * ```typescript\n * const commentTextarea: MaterialTextareaMetadata = {\n * name: 'observacoes',\n * label: 'Observações',\n * controlType: 'textarea',\n * rows: 4, // Altura inicial\n * autoSize: true, // Auto-resize conforme conteúdo\n * minRows: 2, // Altura mínima\n * maxRows: 8, // Altura máxima\n * maxLength: 1000, // Limite corporativo padrão\n * showCharacterCount: true, // Feedback visual\n * spellcheck: true, // Verificação ortográfica\n * wrap: 'soft', // Quebra de linha automática\n * placeholder: 'Digite suas observações aqui...',\n * hint: 'Máximo 1000 caracteres. Use linguagem profissional.'\n * };\n * ```\n *\n * @example Configuração para código/texto técnico\n * ```typescript\n * const codeTextarea: MaterialTextareaMetadata = {\n * name: 'codigo',\n * label: 'Código SQL',\n * controlType: 'textarea',\n * rows: 10, // Mais espaço para código\n * autoSize: false, // Tamanho fixo para código\n * resize: 'vertical', // Permite redimensionar verticalmente\n * maxLength: 5000, // Limite maior para código\n * spellcheck: false, // Sem verificação para código\n * wrap: 'off', // Sem quebra automática (código)\n * readonly: false,\n * hint: 'Cole ou digite seu código SQL aqui'\n * };\n * ```\n */\nexport interface MaterialTextareaMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.TEXTAREA;\n /** CSS visual text transform */\n textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n\n /**\n * Número de linhas visíveis iniciais\n *\n * Define a altura inicial do textarea em linhas de texto.\n * Funciona como o atributo HTML rows padrão.\n *\n * Configurações comuns corporativas:\n * - Comentários curtos: 2-3 linhas\n * - Descrições médias: 4-6 linhas\n * - Texto longo: 8-12 linhas\n * - Código/JSON: 10-20 linhas\n *\n * @default 4 (padrão do navegador)\n */\n rows?: number;\n\n /**\n * Número máximo de linhas para auto-resize\n *\n * Trabalha em conjunto com autoSize=true e cdkTextareaAutosize.\n * Evita que o textarea cresça infinitamente, mantendo a UX controlada.\n *\n * Importante para:\n * - Layouts responsivos (não quebrar design)\n * - Performance (textareas muito grandes são lentos)\n * - UX consistente em diferentes dispositivos\n *\n * @see CDK TextareaAutosize cdkAutosizeMaxRows\n */\n maxRows?: number;\n\n /**\n * Número mínimo de linhas para auto-resize\n *\n * Trabalha com autoSize=true para garantir altura mínima.\n * Evita que textarea fique muito pequeno quando vazio.\n *\n * Geralmente menor que rows:\n * - minRows: altura quando vazio\n * - rows: altura inicial com conteúdo\n * - maxRows: altura máxima permitida\n */\n minRows?: number;\n\n /**\n * Comportamento de redimensionamento manual\n *\n * Controla se usuário pode redimensionar manualmente:\n * - 'none': Sem redimensionamento (padrão Material)\n * - 'vertical': Apenas altura (mais comum)\n * - 'horizontal': Apenas largura (raro)\n * - 'both': Altura e largura (evitar em layouts fixos)\n * - 'auto': Baseado no CSS/browser default\n *\n * ✅ Recomendado: 'vertical' para ambiente corporativo\n * ❌ Evitar: 'horizontal'/'both' (quebra layout responsivo)\n */\n resize?: 'none' | 'both' | 'horizontal' | 'vertical' | 'auto';\n\n /**\n * Auto-redimensionamento baseado no conteúdo\n *\n * Usa CDK TextareaAutosize para crescer/diminuir automaticamente.\n * Muito útil para UX moderna e formulários dinâmicos.\n *\n * Benefícios corporativos:\n * - UX fluida (não precisa scroll interno)\n * - Melhor para mobile/tablet\n * - Adapta a quantidade de conteúdo\n *\n * Cuidados:\n * - Usar sempre com maxRows definido\n * - Testar em diferentes dispositivos\n * - Pode impactar performance com muito texto\n *\n * @see CDK cdkTextareaAutosize directive\n */\n autoSize?: boolean;\n\n /**\n * Comprimento máximo de caracteres\n *\n * Idêntico ao input, mas importante para textareas:\n * - Integração com showCharacterCount\n * - Validação automática do Angular Forms\n * - Feedback visual em tempo real\n *\n * Limites comuns corporativos:\n * - Comentários: 500-1000 caracteres\n * - Descrições: 1000-2000 caracteres\n * - Observações longas: 2000-5000 caracteres\n * - Código/JSON: 10000+ caracteres\n */\n maxLength?: number;\n\n /**\n * Comprimento mínimo de caracteres\n * Funciona idêntico ao MaterialInputMetadata\n */\n minLength?: number;\n\n /**\n * Exibir contador de caracteres\n *\n * Ainda mais importante em textarea que em input:\n * - Usuários digitam mais texto\n * - Harder to estimate character count visually\n * - Critical for compliance/business rules\n *\n * Renderizado como mat-hint align=\"end\"\n * Formato: \"N / MaxLength\" ou \"N characters\"\n */\n showCharacterCount?: boolean;\n\n /**\n * Comportamento de quebra de linha\n *\n * Atributo HTML wrap:\n * - 'soft': Quebra visual, mas não insere \\n no valor (padrão)\n * - 'hard': Quebra visual E insere \\n no valor (raro)\n * - 'off': Sem quebra automática, scroll horizontal\n *\n * Uso corporativo:\n * - 'soft': Texto natural, comentários, descrições\n * - 'off': Código, URLs, dados estruturados\n * - 'hard': Raramente usado (compatibilidade legacy)\n *\n * @default 'soft'\n */\n wrap?: 'soft' | 'hard' | 'off';\n\n /**\n * Verificação ortográfica (idêntico ao input)\n *\n * Ainda mais relevante para textarea:\n * - Mais texto = mais chance de erros\n * - Importante para textos corporativos profissionais\n *\n * @default true\n */\n spellcheck?: boolean;\n\n /**\n * Estado readonly (idêntico ao input)\n * @see MaterialInputMetadata.readonly\n */\n readonly?: boolean;\n\n /**\n * Foco automático (herdado, usar com cautela)\n *\n * Menos comum em textarea:\n * - Geralmente não é o primeiro campo\n * - Pode ser intrusivo (abre teclado mobile)\n * - Use apenas em casos específicos\n */\n autoFocus?: boolean;\n\n /**\n * Texto de dica contextual (idêntico ao input)\n * @see MaterialInputMetadata.hint\n */\n hint?: string;\n\n /**\n * Estratégia de exibição de erros (herdado)\n *\n * Para textareas, considerar:\n * - 'showOnDirtyAndInvalid': Melhor para textos longos\n * - Usuários gastam mais tempo digitando\n * - Validação imediata pode ser intrusiva\n */\n errorStateMatcher?:\n | 'default'\n | 'showOnDirtyAndInvalid'\n | 'showOnSubmitted'\n | 'showImmediately';\n\n /**\n * Número de colunas para textarea\n * Controla largura inicial em caracteres\n */\n cols?: number;\n\n /**\n * Configuração de aparência Material Design\n * Idêntica ao MaterialInputMetadata para consistência\n */\n materialDesign?: {\n appearance?: 'fill' | 'outline';\n color?: 'primary' | 'accent' | 'warn';\n floatLabel?: 'always' | 'auto';\n subscriptSizing?: 'fixed' | 'dynamic';\n hideRequiredMarker?: boolean;\n };\n\n /**\n * Ícone de prefixo (usado pela implementação)\n */\n prefixIcon?: string;\n\n /**\n * Ícone de sufixo (usado pela implementação)\n */\n suffixIcon?: string;\n\n /**\n * @deprecated Use 'readonly' instead. Will be removed in next version.\n */\n readOnly?: boolean;\n}\n\n/**\n * Metadata for `<input type=\"number\">` rendered via Material directives.\n *\n * Planejamento para o futuro `NumberInputComponent`, com suporte a\n * formatação, incremento e validação de faixa numérica.\n */\nexport interface MaterialNumericMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.NUMERIC_TEXT_BOX;\n inputType: 'number';\n\n /** Minimum allowed value */\n min?: number;\n\n /** Maximum allowed value */\n max?: number;\n\n /** Step increment for number controls */\n step?: number;\n\n /** Number formatting options */\n numberFormat?: {\n /** Decimal places to display */\n decimalPlaces?: number;\n /** Thousand separator character */\n thousandSeparator?: string;\n /** Decimal separator character */\n decimalSeparator?: string;\n /** Currency symbol */\n currency?: string;\n /** Currency position */\n currencyPosition?: 'before' | 'after';\n /** Locale for number formatting */\n locale?: string;\n };\n}\n\n/**\n * Specialized metadata for Material Select components.\n *\n * Handles dropdown selection with single/multiple values,\n * option groups, and dynamic data loading.\n */\nexport interface MaterialSelectMetadata extends FieldMetadata {\n controlType:\n | typeof FieldControlType.SELECT\n | typeof FieldControlType.MULTI_SELECT;\n\n /** Selection options */\n selectOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n description?: string;\n disabled?: boolean;\n group?: string;\n }>;\n\n /** Placeholder option text for empty selection */\n emptyOptionText?: string;\n\n /** Enable multiple selection */\n multiple?: boolean;\n\n /** Enable option search/filter */\n searchable?: boolean;\n\n /** Show \"Select All\" option for multiple */\n selectAll?: boolean;\n\n /** Maximum number of selections (for multiple) */\n maxSelections?: number;\n}\n\n/**\n * Metadata for Material Autocomplete components.\n *\n * Supports static or remote option sources with search capabilities.\n */\nexport interface MaterialAutocompleteMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.AUTO_COMPLETE;\n\n /** Available options for selection */\n selectOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n disabled?: boolean;\n }>;\n\n /** Backend resource for dynamic options */\n resourcePath?: string;\n\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n\n /** Minimum length before triggering search */\n minLength?: number;\n\n /** Debounce time for remote filtering */\n validationDebounce?: number;\n}\n\n/**\n * Metadata for Material Chip Input components combining chips and autocomplete.\n *\n * Supports multiple selections with optional remote loading and\n * keyboard interactions.\n */\nexport interface MaterialChipsMetadata\n extends Omit<MaterialAutocompleteMetadata, 'controlType'> {\n controlType: typeof FieldControlType.CHIP_INPUT;\n\n /** Maximum number of selections allowed */\n maxSelections?: number;\n\n /** Whether chips can be removed by the user */\n removable?: boolean;\n\n /** Adds a chip when the input loses focus */\n addOnBlur?: boolean;\n}\n\n/**\n * Metadata for Material Button Toggle components.\n *\n * Provides grouped toggle buttons supporting single or multiple selection\n * with customizable appearance and option state.\n */\nexport interface MaterialButtonToggleMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.BUTTON_TOGGLE;\n\n /** Toggle button options */\n toggleOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n }>;\n}\n\n/**\n * Metadata for Material Transfer List component.\n *\n * Enables moving items between two lists with drag & drop and\n * standard selection controls.\n */\nexport interface MaterialTransferListMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.TRANSFER_LIST;\n\n /** Available options (alternative to generic FieldMetadata.options) */\n transferOptions?: Array<{\n value: any;\n label?: string;\n text?: string;\n disabled?: boolean;\n }>;\n\n /** Backend resource for dynamic option loading */\n resourcePath?: string;\n\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n\n /** Display multiple selections */\n multiple?: boolean;\n\n /** Button toggle appearance */\n appearance?: 'legacy' | 'standard';\n\n /** Theme color */\n color?: ThemePalette;\n}\n\n/**\n * Metadata for Material Selection List components.\n *\n * Provides a list-style selector supporting single or multiple selection\n * with optional remote option loading.\n */\nexport interface MaterialSelectionListMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.SELECTION_LIST;\n\n /** List options to display */\n listOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n disabled?: boolean;\n }>;\n\n /** Enable multiple selection */\n multiple?: boolean;\n\n /** Enable option search/filter */\n searchable?: boolean;\n\n /** Show \"Select All\" option for multiple */\n selectAll?: boolean;\n\n /** Maximum number of selections (for multiple) */\n maxSelections?: number;\n\n /** Backend resource for dynamic option loading */\n resourcePath?: string;\n\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n\n /** Labels for source and destination lists */\n leftLabel?: string;\n rightLabel?: string;\n\n /** Placeholders for source and destination filters */\n leftPlaceholder?: string;\n rightPlaceholder?: string;\n\n /** Minimum selections required */\n minSelections?: number;\n}\n\n/**\n * Specialized metadata for Material Checkbox components.\n *\n * Handles boolean values with indeterminate state support\n * and checkbox group functionality.\n */\nexport interface MaterialCheckboxMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.CHECKBOX;\n\n /** Checkbox options for group selection */\n checkboxOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n description?: string;\n disabled?: boolean;\n }>;\n\n /** Enable option search/filter */\n searchable?: boolean;\n\n /** Show \"Select All\" option */\n selectAll?: boolean;\n\n /** Maximum number of selections */\n maxSelections?: number;\n\n /** Backend resource for dynamic option loading */\n resourcePath?: string;\n\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n\n /** Checkbox color theme */\n color?: ThemePalette;\n\n /** Checkbox label position */\n labelPosition?: 'before' | 'after';\n\n /** Enable indeterminate state */\n indeterminate?: boolean;\n\n /** Link text for checkbox with clickable link */\n linkText?: string;\n\n /** URL for checkbox link */\n linkUrl?: string;\n\n /** Link target (_blank or _self) */\n linkTarget?: '_blank' | '_self';\n}\n\n/**\n * Specialized metadata for Material Radio Button components.\n *\n * Handles single selection from a group of options\n * with horizontal/vertical layout support.\n */\nexport interface MaterialRadioMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.RADIO;\n\n /** Radio button options */\n radioOptions?: Array<{\n value: any;\n text: string;\n label?: string;\n description?: string;\n disabled?: boolean;\n }>;\n\n /** Backend resource for dynamic option loading */\n resourcePath?: string;\n\n /** Additional filter criteria for backend requests */\n filterCriteria?: Record<string, any>;\n\n /** Key for option label when loading from backend */\n optionLabelKey?: string;\n\n /** Key for option value when loading from backend */\n optionValueKey?: string;\n\n /** Layout direction */\n layout?: 'horizontal' | 'vertical';\n\n /** Radio button color theme */\n color?: ThemePalette;\n\n /** Label position relative to the radio button */\n labelPosition?: 'before' | 'after';\n}\n\n/**\n * Specialized metadata for Material Date Picker components.\n *\n * Handles date selection with calendar popup,\n * date range selection, and validation.\n */\nexport interface MaterialDatepickerMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.DATE_PICKER;\n\n /** Date format for display */\n dateFormat?: string;\n\n /** Minimum selectable date */\n minDate?: Date | string;\n\n /** Maximum selectable date */\n maxDate?: Date | string;\n\n /** Start view (month, year, multi-year) */\n startView?: 'month' | 'year' | 'multi-year';\n\n /** Date to open calendar at */\n startAt?: Date | string;\n\n /** Enables touch UI mode */\n touchUi?: boolean;\n\n /** Filter function for allowed dates */\n dateFilter?: (date: Date | null) => boolean;\n}\n\nexport interface MaterialDateRangeMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.DATE_RANGE;\n\n /** Minimum selectable date */\n minDate?: Date | string;\n\n /** Maximum selectable date */\n maxDate?: Date | string;\n\n /** Date to open calendar at */\n startAt?: Date | string;\n\n /** Enables touch UI mode */\n touchUi?: boolean;\n\n /** Filter function for allowed dates */\n dateFilter?: (date: Date | null) => boolean;\n\n /** Placeholder for start date input */\n startPlaceholder?: string;\n\n /** Placeholder for end date input */\n endPlaceholder?: string;\n\n /** Accessibility label for start date input */\n startAriaLabel?: string;\n\n /** Accessibility label for end date input */\n endAriaLabel?: string;\n\n /** Start view (month, year, multi-year) */\n startView?: 'month' | 'year' | 'multi-year';\n}\n\n/**\n * Metadata for a price range input using two currency fields.\n */\nexport interface MaterialPriceRangeMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.PRICE_RANGE;\n\n /** Minimum allowed value */\n min?: number;\n\n /** Maximum allowed value */\n max?: number;\n\n /** Step for value increments */\n step?: number;\n\n /** Currency code (USD, EUR, BRL, etc.) */\n currency: string;\n\n /** Currency symbol position */\n currencyPosition?: 'before' | 'after';\n\n /** Number of decimal places */\n decimalPlaces?: number;\n\n /** Locale for formatting */\n locale?: string;\n\n /** Thousands separator override */\n thousandsSeparator?: string;\n\n /** Decimal separator override */\n decimalSeparator?: string;\n\n /** Allow negative values */\n allowNegative?: boolean;\n\n /** Placeholder for start input */\n startPlaceholder?: string;\n\n /** Placeholder for end input */\n endPlaceholder?: string;\n\n /** Label for start input */\n startLabel?: string;\n\n /** Label for end input */\n endLabel?: string;\n}\n\n/**\n * Metadata for the generic numeric range slider component.\n */\nexport interface MaterialRangeSliderMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.RANGE_SLIDER;\n\n /** Slider mode */\n mode?: 'single' | 'range';\n\n /** Minimum allowed value */\n min?: number;\n\n /** Maximum allowed value */\n max?: number;\n\n /** Step for value increments */\n step?: number;\n\n /** Whether to show the thumb label */\n thumbLabel?: boolean;\n\n /** Tick configuration */\n showTicks?: boolean | 'auto';\n\n /** Use discrete slider */\n discrete?: boolean;\n\n /** Display vertically */\n vertical?: boolean;\n\n /** Invert slider direction */\n invert?: boolean;\n\n /** Minimum distance between start and end */\n minDistance?: number;\n\n /** Maximum distance between start and end */\n maxDistance?: number;\n\n /** Function to format display value */\n displayWith?: (value: number) => string;\n\n /** Show numeric input boxes */\n showInputs?: boolean;\n\n /** Custom validator messages */\n validators?: FieldMetadata['validators'] & {\n minMessage?: string;\n maxMessage?: string;\n rangeMessage?: string;\n distanceMessage?: string;\n };\n}\n\n/**\n * Specialized metadata for Material Button components.\n *\n * Handles action buttons with various styles,\n * icons, and click behaviors.\n */\nexport interface MaterialButtonMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.BUTTON;\n\n /** Button style variant */\n variant?: 'raised' | 'stroked' | 'flat' | 'icon' | 'fab' | 'mini-fab';\n\n /** Button color theme */\n color?: ThemePalette;\n\n /** Button icon */\n icon?: string;\n\n /** Icon position */\n buttonIconPosition?: 'before' | 'after';\n\n /** Button action/command */\n action?: string;\n\n /** Disable button ripple effect */\n disableRipple?: boolean;\n\n /** Confirmation message for destructive actions */\n confirmationMessage?: string;\n\n /** Confirmation dialog title */\n confirmationTitle?: string;\n\n /** Custom confirmation dialog buttons */\n confirmationButtons?: {\n confirm: string;\n cancel: string;\n };\n}\n\n// =============================================================================\n// FUTURE COMPONENT INTERFACES - PLANNING STAGE\n// =============================================================================\n//\n// ⚠️ IMPORTANTE: Estas interfaces foram criadas para definir a API futura\n// dos componentes, mas os componentes físicos ainda NÃO foram implementados.\n//\n// Status atual:\n// - ✅ Interface de metadata definida\n// - ❌ Componente físico não implementado\n// - ❌ Não registrado no ComponentRegistry\n//\n// Para usar essas interfaces, será necessário implementar os componentes\n// correspondentes em praxis-dynamic-fields/src/lib/components/\n// =============================================================================\n\n/**\n * Specialized metadata for Material Toggle/Switch components.\n *\n * Implemented via `MaterialToggleComponent` and registered in\n * `ComponentRegistryService`.\n *\n * Handles boolean toggle state with Material Design switch styling.\n */\nexport interface MaterialToggleMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.TOGGLE;\n\n /** Toggle color theme */\n color?: ThemePalette;\n\n /** Toggle label position */\n labelPosition?: 'before' | 'after';\n\n /** Hide toggle thumb icon */\n hideIcon?: boolean;\n\n /** Disable toggle ripple effect */\n disableRipple?: boolean;\n\n /** Toggle must be checked (Validators.requiredTrue) */\n requiredTrue?: boolean;\n}\n\n/**\n * Specialized metadata for Material Slider components.\n *\n * Implemented via `MaterialSliderComponent` and registered in\n * `ComponentRegistryService`.\n *\n * Handles numeric range selection with visual slider control.\n */\nexport interface MaterialSliderMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.SLIDER;\n\n /** Minimum value */\n min?: number;\n\n /** Maximum value */\n max?: number;\n\n /** Step increment */\n step?: number;\n\n /** Show value label */\n thumbLabel?: boolean;\n\n /** Slider orientation */\n vertical?: boolean;\n\n /** Slider color theme */\n color?: ThemePalette;\n\n /** Display tick marks along the slider track */\n showTicks?: boolean;\n\n /** Invert slider direction */\n invert?: boolean;\n}\n\n/**\n * Specialized metadata for Material Rating components.\n *\n * ⚠️ COMPONENTE NÃO IMPLEMENTADO - Interface de planejamento\n *\n * Para implementar: criar MaterialRatingComponent em components/material-rating/\n * e registrar no ComponentRegistryService\n *\n * Handles star rating or numeric rating selection.\n */\nexport interface MaterialRatingMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.RATING;\n\n /** Maximum rating value */\n max?: number;\n\n /** Rating precision (0.1, 0.5, 1) */\n precision?: number;\n\n /** Rating icon (default: star) */\n icon?: string;\n\n /** Empty icon (default: star_border) */\n emptyIcon?: string;\n\n /** Rating color theme */\n color?: ThemePalette;\n\n /** Enable half-star ratings */\n allowHalf?: boolean;\n\n /** Read-only mode */\n readonly?: boolean;\n\n /** Rating size */\n size?: 'small' | 'medium' | 'large';\n}\n\n/**\n * Specialized metadata for Material Color Picker components.\n *\n * ⚠️ COMPONENTE NÃO IMPLEMENTADO - Interface de planejamento\n *\n * Para implementar: criar MaterialColorPickerComponent em components/material-colorpicker/\n * e registrar no ComponentRegistryService\n *\n * Handles color selection with various picker interfaces.\n */\nexport interface MaterialColorPickerMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.COLOR_PICKER;\n\n /** Color picker format */\n format?: 'hex' | 'rgb' | 'hsl' | 'hsv';\n\n /** Show alpha/transparency slider */\n showAlpha?: boolean;\n\n /** Predefined color palette */\n presetColors?: string[];\n\n /** Allow custom colors */\n allowCustomColors?: boolean;\n\n /** Color picker variant */\n variant?: 'compact' | 'default' | 'block';\n\n /** Show color input field */\n showInput?: boolean;\n\n /** Show color preview */\n showPreview?: boolean;\n}\n\n// =============================================================================\n// SPECIALIZED COMPONENT INTERFACES - PLANNING STAGE\n// =============================================================================\n//\n// ⚠️ IMPORTANTE: Estas interfaces especializadas foram criadas para estender\n// funcionalidades dos componentes base, mas os componentes especializados\n// ainda NÃO foram implementados.\n//\n// Status atual:\n// - ✅ Interface de metadata definida\n// - ❌ Componente especializado não implementado\n// - ❌ Atualmente usa MaterialInputComponent genérico\n//\n// Estes tipos são registrados no ComponentRegistry mas apontam para\n// MaterialInputComponent. Para funcionalidade completa, implementar\n// componentes especializados correspondentes.\n// =============================================================================\n\n/**\n * Specialized metadata for Material Currency Input components.\n *\n * Implemented via `MaterialCurrencyComponent` and registered in\n * `ComponentRegistryService`.\n *\n * Handles monetary values with currency formatting and validation.\n */\nexport interface MaterialCurrencyMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.CURRENCY_INPUT;\n inputType: 'text';\n\n /** Currency code (USD, EUR, BRL, etc.) */\n currency: string;\n\n /** Currency symbol position */\n currencyPosition?: 'before' | 'after';\n\n /** Number of decimal places */\n decimalPlaces?: number;\n\n /** Locale for formatting */\n locale?: string;\n\n /** Allow negative values */\n allowNegative?: boolean;\n\n /** Thousands separator */\n thousandsSeparator?: string;\n\n /** Decimal separator */\n decimalSeparator?: string;\n}\n\n/**\n * Specialized metadata for CPF/CNPJ Input components.\n *\n * Handles Brazilian CPF/CNPJ documents with dynamic masking,\n * validation, and formatting for both legacy (numeric) and\n * new alphanumeric document types.\n */\nexport interface MaterialCpfCnpjMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.CPF_CNPJ_INPUT;\n inputType: 'text';\n\n /**\n * The type of document to validate against.\n * 'auto' will detect the type based on the number of digits.\n * @default 'auto'\n */\n documentType?: 'cpf' | 'cnpj' | 'auto';\n\n /**\n * The validation algorithm version to use.\n * 'legacy': Numeric-only validation.\n * 'alpha': Alphanumeric validation.\n * 'auto': Detects based on characters present.\n * @default 'auto'\n */\n version?: 'legacy' | 'alpha' | 'auto';\n\n /**\n * Date from which the 'alpha' version should be considered standard.\n * Can be used for automatic version switching in the future.\n */\n effectiveFrom?: Date;\n\n /**\n * If true, the component will emit only the digits (unmasked value)\n * when the form is submitted or the value is propagated.\n * @default true\n */\n unmaskOnSubmit?: boolean;\n\n /**\n * If true, the input will display the formatted mask and allow\n * users to paste a formatted value.\n * @default true\n */\n allowFormattedInput?: boolean;\n}\n\n/**\n * Specialized metadata for Material Email Input components.\n *\n * ⚠️ COMPONENTE ESPECIALIZADO NÃO IMPLEMENTADO - Interface de planejamento\n *\n * Atualmente: EMAIL_INPUT → MaterialInputComponent (genérico)\n * Para implementar: criar MaterialEmailComponent em components/material-email/\n *\n * Handles email addresses with validation and suggestions.\n */\nexport interface MaterialEmailMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.EMAIL_INPUT;\n inputType: 'email';\n\n /** Enable email domain suggestions */\n domainSuggestions?: string[];\n\n /** Validate email format on blur */\n validateOnBlur?: boolean;\n\n /** Show validation icon */\n showValidationIcon?: boolean;\n\n /** Allow multiple emails (comma-separated) */\n multiple?: boolean;\n\n /** Email separator for multiple emails */\n separator?: string;\n}\n\n/**\n * Specialized metadata for Material Phone Input components.\n *\n * ⚠️ COMPONENTE ESPECIALIZADO NÃO IMPLEMENTADO - Interface de planejamento\n *\n * Atualmente: PHONE → MaterialInputComponent (genérico)\n * Para implementar: criar MaterialPhoneComponent em components/material-phone/\n *\n * Handles phone numbers with international formatting.\n */\nexport interface MaterialPhoneMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.PHONE;\n inputType: 'tel';\n\n /** Default country code */\n defaultCountry?: string;\n\n /** Allowed country codes */\n allowedCountries?: string[];\n\n /** Show country selector */\n showCountrySelector?: boolean;\n\n /** Phone number format */\n phoneFormat?: 'national' | 'international' | 'e164';\n\n /** Enable auto-formatting while typing */\n autoFormat?: boolean;\n\n /** Validate phone number */\n validatePhoneNumber?: boolean;\n}\n\n/**\n * Metadata for Material Password Input components.\n *\n * TODO: Implement show/hide toggle and strength indicator.\n */\nexport interface MaterialPasswordMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.PASSWORD;\n inputType: 'password';\n}\n\n/**\n * Metadata for Material URL Input components.\n *\n * TODO: Add URL validation and preview options.\n */\nexport interface MaterialUrlInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.URL_INPUT;\n inputType: 'url';\n}\n\n/**\n * Metadata for Material Search Input components.\n *\n * TODO: Integrate with search handlers and clear button.\n */\nexport interface MaterialSearchInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.SEARCH_INPUT;\n inputType: 'search';\n}\n\n/**\n * Metadata for Material Date Input components.\n *\n * Supports native `min` and `max` attributes for constraining the\n * selectable date range.\n */\nexport interface MaterialDateInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.DATE_INPUT;\n inputType: 'date';\n /** Minimum selectable date in ISO format (YYYY-MM-DD). */\n min?: string;\n /** Maximum selectable date in ISO format (YYYY-MM-DD). */\n max?: string;\n}\n\n/**\n * Metadata for Material Datetime Local Input components.\n *\n * Supports native `min`, `max` and `step` attributes for constraining\n * selectable date-time ranges.\n *\n * TODO: Handle timezone conversion.\n */\nexport interface MaterialDatetimeLocalInputMetadata\n extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.DATETIME_LOCAL_INPUT;\n inputType: 'datetime-local';\n /** Minimum selectable date-time in ISO format (YYYY-MM-DDTHH:mm). */\n min?: string;\n /** Maximum selectable date-time in ISO format (YYYY-MM-DDTHH:mm). */\n max?: string;\n /** Step for minute increments in seconds. */\n step?: number;\n}\n\n/**\n * Metadata for Material Email Input components.\n *\n * Provides configuration for email fields with native autocomplete and\n * validation.\n */\nexport interface MaterialEmailInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.EMAIL_INPUT;\n inputType: 'email';\n}\n\n/**\n * Metadata for Material Month Input components.\n *\n * TODO: Validate month format and provide display options.\n */\nexport interface MaterialMonthInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.MONTH_INPUT;\n inputType: 'month';\n /** Minimum selectable month in ISO format (YYYY-MM). */\n min?: string;\n /** Maximum selectable month in ISO format (YYYY-MM). */\n max?: string;\n}\n\n/**\n * Metadata for Material Week Input components.\n *\n * TODO: Validate ISO week format and boundaries.\n */\nexport interface MaterialWeekInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.WEEK_INPUT;\n inputType: 'week';\n /** Minimum selectable week in ISO format (YYYY-Www). */\n min?: string;\n /** Maximum selectable week in ISO format (YYYY-Www). */\n max?: string;\n}\n\n/**\n * Metadata for Material Color Input components.\n *\n * TODO: Add color preview or palette integration.\n */\nexport interface MaterialColorInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.COLOR_INPUT;\n inputType: 'color';\n}\n\n/**\n * Metadata for Material Time Input components.\n *\n * TODO: Provide min/max and step configuration.\n */\nexport interface MaterialTimeInputMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.TIME_INPUT;\n inputType: 'time';\n /** Minimum time value in 24h format (HH:mm). */\n min?: string;\n /** Maximum time value in 24h format (HH:mm). */\n max?: string;\n /** Step for minute increments in seconds. */\n step?: number;\n}\n\n/**\n * Metadata for Material Timepicker components.\n *\n * Configures the Angular Material `mat-timepicker` which allows\n * selecting a time of day through an overlay panel.\n */\nexport interface MaterialTimepickerMetadata extends BaseMaterialInputMetadata {\n controlType: typeof FieldControlType.TIME_PICKER;\n /** Minimum selectable time in 24h format (HH:mm or HH:mm:ss). */\n min?: string;\n\n /** Maximum selectable time in 24h format (HH:mm or HH:mm:ss). */\n max?: string;\n\n /**\n * Interval between options in the timepicker.\n * Can be a number of seconds or a string with units like '30m'.\n * Ignored if `options` is provided.\n */\n interval?: number | string;\n\n /** Specific selectable time options. Takes precedence over `interval`. */\n timeOptions?: string[];\n\n /** Whether clicking the input should open the timepicker overlay. */\n openOnClick?: boolean;\n\n /** Use touch-friendly dialog UI. */\n touchUi?: boolean;\n\n /** Display time using 12-hour or 24-hour format. */\n format?: '12h' | '24h';\n\n /** Include seconds in the selection. */\n showSeconds?: boolean;\n\n /** Minute increment when entering time manually. */\n stepMinute?: number;\n\n /** Second increment when entering time manually. */\n stepSecond?: number;\n\n /** Identifier of a custom filter function to disable specific times. */\n timeFilter?: string;\n}\n\n/**\n * Node structure used by `MaterialMultiSelectTreeMetadata`.\n */\nexport interface MaterialTreeNode {\n /** Display label for the node */\n label: string;\n /** Value associated with the node */\n value: any;\n /** Whether the node is disabled */\n disabled?: boolean;\n /** Child nodes */\n children?: MaterialTreeNode[];\n}\n\n/**\n * Metadata configuration for the Material Multi Select Tree component.\n */\nexport interface MaterialMultiSelectTreeMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.MULTI_SELECT_TREE;\n /** Tree nodes to display */\n nodes?: MaterialTreeNode[];\n /** Enable search input */\n searchable?: boolean;\n /** Show select all option */\n selectAll?: boolean;\n /** Maximum number of selections allowed */\n maxSelections?: number;\n}\n\n/**\n * Metadata configuration for the Material Tree Select component.\n */\nexport interface MaterialTreeSelectMetadata extends FieldMetadata {\n controlType: typeof FieldControlType.TREE_SELECT;\n /** Tree nodes to display */\n nodes?: MaterialTreeNode[];\n /** Whether only leaf nodes can be selected */\n leafOnly?: boolean;\n /** Auto expand matches when searching */\n autoExpandOnSearch?: boolean;\n /** Return full path of selected node */\n returnPath?: boolean;\n /** Return the full node object */\n returnObject?: boolean;\n}\n","// helpers/ensure-ids.helper.ts\nimport { FormConfig, FormSection, FormRow, FormColumn } from '../models/form/form-config.model';\n\ntype EnsureIdsOptions = {\n /** Mantém IDs existentes se forem únicos. Default: true */\n keepExistingUnique?: boolean;\n /** Se true, aplica Object.freeze recursivamente no retorno. Default: false */\n freeze?: boolean;\n /** Gerador customizado de IDs (recebe o tipo e o Set de usados). */\n generateId?: (kind: 'section' | 'row' | 'col', used: Set<string>) => string;\n};\n\nfunction defaultGenerateId(kind: 'section' | 'row' | 'col', used: Set<string>): string {\n // determinístico + compacto, evitando Math.random (facilita tests/replays)\n let seq = 1;\n let id = `${kind}-${seq}`;\n while (used.has(id)) {\n seq++;\n id = `${kind}-${seq}`;\n }\n used.add(id);\n return id;\n}\n\n/** Normaliza string de ID (remove espaços, slug simples). */\nfunction normalizeId(candidate: string | undefined | null): string | undefined {\n if (!candidate) return undefined;\n const norm = String(candidate).trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '');\n return norm || undefined;\n}\n\n/** Adiciona um ID ao Set se válido e único, senão retorna undefined para gerar. */\nfunction takeOrGenerate(\n kind: 'section' | 'row' | 'col',\n candidate: string | undefined,\n used: Set<string>,\n keepExistingUnique: boolean,\n gen: (k: 'section' | 'row' | 'col', u: Set<string>) => string,\n): string {\n const norm = normalizeId(candidate);\n if (keepExistingUnique && norm && !used.has(norm)) {\n used.add(norm);\n return norm;\n }\n return gen(kind, used);\n}\n\n/** Deep freeze leve para objetos/arrays simples. */\nfunction deepFreeze<T>(obj: T): T {\n if (obj && typeof obj === 'object') {\n Object.freeze(obj);\n if (Array.isArray(obj)) {\n obj.forEach((v) => deepFreeze(v as any));\n } else {\n Object.values(obj as Record<string, unknown>).forEach((v) => deepFreeze(v as any));\n }\n }\n return obj;\n}\n\n/**\n * Garante que todas as sections/rows/columns do FormConfig possuam IDs únicos.\n * Retorna um NOVO objeto (sem mutar o original).\n */\nexport function ensureIds(config: FormConfig, options: EnsureIdsOptions = {}): FormConfig {\n const {\n keepExistingUnique = true,\n freeze = false,\n generateId = defaultGenerateId,\n } = options;\n\n const used = new Set<string>();\n\n const safeSections = (config.sections ?? []).map<FormSection>((section) => {\n const sectionId = takeOrGenerate('section', section.id, used, keepExistingUnique, generateId);\n\n const safeRows = (section.rows ?? []).map<FormRow>((row) => {\n const rowId = takeOrGenerate('row', row.id, used, keepExistingUnique, generateId);\n\n const safeColumns = (row.columns ?? []).map<FormColumn>((col) => {\n const colId = takeOrGenerate('col', (col as any).id, used, keepExistingUnique, generateId);\n // garantir fields como array\n const fields = Array.isArray(col.fields) ? col.fields : [];\n return {\n ...col,\n id: colId,\n fields,\n };\n });\n\n return {\n ...row,\n id: rowId,\n columns: safeColumns,\n };\n });\n\n return {\n ...section,\n id: sectionId,\n rows: safeRows,\n };\n });\n\n const out: FormConfig = {\n ...config,\n sections: safeSections,\n };\n\n return freeze ? deepFreeze(out) : out;\n}\n","import type { FieldMetadata } from '../models/component-metadata.interface';\nimport type { FormConfig } from '../models/form/form-config.model';\n\nfunction toNumberOrUndefined(v: any): number | undefined {\n if (v === null || v === undefined || v === '') return undefined;\n const n = Number(v);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/**\n * Normalize a single FieldMetadata object to the canonical format used by runtime and editor.\n * - Moves constraints from validators.* to top-level (required, minLength, maxLength, pattern)\n * - Normalizes readonly/readOnly -> readonly\n * - Preserves messages and validator behavior options in validators.*\n * - Returns a shallow-cloned normalized metadata object\n */\nexport function normalizeFieldConstraints<T extends FieldMetadata>(meta: T): T {\n if (!meta) return meta;\n const out: any = { ...meta };\n const v: any = { ...(meta as any).validators };\n\n // Move constraints to top-level if not already present\n if (out.required === undefined && v?.required !== undefined) out.required = !!v.required;\n if (out.minLength === undefined && v?.minLength !== undefined)\n out.minLength = toNumberOrUndefined(v.minLength);\n if (out.maxLength === undefined && v?.maxLength !== undefined)\n out.maxLength = toNumberOrUndefined(v.maxLength);\n if (out.pattern === undefined && v?.pattern !== undefined) out.pattern = v.pattern;\n\n // Unify readonly/readOnly -> readonly\n if (out.readonly === undefined && out.readOnly !== undefined) out.readonly = !!out.readOnly;\n if (out.readOnly !== undefined) delete out.readOnly;\n\n // Remove legacy constraint fields from validators (keep messages/options)\n if (v) {\n delete v.required;\n delete v.minLength;\n delete v.maxLength;\n delete v.pattern;\n out.validators = v;\n }\n\n return out as T;\n}\n\n/** Normalize an array of FieldMetadata objects */\nexport function normalizeFormMetadata(list: FieldMetadata[] | undefined | null): FieldMetadata[] {\n if (!Array.isArray(list)) return [];\n return list.map((m) => normalizeSelectLike(normalizeFieldConstraints(m)));\n}\n\n/** Normalize a full FormConfig object */\nexport function normalizeFormConfig(config: FormConfig): FormConfig {\n if (!config) return config;\n const normalized: FormConfig = { ...(config as any) };\n normalized.fieldMetadata = normalizeFormMetadata(config.fieldMetadata);\n return normalized;\n}\n\n/**\n * Normaliza propriedades específicas dos componentes de seleção para o formato canônico.\n * Remove alias e centraliza em chaves únicas por tipo.\n */\nfunction normalizeSelectLike<T extends FieldMetadata>(meta: T): T {\n if (!meta) return meta;\n const m: any = { ...meta };\n const ct = String(m.controlType || '');\n const warnings: string[] = [];\n const isDev = (): boolean => {\n try {\n // Angular CLI defines ngDevMode in dev builds\n return typeof (globalThis as any).ngDevMode !== 'undefined'\n ? !!(globalThis as any).ngDevMode\n : true;\n } catch {\n return true;\n }\n };\n\n // Unificar option label/value keys\n if (m.optionLabelKey == null && m.displayField != null) {\n m.optionLabelKey = m.displayField;\n warnings.push('displayField→optionLabelKey');\n }\n if (m.optionValueKey == null && m.valueField != null) {\n m.optionValueKey = m.valueField;\n warnings.push('valueField→optionValueKey');\n }\n // Unificar filtro\n if (m.filterCriteria == null && m.filter != null) {\n m.filterCriteria = m.filter;\n warnings.push('filter→filterCriteria');\n }\n // Unificar endpoint/resourcePath (preferir resourcePath)\n if (m.resourcePath == null && m.endpoint != null) {\n m.resourcePath = m.endpoint;\n warnings.push('endpoint→resourcePath');\n }\n\n // Determinar chave canônica de options por tipo\n const has = (k: string) => m[k] != null;\n const fromOptions = () => m.options ?? undefined;\n\n const assignIfMissing = (canonicalKey: string, aliases: string[]) => {\n if (!has(canonicalKey)) {\n for (const a of aliases) {\n if (has(a)) {\n m[canonicalKey] = m[a];\n warnings.push(`${a}→${canonicalKey}`);\n break;\n }\n }\n if (!has(canonicalKey)) {\n const o = fromOptions();\n if (o != null) m[canonicalKey] = o;\n }\n }\n };\n\n switch (ct) {\n case 'SELECT':\n case 'MULTI_SELECT':\n case 'AUTO_COMPLETE':\n assignIfMissing('selectOptions', ['listOptions', 'transferOptions', 'radioOptions', 'toggleOptions']);\n break;\n case 'SELECTION_LIST':\n assignIfMissing('listOptions', ['selectOptions', 'transferOptions']);\n break;\n case 'TRANSFER_LIST':\n assignIfMissing('transferOptions', ['selectOptions', 'listOptions']);\n break;\n case 'RADIO':\n assignIfMissing('radioOptions', ['selectOptions']);\n break;\n case 'BUTTON_TOGGLE':\n assignIfMissing('toggleOptions', ['selectOptions']);\n break;\n case 'TREE_SELECT':\n case 'MULTI_SELECT_TREE':\n assignIfMissing('nodes', []);\n break;\n }\n\n if (warnings.length && isDev()) {\n // Log único por campo para facilitar depuração\n try {\n console.warn('[MetadataNormalizer] Normalized aliases', {\n field: m.name,\n controlType: ct,\n changes: warnings,\n });\n } catch {}\n }\n\n return m as T;\n}\n","import type { FieldMetadata } from '../component-metadata.interface';\nimport type { FormHooksLayout, FormHookDeclarationLite } from '../../hooks/form-hooks.types';\nimport type {\n FormActionsLayout,\n FormBehaviorLayout,\n FormApiLayout,\n FormMessagesLayout,\n FormLayoutRule,\n} from './form-layout.model';\nimport { ensureIds } from '../../helpers/ensure-ids.helper';\nimport { normalizeFormMetadata } from '../../helpers/metadata-normalizer';\n\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface ColumnSpan {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n}\n\nexport interface ColumnOffset {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n}\n\nexport interface ColumnOrder {\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n}\n\nexport interface ColumnHidden {\n xs?: boolean;\n sm?: boolean;\n md?: boolean;\n lg?: boolean;\n xl?: boolean;\n}\n\nexport type ColumnAlign = 'start' | 'center' | 'end' | 'stretch';\n\nexport interface FormColumn {\n fields: string[];\n id: string;\n title?: string;\n span?: ColumnSpan;\n offset?: ColumnOffset;\n order?: ColumnOrder;\n hidden?: ColumnHidden;\n align?: ColumnAlign;\n padding?: number;\n className?: string;\n testId?: string;\n}\n\nexport interface FormRow {\n columns: FormColumn[];\n id: string;\n title?: string;\n /** Horizontal space between columns in this row (px). */\n gap?: number;\n /** Extra vertical space after this row (px). */\n rowGap?: number;\n}\n\nexport interface FormSection {\n id: string;\n title?: string;\n /** Optional icon name (Material Icons ligature or SVG name) */\n icon?: string;\n description?: string;\n /** Optional extra space after the entire section (px). */\n gapBottom?: number;\n /** Optional gap below the title (px) */\n titleGapBottom?: number;\n /** Optional gap below the description (px) */\n descriptionGapBottom?: number;\n /** Optional typography preset for the title */\n titleStyle?: string; // e.g., 'titleLarge' | 'titleMedium' | 'headlineSmall'\n /** Optional typography preset for the description */\n descriptionStyle?: string; // e.g., 'bodyLarge' | 'bodyMedium' | 'bodySmall'\n rows: FormRow[];\n}\n\nexport interface FormConfig {\n /** Layout sections for simple form organization */\n sections: FormSection[];\n\n /** Complete field metadata for all fields in the form */\n fieldMetadata?: FieldMetadata[];\n\n /** Form configuration metadata */\n metadata?: FormConfigMetadata;\n\n /** Form actions configuration */\n actions?: FormActionsLayout;\n\n /** Form behavior configuration */\n behavior?: FormBehaviorLayout;\n\n /** Form API configuration */\n api?: FormApiLayout;\n\n /** Form messages/i18n configuration */\n messages?: FormMessagesLayout;\n\n /** Form rules for dynamic behavior */\n formRules?: FormLayoutRule[];\n\n /**\n * Raw state emitted by the visual rule builder.\n * Stored separately to allow round-trip editing without losing metadata.\n */\n formRulesState?: unknown;\n\n /** Optional lifecycle hooks declared per stage */\n hooks?: FormHooksLayout;\n}\n\nexport interface FormConfigMetadata {\n /** Configuration version for migration support */\n version?: string;\n /** Last update timestamp */\n lastUpdated?: Date;\n /** Configuration source */\n source?: 'local' | 'server' | 'default';\n /** Server data hash for change detection */\n serverHash?: string;\n /**\n * Server schema identity used to build this configuration.\n * Format comes from buildSchemaId(path|operation|schemaType|internal|tenant|locale|origin).\n */\n schemaId?: string;\n /**\n * Context of the server schema used to compose this form.\n */\n schemaContext?: {\n path: string;\n operation: string;\n schemaType: 'response' | 'request';\n internal?: boolean;\n tenant?: string;\n locale?: string;\n };\n /** User customizations log */\n customizations?: CustomizationLog[];\n}\n\nexport interface CustomizationLog {\n /** Field that was customized */\n fieldName: string;\n /** Property that was changed */\n property: string;\n /** Previous value */\n oldValue: any;\n /** New value */\n newValue: any;\n /** When the change was made */\n timestamp: Date;\n /** Who/what made the change */\n source: 'user' | 'server' | 'system';\n}\n\nexport interface FormConfigState {\n config: FormConfig;\n isLoading: boolean;\n error?: string;\n}\n\nexport function createDefaultFormConfig(): FormConfig {\n const config = {\n sections: [\n {\n id: 'personal-info',\n title: 'Informações Pessoais',\n description: 'Dados básicos do usuário',\n rows: [\n {\n columns: [\n { fields: ['nome', 'email'] },\n { fields: ['telefone', 'dataNascimento'] },\n ],\n },\n {\n columns: [{ fields: ['endereco'] }, { fields: ['cidade', 'cep'] }],\n },\n ],\n },\n {\n id: 'professional-info',\n title: 'Informações Profissionais',\n description: 'Dados profissionais',\n rows: [\n {\n columns: [\n { fields: ['cargo', 'departamento'] },\n { fields: ['salario', 'dataAdmissao'] },\n ],\n },\n ],\n },\n ],\n } as any as FormConfig;\n\n return ensureIds(config);\n}\n\nexport function isValidFormConfig(config: any): config is FormConfig {\n return config && typeof config === 'object' && Array.isArray(config.sections);\n}\n\n/**\n * Cria configuração vazia para inicialização\n */\nexport function createEmptyFormConfig(): FormConfig {\n return { sections: [] };\n}\n\n/**\n * Merges field metadata into a FormConfig\n * Useful when combining layout with server-loaded metadata\n */\nexport function mergeFieldMetadata(\n config: FormConfig,\n fieldMetadata: FieldMetadata[],\n): FormConfig {\n return {\n ...config,\n fieldMetadata: fieldMetadata,\n metadata: {\n ...config.metadata,\n lastUpdated: new Date(),\n },\n };\n}\n\n/**\n * Extracts field metadata for fields referenced in a FormConfig\n * Useful for getting only the metadata that's actually used in the layout\n */\nexport function getReferencedFieldMetadata(\n config: FormConfig,\n allFieldMetadata: FieldMetadata[],\n): FieldMetadata[] {\n // Get all field names referenced in the config\n const referencedFieldNames = new Set<string>();\n\n config.sections.forEach((section) => {\n section.rows.forEach((row) => {\n row.columns.forEach((column) => {\n column.fields.forEach((fieldName) => {\n referencedFieldNames.add(fieldName);\n });\n });\n });\n });\n\n // Return only metadata for referenced fields\n return allFieldMetadata.filter((metadata) =>\n referencedFieldNames.has(metadata.name),\n );\n}\n\n/**\n * Synchronization result for field metadata changes\n */\nexport interface SyncResult {\n hasChanges: boolean;\n addedFields: FieldMetadata[];\n removedFields: string[];\n modifiedFields: FieldModification[];\n conflicts: FieldConflict[];\n}\n\nexport interface FieldModification {\n fieldName: string;\n property: string;\n localValue: any;\n serverValue: any;\n}\n\nexport interface FieldConflict {\n fieldName: string;\n reason: 'user-customized' | 'type-mismatch' | 'validation-conflict';\n resolution: 'keep-local' | 'use-server' | 'merge';\n}\n\n/**\n * Synchronizes local config with server metadata\n * Detects additions, removals, and modifications\n */\nexport function syncWithServerMetadata(\n localConfig: FormConfig,\n serverMetadata: FieldMetadata[],\n): { config: FormConfig; syncResult: SyncResult } {\n // Normalize both sides to a canonical structure to avoid alias drift\n const localFields = normalizeFormMetadata(localConfig.fieldMetadata || []);\n const serverFields = normalizeFormMetadata(serverMetadata || []);\n\n const localFieldsMap = new Map(localFields.map((f) => [f.name, f]));\n const serverFieldsMap = new Map(serverFields.map((f) => [f.name, f]));\n\n // Detect additions/removals\n const addedFields = serverFields.filter((f) => !localFieldsMap.has(f.name));\n const removedFields = localFields\n .filter((f) => !serverFieldsMap.has(f.name))\n .map((f) => f.name);\n\n // Merge overlapping fields: prefer server as base, preserve local customizations\n const mergedOverlapping: FieldMetadata[] = [];\n const modifiedFields: FieldModification[] = [];\n\n localFields.forEach((localField) => {\n const serverField = serverFieldsMap.get(localField.name);\n if (!serverField) return; // handled later\n\n // Deep-ish merge with special handling for validators/options\n const base: any = { ...serverField };\n const loc: any = { ...localField };\n const mergedValidators = { ...(serverField as any).validators, ...(localField as any).validators };\n\n // Options/nodes family: keep local options if provided, else server\n const pick = (k: string) => (loc[k] !== undefined ? loc[k] : base[k]);\n const merged: any = {\n ...base,\n ...loc,\n validators: mergedValidators,\n selectOptions: pick('selectOptions'),\n listOptions: pick('listOptions'),\n transferOptions: pick('transferOptions'),\n radioOptions: pick('radioOptions'),\n toggleOptions: pick('toggleOptions'),\n nodes: pick('nodes'),\n };\n\n mergedOverlapping.push(merged);\n\n // Track simple modifications for diagnostics\n ['label', 'required', 'maxLength', 'minLength', 'dataType', 'controlType'].forEach(\n (prop) => {\n if ((loc as any)[prop] !== (base as any)[prop]) {\n modifiedFields.push({\n fieldName: localField.name,\n property: prop,\n localValue: (loc as any)[prop],\n serverValue: (base as any)[prop],\n });\n }\n },\n );\n });\n\n // Build merged metadata list: overlapping (merged) + server-only + local-only\n const mergedNames = new Set(mergedOverlapping.map((f) => f.name));\n const mergedFieldMetadata: FieldMetadata[] = [\n ...mergedOverlapping,\n ...serverFields.filter((f) => !mergedNames.has(f.name) && !localFieldsMap.has(f.name)),\n ...localFields.filter((f) => !serverFieldsMap.has(f.name)),\n ];\n\n // Update sections to include new server-only fields, if layout exists\n const updatedSections = [...(localConfig.sections || [])];\n if (addedFields.length > 0 && updatedSections.length > 0) {\n const lastSection = updatedSections[updatedSections.length - 1];\n if (!lastSection.rows || lastSection.rows.length === 0) {\n (lastSection as any).rows = [{ columns: [] }];\n }\n const lastRow = lastSection.rows[lastSection.rows.length - 1];\n if (!lastRow.columns) (lastRow as any).columns = [] as any[];\n addedFields.forEach((field) => {\n lastRow.columns.push({ fields: [field.name] } as any);\n });\n }\n\n const syncResult: SyncResult = {\n hasChanges:\n addedFields.length > 0 ||\n removedFields.length > 0 ||\n modifiedFields.length > 0,\n addedFields,\n removedFields,\n modifiedFields,\n conflicts: [],\n };\n\n const updatedConfig: FormConfig = {\n ...localConfig,\n sections: updatedSections,\n fieldMetadata: mergedFieldMetadata,\n metadata: {\n ...localConfig.metadata,\n lastUpdated: new Date(),\n serverHash: generateMetadataHash(serverFields),\n },\n };\n\n \n\n return { config: updatedConfig, syncResult };\n}\n\n/**\n * Generates a hash from metadata for change detection\n */\nfunction generateMetadataHash(metadata: FieldMetadata[]): string {\n const relevant = metadata.map((f) => ({\n name: f.name,\n type: f.controlType,\n required: f.required,\n validators: f.validators,\n }));\n return btoa(JSON.stringify(relevant)).substring(0, 16);\n}\n\n/**\n * Converte FormLayout (do protótipo) para FormConfig (da biblioteca)\n * Compatibilidade entre diferentes estruturas de formulário\n */\nexport function convertFormLayoutToConfig(formLayout: any): FormConfig {\n if (!formLayout || !formLayout.fieldsets) {\n return createDefaultFormConfig();\n }\n\n const sections = formLayout.fieldsets.map((fieldset: any, index: number) => ({\n id: fieldset.id || `section-${index}`,\n title: fieldset.title || `Seção ${index + 1}`,\n description: fieldset.description,\n rows: fieldset.rows?.map((row: any) => ({\n columns: row.fields?.map((field: any) => ({\n fields: Array.isArray(field) ? field : [field.name || field],\n })) || [{ fields: [] }],\n })) || [\n {\n columns: [\n {\n fields: fieldset.fields?.map((f: any) => f.name || f) || [],\n },\n ],\n },\n ],\n })) as any as FormSection[];\n\n return ensureIds({ sections });\n}\n","import { GridPageDefinition, GridWidgetInstance } from '../../widgets/grid-page.model';\n\n/**\n * Identity/scope information for multi-tenant persistence.\n */\nexport interface PageIdentity {\n /** Application identifier (optional, for multi-app environments) */\n appId?: string;\n /** Tenant identifier */\n tenantId?: string;\n /** User identifier (for user-scoped pages) */\n userId?: string;\n /** Route path used as primary location key (e.g., '/dashboard/sales') */\n routePath: string;\n /** Optional locale for i18n variants */\n locale?: string;\n}\n\n/**\n * Minimal persisted widget instance record with a stable unique id.\n * The `key` continues to serve as logical name within the page.\n */\nexport interface PersistedWidgetInstance extends GridWidgetInstance {\n /** Stable unique id for the widget instance (uuid) */\n id: string;\n}\n\n/**\n * Page definition with widget-level ids added. Use for persistence payloads.\n */\nexport interface GridPageDefinitionWithIds extends Omit<GridPageDefinition, 'widgets'> {\n widgets: PersistedWidgetInstance[];\n}\n\n/**\n * Persisted Page record (server-side resource).\n */\nexport interface PersistedPageConfig {\n /** Stable page id (uuid) */\n id: string;\n /** Natural key composed from identity (e.g., app:tenant:user:route) */\n key: string;\n /** Semantic version for migrations (e.g., '1.0.0') */\n version: string;\n /** Human-friendly title/description */\n title?: string;\n description?: string;\n /** Tags for search/categorization */\n tags?: string[];\n /** Scope/identity of this page */\n identity: PageIdentity;\n /** Lifecycle status */\n status: 'draft' | 'published' | 'archived';\n /** Actual page structure with widget ids */\n page: GridPageDefinitionWithIds;\n /** Audit */\n owner?: string;\n createdAt: string; // ISO string\n updatedAt: string; // ISO string\n /** Optional parent linkage (for versioning/derivations) */\n parentId?: string;\n}\n\n/** Utility: generate a random id using crypto.randomUUID or fallback. */\nexport function generateId(): string {\n const g = (globalThis as any).crypto?.randomUUID?.();\n return g || `id_${Math.random().toString(36).slice(2, 10)}_${Date.now().toString(36)}`;\n}\n\n/** Utility: build a natural key from identity fields. */\nexport function buildPageKey(identity: PageIdentity): string {\n const app = sanitize(identity.appId || 'app');\n const tenant = sanitize(identity.tenantId || '*');\n const user = sanitize(identity.userId || '*');\n const route = sanitize(identity.routePath || '/');\n const locale = identity.locale ? `:${sanitize(identity.locale)}` : '';\n return `${app}:${tenant}:${user}:${route}${locale}`;\n}\n\nfunction sanitize(s: string): string {\n return String(s).replace(/\\s+/g, '_').replace(/[:]/g, '-');\n}\n\n/**\n * Ensure that each widget has a stable id. If missing, assigns a new one.\n * Returns the new page definition (immutable) and an index by key/id.\n */\nexport function ensurePageIds(\n page: GridPageDefinition,\n): {\n page: GridPageDefinitionWithIds;\n byKey: Map<string, PersistedWidgetInstance>;\n byId: Map<string, PersistedWidgetInstance>;\n} {\n const widgets: PersistedWidgetInstance[] = (page.widgets || []).map((w) => ({\n id: (w as any).id || generateId(),\n ...w,\n }));\n const withIds: GridPageDefinitionWithIds = { ...page, widgets };\n const byKey = new Map<string, PersistedWidgetInstance>();\n const byId = new Map<string, PersistedWidgetInstance>();\n for (const w of widgets) {\n byKey.set(w.key, w);\n byId.set(w.id, w);\n }\n return { page: withIds, byKey, byId };\n}\n\n/**\n * Create a persisted page record from an in-memory page definition and identity.\n */\nexport function createPersistedPage(\n identity: PageIdentity,\n page: GridPageDefinition,\n opts?: { id?: string; title?: string; description?: string; tags?: string[]; owner?: string; parentId?: string; version?: string; status?: PersistedPageConfig['status'] },\n): PersistedPageConfig {\n const { page: pageWithIds } = ensurePageIds(page);\n const now = new Date().toISOString();\n return {\n id: opts?.id || generateId(),\n key: buildPageKey(identity),\n version: opts?.version || '1.0.0',\n title: opts?.title,\n description: opts?.description,\n tags: opts?.tags || [],\n identity,\n status: opts?.status || 'draft',\n page: pageWithIds,\n owner: opts?.owner,\n createdAt: now,\n updatedAt: now,\n parentId: opts?.parentId,\n };\n}\n\n","// Global configuration model for cross-library defaults\n// Designed to be minimal and avoid coupling to feature-library types\n\nimport type { TableConfig } from '../models/table-config.model';\nimport type { GlobalDialogConfig } from './global-dialog-config.model';\n\nexport type FormOpenMode = 'route' | 'modal' | 'drawer';\n\nexport interface GlobalCrudActionDefaults {\n openMode?: FormOpenMode;\n route?: string;\n formId?: string;\n}\n\nexport interface GlobalCrudDefaults {\n openMode?: FormOpenMode;\n modal?: Record<string, any>;\n back?: Record<string, any>;\n header?: Record<string, any>;\n}\n\nexport interface GlobalCrudConfig {\n defaults?: GlobalCrudDefaults;\n actionDefaults?: Record<string, GlobalCrudActionDefaults>;\n}\n\nexport interface GlobalDynamicFieldsAsyncSelectConfig {\n loadOn?: 'open' | 'init' | 'none';\n pageSize?: number;\n useCursor?: boolean;\n}\n\nexport interface GlobalDynamicFieldsCascadeConfig {\n enable?: boolean;\n loadOnChange?: 'respectLoadOn' | 'immediate' | 'manual';\n debounceMs?: number;\n}\n\nexport interface GlobalDynamicFieldsConfig {\n asyncSelect?: GlobalDynamicFieldsAsyncSelectConfig;\n cascade?: GlobalDynamicFieldsCascadeConfig;\n}\n\n// Keep table global config focused on behavior/appearance and related subtrees\nexport type GlobalTableConfig = (\n Partial<\n Pick<\n TableConfig,\n | 'behavior'\n | 'appearance'\n | 'toolbar'\n | 'actions'\n | 'messages'\n | 'localization'\n | 'performance'\n >\n > & {\n /** UI defaults specific to the PraxisFilter (above the table) */\n filteringUi?: {\n overlayVariant?: 'card' | 'frosted';\n overlayBackdrop?: boolean;\n advancedOpenMode?: 'overlay' | 'modal' | 'drawer';\n };\n }\n);\n\nexport interface GlobalConfig {\n crud?: GlobalCrudConfig;\n dynamicFields?: GlobalDynamicFieldsConfig;\n table?: GlobalTableConfig;\n dialog?: GlobalDialogConfig;\n // Extend with other domains as needed (dynamicForm, tabs, etc.)\n}\n","// Global Dialog domain types for GlobalConfig (kept independent of @praxisui/dialog types)\n\nexport type GlobalDialogAriaRole = 'dialog' | 'alertdialog';\n\nexport interface GlobalDialogPosition {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n}\n\nexport interface GlobalDialogAction {\n id?: string;\n text: string;\n role?: 'primary' | 'secondary' | 'danger' | 'close' | 'custom';\n close?: boolean;\n icon?: string | null;\n cssClass?: string | string[] | Record<string, boolean>;\n}\n\nexport interface GlobalDialogAnimation {\n type?: 'translate' | 'slide' | 'fade' | 'expand' | 'zoom';\n direction?: 'up' | 'down' | 'left' | 'right';\n duration?: number;\n easing?: string;\n}\n\nexport interface GlobalDialogStyles {\n actionsAlignment?: 'start' | 'center' | 'end' | 'stretched';\n actionsPadding?: string;\n containerElevationShadow?: string;\n containerMaxWidth?: string;\n containerMinWidth?: string;\n containerShape?: string;\n containerSmallMaxWidth?: string;\n contentPadding?: string;\n headlinePadding?: string;\n withActionsContentPadding?: string;\n containerColor?: string;\n subheadColor?: string;\n supportingTextColor?: string;\n subheadFont?: string;\n subheadLineHeight?: string;\n subheadSize?: string;\n subheadTracking?: string;\n subheadWeight?: string | number;\n supportingTextFont?: string;\n supportingTextLineHeight?: string;\n supportingTextSize?: string;\n supportingTextTracking?: string;\n supportingTextWeight?: string | number;\n}\n\nexport interface GlobalDialogConfigEntry {\n title?: string;\n ariaRole?: GlobalDialogAriaRole;\n message?: string;\n icon?: string | null;\n width?: string | number | null;\n height?: string | number | null;\n minWidth?: string | number | null;\n maxWidth?: string | number | null;\n minHeight?: string | number | null;\n maxHeight?: string | number | null;\n disableClose?: boolean;\n hasBackdrop?: boolean;\n closeOnBackdropClick?: boolean;\n panelClass?: string | string[] | Record<string, boolean>;\n backdropClass?: string | string[] | Record<string, boolean>;\n position?: GlobalDialogPosition;\n animation?: boolean | GlobalDialogAnimation;\n styles?: GlobalDialogStyles;\n actions?: GlobalDialogAction[];\n}\n\nexport interface GlobalDialogConfig {\n defaults?: {\n confirm?: GlobalDialogConfigEntry;\n alert?: GlobalDialogConfigEntry;\n prompt?: GlobalDialogConfigEntry;\n };\n variants?: Record<string, GlobalDialogConfigEntry>;\n}\n\n","export const AllowedFileTypes = {\n ALL: '*/*',\n IMAGES: 'image/*',\n JSON: 'application/json',\n XML: 'application/xml,text/xml',\n HTML: 'text/html',\n CSV: 'text/csv,application/csv,application/vnd.ms-excel',\n PDF: 'application/pdf',\n WORD: 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n EXCEL: 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n TEXT: 'text/plain',\n PPT: 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ZIP: 'application/zip,application/x-zip-compressed',\n AUDIO: 'audio/*',\n VIDEO: 'video/*',\n CUSTOM: '',\n} as const;\n\nexport type AllowedFileTypes = typeof AllowedFileTypes[keyof typeof AllowedFileTypes];\n","export const IconPosition = {\n LEFT: 'left',\n RIGHT: 'right',\n TOP: 'top',\n BOTTOM: 'bottom',\n TOP_LEFT: 'top-left',\n TOP_RIGHT: 'top-right',\n BOTTOM_LEFT: 'bottom-left',\n BOTTOM_RIGHT: 'bottom-right',\n TOP_START: 'top-start',\n TOP_END: 'top-end',\n BOTTOM_START: 'bottom-start',\n BOTTOM_END: 'bottom-end',\n START: 'start',\n END: 'end',\n CENTER: 'center',\n INLINE: 'inline',\n INLINE_START: 'inline-start',\n INLINE_END: 'inline-end',\n INLINE_TOP: 'inline-top',\n INLINE_BOTTOM: 'inline-bottom',\n INLINE_START_TOP: 'inline-start-top',\n INLINE_START_BOTTOM: 'inline-start-bottom',\n INLINE_END_TOP: 'inline-end-top',\n NONE: 'none',\n} as const;\n\nexport type IconPosition = typeof IconPosition[keyof typeof IconPosition];\n","export const IconSize = {\n SMALL: 'sm',\n MEDIUM: 'md',\n LARGE: 'lg',\n XLARGE: 'xl',\n XXLARGE: 'xxl',\n XXXLARGE: 'xxxl',\n DEFAULT: 'default',\n AUTO: 'auto',\n NONE: 'none',\n FULL: 'full',\n FIT: 'fit',\n FILL: 'fill',\n COVER: 'cover',\n CONTAIN: 'contain',\n STRETCH: 'stretch',\n FIT_CONTENT: 'fit-content',\n FIT_VIEWPORT: 'fit-viewport',\n FIT_SCREEN: 'fit-screen',\n FIT_WINDOW: 'fit-window',\n FIT_PARENT: 'fit-parent',\n INHERIT: 'inherit',\n} as const;\n\nexport type IconSize = typeof IconSize[keyof typeof IconSize];\n","export const NumericFormat = {\n INTEGER: 'integer',\n DECIMAL: 'decimal',\n CURRENCY: 'currency',\n SCIENTIFIC: 'scientific',\n TIME: 'time',\n DATE: 'date',\n DATE_TIME: 'date-time',\n DURATION: 'duration',\n NUMBER: 'number',\n FRACTION: 'fraction',\n PERCENT: 'percent',\n} as const;\n\nexport type NumericFormat = typeof NumericFormat[keyof typeof NumericFormat];\n","export const ValidationPattern = {\n EMAIL: '^[\\\\w\\\\.-]+@[\\\\w\\\\.-]+\\\\.[a-zA-Z]{2,}$',\n URL: '^(https?|ftp)://[\\\\w\\\\.-]+(:\\\\d+)?(/[\\\\w\\\\.-]*)*/?$',\n DATE: '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(\\\\d{4})$',\n TIME: '^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])(:([0-5][0-9]))?$',\n DATETIME: '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(\\\\d{4}) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])(:([0-5][0-9]))?$',\n CPF: '^\\\\d{3}\\\\.\\\\d{3}\\\\.\\\\d{3}-\\\\d{2}$',\n CEP_BR: '^\\\\d{5}-\\\\d{3}$',\n RG: '^\\\\d{1,2}\\\\.\\\\d{3}\\\\.\\\\d{3}-[0-9X]$',\n CNPJ: '^\\\\d{2}\\\\.\\\\d{3}\\\\.\\\\d{3}/\\\\d{4}-\\\\d{2}$',\n CELULAR_BR: '^\\\\(\\\\d{2}\\\\) \\\\d{5}-\\\\d{4}$',\n TELEFONE_BR: '^\\\\(\\\\d{2}\\\\) \\\\d{4}-\\\\d{4}$',\n PHONE: '^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$',\n ONLY_NUMBERS: '^\\\\d+$',\n ONLY_NUMBERS_WITH_DASH: '^\\\\d+-?\\\\d+$',\n ONLY_LETTERS: '^[A-Za-zÀ-ÿ\\\\s]+$',\n ONLY_LETTERS_WITH_DASH: '^[A-Za-zÀ-ÿ\\\\s-]+$',\n ONLY_LETTERS_WITH_DASH_AND_NUMBERS: '^[A-Za-zÀ-ÿ\\\\s\\\\d-]+$',\n ONLY_LETTERS_WITH_NUMBERS: '^[A-Za-zÀ-ÿ\\\\d\\\\s]+$',\n ONLY_LETTERS_WITH_NUMBERS_AND_DASH: '^[A-Za-zÀ-ÿ\\\\d\\\\s-]+$',\n ONLY_LETTERS_WITH_NUMBERS_AND_UNDERSCORE: '^[A-Za-zÀ-ÿ\\\\d_\\\\s]+$',\n NAME_SIMPLE: '^[A-Za-zÀ-ÿ]{2,}$',\n NAME_WITH_SPACES: '^[A-Za-zÀ-ÿ\\\\s]{2,}$',\n FULL_NAME: '^[A-Za-zÀ-ÿ]+\\\\s[A-Za-zÀ-ÿ\\\\s]+$',\n FULL_NAME_WITH_PREPOSITIONS: '^[A-Za-zÀ-ÿ]+(?:\\\\s(?:da|de|do|das|dos|e|[A-Za-zÀ-ÿ])+)+$',\n NAME_WITH_APOSTROPHE: '^[A-Za-zÀ-ÿ\\\\\\'\\\\s-]+$',\n NAME_WITH_SPECIAL_CHARS: '^[A-Za-zÀ-ÿ\\\\\\'\\\\s\\\\-\\\\.]+$',\n INITIALS_WITH_LAST_NAME: '^(?:[A-Z]\\\\.\\\\s)*[A-Za-zÀ-ÿ]+(?:\\\\s[A-Za-zÀ-ÿ]+)+$',\n PASSPORT_BR: '^[A-Z]{2}[0-9]{6}$',\n PIS_PASEP: '^\\\\d{3}\\\\.\\\\d{5}\\\\.\\\\d{2}-\\\\d{1}$',\n TITULO_ELEITOR: '^\\\\d{4}\\\\.\\\\d{4}\\\\.\\\\d{4}$',\n CARTEIRA_TRABALHO: '^\\\\d{7,8}-\\\\d{1}$',\n REGISTRO_PROFISSIONAL: '^[A-Z]{2,3}-\\\\d{4,6}$',\n AGENCIA_BANCARIA: '^\\\\d{4}(-\\\\d{1})?$',\n CONTA_BANCARIA: '^\\\\d{5,12}(-\\\\d{1,2})?$',\n CODIGO_BANCO: '^\\\\d{3}$',\n ENDERECO_COMPLETO: '^[A-Za-zÀ-ÿ0-9\\\\s,.\\\\-]{10,}$',\n NUMERO_ENDERECO: '^\\\\d{1,6}([A-Za-z]|-\\\\d{1,3})?$',\n UUID: '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$',\n CODIGO_BARRAS_EAN13: '^\\\\d{13}$',\n CODIGO_BARRAS_BOLETO: '^\\\\d{44,48}$',\n CODIGO_RASTREIO_CORREIOS: '^[A-Z]{2}\\\\d{9}[A-Z]{2}$',\n PASSWORD_MEDIUM: '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d).{8,}$',\n PASSWORD_STRONG: '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)(?=.*[@#$%^&+=!]).{10,}$',\n TOKEN_AUTH: '^[A-Za-z0-9-_]{20,}\\\\.[A-Za-z0-9-_]{20,}\\\\.[A-Za-z0-9-_]{20,}$',\n IP_V4: '^(?:[0-9]{1,3}\\\\.){3}[0-9]{1,3}$',\n IP_V6: '^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$',\n MAC_ADDRESS: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$',\n DOMAIN_NAME: '^([a-zA-Z0-9]([a-zA-Z0-9\\\\-]{0,61}[a-zA-Z0-9])?\\\\.)+[a-zA-Z]{2,}$',\n INSCRICAO_ESTADUAL: '^\\\\d{8,14}$',\n INSCRICAO_MUNICIPAL: '^\\\\d{8,15}$',\n PROCESSO_JUDICIAL: '^\\\\d{7}-\\\\d{2}\\\\.\\\\d{4}\\\\.\\\\d{1}\\\\.\\\\d{2}\\\\.\\\\d{4}$',\n PASSPORT_INTL: '^[A-Z0-9]{6,9}$',\n PHONE_INTL: '^\\\\+\\\\d{1,3}\\\\s?\\\\(\\\\d{1,3}\\\\)\\\\s?\\\\d{3,10}$',\n SSN_US: '^\\\\d{3}-\\\\d{2}-\\\\d{4}$',\n CUSTOM: '',\n } as const;\n\n export type ValidationPattern = typeof ValidationPattern[keyof typeof ValidationPattern];\n","import { FieldDefinition } from '../models/field-definition.model';\nimport {\n FieldMetadata,\n ValidatorOptions,\n} from '../models/component-metadata.interface';\nimport { FieldControlType } from '../metadata/field-control-type.constants';\n\n/**\n * Field Definition → Field Metadata Mapper\n * ---------------------------------------\n * Converte FieldDefinition (resultado do SchemaNormalizerService) em FieldMetadata\n * consumido pelos componentes dinâmicos e pelo DynamicFieldLoader.\n *\n * Posição no pipeline\n * Normalizer (OpenAPI + x-ui) → FieldDefinition → [map] → FieldMetadata → DynamicFormService → FormGroup\n *\n * Responsabilidades\n * - Copiar propriedades de identidade/UX (name, label, controlType, group, order, etc.).\n * - Resolver endpoint/resourcePath (normalizando URLs absolutas → caminhos relativos).\n * - Propagar opções (options, optionLabelKey/optionValueKey, searchable para AUTO_COMPLETE).\n * - Consolidar validações em metadata.validators (ValidatorOptions) com mensagens e comportamento\n * (validationTrigger, validationDebounce, showInlineErrors, errorPosition).\n * - Manter compatibilidade com chaves adicionais específicas de UI (arquivos, requiredChecked, etc.).\n *\n * Notas de compatibilidade\n * - FieldDefinition.validationTriggers: string[] (herdado do backend/normalizer)\n * → mapeado para validators.validationTrigger (primeiro gatilho). O DynamicFormService usa este valor\n * para definir updateOn (change/blur/submit) por controle.\n * - allowedFileTypes, fileTypeMessage, maxFileSize: não constam no ValidatorOptions estrito,\n * mas são aceitos pelo builder (via any) para suportar upload corporativo.\n */\n\nfunction normalizeEndpoint(path?: string): string | undefined {\n if (!path) {\n return undefined;\n }\n\n // Convert absolute URLs to relative paths by removing the origin\n if (/^https?:\\/\\//i.test(path)) {\n try {\n const url = new URL(path);\n path = url.pathname;\n } catch {\n // If URL parsing fails, fallback to original string\n }\n }\n\n // Remove leading slashes and any duplicated `api` segments\n return path.replace(/^\\/+/, '').replace(/^(?:api\\/)+/, '');\n}\n\n/**\n * Converte um FieldDefinition em FieldMetadata.\n *\n * Regras principais\n * - Copia propriedades simples e marca AUTO_COMPLETE como searchable por padrão.\n * - options/valueField/displayField → optionLabelKey/optionValueKey para consumo consistente.\n * - Normaliza endpoint/resourcePath removendo origem e barras extras.\n * - Consolida validadores em metadata.validators (inclui mensagens e comportamento de validação).\n */\nexport function mapFieldDefinitionToMetadata(\n field: FieldDefinition,\n): FieldMetadata {\n const metadata: FieldMetadata = {\n name: field.name,\n label: field.label ?? field.name,\n controlType: field.controlType as any,\n } as FieldMetadata;\n\n if (field.type) {\n metadata.dataType = field.type as any;\n }\n\n const simpleProps: Array<keyof FieldDefinition & keyof FieldMetadata> = [\n 'order',\n 'group',\n 'description',\n 'placeholder',\n 'defaultValue',\n 'width',\n 'isFlex',\n 'disabled',\n 'readOnly',\n 'hidden',\n 'unique',\n 'mask',\n 'inlineEditing',\n 'multiple',\n 'searchable',\n 'selectAll',\n 'maxSelections',\n 'emptyOptionText',\n ];\n\n for (const prop of simpleProps) {\n const value = field[prop];\n if (value !== undefined) {\n (metadata as any)[prop] = value;\n }\n }\n\n const endpointPath = normalizeEndpoint(field.resourcePath ?? field.endpoint);\n if (endpointPath) {\n // Canonicalize: only expose resourcePath; do not write legacy alias\n metadata.resourcePath = endpointPath;\n }\n\n if (field.numericMin !== undefined) {\n (metadata as any).min = field.numericMin;\n }\n if (field.numericMax !== undefined) {\n (metadata as any).max = field.numericMax;\n }\n if (field.numericStep !== undefined) {\n (metadata as any).step = field.numericStep;\n }\n\n // AutoComplete fields are always searchable\n if (field.controlType === FieldControlType.AUTO_COMPLETE) {\n metadata.searchable = true;\n }\n\n // Chip inputs support multiple selections with search\n if (field.controlType === FieldControlType.CHIP_INPUT) {\n metadata.multiple = true;\n metadata.searchable = true;\n }\n\n if (field.displayField) {\n (metadata as any).optionLabelKey = field.displayField;\n }\n\n if (field.valueField) {\n (metadata as any).optionValueKey = field.valueField;\n }\n\n if ((field as any).filter) {\n (metadata as any).filterCriteria = (field as any).filter;\n }\n\n if (field.required !== undefined) {\n metadata.required = field.required;\n }\n\n // Canonical constraints at top-level\n if (field.minLength !== undefined) (metadata as any).minLength = field.minLength;\n if (field.maxLength !== undefined) (metadata as any).maxLength = field.maxLength;\n if (field.pattern !== undefined) (metadata as any).pattern = field.pattern as any;\n\n if (field.hint || field.helpText) {\n metadata.hint = field.hint ?? field.helpText;\n }\n\n if (field.options) {\n const mapped = field.options.map((opt) => ({\n value: opt.key,\n text: opt.value,\n }));\n (metadata as any).options = mapped;\n (metadata as any).selectOptions = mapped;\n }\n\n // Single boolean checkboxes without explicit options should behave as toggles\n if (\n metadata.controlType === FieldControlType.CHECKBOX &&\n !field.options?.length &&\n !(field as any).checkboxOptions?.length\n ) {\n metadata.controlType = FieldControlType.TOGGLE as any;\n }\n\n // ---------- Validators mapping (messages/behavior only) ----------\n const validators: ValidatorOptions = {};\n\n // Básicos + mensagens\n if (field.requiredMessage !== undefined)\n validators.requiredMessage = field.requiredMessage;\n if (field.minLengthMessage !== undefined)\n validators.minLengthMessage = field.minLengthMessage;\n if (field.maxLengthMessage !== undefined)\n validators.maxLengthMessage = field.maxLengthMessage;\n\n if (field.min !== undefined) validators.min = field.min;\n if (field.minMessage !== undefined) validators.minMessage = field.minMessage;\n if (field.max !== undefined) validators.max = field.max;\n if (field.maxMessage !== undefined) validators.maxMessage = field.maxMessage;\n if (field.rangeMessage !== undefined)\n (validators as any).rangeMessage = field.rangeMessage;\n\n // Padrões\n if (field.patternMessage !== undefined)\n validators.patternMessage = field.patternMessage;\n if ((field as any).email !== undefined)\n (validators as any).email = (field as any).email;\n if ((field as any).emailMessage !== undefined)\n (validators as any).emailMessage = (field as any).emailMessage;\n if ((field as any).url !== undefined)\n (validators as any).url = (field as any).url;\n if ((field as any).urlMessage !== undefined)\n (validators as any).urlMessage = (field as any).urlMessage;\n\n // Avançados\n if ((field as any).minWords !== undefined)\n (validators as any).minWords = (field as any).minWords;\n if ((field as any).requiredChecked !== undefined)\n (validators as any).requiredChecked = (field as any).requiredChecked;\n\n if ((field as any).matchField !== undefined)\n validators.matchField = (field as any).matchField;\n if ((field as any).matchFieldMessage !== undefined)\n validators.matchFieldMessage = (field as any).matchFieldMessage;\n\n if ((field as any).uniqueValidator !== undefined)\n validators.uniqueValidator = (field as any).uniqueValidator;\n if ((field as any).uniqueMessage !== undefined)\n validators.uniqueMessage = (field as any).uniqueMessage;\n\n // Conditional: suportar função direta e/ou regras compostas\n if ((field as any).conditionalValidation !== undefined) {\n const cv = (field as any).conditionalValidation;\n if (Array.isArray(cv)) {\n (validators as any).conditionalValidation = cv;\n } else if (typeof cv === 'function') {\n (validators as any).conditionalValidationFn = cv;\n }\n }\n\n // Arquivos (extensão do contrato)\n if ((field as any).allowedFileTypes !== undefined)\n (validators as any).allowedFileTypes = (field as any).allowedFileTypes;\n if ((field as any).fileTypeMessage !== undefined)\n (validators as any).fileTypeMessage = (field as any).fileTypeMessage;\n if ((field as any).maxFileSize !== undefined)\n (validators as any).maxFileSize = (field as any).maxFileSize;\n\n // Comportamento de validação\n const vt = (field as any).validationTriggers as string[] | undefined;\n if (vt && vt.length) {\n validators.validationTrigger = (vt[0] as any) || 'change';\n }\n if ((field as any).validationDebounce !== undefined)\n (validators as any).validationDebounce = (field as any).validationDebounce;\n if ((field as any).showInlineErrors !== undefined)\n (validators as any).showInlineErrors = (field as any).showInlineErrors;\n if ((field as any).errorPosition !== undefined)\n (validators as any).errorPosition = (field as any).errorPosition;\n\n if (Object.keys(validators).length) {\n metadata.validators = validators;\n }\n\n return metadata;\n}\n\n/**\n * Converte um array de FieldDefinition em FieldMetadata[].\n * Uso recomendado para fluxos que recebem schemas inteiros do backend.\n */\nexport function mapFieldDefinitionsToMetadata(\n fields: FieldDefinition[],\n): FieldMetadata[] {\n return fields.map(mapFieldDefinitionToMetadata);\n}\n","import {\n ColumnSpan,\n ColumnOffset,\n ColumnOrder,\n ColumnHidden,\n Breakpoint,\n} from '../models/form/form-config.model';\n\nexport function resolveSpan(span?: ColumnSpan): Required<ColumnSpan> {\n const xs = clamp(span?.xs ?? 12, 'xs');\n const sm = clamp(span?.sm ?? xs, 'sm');\n const md = clamp(span?.md ?? sm, 'md');\n const lg = clamp(span?.lg ?? md, 'lg');\n const xl = clamp(span?.xl ?? lg, 'xl');\n return { xs, sm, md, lg, xl };\n}\n\nexport function resolveOffset(offset?: ColumnOffset): Required<ColumnOffset> {\n const xs = clampOffset(offset?.xs ?? 0, 'xs');\n const sm = clampOffset(offset?.sm ?? xs, 'sm');\n const md = clampOffset(offset?.md ?? sm, 'md');\n const lg = clampOffset(offset?.lg ?? md, 'lg');\n const xl = clampOffset(offset?.xl ?? lg, 'xl');\n return { xs, sm, md, lg, xl };\n}\n\nexport function resolveOrder(order?: ColumnOrder): Required<ColumnOrder> {\n const xs = order?.xs ?? 0;\n const sm = order?.sm ?? xs;\n const md = order?.md ?? sm;\n const lg = order?.lg ?? md;\n const xl = order?.xl ?? lg;\n return { xs, sm, md, lg, xl };\n}\n\nexport function resolveHidden(hidden?: ColumnHidden): Required<ColumnHidden> {\n const xs = hidden?.xs ?? false;\n const sm = hidden?.sm ?? xs;\n const md = hidden?.md ?? sm;\n const lg = hidden?.lg ?? md;\n const xl = hidden?.xl ?? lg;\n return { xs, sm, md, lg, xl };\n}\n\nfunction clamp(value: number, breakpoint: Breakpoint): number {\n const clamped = Math.min(12, Math.max(1, value));\n if (clamped !== value) {\n console.warn(\n `Column span value ${value} for breakpoint '${breakpoint}' is out of range (1..12). Using ${clamped}.`,\n );\n }\n return clamped;\n}\n\nfunction clampOffset(value: number, breakpoint: Breakpoint): number {\n const clamped = Math.min(11, Math.max(0, value));\n if (clamped !== value) {\n console.warn(\n `Column offset value ${value} for breakpoint '${breakpoint}' is out of range (0..11). Using ${clamped}.`,\n );\n }\n return clamped;\n}\n","/**\n * Text transformation utilities for display and persistence.\n *\n * Supports CSS-like and functional transforms commonly needed in\n * enterprise forms. All functions are pure and side-effect free.\n */\n\nexport type TextTransformName =\n | 'none'\n | 'uppercase'\n | 'lowercase'\n | 'capitalize'\n | 'titleCase'\n | 'sentenceCase'\n | 'kebab'\n | 'snake'\n | 'camel'\n | 'pascal'\n | 'slugify'\n | 'trim'\n | 'collapseWhitespace'\n | 'removeDiacritics';\n\nexport type TextTransformApply = 'displayOnly' | 'saveOnly' | 'both';\n\nexport function isCssTextTransform(name?: string | null): boolean {\n return name === 'uppercase' || name === 'lowercase' || name === 'capitalize';\n}\n\nexport function removeDiacritics(input: string): string {\n return input.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n}\n\nexport function collapseWhitespace(input: string): string {\n return input.replace(/\\s+/g, ' ').trim();\n}\n\nexport function trim(input: string): string {\n return input.trim();\n}\n\nexport function toTitleCase(input: string): string {\n return input\n .toLowerCase()\n .split(/(\\s+)/)\n .map((token) =>\n token.trim()\n ? token.charAt(0).toUpperCase() + token.slice(1)\n : token,\n )\n .join('');\n}\n\nexport function toSentenceCase(input: string): string {\n const lower = input.toLowerCase();\n return lower.replace(/(^\\s*[a-zà-ú])|([\\.\\?!]\\s*[a-zà-ú])/giu, (s) =>\n s.toUpperCase(),\n );\n}\n\nexport function toCapitalize(input: string): string {\n // Mimic CSS capitalize: uppercase first letter of each word, preserve rest\n return input.replace(/\\b(\\p{L})/gu, (m) => m.toUpperCase());\n}\n\nexport function toKebab(input: string): string {\n return words(input).join('-').toLowerCase();\n}\n\nexport function toSnake(input: string): string {\n return words(input).join('_').toLowerCase();\n}\n\nexport function toCamel(input: string): string {\n const ws = words(input);\n if (ws.length === 0) return '';\n const [first, ...rest] = ws;\n return (\n first.toLowerCase() + rest.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join('')\n );\n}\n\nexport function toPascal(input: string): string {\n return words(input)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join('');\n}\n\nexport function slugify(input: string): string {\n const noAccents = removeDiacritics(input);\n return noAccents\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/-+/g, '-');\n}\n\nexport function getTextTransformer(name?: TextTransformName | null): ((value: any) => any) | undefined {\n if (!name || name === 'none') return undefined;\n const map: Record<string, (s: string) => string> = {\n uppercase: (s) => s.toUpperCase(),\n lowercase: (s) => s.toLowerCase(),\n capitalize: toCapitalize,\n titleCase: toTitleCase,\n sentenceCase: toSentenceCase,\n kebab: toKebab,\n snake: toSnake,\n camel: toCamel,\n pascal: toPascal,\n slugify: slugify,\n trim: trim,\n collapseWhitespace: collapseWhitespace,\n removeDiacritics: removeDiacritics,\n };\n const fn = map[name];\n if (!fn) return undefined;\n return (value: any) => (value == null ? value : fn(String(value)));\n}\n\nfunction words(input: string): string[] {\n // Normalize separators, split by non-alphanumeric boundaries, also split camelCase\n const noAccents = removeDiacritics(input);\n const separated = noAccents\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[^A-Za-z0-9]+/g, ' ')\n .trim();\n return separated ? separated.split(/\\s+/) : [];\n}\n\n","import {\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewContainerRef,\n inject,\n ComponentRef,\n Type,\n} from '@angular/core';\nimport { ComponentMetadataRegistry } from '../services/component-metadata-registry.service';\nimport { WidgetDefinition } from './widget-definition.model';\n\n/**\n * Carrega dinamicamente um componente \"widget\" (de página) a partir de um id registrado\n * no ComponentMetadataRegistry e aplica bindings declarados em JSON (WidgetDefinition).\n */\n@Directive({\n selector: '[dynamicWidgetLoader]',\n standalone: true,\n})\nexport class DynamicWidgetLoaderDirective implements OnInit, OnChanges, OnDestroy {\n private readonly vcRef = inject(ViewContainerRef);\n private readonly registry = inject(ComponentMetadataRegistry);\n\n @Input('dynamicWidgetLoader') widget?: WidgetDefinition | string;\n @Input() context?: Record<string, any> | null = null;\n /** When true, invalid inputs/outputs cause errors; otherwise only warnings. */\n @Input() strictValidation = true;\n /** When true, auto-subscribes to all outputs declared in metadata if outputs map is empty. Useful in editor/runtime to propagate events without explicit mapping. */\n @Input() autoWireOutputs = false;\n @Output() widgetEvent = new EventEmitter<{\n sourceId: string;\n output?: string;\n payload?: any;\n }>();\n\n private compRef?: ComponentRef<any>;\n private currentId?: string;\n private outputSubs: Array<() => void> = [];\n\n ngOnInit(): void {\n this.tryRender();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['widget'] || changes['context']) {\n this.tryRender();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyCurrent();\n }\n\n private parseWidget(input?: WidgetDefinition | string): WidgetDefinition | null {\n if (!input) return null;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as WidgetDefinition;\n } catch {\n console.error('[DynamicWidgetLoader] Invalid widget JSON string');\n return null;\n }\n }\n return input;\n }\n\n private tryRender(): void {\n const def = this.parseWidget(this.widget);\n if (!def || !def.id) return;\n\n // New component type? recreate; else just update inputs\n if (!this.compRef || def.id !== this.currentId) {\n this.createComponent(def.id);\n }\n\n if (this.compRef) {\n const meta = this.registry.get(def.id);\n const inputs = def.inputs || {};\n const outputs = def.outputs || {};\n this.validateAgainstMetadata(def.id, inputs, outputs, meta || undefined);\n this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder);\n this.bindOutputs(this.compRef.instance, def.id, outputs, meta || undefined);\n this.compRef.changeDetectorRef.detectChanges();\n }\n }\n\n private createComponent(id: string): void {\n this.destroyCurrent();\n const meta = this.registry.get(id);\n if (!meta) {\n console.warn(`[DynamicWidgetLoader] Component meta not found for id: ${id}`);\n return;\n }\n const cmp = meta.component as Type<any>;\n if (!cmp || !(cmp as any)['ɵcmp']) {\n console.error(\n '[DynamicWidgetLoader] Invalid component reference for id:',\n id,\n {\n hasMeta: !!meta,\n hasComponent: !!(meta as any).component,\n componentType: typeof (meta as any).component,\n },\n );\n // Avoid crashing the host; keep tile empty but interactive\n return;\n }\n this.vcRef.clear();\n this.compRef = this.vcRef.createComponent(cmp);\n this.currentId = id;\n }\n\n private destroyCurrent(): void {\n this.outputSubs.forEach((u) => u());\n this.outputSubs = [];\n if (this.compRef) {\n this.compRef.destroy();\n this.compRef = undefined;\n this.currentId = undefined;\n }\n this.vcRef.clear();\n }\n\n private bindInputs(\n compRef: ComponentRef<any>,\n id: string,\n inputs: Record<string, any>,\n bindingOrder?: string[],\n ): void {\n // Derive priority order\n const defaultOrderMap: Record<string, string[]> = {\n 'praxis-table': ['config', 'resourcePath'],\n 'praxis-crud': ['metadata'],\n 'praxis-dynamic-form': ['resourcePath', 'formId'],\n 'praxis-tabs': ['config', 'tabsId'],\n };\n const order = bindingOrder && bindingOrder.length\n ? bindingOrder\n : defaultOrderMap[id] || [];\n\n const entries = Object.entries(inputs);\n const prioritized = entries.filter(([k]) => order.includes(k));\n const others = entries.filter(([k]) => !order.includes(k));\n\n const apply = (key: string, raw: any) => {\n const value = this.resolveValue(raw);\n try {\n if (typeof (compRef as any).setInput === 'function') {\n (compRef as any).setInput(key, value);\n } else {\n // Fallback assignment when setInput is unavailable\n (compRef.instance as any)[key] = value;\n }\n } catch (e) {\n console.warn(`[DynamicWidgetLoader] Failed to set input ${key}`, e);\n }\n };\n\n // Apply prioritized inputs with flush after each to respect configuration dependencies\n for (const [key, raw] of prioritized) {\n apply(key, raw);\n try { compRef.changeDetectorRef.detectChanges(); } catch {}\n }\n\n // Apply remaining inputs\n for (const [key, raw] of others) {\n apply(key, raw);\n }\n }\n\n private bindOutputs(\n instance: any,\n id: string,\n outputs: Record<string, any>,\n meta?: { outputs?: Array<{ name: string }> },\n ): void {\n // Clean existing subscriptions\n this.outputSubs.forEach((u) => u());\n this.outputSubs = [];\n\n let keys = Object.keys(outputs || {});\n if ((this.autoWireOutputs || keys.length === 0) && meta?.outputs?.length) {\n keys = meta.outputs.map((o) => o.name);\n }\n\n for (const outName of keys) {\n const emitter = instance[outName];\n if (emitter && typeof emitter.subscribe === 'function') {\n const sub = emitter.subscribe((payload: any) => {\n this.widgetEvent.emit({ sourceId: id, output: outName, payload });\n });\n this.outputSubs.push(() => sub.unsubscribe());\n }\n }\n }\n\n private resolveValue(raw: any): any {\n if (typeof raw === 'string') {\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(this.context, path.trim());\n return v != null ? String(v) : '';\n });\n }\n if (Array.isArray(raw)) {\n return raw.map((v) => this.resolveValue(v));\n }\n if (raw && typeof raw === 'object') {\n const obj: any = Array.isArray(raw) ? [] : {};\n for (const [k, v] of Object.entries(raw)) obj[k] = this.resolveValue(v);\n return obj;\n }\n return raw;\n }\n\n private lookup(ctx: any, path: string): any {\n if (!ctx) return undefined;\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\n }\n\n private validateAgainstMetadata(\n id: string,\n inputs: Record<string, any>,\n outputs: Record<string, any>,\n meta?: {\n inputs?: Array<{ name: string; type?: string }>;\n outputs?: Array<{ name: string; type?: string }>;\n },\n ): void {\n if (!meta) {\n // No metadata: we can only validate output shape at runtime\n return;\n }\n const allowedInputs = new Set((meta.inputs || []).map((i) => i.name));\n const allowedOutputs = new Set((meta.outputs || []).map((o) => o.name));\n\n // Unknown inputs\n const unknownInputs = Object.keys(inputs).filter((k) => !allowedInputs.has(k));\n if (unknownInputs.length) {\n const msg = `[DynamicWidgetLoader] Unknown inputs for '${id}': ${unknownInputs.join(\n ', ',\n )}. Allowed: ${Array.from(allowedInputs).join(', ') || '(none)'} }`;\n if (this.strictValidation) throw new Error(msg);\n console.warn(msg);\n // Drop unknowns in non-strict mode to avoid runtime errors\n unknownInputs.forEach((k) => delete inputs[k]);\n }\n\n // Unknown outputs\n const unknownOutputs = Object.keys(outputs).filter((k) => !allowedOutputs.has(k));\n if (unknownOutputs.length) {\n const msg = `[DynamicWidgetLoader] Unknown outputs for '${id}': ${unknownOutputs.join(\n ', ',\n )}. Allowed: ${Array.from(allowedOutputs).join(', ') || '(none)'} }`;\n if (this.strictValidation) throw new Error(msg);\n console.warn(msg);\n unknownOutputs.forEach((k) => delete outputs[k]);\n }\n\n // Basic type checks for primitives\n const typeMap = new Map<string, string>([\n ['string', 'string'],\n ['number', 'number'],\n ['boolean', 'boolean'],\n ]);\n for (const metaInput of meta.inputs || []) {\n const expected = (metaInput.type || '').toLowerCase();\n const primitive = typeMap.get(expected) || 'any';\n if (!(metaInput.name in inputs) || primitive === 'any') continue;\n\n const resolved = this.resolveValue(inputs[metaInput.name]);\n const actualType = typeof resolved;\n if (actualType !== primitive) {\n const msg = `[DynamicWidgetLoader] Type mismatch at input '${metaInput.name}' for '${id}': expected ${primitive}, got ${actualType}`;\n if (this.strictValidation) throw new Error(msg);\n console.warn(msg);\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { WidgetConnection } from './widget-page.model';\nimport { GridWidgetInstance } from './grid-page.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ConnectionManagerService {\n /** Extract value from an object using dot-path (e.g., 'payload.row.id'). */\n extractByPath(obj: any, path: string | undefined): any {\n if (!path) return obj?.payload ?? obj;\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], obj);\n }\n\n /** Find connections triggered by an event. */\n findMatches(\n connections: WidgetConnection[] | undefined,\n fromKey: string,\n output: string | undefined,\n ): WidgetConnection[] {\n if (!connections || !output) return [];\n return connections.filter(\n (c) => c.from.widget === fromKey && c.from.output === output,\n );\n }\n\n /** Apply a single match into widgets array, supporting dot-path in target input. Returns a new array. */\n applyMatch(\n widgets: GridWidgetInstance[],\n match: WidgetConnection & { to: { widget: string; input: string; bindingOrder?: string[] } },\n event: { payload?: any },\n ): GridWidgetInstance[] {\n const idx = widgets.findIndex((w) => w.key === match.to.widget);\n if (idx < 0) return widgets;\n const current = widgets[idx];\n const val = (match as any).set !== undefined ? (match as any).set : this.resolveMappedValue((match as any).map, event);\n const nextDef = { ...(current.definition || {}) } as any;\n\n const path = match.to.input || '';\n if (this.looksLikePath(path)) {\n const updated = this.setAtPath(nextDef, path, val);\n widgets = widgets.slice();\n widgets[idx] = { ...current, definition: updated } as GridWidgetInstance;\n return widgets;\n }\n\n const nextInputs = { ...(nextDef.inputs || {}), [path]: val };\n const existingOrder = nextDef.bindingOrder || [];\n const targetOrder = match.to.bindingOrder || [];\n const mergedOrder = this.mergeOrder([...targetOrder, ...existingOrder, path]);\n const updated = { ...nextDef, inputs: nextInputs, bindingOrder: mergedOrder };\n widgets = widgets.slice();\n widgets[idx] = { ...current, definition: updated } as GridWidgetInstance;\n return widgets;\n }\n\n /** Resolve mapped value: supports dot-path or JSON template with ${...} placeholders. */\n private resolveMappedValue(map: any, event: any): any {\n if (!map) return this.extractByPath(event, 'payload');\n if (typeof map !== 'string') return map; // future-proof: allow object direct\n const m = map.trim();\n // JSON template object/array\n if (m.startsWith('{') || m.startsWith('[')) {\n try {\n const parsed = JSON.parse(m);\n return this.resolveTemplate(parsed, event);\n } catch {\n // Fallback to dot-path if JSON parse fails\n return this.extractByPath(event, m);\n }\n }\n // Quoted JSON string literal: \"value\" or 'value'\n if ((m.startsWith('\"') && m.endsWith('\"')) || (m.startsWith(\"'\") && m.endsWith(\"'\"))) {\n try {\n const normalized = (m.startsWith(\"'\") && m.endsWith(\"'\")) ? m.replace(/^'(.*)'$/s, '\"$1\"') : m;\n return JSON.parse(normalized);\n } catch { /* ignore and fallback to dot path */ }\n }\n // dot-path\n return this.extractByPath(event, m);\n }\n\n /** Recursively resolve ${path} placeholders in objects/arrays/strings. */\n private resolveTemplate(node: any, context: any): any {\n if (node == null) return node;\n if (Array.isArray(node)) return node.map((v) => this.resolveTemplate(v, context));\n if (typeof node === 'object') {\n const out: any = Array.isArray(node) ? [] : {};\n for (const [k, v] of Object.entries(node)) out[k] = this.resolveTemplate(v, context);\n return out;\n }\n if (typeof node === 'string') {\n const exact = node.match(/^\\s*\\$\\{([^}]+)\\}\\s*$/);\n if (exact) {\n return this.extractByPath(context, exact[1].trim());\n }\n return node.replace(/\\$\\{([^}]+)\\}/g, (_m, p1) => {\n const v = this.extractByPath(context, String(p1).trim());\n return v != null ? String(v) : '';\n });\n }\n return node;\n }\n\n /** Whether a string looks like a deep path (contains '.' or array index). */\n private looksLikePath(input: string): boolean {\n return /\\.|\\[\\d+\\]/.test(input);\n }\n\n /** Immutable set at dot/array path (e.g., 'config.tabs[0].items[1].form.inputs.resourceId'). */\n private setAtPath<T extends object>(obj: T, rawPath: string, value: any): T {\n const path = this.tokenizePath(rawPath);\n const clone: any = Array.isArray(obj) ? obj.slice() : { ...(obj as any) };\n let cursor: any = clone;\n for (let i = 0; i < path.length; i++) {\n const key = path[i];\n const isLast = i === path.length - 1;\n if (isLast) {\n cursor[key] = value;\n } else {\n const next = cursor[key];\n const nextIsIndex = typeof path[i + 1] === 'number';\n const created = next != null ? (Array.isArray(next) ? next.slice() : { ...next }) : (nextIsIndex ? [] : {});\n cursor[key] = created;\n cursor = created;\n }\n }\n return clone as T;\n }\n\n private tokenizePath(path: string): Array<string | number> {\n const tokens: Array<string | number> = [];\n let buf = '';\n for (let i = 0; i < path.length; i++) {\n const ch = path[i];\n if (ch === '.') {\n if (buf) { tokens.push(buf); buf = ''; }\n } else if (ch === '[') {\n if (buf) { tokens.push(buf); buf = ''; }\n let num = '';\n i++;\n while (i < path.length && path[i] !== ']') { num += path[i++]; }\n const idx = Number(num);\n tokens.push(isNaN(idx) ? num : idx);\n } else {\n buf += ch;\n }\n }\n if (buf) tokens.push(buf);\n return tokens;\n }\n\n private mergeOrder(keys: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const k of keys) {\n if (!k || seen.has(k)) continue;\n seen.add(k);\n out.push(k);\n }\n return out;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges, signal } from '@angular/core';\nimport { DynamicWidgetLoaderDirective } from './dynamic-widget-loader.directive';\nimport {\n WidgetInstance,\n WidgetPageDefinition,\n WidgetConnection,\n} from './widget-page.model';\nimport { ConnectionManagerService } from './connection-manager.service';\n\n@Component({\n selector: 'praxis-dynamic-page',\n standalone: true,\n imports: [CommonModule, DynamicWidgetLoaderDirective],\n template: `\n <div class=\"pdx-page\" [class.debug]=\"debug\">\n <ng-container *ngFor=\"let w of widgets()\">\n <div class=\"pdx-widget\" [class]=\"w.className || ''\">\n <ng-container\n [dynamicWidgetLoader]=\"w.definition\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent(w.key, $event)\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n `,\n styles: [\n `\n .pdx-page { display: grid; gap: 16px; }\n .pdx-widget { background: var(--pfx-surface, transparent); border-radius: 8px; }\n .debug .pdx-widget { outline: 1px dashed rgba(255,255,255,0.2); padding: 4px; }\n `,\n ],\n})\nexport class DynamicWidgetPageComponent implements OnChanges {\n @Input() page?: WidgetPageDefinition | string;\n @Input() context?: Record<string, any> | null = null;\n @Input() strictValidation = true;\n @Input() debug = false;\n\n widgets = signal<WidgetInstance[]>([]);\n mergedContext: Record<string, any> = {};\n\n constructor(private conn: ConnectionManagerService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['context']) {\n const parsed = this.parsePage(this.page);\n this.widgets.set(parsed?.widgets || []);\n this.mergedContext = { ...(parsed?.context || {}), ...(this.context || {}) };\n }\n }\n\n onWidgetEvent(fromKey: string, evt: { sourceId: string; output?: string; payload?: any }): void {\n const page = this.parsePage(this.page);\n const matches = this.conn.findMatches(page?.connections, fromKey, evt.output);\n if (!matches.length) return;\n\n const widgets = [...this.widgets()];\n for (const c of matches) {\n const idx = widgets.findIndex((w) => w.key === c.to.widget);\n if (idx < 0) continue;\n const current = widgets[idx];\n const val = c.set !== undefined ? c.set : this.conn.extractByPath(evt, c.map || 'payload');\n const nextInputs = { ...(current.definition.inputs || {}), [c.to.input]: val };\n // Merge binding order: explicit target order > existing > ensure input last\n const existingOrder = current.definition.bindingOrder || [];\n const targetOrder = c.to.bindingOrder || [];\n const mergedOrder = this.mergeOrder([...targetOrder, ...existingOrder, c.to.input]);\n\n widgets[idx] = {\n ...current,\n definition: {\n ...current.definition,\n inputs: nextInputs,\n bindingOrder: mergedOrder,\n },\n };\n }\n this.widgets.set(widgets);\n }\n\n private mergeOrder(keys: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const k of keys) {\n if (!k || seen.has(k)) continue;\n seen.add(k);\n out.push(k);\n }\n return out;\n }\n\n private parsePage(input?: WidgetPageDefinition | string | null): WidgetPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try { return JSON.parse(input) as WidgetPageDefinition; } catch { return undefined; }\n }\n return input;\n }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges, computed, signal } from '@angular/core';\nimport { DynamicWidgetLoaderDirective } from './dynamic-widget-loader.directive';\nimport { GridPageDefinition, GridWidgetInstance } from './grid-page.model';\nimport { ConnectionManagerService } from './connection-manager.service';\n\n@Component({\n selector: 'praxis-dynamic-grid-page',\n standalone: true,\n imports: [CommonModule, DynamicWidgetLoaderDirective],\n template: `\n <div\n class=\"pdx-grid-page\"\n [class.editing]=\"editModeEnabled\"\n [style.gridTemplateColumns]=\"gridTemplateColumns()\"\n [style.gridAutoRows.px]=\"rowHeight()\"\n [style.gap.px]=\"gap()\"\n [class.debug]=\"debug\"\n >\n <div\n class=\"pdx-grid-item\"\n *ngFor=\"let w of widgets()\"\n [style.gridColumn]=\"toGridColumn(w)\"\n [style.gridRow]=\"toGridRow(w)\"\n [class]=\"w.className || ''\"\n [class.selected]=\"isSelected(w.key)\"\n (click)=\"onTileClick(w.key, $event)\"\n tabindex=\"0\"\n >\n <ng-container\n [dynamicWidgetLoader]=\"w.definition\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent(w.key, $event)\"\n ></ng-container>\n </div>\n </div>\n `,\n styles: [\n `\n :host { position: relative; display: block; }\n .pdx-grid-page { display: grid; position: relative; background: var(--md-sys-color-surface-container-lowest, var(--background)); }\n .pdx-grid-page.editing::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0.5;\n z-index: 0; /* behind tiles */\n background-image:\n radial-gradient(circle at 1px 1px, color-mix(in oklab, var(--md-sys-color-primary) 25%, transparent) 1px, transparent 1px),\n radial-gradient(circle, color-mix(in oklab, var(--md-sys-color-primary) 8%, transparent) 1px, transparent 1px);\n background-size: 16px 16px, 64px 64px;\n background-position: 0 0, 0 0;\n }\n .pdx-grid-item {\n position: relative;\n z-index: 1;\n border-radius: 10px;\n background: var(--md-sys-color-surface-container, var(--surface-2));\n border: 1px solid var(--md-sys-color-outline, var(--border-color));\n box-shadow: var(--mat-elevation-transition), var(--mat-elevation-level2, 0 2px 4px rgba(0,0,0,0.18));\n }\n :host ::ng-deep .pdx-grid-item .mat-mdc-card {\n background: var(--md-sys-color-surface, var(--surface));\n border: 1px solid var(--md-sys-color-outline, var(--border-color));\n }\n .pdx-grid-item:hover, .pdx-grid-item:focus-within { box-shadow: var(--mat-elevation-transition), var(--mat-elevation-level6, 0 6px 12px rgba(0,0,0,0.22)); outline: 2px solid color-mix(in oklab, var(--md-sys-color-primary) 30%, transparent); }\n .debug .pdx-grid-item { outline: 1px dashed var(--md-sys-color-outline-variant, rgba(255,255,255,0.25)); }\n `,\n ],\n})\nexport class DynamicGridPageComponent implements OnChanges {\n @Input() page?: GridPageDefinition | string;\n @Input() context?: Record<string, any> | null = null;\n @Input() strictValidation = true;\n @Input() debug = false;\n /** Optional code-level grid options. Editor (page.options) takes precedence over these. */\n @Input() gridOptions?: Partial<{ cols: number; rowHeight: number; gap: number }>;\n /** Shows editing affordances (background overlay) on CSS Grid implementation. */\n @Input() editModeEnabled = false;\n\n widgets = signal<GridWidgetInstance[]>([]);\n mergedContext: Record<string, any> = {};\n private selectedKey = signal<string | null>(null);\n\n private cols = signal<number>(12);\n private _rowHeight = signal<number>(80);\n private _gap = signal<number>(12);\n overlayEnabled = true;\n\n gridTemplateColumns = computed(() => `repeat(${this.cols()}, minmax(0, 1fr))`);\n rowHeight = computed(() => this._rowHeight());\n gap = computed(() => this._gap());\n\n constructor(private conn: ConnectionManagerService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['context']) {\n const parsed = this.parsePage(this.page);\n this.widgets.set(parsed?.widgets || []);\n const ctx = parsed?.context || {};\n this.mergedContext = { ...ctx, ...(this.context || {}) };\n try { this.overlayEnabled = (ctx as any)?.ui?.editingOverlay ?? true; } catch { this.overlayEnabled = true; }\n const opts = parsed?.options || {};\n // Precedence: defaults < input gridOptions < persisted (editor via page.options)\n const effectiveCols = opts.cols ?? this.gridOptions?.cols ?? 12;\n const effectiveRowHeight = opts.rowHeight ?? this.gridOptions?.rowHeight ?? 80;\n const effectiveGap = opts.gap ?? this.gridOptions?.gap ?? 12;\n this.cols.set(effectiveCols);\n this._rowHeight.set(effectiveRowHeight);\n this._gap.set(effectiveGap);\n }\n }\n\n toGridColumn(w: GridWidgetInstance): string {\n const start = Math.max(1, w.layout.col || 1);\n const span = Math.max(1, w.layout.colSpan || 1);\n return `${start} / span ${span}`;\n }\n\n toGridRow(w: GridWidgetInstance): string {\n const start = Math.max(1, w.layout.row || 1);\n const span = Math.max(1, w.layout.rowSpan || 1);\n return `${start} / span ${span}`;\n }\n\n onWidgetEvent(fromKey: string, evt: { sourceId: string; output?: string; payload?: any }): void {\n const page = this.parsePage(this.page);\n const matches = this.conn.findMatches(page?.connections, fromKey, evt.output);\n if (!matches.length) return;\n\n const widgets = [...this.widgets()];\n for (const c of matches) {\n const idx = widgets.findIndex((w) => w.key === c.to.widget);\n if (idx < 0) continue;\n const current = widgets[idx];\n const val = (c as any).set !== undefined ? (c as any).set : this.conn.extractByPath(evt, (c as any).map || 'payload');\n const nextInputs = { ...(current.definition.inputs || {}), [c.to.input]: val };\n const existingOrder = current.definition.bindingOrder || [];\n const targetOrder = c.to.bindingOrder || [];\n const mergedOrder = this.mergeOrder([...targetOrder, ...existingOrder, c.to.input]);\n widgets[idx] = {\n ...current,\n definition: {\n ...current.definition,\n inputs: nextInputs,\n bindingOrder: mergedOrder,\n },\n };\n }\n this.widgets.set(widgets);\n }\n\n isSelected(key?: string): boolean {\n return !!key && this.selectedKey() === key;\n }\n\n onTileClick(key?: string, ev?: Event): void {\n ev?.stopPropagation();\n if (!key) return;\n this.selectedKey.set(key);\n }\n\n private mergeOrder(keys: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const k of keys) {\n if (!k || seen.has(k)) continue;\n seen.add(k);\n out.push(k);\n }\n return out;\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; }\n }\n return input;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface EmptyAction {\n label: string;\n icon?: string;\n color?: 'primary' | 'accent' | 'warn' | undefined;\n action: () => void;\n}\n\n@Component({\n selector: 'praxis-empty-state-card',\n standalone: true,\n imports: [CommonModule, MatCardModule, MatButtonModule, MatIconModule],\n template: `\n <mat-card class=\"empty-card\" [class.empty-inline]=\"inline\" appearance=\"outlined\">\n <mat-card-content>\n <div class=\"content\">\n <mat-icon *ngIf=\"icon\" class=\"icon\" [fontIcon]=\"icon\"></mat-icon>\n <div class=\"texts\">\n <h3 class=\"title\">{{ title }}</h3>\n <p class=\"desc\" *ngIf=\"description\">{{ description }}</p>\n </div>\n </div>\n <div class=\"actions\">\n <button mat-flat-button color=\"primary\" *ngIf=\"primaryAction\" (click)=\"primaryAction.action()\">\n <mat-icon *ngIf=\"primaryAction.icon\" [fontIcon]=\"primaryAction.icon\"></mat-icon>\n {{ primaryAction.label }}\n </button>\n <button mat-stroked-button *ngFor=\"let a of secondaryActions\" [color]=\"a.color\" (click)=\"a.action()\">\n <mat-icon *ngIf=\"a.icon\" [fontIcon]=\"a.icon\"></mat-icon>\n {{ a.label }}\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n `,\n styles: [\n `\n .empty-card { display: block; margin: 12px; }\n .empty-card.empty-inline { margin: 8px 0; }\n .content { display: flex; align-items: center; gap: 12px; }\n .icon { font-size: 32px; width: 32px; height: 32px; opacity: .9; }\n .title { margin: 0; font-size: 16px; font-weight: 600; }\n .desc { margin: 4px 0 0; opacity: .76; }\n .actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }\n `,\n ],\n})\nexport class EmptyStateCardComponent {\n @Input() icon: string = 'tab';\n @Input() title: string = 'Sem configuração disponível';\n @Input() description?: string;\n @Input() primaryAction?: EmptyAction;\n @Input() secondaryActions: EmptyAction[] = [];\n @Input() inline = false;\n}\n\n","import { Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\n\n/**\n * Binds a stored icon string to a mat-icon element supporting:\n * - Material Icons (classic ligatures): \"mi:pending\" or \"pending\"\n * - Material Symbols Outlined: \"mso:right_click\" or \"ms:right_click\"\n * - Material Symbols Rounded: \"msr:right_click\"\n * - Material Symbols Sharp: \"mss:right_click\"\n * Falls back to classic Material Icons when prefix is omitted.\n */\n@Directive({ selector: 'mat-icon[praxisIcon]', standalone: true })\nexport class PraxisIconDirective implements OnChanges {\n @Input('praxisIcon') icon: string | null | undefined;\n\n constructor(private el: ElementRef<HTMLElement>, private rd: Renderer2) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('icon' in changes) this.applyIcon();\n }\n\n private applyIcon(): void {\n const host = this.el.nativeElement;\n const raw = (this.icon || '').trim();\n // Remove previous classes\n this.removeClass(host, 'material-icons');\n this.removeClass(host, 'material-symbols-outlined');\n this.removeClass(host, 'material-symbols-rounded');\n this.removeClass(host, 'material-symbols-sharp');\n\n if (!raw) {\n host.textContent = '';\n return;\n }\n\n // Parse prefix\n const { family, name } = this.parse(raw);\n // Apply class and ligature text\n switch (family) {\n case 'mso':\n case 'ms':\n this.rd.addClass(host, 'material-symbols-outlined');\n break;\n case 'msr':\n this.rd.addClass(host, 'material-symbols-rounded');\n break;\n case 'mss':\n this.rd.addClass(host, 'material-symbols-sharp');\n break;\n case 'mi':\n default:\n this.rd.addClass(host, 'material-icons');\n break;\n }\n host.textContent = name;\n }\n\n private parse(raw: string): { family: 'mi' | 'ms' | 'mso' | 'msr' | 'mss'; name: string } {\n const colon = raw.indexOf(':');\n if (colon <= 0) return { family: 'mi', name: raw };\n const prefix = raw.slice(0, colon).toLowerCase();\n const name = raw.slice(colon + 1).trim() || raw;\n if (prefix === 'ms' || prefix === 'mso') return { family: 'mso', name };\n if (prefix === 'msr') return { family: 'msr', name };\n if (prefix === 'mss') return { family: 'mss', name };\n if (prefix === 'mi') return { family: 'mi', name };\n return { family: 'mi', name: raw };\n }\n\n private removeClass(el: HTMLElement, cls: string): void {\n try { this.rd.removeClass(el, cls); } catch {}\n }\n}\n\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '../../components/icon/praxis-icon.directive';\nimport { BehaviorSubject } from 'rxjs';\nimport { SettingsValueProvider } from '../../tokens/settings-panel-bridge.token';\n\n@Component({\n selector: 'praxis-resource-quick-connect',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, PraxisIconDirective],\n template: `\n <div style=\"display:grid; gap: 12px; padding: 8px;\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rota do recurso (API)</mat-label>\n <input matInput [(ngModel)]=\"resourcePath\" (ngModelChange)=\"updateState()\" placeholder=\"ex.: human-resources/departamentos\" />\n <mat-icon matSuffix [praxisIcon]=\"'link'\"></mat-icon>\n </mat-form-field>\n <small style=\"opacity:.75\">Conecte o componente à fonte de dados (ex.: /api/&lt;rota-do-recurso&gt;)</small>\n </div>\n `,\n})\nexport class ResourceQuickConnectComponent implements SettingsValueProvider {\n @Input() resourcePath = '';\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(false);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n // Values are provided via Inputs by the opener; no DI data coupling required.\n // When used standalone, consumers can bind [(resourcePath)].\n\n updateState(): void {\n this.isDirty$.next(true);\n this.isValid$.next(!!this.resourcePath?.trim());\n }\n\n getSettingsValue(): any {\n return { resourcePath: this.resourcePath?.trim() };\n }\n\n onSave(): any {\n return this.getSettingsValue();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, HostListener, Inject, Input, Output, Optional } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\nconst DEFAULT_ICONS: string[] = [\n 'search','close','check','add','remove','delete','edit','save','cancel','warning','error','info','help',\n 'face','person','account_circle','people','group','settings','home','menu','more_horiz','more_vert','refresh','arrow_back','arrow_forward','expand_more','expand_less','open_in_full','fullscreen','open_in_new',\n 'star','star_half','star_border','favorite','favorite_border','thumb_up','thumb_down','share','send','ios_share','download','upload','file_upload','file_download',\n 'shopping_cart','shopping_bag','store','storefront','local_mall','local_offer','attach_money','money','payments','price_change','receipt','receipt_long','request_quote','point_of_sale','credit_card','payment',\n 'event','date_range','schedule','alarm','watch_later','pending_actions',\n 'location_on','location_city','map','public','language','place','pin_drop','route','near_me','navigation','layers','terrain',\n 'email','call','phone','chat','forum','mark_email_unread','mark_chat_unread',\n 'wifi','bluetooth','cloud','cloud_upload','cloud_download','cloud_done','cloud_queue','cloud_sync','backup','bolt','lock','lock_open','visibility','visibility_off','vpn_key','key','fingerprint','shield','security','admin_panel_settings','privacy_tip','policy','verified',\n 'label','bookmark','book','description','article','note','assignment','assignment_turned_in','assignment_ind','grading','subject',\n 'home_max','home_work','dashboard','analytics','assessment','insert_chart','bar_chart','show_chart','timeline','insights','pie_chart','donut_large','donut_small',\n 'inventory','inventory_2','list','reorder','filter_list','sort','tune','settings_applications','build','build_circle','construction','bug_report','code','terminal','data_object','dataset','storage',\n 'rule','rule_folder','folder','folder_open','create_new_folder','drive_file_move','drive_file_rename_outline',\n 'text_fields','title','format_bold','format_italic','format_underlined','format_list_bulleted','format_list_numbered','insert_link','link','attach_file','attachment',\n 'image','photo','photo_camera','collections','slideshow','movie','videocam','play_arrow','pause','stop','fast_forward','fast_rewind','skip_next','skip_previous','volume_up','volume_off','equalizer','music_note','library_music',\n 'notifications','notifications_active','notifications_off','do_not_disturb',\n 'airplanemode_active','train','directions_car','directions_bus','directions_bike','directions_walk','directions_boat','local_taxi',\n];\n\n@Component({\n selector: 'praxis-icon-picker',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule, MatChipsModule, MatDialogModule],\n template: `\n <div class=\"pip-root\">\n <div class=\"pip-head\">\n <mat-form-field appearance=\"outline\" class=\"pip-search\">\n <mat-label>Buscar ícone</mat-label>\n <input matInput [(ngModel)]=\"query\" placeholder=\"ex.: star, schedule\" (ngModelChange)=\"onFilter()\" />\n </mat-form-field>\n <button mat-stroked-button color=\"primary\" (click)=\"clear()\"><mat-icon>backspace</mat-icon>Limpar</button>\n <a mat-stroked-button href=\"https://fonts.google.com/icons\" target=\"_blank\" rel=\"noopener noreferrer\" matTooltip=\"Abrir Material Icons\">\n <mat-icon>open_in_new</mat-icon>\n Material Icons\n </a>\n <span class=\"pip-spacer\"></span>\n <div class=\"pip-family\" role=\"group\" aria-label=\"Estilo do ícone\">\n <mat-chip-listbox [value]=\"selectedFamily\" (change)=\"onFamilyChange($event.value)\">\n <mat-chip-option value=\"mi\">Icons</mat-chip-option>\n <mat-chip-option value=\"mso\">Outlined</mat-chip-option>\n <mat-chip-option value=\"msr\">Rounded</mat-chip-option>\n <mat-chip-option value=\"mss\">Sharp</mat-chip-option>\n </mat-chip-listbox>\n </div>\n <button *ngIf=\"dialogRef\" mat-stroked-button (click)=\"onCancel()\">Cancelar</button>\n </div>\n <div class=\"pip-hint muted\">\n Dica: Se não encontrar aqui, abra o site oficial, copie o nome do ícone e cole na busca. Você pode confirmar o nome digitado mesmo que não esteja na lista.\n </div>\n <div class=\"pip-body\" role=\"grid\" aria-label=\"Ícones disponíveis\">\n <button class=\"pip-item\" *ngFor=\"let ic of filtered\" (click)=\"choose(ic)\" [attr.aria-label]=\"'Selecionar ícone ' + ic\">\n <mat-icon [ngClass]=\"iconClassForFamily(selectedFamily)\">{{ ic }}</mat-icon>\n <span class=\"pip-name\">{{ ic }}</span>\n </button>\n </div>\n <div class=\"pip-footer\">\n <button mat-flat-button color=\"primary\" (click)=\"confirmTyped()\" [disabled]=\"!query.trim()\" aria-label=\"Usar nome digitado\">\n <mat-icon>check</mat-icon>\n Usar nome digitado\n </button>\n <span class=\"pip-typed\" *ngIf=\"query.trim()\">{{ previewValue() }}</span>\n </div>\n </div>\n `,\n styles: [`\n .pip-root{display:flex;flex-direction:column;min-width:340px;max-width:760px;max-height:80vh;overflow:hidden;padding:16px;}\n .pip-head{display:flex;gap:12px;align-items:center;margin-bottom:12px;}\n .pip-search{flex:1;min-width:180px}\n .pip-spacer{flex:1}\n .pip-body{flex:1;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;padding:4px}\n .pip-item{display:flex;gap:10px;align-items:center;justify-content:flex-start;padding:10px;border:1px solid rgba(0,0,0,.08);border-radius:10px;background:var(--md-sys-color-surface);cursor:pointer}\n .pip-item:hover{background:rgba(0,0,0,.04)}\n .pip-name{font-size:12px;color:rgba(0,0,0,.6);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n .pip-hint{font-size:12px;color:rgba(0,0,0,.6);margin:-6px 0 8px 0}\n .pip-footer{display:flex;gap:12px;align-items:center;margin-top:10px}\n .pip-typed{font-family:monospace;font-size:12px;color:rgba(0,0,0,.7)}\n .pip-family{display:flex;align-items:center}\n .pip-family .mat-mdc-chip-listbox{min-width: 260px}\n /* Ensure symbols render correctly inside picker even if host app doesn't override mat-icon */\n .pip-root .mat-icon{font-family:'Material Icons','Material Symbols Outlined','Material Symbols Rounded','Material Symbols Sharp' !important;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24}\n .material-symbols-outlined{font-family:'Material Symbols Outlined';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24}\n .material-symbols-rounded{font-family:'Material Symbols Rounded';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24}\n .material-symbols-sharp{font-family:'Material Symbols Sharp';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24}\n `],\n})\nexport class PraxisIconPickerComponent {\n @Input() value?: string;\n @Input() icons: string[] = DEFAULT_ICONS;\n @Output() selected = new EventEmitter<string>();\n @Output() cancel = new EventEmitter<void>();\n\n query = '';\n filtered: string[] = [];\n selectedFamily: 'mi' | 'mso' | 'ms' | 'msr' | 'mss' = 'mi';\n\n constructor(@Optional() @Inject(MAT_DIALOG_DATA) public data: any, @Optional() public dialogRef?: MatDialogRef<PraxisIconPickerComponent>) {\n if (data) {\n this.value = data.value;\n if (Array.isArray(data.icons) && data.icons.length) this.icons = data.icons;\n const fam = this.familyFromValue(this.value);\n if (fam) {\n this.selectedFamily = fam.family as any;\n this.value = fam.name;\n }\n }\n this.query = (this.value || '').trim();\n this.onFilter();\n }\n\n onFilter(): void {\n const q = (this.query || '').trim().toLowerCase();\n this.filtered = !q ? [...this.icons] : this.icons.filter(i => i.toLowerCase().includes(q));\n }\n choose(icon: string): void {\n const val = this.buildValue(icon);\n this.value = icon;\n if (this.dialogRef) this.dialogRef.close(val);\n else this.selected.emit(val);\n }\n @HostListener('document:keydown.escape', ['$event'])\n onEsc(ev: Event): void {\n if (this.dialogRef) {\n ev.stopPropagation();\n ev.preventDefault();\n this.onCancel();\n }\n }\n confirmTyped(): void {\n const name = (this.query || '').trim();\n if (!name) return;\n const val = this.buildValue(name);\n if (this.dialogRef) this.dialogRef.close(val);\n else this.selected.emit(val);\n }\n onFamilyChange(val: any): void {\n const v = (typeof val === 'string' && val) ? val : 'mi';\n this.selectedFamily = v as any;\n }\n clear(): void {\n this.value = '';\n if (this.dialogRef) this.dialogRef.close('');\n else this.selected.emit('');\n }\n onCancel(): void {\n if (this.dialogRef) this.dialogRef.close(undefined);\n else this.cancel.emit();\n }\n\n // Helpers for family/prefix handling\n buildValue(name: string): string {\n const n = (name || '').trim();\n if (!n) return n;\n const fam = this.selectedFamily === 'ms' ? 'mso' : this.selectedFamily;\n return fam === 'mi' ? n : `${fam}:${n}`;\n }\n previewValue(): string {\n return this.buildValue((this.query || '').trim());\n }\n iconClassForFamily(fam: string): string {\n if (fam === 'ms' || fam === 'mso') return 'material-symbols-outlined';\n if (fam === 'msr') return 'material-symbols-rounded';\n if (fam === 'mss') return 'material-symbols-sharp';\n return 'material-icons';\n }\n familyFromValue(v?: string): { family: 'mi'|'mso'|'msr'|'mss', name: string } | null {\n const s = (v || '').trim();\n const i = s.indexOf(':');\n if (i <= 0) return null;\n const p = s.slice(0, i).toLowerCase();\n const name = s.slice(i + 1).trim();\n if (p === 'ms' || p === 'mso') return { family: 'mso', name };\n if (p === 'msr') return { family: 'msr', name };\n if (p === 'mss') return { family: 'mss', name };\n return { family: 'mi', name };\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { PraxisIconPickerComponent } from './icon-picker.component';\nimport { SETTINGS_PANEL_BRIDGE, SettingsPanelBridge } from '../../tokens/settings-panel-bridge.token';\n\n@Injectable({ providedIn: 'root' })\nexport class IconPickerService {\n private dialog = inject(MatDialog);\n private settings = inject(SETTINGS_PANEL_BRIDGE, { optional: true }) as SettingsPanelBridge | null;\n\n openDialog(opts?: { value?: string; icons?: string[] }): Promise<string | undefined> {\n const ref = this.dialog.open(PraxisIconPickerComponent, {\n width: '720px',\n data: { value: opts?.value, icons: opts?.icons },\n });\n return ref.afterClosed().toPromise();\n }\n\n async openPanel(opts?: { value?: string; icons?: string[]; id?: string; title?: string }): Promise<string | undefined> {\n const id = opts?.id || 'icon-picker';\n const title = opts?.title || 'Escolher ícone';\n if (!this.settings) {\n // Fallback to dialog-only mode when bridge is not available\n return this.openDialog({ value: opts?.value, icons: opts?.icons });\n }\n const ref = this.settings.open({ id: `praxis-icon-picker:${id}`, title, content: { component: PraxisIconPickerComponent, inputs: { value: opts?.value, icons: opts?.icons } } });\n return new Promise<string | undefined>((resolve) => {\n let resolved = false;\n ref.applied$.subscribe((val: any) => { if (!resolved) { resolved = true; resolve(val); } });\n ref.saved$.subscribe((val: any) => { if (!resolved) { resolved = true; resolve(val); } });\n });\n }\n}\n\n","export interface FetchWithEtagParams {\n url: string;\n schemaHash?: string; // value without quotes\n tenant?: string;\n locale?: string;\n signal?: AbortSignal;\n credentials?: RequestCredentials; // default 'include'\n}\n\nexport type FetchWithEtagResult =\n | { status: 304 }\n | { status: 200; schema: any; schemaHash: string };\n\nexport async function fetchWithETag(params: FetchWithEtagParams): Promise<FetchWithEtagResult> {\n const headers: Record<string, string> = { Accept: 'application/json' };\n if (params.schemaHash) headers['If-None-Match'] = `\"${params.schemaHash}\"`;\n if (params.tenant) headers['X-Tenant'] = params.tenant;\n if (params.locale) headers['Accept-Language'] = params.locale;\n\n // Allow host apps to provide additional headers (e.g., Authorization) without coupling\n try {\n const extra = (globalThis as any)?.PAX_FETCH_HEADERS?.();\n if (extra && typeof extra === 'object') {\n for (const [k, v] of Object.entries(extra)) {\n const key = String(k);\n const val = Array.isArray(v) ? String(v[0]) : String(v as any);\n if (val && !headers[key]) headers[key] = val;\n }\n }\n } catch {\n // ignore header hook errors\n }\n\n const res = await fetch(params.url, {\n headers,\n cache: 'no-cache',\n credentials: params.credentials ?? 'include',\n signal: params.signal,\n });\n\n if (res.status === 304) return { status: 304 };\n\n const etag = res.headers.get('ETag') || '';\n const newHash = etag.replace(/^W\\//, '').replace(/^\\\"|\\\"$/g, '');\n const xSchemaHash = res.headers.get('X-Schema-Hash');\n const schemaHash = xSchemaHash || newHash; // prefer explicit header when available\n const schema = await res.json();\n return { status: 200, schema, schemaHash };\n}\n","import { buildSchemaId, SchemaIdParams } from '../utils/schema-id.util';\nimport { fetchWithETag } from '../utils/fetch-with-etag.util';\nimport { CacheAdapter, CacheEntry } from '../cache/cache-adapter';\n\nexport interface GetSchemaParams extends SchemaIdParams {\n baseUrl: string; // e.g., http://localhost:8080/schemas/filtered\n}\n\nexport class SchemaMetadataClient {\n private inFlight = new Map<string, Promise<CacheEntry>>();\n\n constructor(private cache: CacheAdapter) {}\n\n async getSchema(params: GetSchemaParams): Promise<CacheEntry> {\n // Bind identity to API origin to avoid cross-origin collisions\n let apiOrigin = '';\n try { apiOrigin = new URL(params.baseUrl).origin; } catch {}\n const schemaId = buildSchemaId({ ...params, apiOrigin });\n const cached = await this.cache.get(schemaId);\n\n // Build URL with query params\n const u = new URL(params.baseUrl);\n u.searchParams.set('path', params.path);\n u.searchParams.set('operation', (params.operation || 'get').toLowerCase());\n u.searchParams.set('schemaType', (params.schemaType || 'response').toLowerCase());\n u.searchParams.set('includeInternalSchemas', String(!!params.includeInternalSchemas));\n\n const key = schemaId;\n if (this.inFlight.has(key)) return this.inFlight.get(key)!;\n\n const p = (async () => {\n const res = await fetchWithETag({\n url: u.toString(),\n schemaHash: cached?.schemaHash,\n tenant: params.tenant,\n locale: params.locale,\n });\n\n if (res.status === 304) {\n if (cached) return cached;\n // No cache: refetch without If-None-Match\n const refetch = await fetch(u.toString(), { cache: 'no-cache', credentials: 'include' });\n const etag = refetch.headers.get('ETag') || '';\n const xHash = refetch.headers.get('X-Schema-Hash') || '';\n const schemaHash = (xHash || etag).replace(/^W\\//, '').replace(/^\\\"|\\\"$/g, '');\n const schema = await refetch.json();\n const fallback: CacheEntry = { schema, schemaHash };\n await this.cache.set(schemaId, fallback);\n return fallback;\n }\n\n // res.status === 200\n const entry: CacheEntry = {\n schema: (res as any).schema,\n schemaHash: (res as any).schemaHash,\n };\n await this.cache.set(schemaId, entry);\n return entry;\n })();\n\n this.inFlight.set(key, p);\n try {\n const result = await p;\n return result;\n } finally {\n this.inFlight.delete(key);\n }\n }\n}\n","import { FieldDefinition } from '../models/field-definition.model';\nimport { FieldMetadata } from '../models/component-metadata.interface';\nimport { FormConfig } from '../models/form/form-config.model';\nimport { mapFieldDefinitionsToMetadata } from '../helpers/field-definition-mapper';\n\nexport function buildBaseFormField(def: FieldDefinition): FieldMetadata {\n const meta = mapFieldDefinitionsToMetadata([def])[0];\n return meta as FieldMetadata;\n}\n\nexport function applyLocalCustomizations(\n base: FieldMetadata,\n local: FieldMetadata,\n): FieldMetadata {\n const typeChanged = (base.controlType || '') !== (local.controlType || '');\n\n // Server authority on identity/core props\n const authoritative: Partial<FieldMetadata> = {\n name: base.name,\n label: base.label,\n controlType: base.controlType,\n required: base.required,\n // Validators: server overrides conflicting keys; keep local extras\n validators: {\n ...(local as any)?.validators,\n ...(base as any)?.validators,\n },\n } as any;\n\n // Local customizations to preserve (order/layout/visibility/UI hints/masks/placeholders)\n const preserved: Partial<FieldMetadata> = {\n placeholder: local.placeholder ?? base.placeholder,\n hint: (local as any).hint ?? (base as any).hint,\n mask: (typeChanged ? undefined : (local as any).mask) ?? (base as any).mask,\n format: (typeChanged ? undefined : (local as any).format) ?? (base as any).format,\n width: local.width ?? base.width,\n isFlex: (local as any).isFlex ?? (base as any).isFlex,\n visibleIn: local.visibleIn ?? base.visibleIn,\n formHidden: local.formHidden ?? base.formHidden,\n tableHidden: local.tableHidden ?? base.tableHidden,\n filterHidden: local.filterHidden ?? base.filterHidden,\n materialDesign: {\n ...(local as any).materialDesign,\n ...(base as any).materialDesign,\n },\n // Options-like families: keep local if explicitly provided, otherwise server\n options:\n (local as any).options !== undefined\n ? (local as any).options\n : (base as any).options,\n endpoint:\n (local as any).endpoint !== undefined\n ? (local as any).endpoint\n : (base as any).endpoint,\n queryParams:\n (local as any).queryParams !== undefined\n ? (local as any).queryParams\n : (base as any).queryParams,\n } as any;\n\n return {\n ...base,\n ...local,\n ...authoritative,\n ...preserved,\n } as FieldMetadata;\n}\n\nexport function reconcileFormConfig(\n layout: FormConfig,\n serverDefs: FieldDefinition[],\n): FormConfig {\n const serverMetas = mapFieldDefinitionsToMetadata(serverDefs) as FieldMetadata[];\n const localMetas = (layout.fieldMetadata || []) as FieldMetadata[];\n\n const serverByName = new Map(serverMetas.map((m) => [m.name, m] as const));\n const localByName = new Map(localMetas.map((m) => [m.name, m] as const));\n\n const merged: FieldMetadata[] = [];\n\n // Merge overlapping\n for (const [name, serverField] of serverByName) {\n const localField = localByName.get(name);\n if (localField) {\n const base = buildBaseFormField(serverField as any);\n merged.push(applyLocalCustomizations(base, localField));\n } else {\n merged.push(buildBaseFormField(serverField as any));\n }\n }\n\n // Orphans: keep but hide in form\n for (const [name, localField] of localByName) {\n if (!serverByName.has(name)) {\n const hidden = { ...localField, formHidden: true } as FieldMetadata;\n merged.push(hidden);\n }\n }\n\n // Preserve layout (sections/rows/columns) order, only affect fieldMetadata\n return {\n ...layout,\n fieldMetadata: merged,\n } as FormConfig;\n}\n\n","import { FieldDefinition } from '../models/field-definition.model';\nimport { FieldMetadata } from '../models/component-metadata.interface';\nimport { FormConfig } from '../models/form/form-config.model';\nimport { mapFieldDefinitionsToMetadata } from '../helpers/field-definition-mapper';\nimport { applyLocalCustomizations as applyLocal } from './form-config-reconciler';\n\nexport function buildBaseFilterField(def: FieldDefinition): FieldMetadata {\n const meta = mapFieldDefinitionsToMetadata([def])[0];\n return meta as FieldMetadata;\n}\n\nexport function applyLocalCustomizations(\n base: FieldMetadata,\n local: FieldMetadata,\n): FieldMetadata {\n // For filters, reuse the same merge strategy as forms\n return applyLocal(base, local);\n}\n\nexport function reconcileFilterConfig(\n layout: FormConfig,\n serverDefs: FieldDefinition[],\n): FormConfig {\n const serverMetas = mapFieldDefinitionsToMetadata(serverDefs) as FieldMetadata[];\n const localMetas = (layout.fieldMetadata || []) as FieldMetadata[];\n\n const serverByName = new Map(serverMetas.map((m) => [m.name, m] as const));\n const localByName = new Map(localMetas.map((m) => [m.name, m] as const));\n\n const merged: FieldMetadata[] = [];\n\n // Merge overlapping with server authority on core props\n for (const [name, serverField] of serverByName) {\n const localField = localByName.get(name);\n if (localField) {\n const base = buildBaseFilterField(serverField as any);\n merged.push(applyLocalCustomizations(base, localField));\n } else {\n merged.push(buildBaseFilterField(serverField as any));\n }\n }\n\n // Orphans: keep but hide in filter context\n for (const [name, localField] of localByName) {\n if (!serverByName.has(name)) {\n const hidden = { ...localField, filterHidden: true } as FieldMetadata;\n merged.push(hidden);\n }\n }\n\n return {\n ...layout,\n fieldMetadata: merged,\n } as FormConfig;\n}\n\n","import { InjectionToken } from '@angular/core';\nimport type { FormHook, HookResolver, FormHookPreset } from './form-hooks.types';\n\n/**\n * Multi-provider token to register available hooks.\n * Apps/libraries can provide additional hooks using:\n * { provide: FORM_HOOKS, useValue: myHook, multi: true }\n */\nexport const FORM_HOOKS = new InjectionToken<FormHook[]>(\n 'FORM_HOOKS: Registered Form Hooks',\n);\n\n/** Multi provider of functions that can resolve a hook by id at runtime. */\nexport const FORM_HOOK_RESOLVERS = new InjectionToken<HookResolver[]>(\n 'FORM_HOOK_RESOLVERS: Dynamic hook resolvers',\n);\n\n/** Optional presets of hook declarations mapped by resource/formId. */\nexport const FORM_HOOKS_PRESETS = new InjectionToken<FormHookPreset[]>(\n 'FORM_HOOKS_PRESETS: Host-provided form hook presets',\n);\n\n/** Optional whitelist: allowed hook ids (exact) or regex patterns. */\nexport const FORM_HOOKS_WHITELIST = new InjectionToken<Array<string | RegExp>>(\n 'FORM_HOOKS_WHITELIST: Allowed hook ids/patterns',\n);\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { FORM_HOOKS, FORM_HOOK_RESOLVERS, FORM_HOOKS_WHITELIST } from './form-hooks.tokens';\nimport type {\n FormHook,\n FormHookContext,\n FormHookDeclaration,\n FormHookOutcome,\n FormHookStage,\n RunHooksResult,\n} from './form-hooks.types';\n\n@Injectable({ providedIn: 'root' })\nexport class FormHooksRegistry {\n private readonly hooks = new Map<string, FormHook>();\n private readonly resolvers: Array<(id: string) => Promise<FormHook | undefined> | FormHook | undefined> = [];\n\n constructor(\n @Optional() @Inject(FORM_HOOKS) provided?: FormHook[] | null,\n @Optional() @Inject(FORM_HOOK_RESOLVERS)\n resolvers?: Array<(id: string) => Promise<FormHook | undefined> | FormHook | undefined> | null,\n @Optional() @Inject(FORM_HOOKS_WHITELIST) private whitelist?: Array<string | RegExp> | null,\n ) {\n (provided || []).forEach((h) => this.register(h));\n (resolvers || []).forEach((r) => this.resolvers.push(r));\n }\n\n register(hook: FormHook): void {\n if (!hook || !hook.id) return;\n this.hooks.set(hook.id, hook);\n }\n\n unregister(id: string): void {\n this.hooks.delete(id);\n }\n\n get(id: string): FormHook | undefined {\n return this.hooks.get(id);\n }\n\n /** Executes a list of declarations for a stage, respecting priority/timeout. */\n async run(\n stage: FormHookStage,\n baseCtx: Omit<FormHookContext, 'stage'>,\n declarations?: FormHookDeclaration[] | null,\n options?: { stopOn?: 'cancel' | 'error'; defaultTimeoutMs?: number },\n ): Promise<RunHooksResult> {\n const stopOn = options?.stopOn ?? (stage.startsWith('before') ? 'cancel' : undefined);\n const defaultTimeoutMs = options?.defaultTimeoutMs ?? 3000;\n\n const decls = (declarations || []).slice().sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n const outcomes: Array<{ id: string; outcome: FormHookOutcome; durationMs: number }> = [];\n\n for (const decl of decls) {\n // Enforce whitelist when provided\n if (this.whitelist && !this.isAllowed(decl.id)) {\n outcomes.push({ id: decl.id, outcome: { status: 'error', reason: 'hook-not-allowed' }, durationMs: 0 });\n if (stopOn === 'error') return { outcomes, stopped: { id: decl.id, outcome: { status: 'error', reason: 'hook-not-allowed' } } };\n continue;\n }\n\n let hook = this.get(decl.id);\n if (!hook) {\n // Try to resolve dynamically via resolvers\n hook = (await this.resolveHook(decl.id)) || undefined;\n }\n if (!hook) {\n outcomes.push({ id: decl.id, outcome: { status: 'error', reason: 'hook-not-found' }, durationMs: 0 });\n if (stopOn === 'error') return { outcomes, stopped: { id: decl.id, outcome: { status: 'error', reason: 'hook-not-found' } } };\n continue;\n }\n const ctx = { ...baseCtx, stage, args: decl.args } as any;\n const timeoutMs = decl.timeoutMs ?? defaultTimeoutMs;\n const started = performance.now ? performance.now() : Date.now();\n try {\n const outcome = await this.runWithTimeout(() => hook.run(ctx), timeoutMs);\n const durationMs = (performance.now ? performance.now() : Date.now()) - started;\n outcomes.push({ id: decl.id, outcome, durationMs });\n if (stopOn && (outcome.status === stopOn)) {\n return { outcomes, stopped: { id: decl.id, outcome } };\n }\n } catch (e: any) {\n const durationMs = (performance.now ? performance.now() : Date.now()) - started;\n const outcome: FormHookOutcome = { status: 'error', reason: e?.message || 'timeout-or-exception' };\n outcomes.push({ id: decl.id, outcome, durationMs });\n if (stopOn === 'error') return { outcomes, stopped: { id: decl.id, outcome } };\n }\n }\n\n return { outcomes };\n }\n\n private runWithTimeout<T>(fn: () => Promise<T> | T, timeoutMs: number): Promise<T> {\n if (!timeoutMs || timeoutMs <= 0) return Promise.resolve().then(fn);\n return new Promise<T>((resolve, reject) => {\n const to = setTimeout(() => reject(new Error('hook-timeout')), timeoutMs);\n Promise.resolve()\n .then(fn)\n .then((v) => {\n clearTimeout(to);\n resolve(v);\n })\n .catch((e) => {\n clearTimeout(to);\n reject(e);\n });\n });\n }\n\n private async resolveHook(id: string): Promise<FormHook | undefined> {\n for (const r of this.resolvers) {\n try {\n const maybe = await Promise.resolve(r(id));\n if (maybe && maybe.id) {\n this.register(maybe);\n return maybe;\n }\n } catch {}\n }\n return undefined;\n }\n\n private isAllowed(id: string): boolean {\n const wl = this.whitelist || [];\n if (!wl.length) return true;\n for (const p of wl) {\n if (typeof p === 'string' && p === id) return true;\n if (p instanceof RegExp && p.test(id)) return true;\n }\n return false;\n }\n}\n","import type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\n\n/**\n * Removes common masks from string fields: numbers-only for cpf/cnpj/phone/zip, etc.\n * args: { fields?: string[] }\n */\nexport const stripMasksHook: FormHook = {\n id: 'stripMasks',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n const group = ctx.formGroup;\n if (!group) return { status: 'ok' };\n const targetFields: string[] | undefined = ctx.args?.fields;\n const keys = targetFields && Array.isArray(targetFields) && targetFields.length > 0\n ? targetFields\n : Object.keys(group.controls);\n for (const k of keys) {\n const c = group.get(k);\n if (!c) continue;\n const val = c.value;\n if (typeof val === 'string') {\n const cleaned = val.replace(/[\\.\\-_/()\\s]/g, '');\n if (cleaned !== val) c.setValue(cleaned, { emitEvent: false });\n }\n }\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'stripMasks-failed' };\n }\n },\n};\n\n","import type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\n\n/**\n * Prefill static values or simple computed values from args.\n * args: { values?: Record<string, any> }\n */\nexport const prefillFromContextHook: FormHook = {\n id: 'prefillFromContext',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n const group = ctx.formGroup;\n const values = ctx.args?.values as Record<string, any> | undefined;\n if (!group || !values) return { status: 'ok' };\n Object.entries(values).forEach(([k, v]) => {\n const c = group.get(k);\n if (c) c.setValue(v, { emitEvent: false });\n });\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'prefill-failed' };\n }\n },\n};\n\n","import type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\n\n/**\n * Simple notifier hook: logs success. UI snackbars should be handled by the form component itself.\n * args: { message?: string }\n */\nexport const notifySuccessHook: FormHook = {\n id: 'notifySuccess',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n if (ctx.stage === 'afterSubmit') {\n const msg = ctx.args?.message || 'Registro salvo com sucesso';\n try { (console.log || console.info)('[Hook] notifySuccess:', msg, { result: ctx.extras }); } catch {}\n }\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'notify-failed' };\n }\n },\n};\n\n","import type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\n\n/**\n * Cancels submission if CPF is missing or not 11 digits after mask stripping.\n */\nexport const cancelIfCpfInvalidHook: FormHook = {\n id: 'cancelIfCpfInvalid',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n const group = ctx.formGroup;\n if (!group) return { status: 'ok' };\n const ctrl = group.get('cpf');\n if (!ctrl) return { status: 'ok' };\n const raw = String(ctrl.value ?? '');\n const digits = raw.replace(/\\D+/g, '');\n if (digits.length !== 11) {\n return { status: 'cancel', reason: 'cpf-invalid', field: 'cpf' };\n }\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'cpf-check-failed' };\n }\n },\n};\n\n","import type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\n\n/**\n * Logs error context when onError stage is triggered.\n */\nexport const logOnErrorHook: FormHook = {\n id: 'logOnError',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n if (ctx.stage === 'onError') {\n try { (console.error || console.log)('[Hook] onError', ctx.extras || {}); } catch {}\n }\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'log-on-error-failed' };\n }\n },\n};\n\n","import { inject } from '@angular/core';\nimport type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\nimport { TelemetryService } from '../../services/telemetry.service';\n\nexport function reportTelemetryHookFactory(): FormHook {\n const telemetry = inject(TelemetryService);\n return {\n id: 'reportTelemetry',\n run(ctx: FormHookContext): FormHookOutcome {\n try {\n const eventName = ctx.args?.event || `form_${ctx.stage}`;\n telemetry.record(eventName, {\n stage: ctx.stage,\n operation: ctx.operation,\n entityId: ctx.entityId,\n resourcePath: ctx.resourcePath,\n extras: ctx.extras,\n });\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'telemetry-failed' };\n }\n },\n };\n}\n\n","import { inject } from '@angular/core';\nimport type { FormHook, FormHookContext, FormHookOutcome } from '../form-hooks.types';\nimport { GenericCrudService } from '../../services/generic-crud.service';\nimport { firstValueFrom } from 'rxjs';\n\nexport function ensureNoConflictsHookFactory(): FormHook {\n const crud = inject(GenericCrudService<any>);\n return {\n id: 'ensureNoConflicts',\n async run(ctx: FormHookContext): Promise<FormHookOutcome> {\n try {\n const resource = (ctx.resourcePath || '').trim();\n const fields: string[] = Array.isArray(ctx.args?.uniqueBy) ? ctx.args.uniqueBy : [];\n if (!resource || fields.length === 0 || !ctx.formGroup) return { status: 'ok' };\n // Build criteria from form\n const criteria: any = {};\n for (const f of fields) {\n const c = ctx.formGroup.get(f);\n const v = c?.value;\n if (v == null || v === '') return { status: 'ok' }; // ignore when missing values\n criteria[f] = typeof v === 'string' ? v.trim() : v;\n }\n // Configure and query first page with size 1\n crud.configure(resource);\n const page = await firstValueFrom(crud.filter(criteria, { pageNumber: 0, pageSize: 1 }, {} as any));\n const content: any[] = (page as any)?.content || [];\n if (content.length === 0) return { status: 'ok' };\n const currentId = ctx.entityId;\n const idField = ctx.args?.idField || 'id';\n const conflict = currentId == null ? true : content.some((r) => r?.[idField] !== currentId);\n if (conflict) {\n return { status: 'cancel', reason: 'conflict', field: fields[0] };\n }\n return { status: 'ok' };\n } catch (e: any) {\n return { status: 'error', reason: e?.message || 'conflict-check-failed' };\n }\n },\n };\n}\n\n","import { Provider } from '@angular/core';\nimport { FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOK_RESOLVERS, FORM_HOOKS_WHITELIST } from '../form-hooks.tokens';\nimport { stripMasksHook } from './stripMasks.hook';\nimport { prefillFromContextHook } from './prefillFromContext.hook';\nimport { notifySuccessHook } from './notifySuccess.hook';\nimport { cancelIfCpfInvalidHook } from './cancelIfCpfInvalid.hook';\nimport { logOnErrorHook } from './logOnError.hook';\nimport { reportTelemetryHookFactory } from './reportTelemetry.hook';\nimport { ensureNoConflictsHookFactory } from './ensureNoConflicts.hook';\n\n/** Convenience helper to register the built-in hooks */\nexport function provideDefaultFormHooks(): Provider[] {\n return [\n { provide: FORM_HOOKS, useValue: stripMasksHook, multi: true },\n { provide: FORM_HOOKS, useValue: prefillFromContextHook, multi: true },\n { provide: FORM_HOOKS, useValue: notifySuccessHook, multi: true },\n { provide: FORM_HOOKS, useValue: cancelIfCpfInvalidHook, multi: true },\n { provide: FORM_HOOKS, useValue: logOnErrorHook, multi: true },\n { provide: FORM_HOOKS, useFactory: reportTelemetryHookFactory, multi: true },\n { provide: FORM_HOOKS, useFactory: ensureNoConflictsHookFactory, multi: true },\n ];\n}\n\n/** Register custom hooks from host projects. */\nexport function provideFormHooks(\n items: Array<import('../form-hooks.types').FormHook | (() => import('../form-hooks.types').FormHook)>,\n): Provider[] {\n return items.map((it) =>\n typeof it === 'function'\n ? ({ provide: FORM_HOOKS, useFactory: it as any, multi: true })\n : ({ provide: FORM_HOOKS, useValue: it as any, multi: true }),\n );\n}\n\n/** Register dynamic resolvers (id -> hook) for late binding. */\nexport function provideHookResolvers(\n resolvers: Array<import('../form-hooks.types').HookResolver>,\n): Provider[] {\n return resolvers.map((r) => ({ provide: FORM_HOOK_RESOLVERS, useValue: r, multi: true }));\n}\n\n/** Register hook presets (default stage declarations by resource/form). */\nexport function provideFormHookPresets(\n presets: Array<import('../form-hooks.types').FormHookPreset>,\n): Provider[] {\n return [{ provide: FORM_HOOKS_PRESETS, useValue: presets, multi: true }];\n}\n\n/** Register a whitelist of allowed hook ids/patterns. */\nexport function provideHookWhitelist(\n allowed: Array<string | RegExp>,\n): Provider[] {\n return [{ provide: FORM_HOOKS_WHITELIST, useValue: allowed, multi: true }];\n}\n","/*\n * Public API Surface of praxis-core (diagnostic minimal export)\n */\n\nexport * from './lib/praxis-core';\n// Tokens (excluding overlay-decision-matrix for now)\nexport * from './lib/tokens/api-url.token';\nexport * from './lib/tokens/global-config.token';\nexport * from './lib/tokens/global-config.providers';\nexport * from './lib/tokens/settings-panel-bridge.token';\nexport * from './lib/tokens/external-editors.tokens';\n// Services (excluding overlay-decider for now)\nexport * from './lib/services/generic-crud.service';\nexport * from './lib/services/schema-normalizer.service';\nexport * from './lib/services/table-config.service';\nexport * from './lib/services/table-config-reconciler';\nexport * from './lib/services/config-storage.service';\nexport * from './lib/services/global-config.service';\nexport * from './lib/services/connection-storage.service';\nexport * from './lib/services/dynamic-form.service';\nexport * from './lib/services/error-message.service';\nexport * from './lib/services/component-metadata-registry.service';\nexport * from './lib/services/telemetry.service';\n// Models\n// Models temporarily disabled for isolation\n// export * from './lib/models/overlay-decision.model';\n// export * from './lib/models/table-config.model';\n// export * from './lib/models/table-config-v2.model';\n// export * from './lib/models/field-definition.model';\n// export * from './lib/models/api-endpoint.enum';\n// export * from './lib/models/component-metadata.interface';\n// export * from './lib/models/component-doc-metadata.interface';\n// export * from './lib/models/material-field-metadata.interface';\n// export * from './lib/models/material-time-range-metadata.interface';\n// export * from './lib/models/material-year-input-metadata.interface';\n// export * from './lib/models/form/form-config.model';\n// export * from './lib/models/form/form-events.model';\nexport * from './lib/models/form/form-events.model';\n// export * from './lib/models/overlay-decision.model';\n/*\n * Public API Surface of praxis-core\n */\n\nexport * from './lib/praxis-core';\n\n// Services\nexport * from './lib/services/generic-crud.service';\nexport * from './lib/services/schema-normalizer.service';\nexport * from './lib/services/table-config.service';\n// Table reconcilers/services\nexport * from './lib/services/table-config-reconciler';\nexport * from './lib/services/config-storage.service';\nexport * from './lib/services/global-config.service';\nexport * from './lib/services/connection-storage.service';\nexport * from './lib/services/overlay-decider.service';\nexport * from './lib/services/dynamic-form.service';\nexport * from './lib/services/error-message.service';\nexport * from './lib/services/component-metadata-registry.service';\nexport * from './lib/services/telemetry.service';\n\n// Tokens\nexport * from './lib/tokens/api-url.token';\nexport * from './lib/tokens/overlay-decision-matrix.token';\nexport * from './lib/tokens/global-config.token';\nexport * from './lib/tokens/global-config.providers';\nexport * from './lib/tokens/settings-panel-bridge.token';\nexport * from './lib/tokens/external-editors.tokens';\n\n// Models\nexport * from './lib/models/table-config.model';\nexport * from './lib/models/table-config-v2.model';\nexport * from './lib/models/field-definition.model';\nexport * from './lib/models/api-endpoint.enum';\nexport * from './lib/models/component-metadata.interface';\nexport * from './lib/models/component-doc-metadata.interface';\nexport * from './lib/models/material-field-metadata.interface';\nexport * from './lib/models/material-time-range-metadata.interface';\nexport * from './lib/models/material-year-input-metadata.interface';\nexport * from './lib/models/form/form-config.model';\nexport * from './lib/models/form/form-events.model';\nexport * from './lib/models/form/form-layout.model';\nexport * from './lib/models/overlay-decision.model';\nexport * from './lib/models/page/page-config.model';\nexport * from './lib/models/global-config.model';\nexport * from './lib/models/global-dialog-config.model';\nexport * from './lib/models/back-config.model';\n\n// Metadata constants\nexport * from './lib/metadata/field-control-type.constants';\nexport * from './lib/metadata/field-data-type.constants';\nexport * from './lib/metadata/allowed-file-types.constants';\nexport * from './lib/metadata/icon-position.constants';\nexport * from './lib/metadata/icon-size.constants';\nexport * from './lib/metadata/numeric-format.constants';\nexport * from './lib/metadata/validation-pattern.constants';\n\n// Helpers\nexport * from './lib/helpers/field-definition-mapper';\nexport * from './lib/helpers/version.helper';\nexport * from './lib/helpers/validators.helper';\nexport * from './lib/helpers/ensure-ids.helper';\nexport * from './lib/helpers/column-layout.helper';\n// Utils\nexport * from './lib/utils/text-transform.util';\nexport * from './lib/utils/deep-merge.util';\n\n// Service types\nexport * from './lib/services/types/pagination';\nexport * from './lib/services/types/options';\nexport * from './lib/services/types/common';\n\n// Dynamic Widgets (loader + types)\nexport * from './lib/widgets/widget-definition.model';\nexport * from './lib/widgets/dynamic-widget-loader.directive';\nexport * from './lib/widgets/widget-page.model';\nexport * from './lib/widgets/connection-manager.service';\nexport * from './lib/widgets/dynamic-widget-page.component';\nexport * from './lib/widgets/grid-page.model';\nexport * from './lib/widgets/dynamic-grid-page.component';\n// Moved to @praxisui/page-builder\n// export * from './lib/widgets/dynamic-gridster-page.component';\n// export * from './lib/widgets/page-config-editor/page-config-editor.component';\n// UI helpers\nexport * from './lib/components/empty-state-card/empty-state-card.component';\nexport * from './lib/components/quick-connect/resource-quick-connect.component';\nexport * from './lib/components/icon-picker/icon-picker.component';\nexport * from './lib/components/icon-picker/icon-picker.service';\nexport * from './lib/components/icon/praxis-icon.directive';\nexport * from './lib/helpers/metadata-normalizer';\n// Editor/Toolbar\n// Moved to @praxisui/page-builder\n// export * from './lib/widgets/editor/floating-toolbar.component';\n// export * from './lib/widgets/editor/component-palette-dialog.component';\n// export * from './lib/widgets/editor/editor-state.service';\n// export * from './lib/widgets/editor/connection-builder.component';\n// Connection Graph (diagram)\n// Moved to @praxisui/page-builder\n// export * from './lib/widgets/editor/connection-graph/connection-graph.component';\n// export * from './lib/widgets/editor/connection-graph/graph-mapper.service';\n// export * from './lib/widgets/editor/connection-graph/edge-router.util';\n// export * from './lib/widgets/editor/connection-graph/graph-types';\n// export * from './lib/widgets/editor/connection-editor/connection-editor.component';\n// UI Schema hash/cache utilities\nexport * from './lib/utils/schema-id.util';\nexport * from './lib/utils/fetch-with-etag.util';\nexport * from './lib/cache/cache-adapter';\nexport * from './lib/cache/local-storage-cache-adapter';\nexport * from './lib/schema/schema-metadata-client';\n// Reconcilers (explicit to avoid name collisions with table reconciler)\nexport {\n buildBaseFormField,\n applyLocalCustomizations as applyLocalFormCustomizations,\n reconcileFormConfig,\n} from './lib/reconcilers/form-config-reconciler';\nexport { reconcileFilterConfig } from './lib/reconcilers/filter-config-reconciler';\n\n// Form Hooks (types, tokens, registry, defaults)\nexport * from './lib/hooks/form-hooks.types';\nexport * from './lib/hooks/form-hooks.tokens';\nexport * from './lib/hooks/form-hooks.registry';\nexport * from './lib/hooks/defaults/stripMasks.hook';\nexport * from './lib/hooks/defaults/prefillFromContext.hook';\nexport * from './lib/hooks/defaults/notifySuccess.hook';\nexport * from './lib/hooks/defaults/cancelIfCpfInvalid.hook';\nexport * from './lib/hooks/defaults/logOnError.hook';\nexport * from './lib/hooks/defaults/reportTelemetry.hook';\nexport * from './lib/hooks/defaults/ensureNoConflicts.hook';\nexport * from './lib/hooks/defaults/providers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["applyLocalCustomizations","i1.ConnectionManagerService","i1","i2","i3","i4","i5","i6","i7","applyLocal"],"mappings":"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"}