@praxisui/core 1.0.0-beta.4 → 1.0.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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 \"module/items/filter\" which would lead to duplicate suffixes (e.g., \"/filter/filter\")\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 let apiOrigin = '';\n try {\n const baseUrl = buildApiUrl(entry);\n const u = new URL(baseUrl);\n apiOrigin = u.origin;\n filteredUrl = `${apiOrigin}/schemas/filtered`;\n } catch {}\n\n // Build cache key including the API origin (not the app origin)\n const schemaId = buildSchemaId({ path, operation, schemaType, includeInternalSchemas: false, tenant, locale, apiOrigin });\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\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,\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,\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\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,\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\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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"}
1
+ {"version":3,"file":"praxisui-core.mjs","sources":["../../../projects/praxis-core/src/lib/praxis-core.ts","../../../projects/praxis-core/src/lib/models/api-endpoint.enum.ts","../../../projects/praxis-core/src/lib/tokens/api-url.token.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/cache/memory-cache-adapter.ts","../../../projects/praxis-core/src/lib/services/schema-normalizer.service.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/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/component-metadata-registry.service.ts","../../../projects/praxis-core/src/lib/tokens/global-action.token.ts","../../../projects/praxis-core/src/lib/services/global-action.service.ts","../../../projects/praxis-core/src/lib/services/connection-storage.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/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-key.service.ts","../../../projects/praxis-core/src/lib/services/telemetry.service.ts","../../../projects/praxis-core/src/lib/tokens/field-selector-registry.token.ts","../../../projects/praxis-core/src/lib/services/field-selector-registry.service.ts","../../../projects/praxis-core/src/lib/services/loading-orchestrator.service.ts","../../../projects/praxis-core/src/lib/tokens/loading-context.token.ts","../../../projects/praxis-core/src/lib/tokens/loading-renderer.token.ts","../../../projects/praxis-core/src/lib/services/praxis-loading.interceptor.ts","../../../projects/praxis-core/src/lib/services/default-loading-renderer.service.ts","../../../projects/praxis-core/src/lib/providers/field-selector-registry.providers.ts","../../../projects/praxis-core/src/lib/providers/global-action-toast.provider.ts","../../../projects/praxis-core/src/lib/providers/global-action-analytics.provider.ts","../../../projects/praxis-core/src/lib/providers/loading.providers.ts","../../../projects/praxis-core/src/lib/logging/logging.defaults.ts","../../../projects/praxis-core/src/lib/logging/sinks/console-logger.sink.ts","../../../projects/praxis-core/src/lib/logging/logging.tokens.ts","../../../projects/praxis-core/src/lib/logging/helpers/error-normalizer.helper.ts","../../../projects/praxis-core/src/lib/logging/helpers/throttle.helper.ts","../../../projects/praxis-core/src/lib/logging/helpers/warn-once.helper.ts","../../../projects/praxis-core/src/lib/logging/logger.service.ts","../../../projects/praxis-core/src/lib/logging/praxis-global-error-handler.ts","../../../projects/praxis-core/src/lib/logging/sinks/telemetry-logger.sink.ts","../../../projects/praxis-core/src/lib/logging/provide-praxis-logging.ts","../../../projects/praxis-core/src/lib/logging/observability/observability.defaults.ts","../../../projects/praxis-core/src/lib/logging/observability/observability.tokens.ts","../../../projects/praxis-core/src/lib/logging/observability/observability-dashboard.service.ts","../../../projects/praxis-core/src/lib/tokens/global-config.providers.ts","../../../projects/praxis-core/src/lib/tokens/global-action.providers.ts","../../../projects/praxis-core/src/lib/tokens/global-action.catalog.ts","../../../projects/praxis-core/src/lib/actions/global-action-catalog.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/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/form/rule-property.schema.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/field-selector-control-type.constants.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/helpers/rule-migration.helper.ts","../../../projects/praxis-core/src/lib/utils/text-transform.util.ts","../../../projects/praxis-core/src/lib/utils/date-range-presets.util.ts","../../../projects/praxis-core/src/lib/utils/inline-filter-controls.util.ts","../../../projects/praxis-core/src/lib/utils/control-type-normalizer.util.ts","../../../projects/praxis-core/src/lib/actions/global-action-ui.ts","../../../projects/praxis-core/src/lib/ai/field-metadata-ai-capabilities.ts","../../../projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts","../../../projects/praxis-core/src/lib/ai/dynamic-page-context-pack.ts","../../../projects/praxis-core/src/lib/components/icon/praxis-icon.directive.ts","../../../projects/praxis-core/src/lib/widgets/dynamic-widget-loader.directive.ts","../../../projects/praxis-core/src/lib/widgets/widget-shell.component.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-widget-page.metadata.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/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/tokens/schema-viewer.token.ts","../../../projects/praxis-core/src/lib/components/schema-viewer/schema-viewer.component.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","export enum ApiEndpoint {\n Default = 'default',\n HumanResources = 'humanResources',\n UiWrappersTest = 'uiWrappersTest',\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 { 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 { CacheAdapter, CacheEntry } from './cache-adapter';\n\nexport class MemoryCacheAdapter implements CacheAdapter {\n private mem = new Map<string, CacheEntry>();\n\n async get(schemaId: string): Promise<CacheEntry | undefined> {\n return this.mem.get(schemaId);\n }\n\n async set(schemaId: string, entry: CacheEntry): Promise<void> {\n this.mem.set(schemaId, entry);\n }\n\n async remove(schemaId: string): Promise<void> {\n this.mem.delete(schemaId);\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 private resolveNonEmptyStringToken(...values: unknown[]): string | undefined {\n for (const value of values) {\n const text = String(value ?? '').trim();\n if (text.length) {\n return text;\n }\n }\n return undefined;\n }\n\n private isNumericSchemaType(type: unknown): boolean {\n const token = String(type ?? '').trim().toLowerCase();\n return ['number', 'integer', 'int', 'float', 'double', 'decimal'].includes(token);\n }\n\n private resolveNumericFormatToken(\n prop: any,\n ui: Record<string, any>,\n resolvedType?: string,\n ): string | undefined {\n const typeToken = resolvedType ?? prop?.type;\n if (!this.isNumericSchemaType(typeToken)) {\n return undefined;\n }\n if (ui?.numberFormat?.percentage === true || ui?.['numberFormat.percentage'] === true) {\n return 'percent';\n }\n return this.resolveNonEmptyStringToken(\n ui?.numericFormat,\n ui?.format,\n ui?.numberFormat?.style,\n ui?.['numberFormat.style'],\n prop?.format,\n );\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 = this.resolveFieldType(prop, ui);\n const numericFormat = this.resolveNumericFormatToken(prop, ui, field.type);\n if (numericFormat) {\n field.numericFormat = numericFormat;\n (field as any).format = numericFormat;\n }\n if (ui.controlType) {\n field.controlType = ui.controlType;\n }\n if (ui.mode !== undefined) {\n (field as any).mode = ui.mode;\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 // Visibility flags (x-ui)\n if (ui.hidden !== undefined) {\n field.hidden = this.parseBoolean(ui.hidden);\n }\n if (ui.tableHidden !== undefined) {\n field.tableHidden = this.parseBoolean(ui.tableHidden);\n }\n if (ui.formHidden !== undefined) {\n field.formHidden = this.parseBoolean(ui.formHidden);\n }\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 if (ui.clearButton !== undefined) {\n if (typeof ui.clearButton === 'boolean') {\n field.clearButton = { enabled: this.parseBoolean(ui.clearButton) };\n } else if (typeof ui.clearButton === 'object') {\n field.clearButton = { ...(ui.clearButton as Record<string, any>) };\n }\n }\n if (\n ui['clearButton.enabled'] !== undefined ||\n ui['clearButton.icon'] !== undefined ||\n ui['clearButton.iconColor'] !== undefined ||\n ui['clearButton.tooltip'] !== undefined ||\n ui['clearButton.ariaLabel'] !== undefined ||\n ui['clearButton.showOnlyWhenFilled'] !== undefined\n ) {\n const clearButton = (field as any).clearButton ?? {};\n if (ui['clearButton.enabled'] !== undefined) {\n clearButton.enabled = this.parseBoolean(ui['clearButton.enabled']);\n }\n if (ui['clearButton.icon'] !== undefined) {\n clearButton.icon = String(ui['clearButton.icon']);\n }\n if (ui['clearButton.iconColor'] !== undefined) {\n clearButton.iconColor = String(ui['clearButton.iconColor']);\n }\n if (ui['clearButton.tooltip'] !== undefined) {\n clearButton.tooltip = String(ui['clearButton.tooltip']);\n }\n if (ui['clearButton.ariaLabel'] !== undefined) {\n clearButton.ariaLabel = String(ui['clearButton.ariaLabel']);\n }\n if (ui['clearButton.showOnlyWhenFilled'] !== undefined) {\n clearButton.showOnlyWhenFilled = this.parseBoolean(ui['clearButton.showOnlyWhenFilled']);\n }\n (field as any).clearButton = clearButton;\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 private resolveFieldType(prop: any, ui: Record<string, any>): string | undefined {\n if (ui?.type !== undefined && ui?.type !== null && String(ui.type).trim() !== '') {\n return String(ui.type);\n }\n if (prop?.type) {\n return String(prop.type);\n }\n\n const variants: any[] = [\n ...(Array.isArray(prop?.oneOf) ? prop.oneOf : []),\n ...(Array.isArray(prop?.anyOf) ? prop.anyOf : []),\n ].filter((variant) => variant && typeof variant === 'object');\n\n const nonNullTypes = Array.from(\n new Set(\n variants\n .map((variant) => (typeof variant.type === 'string' ? variant.type.trim() : ''))\n .filter((type) => !!type && type !== 'null'),\n ),\n );\n\n if (nonNullTypes.length === 1) {\n return nonNullTypes[0];\n }\n\n // Compatibilidade para schemas de range publicados como oneOf(array|object).\n const controlToken = String(ui?.controlType || '').trim().toLowerCase().replace(/[^a-z0-9]/g, '');\n const isRangeControl = ['daterange', 'datetimerange', 'rangeslider', 'pricerange'].includes(controlToken);\n if (isRangeControl && nonNullTypes.includes('array')) {\n return 'array';\n }\n\n return undefined;\n }\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\nexport interface PraxisAuthContext {\n ready?: () => Promise<void>;\n token?: () => string | undefined;\n tenant?: () => string | undefined;\n locale?: () => string | undefined;\n}\n\nexport interface PraxisGlobalConfigBootstrapOptions {\n auth?: PraxisAuthContext;\n remote?: { baseUrl?: string; apiPath?: string };\n headers?: Record<string, string>;\n headersFactory?: () => Record<string, string>;\n includeDefaultHeaders?: boolean;\n blocking?: 'auth+global' | 'global' | 'none';\n errorPolicy?: 'fail' | 'ignore';\n timeoutMs?: number;\n}\n\nexport const PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS =\n new InjectionToken<PraxisGlobalConfigBootstrapOptions>(\n 'PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS',\n );\n\nexport const PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY =\n new InjectionToken<() => Promise<void>>('PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY');\n\nexport const PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER =\n new InjectionToken<() => string | undefined>('PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER');\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","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable, of, EMPTY, throwError, defer, from } from 'rxjs';\nimport { catchError, map, switchMap, take } from 'rxjs/operators';\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/**\n * Async contract for config storage (HTTP-friendly).\n */\nexport interface AsyncConfigStorage {\n /**\n * Reads config for a key.\n *\n * Success contract:\n * - emit one `next` value (can be `null`) and complete.\n * Failure contract:\n * - emit `error`.\n */\n loadConfig<T>(key: string): Observable<T | null>;\n /**\n * Persists config for a key.\n *\n * Success contract (strong ack):\n * - emit at least one `next` (typically `void 0`) and then complete.\n * Not-acknowledged contract (soft-fail path):\n * - complete without any `next`.\n * Hard-failure contract:\n * - emit `error`.\n *\n * Important:\n * - table runtime treats complete without `next` as\n * \"persistence not acknowledged\".\n */\n saveConfig<T>(key: string, config: T): Observable<void>;\n /**\n * Clears config for a key.\n *\n * Success contract (strong ack):\n * - emit at least one `next` (typically `void 0`) and then complete.\n * Not-acknowledged contract (soft-fail path):\n * - complete without any `next`.\n * Hard-failure contract:\n * - emit `error`.\n *\n * Important:\n * - table runtime treats complete without `next` as\n * \"clear not acknowledged\".\n */\n clearConfig(key: string): Observable<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 this.trySaveConfig(key, config);\n }\n\n clearConfig(key: string): void {\n this.tryClearConfig(key);\n }\n\n trySaveConfig<T>(key: string, config: T): boolean {\n try {\n localStorage.setItem(key, JSON.stringify(config));\n return true;\n } catch {\n return false;\n }\n }\n\n tryClearConfig(key: string): boolean {\n try {\n localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n }\n}\n\n/**\n * Async adapter over the sync LocalStorage service.\n */\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageAsyncAdapter implements AsyncConfigStorage {\n constructor(private readonly delegate: LocalStorageConfigService) {}\n\n loadConfig<T>(key: string): Observable<T | null> {\n return of(this.delegate.loadConfig<T>(key));\n }\n\n saveConfig<T>(key: string, config: T): Observable<void> {\n return defer(() => {\n const persisted = this.delegate.trySaveConfig(key, config);\n if (!persisted) {\n return throwError(\n () =>\n new Error(\n `[LocalStorageAsyncAdapter] Failed to persist config for key \"${key}\".`,\n ),\n );\n }\n return of(void 0);\n });\n }\n\n clearConfig(key: string): Observable<void> {\n return defer(() => {\n const cleared = this.delegate.tryClearConfig(key);\n if (!cleared) {\n return throwError(\n () =>\n new Error(\n `[LocalStorageAsyncAdapter] Failed to clear config for key \"${key}\".`,\n ),\n );\n }\n return of(void 0);\n });\n }\n}\n\n/**\n * Defers async storage operations until a gate resolves.\n * Useful to ensure auth/tenant context is ready before HTTP requests.\n */\nexport class DeferredAsyncConfigStorage implements AsyncConfigStorage {\n constructor(\n private readonly delegate: AsyncConfigStorage,\n private readonly gate?: () => Promise<void>,\n ) {}\n\n loadConfig<T>(key: string): Observable<T | null> {\n if (!this.gate) return this.delegate.loadConfig<T>(key);\n return defer(() =>\n from(this.gate!()).pipe(switchMap(() => this.delegate.loadConfig<T>(key))),\n );\n }\n\n saveConfig<T>(key: string, config: T): Observable<void> {\n if (!this.gate) return this.delegate.saveConfig<T>(key, config);\n return defer(() =>\n from(this.gate!()).pipe(\n switchMap(() => this.delegate.saveConfig<T>(key, config)),\n ),\n );\n }\n\n clearConfig(key: string): Observable<void> {\n if (!this.gate) return this.delegate.clearConfig(key);\n return defer(() =>\n from(this.gate!()).pipe(switchMap(() => this.delegate.clearConfig(key))),\n );\n }\n}\n\nexport const ASYNC_CONFIG_STORAGE = new InjectionToken<AsyncConfigStorage>(\n 'ASYNC_CONFIG_STORAGE',\n {\n providedIn: 'root',\n factory: () => inject(LocalStorageAsyncAdapter),\n },\n);\n\n@Injectable({ providedIn: 'root' })\nexport class RemoteConfigStorage implements ConfigStorage {\n private readonly asyncStorage = inject(ASYNC_CONFIG_STORAGE);\n private readonly localStorage = inject(LocalStorageConfigService);\n private readonly cache = new Map<string, unknown>();\n private readonly inflight = new Set<string>();\n\n loadConfig<T>(key: string): T | null {\n if (this.cache.has(key)) return this.cache.get(key) as T;\n\n const localValue = this.localStorage.loadConfig<T>(key);\n if (localValue != null) {\n this.cache.set(key, localValue);\n }\n\n this.refreshRemote<T>(key);\n return localValue ?? null;\n }\n\n saveConfig<T>(key: string, config: T): void {\n this.cache.set(key, config as unknown);\n this.localStorage.saveConfig(key, config);\n this.asyncStorage\n .saveConfig<T>(key, config)\n .pipe(take(1))\n .subscribe({ error: () => {} });\n }\n\n clearConfig(key: string): void {\n this.cache.delete(key);\n this.localStorage.clearConfig(key);\n this.asyncStorage\n .clearConfig(key)\n .pipe(take(1))\n .subscribe({ error: () => {} });\n }\n\n private refreshRemote<T>(key: string): void {\n if (this.inflight.has(key)) return;\n this.inflight.add(key);\n this.asyncStorage\n .loadConfig<T>(key)\n .pipe(take(1))\n .subscribe({\n next: (value) => {\n if (value == null) return;\n this.cache.set(key, value as unknown);\n this.localStorage.saveConfig(key, value);\n },\n error: () => {\n this.inflight.delete(key);\n },\n complete: () => {\n this.inflight.delete(key);\n },\n });\n }\n}\n\nexport const CONFIG_STORAGE = new InjectionToken<ConfigStorage>(\n 'CONFIG_STORAGE',\n {\n providedIn: 'root',\n factory: () => {\n const asyncStorage = inject(ASYNC_CONFIG_STORAGE);\n if (asyncStorage instanceof LocalStorageAsyncAdapter) {\n return inject(LocalStorageConfigService);\n }\n return inject(RemoteConfigStorage);\n },\n },\n);\n\n/**\n * Options for ApiConfigStorage.\n */\nexport interface ApiConfigStorageOptions {\n baseUrl?: string;\n /** Factory to supply headers (tenant/user/env/updatedBy) per request. */\n headersFactory?: () => Record<string, string | undefined>;\n /** Default headers applied when the headersFactory omits them. */\n defaultHeaders?: Record<string, string>;\n /** Resolve componentType from the storage key (use the component selector, e.g. praxis-table). */\n componentTypeResolver?: (key: string) => string;\n /** Controls whether load errors for global config should propagate. */\n errorPolicy?: 'fail' | 'ignore';\n}\n\nexport const API_CONFIG_STORAGE_OPTIONS =\n new InjectionToken<ApiConfigStorageOptions>('API_CONFIG_STORAGE_OPTIONS');\n\nconst DEFAULT_USER_ID_STORAGE_KEY = 'praxis.demoUserId';\n\nfunction buildDemoUserId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `demo-${crypto.randomUUID()}`;\n }\n return `demo-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction getOrCreateDefaultUserId(): string {\n if (typeof localStorage === 'undefined') return 'demo';\n try {\n const existing = localStorage.getItem(DEFAULT_USER_ID_STORAGE_KEY);\n if (existing && existing.trim()) return existing.trim();\n const generated = buildDemoUserId();\n localStorage.setItem(DEFAULT_USER_ID_STORAGE_KEY, generated);\n return generated;\n } catch {\n return 'demo';\n }\n}\n\nfunction resolveDefaultHeaders(): Record<string, string> {\n return {\n 'X-Tenant-ID': 'demo',\n 'X-User-ID': getOrCreateDefaultUserId(),\n 'X-Env': 'local',\n };\n}\n\n/**\n * HTTP-based storage that talks to praxis-config-starter user-config API.\n */\n@Injectable({ providedIn: 'root' })\nexport class ApiConfigStorage implements AsyncConfigStorage {\n private readonly http = inject(HttpClient);\n private readonly opts = inject(API_CONFIG_STORAGE_OPTIONS, { optional: true });\n private readonly baseUrl = (this.opts?.baseUrl || '/api/praxis/config/ui').replace(/\\/$/, '');\n private readonly headersFactory = this.opts?.headersFactory || (() => ({}));\n private readonly defaultHeaders = this.opts?.defaultHeaders;\n private readonly componentTypeResolver = (key: string) => {\n const resolved = this.opts?.componentTypeResolver?.(key);\n if (resolved && resolved.trim()) return resolved.trim();\n return this.inferComponentType(key);\n };\n\n // Simple in-memory cache of etag/payload per key to support 304 reuse\n private readonly cache = new Map<\n string,\n { etag?: string | null; payload?: any }\n >();\n\n constructor() {}\n\n loadConfig<T>(key: string): Observable<T | null> {\n const cached = this.cache.get(key);\n const etag = cached?.etag;\n const { type, id } = this.resolveKey(key);\n const url = `${this.baseUrl}`;\n const params = this.buildParams(type, id);\n\n const headers = this.buildHeaders(etag ? { 'If-None-Match': this.formatEtag(etag) } : {});\n return this.http\n .get<any>(url, { observe: 'response', headers, params })\n .pipe(\n map((resp) => {\n const nextEtag = this.stripQuotes(resp.headers.get('ETag'));\n const body = resp.body;\n if (nextEtag) {\n this.cache.set(key, { etag: nextEtag, payload: body?.payload });\n }\n return (body?.payload as T) ?? null;\n }),\n catchError((err) => {\n // 304 Not Modified: reuse cached payload\n if (err.status === 304 && cached?.payload !== undefined) {\n return of(cached.payload as T);\n }\n if (err.status === 404) return of(null);\n console.warn('[ApiConfigStorage] load error', err);\n return this.shouldPropagateLoadError(key, err)\n ? throwError(() => err)\n : of(null);\n }),\n );\n }\n\n saveConfig<T>(key: string, config: T): Observable<void> {\n const { type, id } = this.resolveKey(key);\n const url = `${this.baseUrl}`;\n const params = this.buildParams(type, id);\n const headers = this.buildHeaders();\n return this.http\n .put<any>(url, { payload: config }, { observe: 'response', headers, params })\n .pipe(\n map((resp) => {\n const nextEtag = this.stripQuotes(resp.headers.get('ETag'));\n const payload = (resp.body as any)?.payload ?? config;\n this.cache.set(key, { etag: nextEtag, payload });\n }),\n catchError((err) => {\n console.warn('[ApiConfigStorage] save error', err);\n return this.shouldPropagateSaveError(key)\n ? throwError(() => err)\n // Soft-fail path: complete without next so runtime can treat as\n // \"not acknowledged\" instead of a hard error.\n : EMPTY;\n }),\n );\n }\n\n private shouldPropagateSaveError(key: string): boolean {\n if (this.opts?.errorPolicy === 'fail') return true;\n return this.isCriticalPersistenceKey(key);\n }\n\n private shouldPropagateClearError(key: string): boolean {\n if (this.opts?.errorPolicy === 'fail') return true;\n return this.isCriticalPersistenceKey(key);\n }\n\n private shouldPropagateLoadError(key: string, _err: any): boolean {\n if (this.opts?.errorPolicy !== 'fail') return false;\n return key.startsWith('praxis:global-config');\n }\n\n private isCriticalPersistenceKey(key: string): boolean {\n return (\n key.startsWith('praxis:global-config')\n || key.startsWith('table-config:')\n );\n }\n\n clearConfig(key: string): Observable<void> {\n const { type, id } = this.resolveKey(key);\n const url = `${this.baseUrl}`;\n const params = this.buildParams(type, id);\n const headers = this.buildHeaders();\n return this.http\n .delete<void>(url, { observe: 'response', headers, params })\n .pipe(\n map(() => {\n this.cache.delete(key);\n }),\n catchError((err) => {\n console.warn('[ApiConfigStorage] clear error', err);\n return this.shouldPropagateClearError(key)\n ? throwError(() => err)\n // Soft-fail path: complete without next so runtime can treat as\n // \"clear not acknowledged\" instead of a hard error.\n : EMPTY;\n }),\n );\n }\n\n private buildHeaders(\n extra?: Record<string, string | undefined>,\n ): HttpHeaders {\n const defaults: Record<string, string> = this.defaultHeaders ?? resolveDefaultHeaders();\n const base: Record<string, string | undefined> = this.headersFactory?.() ?? {};\n const merged: Record<string, string> = { ...defaults };\n\n for (const [key, value] of Object.entries(base)) {\n if (typeof value === 'string' && value.trim()) {\n merged[key] = value;\n }\n }\n\n if (extra) {\n for (const [key, value] of Object.entries(extra)) {\n if (typeof value === 'string' && value.trim()) {\n merged[key] = value;\n }\n }\n }\n\n return new HttpHeaders(merged);\n }\n\n private buildParams(componentType: string, componentId: string): HttpParams {\n return new HttpParams({\n fromObject: {\n componentType,\n componentId,\n },\n });\n }\n\n private resolveKey(key: string): { type: string; id: string } {\n const type = this.componentTypeResolver(key);\n return { type, id: key };\n }\n\n private inferComponentType(key: string): string {\n const normalized = key.trim();\n\n const prefixes: Array<[string, string]> = [\n ['praxis-form-config-', 'praxis-dynamic-form'],\n ['praxis-layout-', 'praxis-dynamic-form'],\n ['form-pres:', 'praxis-dynamic-form'],\n ['form-schema-meta:', 'praxis-dynamic-form'],\n ['form-schema-prefs:', 'praxis-dynamic-form'],\n ['form-schema-ignore:', 'praxis-dynamic-form'],\n ['form-schema-snooze:', 'praxis-dynamic-form'],\n ['form-schema-notified:', 'praxis-dynamic-form'],\n ['form-inputs:', 'praxis-dynamic-form'],\n ['form-schema-', 'praxis-dynamic-form'],\n ['crud-overrides:', 'praxis-crud'],\n ['crud-dialog-state:', 'praxis-crud'],\n ['crud-back:', 'praxis-crud'],\n ['table-config:', 'praxis-table'],\n ['table-inputs:', 'praxis-table'],\n ['table-schema-prefs:', 'praxis-table'],\n ['tableSchemaIgnore:', 'praxis-table'],\n ['tableSchemaSnooze:', 'praxis-table'],\n ['tableSchemaNotified:', 'praxis-table'],\n ['filter-config:', 'praxis-filter'],\n ['filter-schema-meta:', 'praxis-filter'],\n ['filter-schema-', 'praxis-filter'],\n ['filter-schema-ignore:', 'praxis-filter'],\n ['filter-schema-snooze:', 'praxis-filter'],\n ['filter-schema-notified:', 'praxis-filter'],\n ['filter-tags:', 'praxis-filter'],\n ['filter-dto:', 'praxis-filter'],\n ['tabs:', 'praxis-tabs'],\n ['manual-form:', 'praxis-manual-form'],\n ['files-upload-config:', 'praxis-files-upload'],\n ['stepper-config:', 'praxis-stepper'],\n ['expansion:', 'praxis-expansion'],\n ['praxis-list-config-', 'praxis-list'],\n ['conn:form:', 'praxis-dynamic-form'],\n ['conn:table:', 'praxis-table'],\n ['grid-page:', 'praxis-dynamic-gridster-page'],\n ['page:', 'praxis-dynamic-gridster-page'],\n ['dynamic-page:', 'praxis-dynamic-page'],\n ['praxis:global-config', 'praxis-global-config-editor'],\n ];\n\n for (const [prefix, type] of prefixes) {\n if (normalized.startsWith(prefix)) return type;\n }\n\n if (this.looksLikePageKey(normalized)) return 'praxis-dynamic-gridster-page';\n\n return 'custom';\n }\n\n private looksLikePageKey(value: string): boolean {\n if (value.includes('://')) return false;\n const parts = value.split(':');\n return (parts.length === 4 || parts.length === 5) && !parts[0].includes('/');\n }\n\n private stripQuotes(value: string | null): string | null {\n if (!value) return null;\n const v = value.trim();\n if (v.startsWith('\"') && v.endsWith('\"') && v.length >= 2) {\n return v.substring(1, v.length - 1);\n }\n return v;\n }\n\n private formatEtag(etag?: string | null): string | undefined {\n if (!etag) return undefined;\n return etag.startsWith('\"') ? etag : `\"${etag}\"`;\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 {\n GLOBAL_CONFIG,\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS,\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY,\n PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER,\n} from '../tokens/global-config.token';\nimport {\n ASYNC_CONFIG_STORAGE,\n type AsyncConfigStorage,\n} from './config-storage.service';\nimport type { GlobalConfig } from '../models/global-config.model';\nimport { deepMerge } from '../utils/deep-merge.util';\nimport { firstValueFrom, of } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigService {\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly bootstrapReady = inject(PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, { optional: true });\n private readonly tenantResolver = inject(PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, { optional: true });\n private readonly bootstrapOptions = inject(PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, { optional: true });\n private tenant: string | undefined;\n private configCache: GlobalConfig | null = null;\n private configCacheKey: string | null = null;\n private configLoadPromise: Promise<GlobalConfig | null> | null = null;\n private configLoadKey: string | null = null;\n private storageSnapshot: GlobalConfig | null = null;\n private storageSnapshotKey: string | null = null;\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 constructor() {\n // Preload configuration asynchronously so snapshot-based getters have data quickly\n void this.ensureConfigLoaded({ silent: true });\n }\n\n /** Returns merged global configuration using precedence: defaults < providers < storage */\n private async buildConfig(storageKey: string, opts?: { silent?: boolean }): Promise<GlobalConfig> {\n await this.waitForBootstrap(opts);\n let cfg: GlobalConfig = {};\n for (const partial of this.providerPartials) {\n cfg = deepMerge(cfg, partial);\n }\n try {\n const stored = await firstValueFrom(\n this.storage.loadConfig<GlobalConfig>(storageKey),\n );\n this.updateStorageSnapshot(storageKey, stored ?? null);\n if (stored) cfg = deepMerge(cfg, stored);\n } catch (err) {\n if (this.shouldFail() && !opts?.silent) throw err;\n // ignore storage errors\n this.updateStorageSnapshot(storageKey, null);\n }\n return cfg;\n }\n\n /** Blocks until the current global configuration (for the active tenant) is loaded. */\n async ready(): Promise<GlobalConfig | null> {\n return this.ensureConfigLoaded();\n }\n\n /** Ensure config cache is populated (fire-and-forget); resolves with last merged config. */\n async ensureConfigLoaded(opts?: { silent?: boolean }): Promise<GlobalConfig | null> {\n await this.waitForBootstrap(opts);\n const key = this.storageKey();\n if (this.configCache && this.configCacheKey === key) return this.configCache;\n if (this.configLoadPromise && this.configLoadKey === key) return this.configLoadPromise;\n\n this.configLoadKey = key;\n this.configLoadPromise = this.buildConfig(key, opts)\n .then((cfg) => {\n if (this.storageKey() === key) {\n this.configCache = cfg;\n this.configCacheKey = key;\n this.changes$.next(cfg);\n }\n return cfg;\n })\n .catch((err) => {\n if (this.shouldFail() && !opts?.silent) throw err;\n return null;\n })\n .finally(() => {\n if (this.configLoadKey === key) {\n this.configLoadPromise = null;\n this.configLoadKey = null;\n }\n });\n\n return this.configLoadPromise;\n }\n\n /** Persist and broadcast a new global configuration, merged on top of providers. */\n async saveGlobalConfig(partial: Partial<GlobalConfig>): Promise<void> {\n // Merge over providers, then persist\n const key = this.storageKey();\n const merged = deepMerge(await this.buildConfig(key), partial);\n await firstValueFrom(this.storage.saveConfig(key, merged));\n this.updateStorageSnapshot(key, merged);\n this.configCache = merged;\n this.configCacheKey = key;\n this.changes$.next(merged);\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 void this.ensureConfigLoaded({ silent: true });\n const key = this.storageKey();\n const snapshot = (this.configCacheKey === key ? this.configCache : null) ?? this.changes$.value;\n if (!snapshot) return undefined;\n if (!path) return snapshot as any;\n return path.split('.').reduce<any>((acc, part) => (acc == null ? acc : acc[part]), snapshot) as T | undefined;\n }\n\n getCrud(): GlobalConfig['crud'] {\n void this.ensureConfigLoaded({ silent: true });\n return (this.configCache ?? this.changes$.value)?.crud;\n }\n\n getDynamicFields(): GlobalConfig['dynamicFields'] {\n void this.ensureConfigLoaded({ silent: true });\n return (this.configCache ?? this.changes$.value)?.dynamicFields;\n }\n\n getTable(): GlobalConfig['table'] {\n void this.ensureConfigLoaded({ silent: true });\n return (this.configCache ?? this.changes$.value)?.table;\n }\n\n getDialog(): GlobalConfig['dialog'] {\n // Legacy sync signature; best-effort using last snapshot from changes$\n void this.ensureConfigLoaded({ silent: true });\n return (this.configCache ?? this.changes$.value)?.dialog;\n }\n\n /** Set current tenant (affects storage key). Pass undefined to clear. */\n setTenant(tenantId?: string): void {\n const next = tenantId ? String(tenantId).trim() || undefined : undefined;\n if (next === this.tenant) return;\n this.tenant = next;\n this.configCache = null;\n this.configCacheKey = null;\n this.configLoadPromise = null;\n this.configLoadKey = null;\n this.storageSnapshot = null;\n this.storageSnapshotKey = null;\n this.changes$.next(null);\n }\n\n /** Get current tenant id (if any). */\n getTenant(): string | undefined {\n return this.tenant;\n }\n\n async clearGlobalConfig(): Promise<void> {\n const key = this.storageKey();\n await firstValueFrom(this.storage.clearConfig(key));\n this.updateStorageSnapshot(key, null);\n const merged = await this.buildConfig(key, { silent: true });\n this.configCache = merged;\n this.configCacheKey = key;\n this.changes$.next(merged);\n }\n\n hasStoredConfig(): boolean {\n const key = this.storageKey();\n if (this.storageSnapshotKey !== key) return false;\n return !!(this.storageSnapshot && Object.keys(this.storageSnapshot).length > 0);\n }\n\n /** Compute the storage key considering current tenant */\n private storageKey(): string {\n const resolved = (this.tenant ?? this.tenantResolver?.())?.trim();\n return `praxis:global-config${resolved ? ':' + resolved : ''}`;\n }\n\n private shouldFail(): boolean {\n return (this.bootstrapOptions?.errorPolicy ?? 'ignore') === 'fail';\n }\n\n private async waitForBootstrap(opts?: { silent?: boolean }): Promise<void> {\n if (!this.bootstrapReady) return;\n try {\n await this.bootstrapReady();\n } catch (err) {\n if (this.shouldFail() && !opts?.silent) throw err;\n }\n }\n\n private updateStorageSnapshot(key: string, stored: GlobalConfig | null): void {\n this.storageSnapshotKey = key;\n this.storageSnapshot = stored;\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 // For compatibility, use the last snapshot; async callers should migrate.\n const snapshot = this.changes$.value;\n if (!snapshot) return undefined;\n return (snapshot as any)?.schemaPrefs as any;\n }\n}\n","import {HttpClient, HttpContext, 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';\nimport { MemoryCacheAdapter } from '../cache/memory-cache-adapter';\nimport { CacheAdapter } from '../cache/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 httpContext?: HttpContext;\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 _rangeFilterFieldHints = new Set<string>();\n private _filterSchemaLoaded = false;\n private _schemaCache?: CacheAdapter;\n private schemaCacheReady?: Promise<void>;\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 void this.ensureSchemaCacheReady();\n }\n\n private async ensureSchemaCacheReady(): Promise<void> {\n if (this._schemaCache) return;\n if (!this.schemaCacheReady) {\n this.schemaCacheReady = (async () => {\n try { await this.globalConfig.ready(); } catch {}\n const disableCache = this.globalConfig.get<boolean>('cache.disableSchemaCache');\n if (disableCache) {\n console.debug('[CRUD:Service] Schema cache persistence is disabled by config (using MemoryCacheAdapter).');\n this._schemaCache = new MemoryCacheAdapter();\n } else {\n this._schemaCache = new LocalStorageCacheAdapter();\n }\n })().finally(() => {\n this.schemaCacheReady = undefined;\n });\n }\n return this.schemaCacheReady;\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 \"module/items/filter\" which would lead to duplicate suffixes (e.g., \"/filter/filter\")\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 this._filterSchemaLoaded = false;\n this._rangeFilterFieldHints.clear();\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 let apiOrigin = '';\n try {\n const baseUrl = buildApiUrl(entry);\n const u = new URL(baseUrl);\n apiOrigin = u.origin;\n filteredUrl = `${apiOrigin}/schemas/filtered`;\n } catch {}\n\n // Build cache key including the API origin (not the app origin)\n const schemaId = buildSchemaId({ path, operation, schemaType, includeInternalSchemas: false, tenant, locale, apiOrigin });\n const headersBase = composeHeadersWithVersion(entry);\n\n return from(this.ensureSchemaCacheReady()).pipe(\n concatMap(() => from(this._schemaCache!.get(schemaId)).pipe(\n concatMap((cached) => {\n let headers = (headersBase instanceof HttpHeaders ? headersBase : new HttpHeaders(headersBase as any));\n if (cached?.schemaHash) {\n headers = headers.set('If-None-Match', `\"${cached.schemaHash}\"`);\n }\n if (locale) headers = headers.set('Accept-Language', locale);\n if (tenant) headers = headers.set('X-Tenant', tenant);\n console.debug('[CRUD:Service] getSchema (filtered fallback):request', { filteredUrl, path, hasCached: !!cached });\n return this.http.get<any>(filteredUrl, {\n params: httpParams,\n headers,\n observe: 'response',\n context: options?.httpContext,\n });\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\n return this.http.get<any>(filteredUrl, {\n params: httpParams,\n headers: h,\n context: options?.httpContext,\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,\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,\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; also handle status 0 (CORS/network) by reusing cache\n catchError((err: HttpErrorResponse) => {\n if (err?.status === 304 || err?.status === 0) {\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\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,\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 )),\n shareReplay(1),\n );\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;\n document?: string;\n operation?: string;\n includeInternalSchemas?: boolean;\n schemaType?: string;\n endpointKey?: ApiEndpoint;\n httpContext?: HttpContext;\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(params.endpointKey);\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.ensureSchemaCacheReady()).pipe(\n concatMap(() => 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, {\n params: httpParams,\n headers,\n observe: 'response',\n context: params.httpContext,\n });\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\n return this.http.get<any>(url, {\n params: httpParams,\n headers: h,\n context: params.httpContext,\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: (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; also handle status 0 (CORS/network) by reusing cache\n catchError((err: HttpErrorResponse) => {\n if (err?.status === 304 || err?.status === 0) {\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 // Force a fresh response to avoid intermediary caches when refetching\n try { h = h.set('Cache-Control', 'no-cache, no-store, max-age=0').set('Pragma', 'no-cache'); } catch {}\n return this.http.get<any>(url, {\n params: httpParams,\n headers: h,\n context: params.httpContext,\n }).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 )),\n shareReplay(1),\n );\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, {\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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, {\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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, {\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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, {\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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, {\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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 const normalizedCriteria = this.normalizeRangeCriteria(filterCriteria);\n\n const observeVersion = !!opts?.observeVersionHeader;\n const req$ = observeVersion\n ? this.http.post<Page<T>>(url, normalizedCriteria, {\n params,\n observe: 'response',\n headers: composeHeadersWithVersion(entry),\n context: opts?.httpContext,\n })\n : this.http.post<Page<T>>(url, normalizedCriteria, {\n params,\n headers: composeHeadersWithVersion(entry),\n context: opts?.httpContext,\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, {\n params,\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\n })\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 normalizedCriteria = this.normalizeRangeCriteria(criteria);\n const observeVersion = !!opts?.observeVersionHeader;\n const req$ = observeVersion\n ? this.http.post<Page<OptionDTO<ID>>>(url, normalizedCriteria, {\n params,\n observe: 'response',\n headers: composeHeadersWithVersion(entry),\n context: opts?.httpContext,\n })\n : this.http.post<Page<OptionDTO<ID>>>(url, normalizedCriteria, {\n params,\n headers: composeHeadersWithVersion(entry),\n context: opts?.httpContext,\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,\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\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 const normalizedCriteria = this.normalizeRangeCriteria(criteria);\n return this.http\n .post<any>(url, normalizedCriteria, {\n params,\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\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 const normalizedCriteria = this.normalizeRangeCriteria(criteria);\n return this.http\n .post<{ position: number; page: number }>(url, normalizedCriteria, {\n params,\n headers: composeHeadersWithVersion(entry),\n context: options?.httpContext,\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 endpointKey = options?.endpointKey ?? this.currentEndpointKey;\n const tenant = this.globalConfig.getTenant() || '-';\n const locale = (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : '-';\n const cacheKey = `${endpointKey}|${path}|post|request|${includeInternal ? '1' : '0'}|tenant:${tenant}|locale:${locale}`;\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,\n operation: 'post',\n schemaType: 'request',\n includeInternalSchemas: includeInternal,\n endpointKey,\n }).pipe(\n tap((fields) => this.updateRangeFieldHints(fields)),\n shareReplay(1),\n 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.replace(/\\/+$/, '')}/schemas/filtered`;\n } catch {\n // Tolerate relative baseUrl (e.g., '/api') by resolving against app origin when available\n try {\n const appOrigin = (globalThis as any)?.location?.origin as string | undefined;\n if (appOrigin && typeof appOrigin === 'string' && appOrigin.startsWith('http')) {\n return `${appOrigin.replace(/\\/+$/, '')}/schemas/filtered`;\n }\n } catch {}\n // Last resort: localhost origin to build an absolute URL (document SSR guidance in docs)\n return 'http://localhost/schemas/filtered';\n }\n }\n\n private normalizeRangeCriteria(criteria: any): any {\n return this.normalizeRangeNode(criteria, false);\n }\n\n private normalizeRangeNode(value: any, allowCollapse = true, fieldPath?: string): any {\n if (Array.isArray(value)) {\n let changed = false;\n const normalized = value.map((item) => {\n const next = this.normalizeRangeNode(item, true, fieldPath);\n if (next !== item) changed = true;\n return next;\n });\n return changed ? normalized : value;\n }\n\n if (!this.isPlainObject(value)) {\n return value;\n }\n\n const source = value as Record<string, any>;\n let changed = false;\n const normalizedObject: Record<string, any> = {};\n Object.keys(source).forEach((key) => {\n const childPath = fieldPath ? `${fieldPath}.${key}` : key;\n const next = this.normalizeRangeNode(source[key], true, childPath);\n normalizedObject[key] = next;\n if (next !== source[key]) changed = true;\n });\n\n if (allowCollapse) {\n const candidate = changed ? normalizedObject : source;\n const rangeArray = this.tryCollapseRangeObject(candidate, fieldPath);\n if (rangeArray) {\n return rangeArray;\n }\n }\n\n return changed ? normalizedObject : source;\n }\n\n private tryCollapseRangeObject(source: Record<string, any>, fieldPath?: string): any[] | null {\n if (!this.isRangeOnlyObject(source)) {\n return null;\n }\n const hasRangeFieldHint = this.hasRangeFieldMetadata(fieldPath);\n if (this._filterSchemaLoaded && !hasRangeFieldHint) {\n // Em modo metadata-driven, normaliza apenas campos declarados como range no schema.\n return null;\n }\n\n if (Object.prototype.hasOwnProperty.call(source, 'between')) {\n const nested = this.coerceBoundsArray(source.between, fieldPath);\n if (nested) return nested;\n }\n\n const aliases = this.resolveRangeAliases(source, hasRangeFieldHint || this.looksLikeRangeFieldName(fieldPath));\n if (!aliases) {\n return null;\n }\n\n const lower = this.normalizeRangeBound(aliases.lowerKey ? source[aliases.lowerKey] : null);\n const upper = this.normalizeRangeBound(aliases.upperKey ? source[aliases.upperKey] : null);\n return this.buildCanonicalBounds(lower, upper);\n }\n\n private coerceBoundsArray(value: any, fieldPath?: string): any[] | null {\n if (Array.isArray(value)) {\n const lower = this.normalizeRangeBound(value[0]);\n const upper = this.normalizeRangeBound(value[1]);\n return this.buildCanonicalBounds(lower, upper);\n }\n\n if (this.isPlainObject(value)) {\n const obj = value as Record<string, any>;\n if (!this.isRangeOnlyObject(obj)) {\n return null;\n }\n const aliases = this.resolveRangeAliases(\n obj,\n this.hasRangeFieldMetadata(fieldPath) || this.looksLikeRangeFieldName(fieldPath)\n );\n if (!aliases) {\n return null;\n }\n const lower = this.normalizeRangeBound(aliases.lowerKey ? obj[aliases.lowerKey] : null);\n const upper = this.normalizeRangeBound(aliases.upperKey ? obj[aliases.upperKey] : null);\n return this.buildCanonicalBounds(lower, upper);\n }\n\n const single = this.normalizeRangeBound(value);\n return this.isRangeValue(single) ? [single] : null;\n }\n\n private buildCanonicalBounds(rawLower: any, rawUpper: any): any[] | null {\n const lower = this.normalizeRangeBound(rawLower);\n const upper = this.normalizeRangeBound(rawUpper);\n\n if (!this.isRangeValue(lower) && !this.isRangeValue(upper)) {\n return null;\n }\n\n let orderedLower = lower;\n let orderedUpper = upper;\n if (this.isRangeValue(orderedLower) && this.isRangeValue(orderedUpper) && this.shouldSwapBounds(orderedLower, orderedUpper)) {\n orderedLower = upper;\n orderedUpper = lower;\n }\n\n if (this.isRangeValue(orderedLower) && this.isRangeValue(orderedUpper)) {\n return [orderedLower, orderedUpper];\n }\n if (this.isRangeValue(orderedLower)) {\n return [orderedLower];\n }\n return [null, orderedUpper];\n }\n\n private shouldSwapBounds(lower: any, upper: any): boolean {\n const numericLower = this.tryParseNumeric(lower);\n const numericUpper = this.tryParseNumeric(upper);\n if (numericLower !== null && numericUpper !== null) {\n return numericLower > numericUpper;\n }\n\n const dateLower = this.tryParseDateMillis(lower);\n const dateUpper = this.tryParseDateMillis(upper);\n return dateLower !== null && dateUpper !== null && dateLower > dateUpper;\n }\n\n private tryParseNumeric(value: any): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value !== 'string') {\n return null;\n }\n const text = value.trim();\n if (!text) {\n return null;\n }\n\n let normalized = text.replace(/\\s+/g, '');\n if (normalized.includes(',') && normalized.includes('.')) {\n const lastComma = normalized.lastIndexOf(',');\n const lastDot = normalized.lastIndexOf('.');\n if (lastComma > lastDot) {\n normalized = normalized.replace(/\\./g, '').replace(',', '.');\n } else {\n normalized = normalized.replace(/,/g, '');\n }\n } else if (normalized.includes(',')) {\n normalized = normalized.replace(',', '.');\n }\n\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private tryParseDateMillis(value: any): number | null {\n if (value instanceof Date) {\n const ms = value.getTime();\n return Number.isNaN(ms) ? null : ms;\n }\n if (typeof value !== 'string') {\n return null;\n }\n const text = value.trim();\n if (!text) {\n return null;\n }\n const ms = Date.parse(text);\n return Number.isNaN(ms) ? null : ms;\n }\n\n private isRangeOnlyObject(source: Record<string, any>): boolean {\n const allowed = new Set<string>([\n 'between',\n 'currency',\n ...this.lowerMoneyAliases(),\n ...this.upperMoneyAliases(),\n ...this.lowerDateAliases(),\n ...this.upperDateAliases(),\n ...this.lowerGenericAliases(),\n ...this.upperGenericAliases(),\n ].map((k) => k.toLowerCase()));\n\n const keys = Object.keys(source);\n return keys.length > 0 && keys.every((key) => allowed.has(key.toLowerCase()));\n }\n\n private resolveRangeAliases(source: Record<string, any>, allowGenericAliases: boolean): {\n lowerKey?: string;\n upperKey?: string;\n } | null {\n const pairs = [\n { lower: this.lowerMoneyAliases(), upper: this.upperMoneyAliases() },\n { lower: this.lowerDateAliases(), upper: this.upperDateAliases() },\n ];\n if (allowGenericAliases) {\n pairs.push({ lower: this.lowerGenericAliases(), upper: this.upperGenericAliases() });\n }\n\n for (const pair of pairs) {\n const lowerKey = this.findExistingKey(source, pair.lower);\n const upperKey = this.findExistingKey(source, pair.upper);\n if (lowerKey || upperKey) {\n return { lowerKey, upperKey };\n }\n }\n return null;\n }\n\n private findExistingKey(source: Record<string, any>, aliases: string[]): string | undefined {\n const keyMap = new Map<string, string>();\n Object.keys(source).forEach((key) => keyMap.set(key.toLowerCase(), key));\n for (const alias of aliases) {\n const key = keyMap.get(alias.toLowerCase());\n if (key !== undefined) {\n return key;\n }\n }\n return undefined;\n }\n\n private normalizeRangeBound(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n if (typeof value === 'string' && value.trim() === '') {\n return null;\n }\n return value;\n }\n\n private isRangeValue(value: any): boolean {\n return value !== null && value !== undefined && !(typeof value === 'string' && value.trim() === '');\n }\n\n private isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n }\n\n private updateRangeFieldHints(fields: FieldDefinition[] | null | undefined): void {\n this._filterSchemaLoaded = true;\n this._rangeFilterFieldHints.clear();\n for (const field of fields || []) {\n const rawName = String(field?.name || '').trim();\n if (!rawName) continue;\n const controlType = this.normalizeControlTypeToken(field?.controlType || field?.filterControlType);\n if (!this.isRangeControlType(controlType)) continue;\n const full = rawName.toLowerCase();\n this._rangeFilterFieldHints.add(full);\n const leaf = full.split('.').pop();\n if (leaf) this._rangeFilterFieldHints.add(leaf);\n }\n }\n\n private hasRangeFieldMetadata(fieldPath?: string): boolean {\n const normalized = String(fieldPath || '').trim().toLowerCase();\n if (!normalized) return false;\n if (this._rangeFilterFieldHints.has(normalized)) return true;\n const leaf = normalized.split('.').pop();\n return !!leaf && this._rangeFilterFieldHints.has(leaf);\n }\n\n private normalizeControlTypeToken(controlType?: string): string {\n return String(controlType || '').trim().toLowerCase().replace(/[^a-z0-9]/g, '');\n }\n\n private isRangeControlType(token: string): boolean {\n return token === 'daterange'\n || token === 'datetimerange'\n || token === 'rangeslider'\n || token === 'pricerange';\n }\n\n private looksLikeRangeFieldName(fieldKey?: string): boolean {\n if (!fieldKey || typeof fieldKey !== 'string') {\n return false;\n }\n\n const normalized = fieldKey\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase();\n const chunks = normalized.split(/[^a-z0-9]+/).filter(Boolean);\n if (chunks.length === 0) {\n return false;\n }\n\n const directTokens = new Set<string>([\n 'range',\n 'between',\n 'interval',\n 'intervalo',\n 'faixa',\n 'period',\n 'periodo',\n 'price',\n 'valor',\n 'salary',\n 'amount',\n 'cost',\n 'custo',\n 'date',\n 'data',\n 'time',\n 'tempo',\n ]);\n\n return chunks.some((chunk) => {\n if (directTokens.has(chunk)) {\n return true;\n }\n\n return (\n chunk.endsWith('range') ||\n chunk.endsWith('between') ||\n chunk.endsWith('interval') ||\n chunk.endsWith('intervalo') ||\n chunk.endsWith('period') ||\n chunk.endsWith('periodo')\n );\n });\n }\n\n private lowerDateAliases(): string[] {\n return ['startDate', 'fromDate'];\n }\n\n private upperDateAliases(): string[] {\n return ['endDate', 'toDate'];\n }\n\n private lowerMoneyAliases(): string[] {\n return ['minPrice', 'valorMin'];\n }\n\n private upperMoneyAliases(): string[] {\n return ['maxPrice', 'valorMax'];\n }\n\n private lowerGenericAliases(): string[] {\n return ['start', 'from', 'min', 'lower', 'fieldMin', 'gte', 'valorMin', 'minPrice', 'startDate'];\n }\n\n private upperGenericAliases(): string[] {\n return ['end', 'to', 'max', 'upper', 'fieldMax', 'lte', 'valorMax', 'maxPrice', 'endDate'];\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 /** Coluna calculada baseada em expressão */\n computed?: {\n /** Expressão segura baseada em campos da linha */\n expression: string;\n /** Tipo do valor calculado para formatação */\n outputType?: ColumnDefinition['type'];\n /** Formato opcional do valor calculado */\n format?: string;\n /** Campos usados na expressão (opcional) */\n dependencies?: string[];\n };\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 * Fase 2: expandido com tipos interativos/ricos (link, button, chip, progress, avatar, toggle, menu, html).\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:\n | 'icon'\n | 'image'\n | 'badge'\n | 'link'\n | 'button'\n | 'chip'\n | 'progress'\n | 'avatar'\n | 'toggle'\n | 'menu'\n | 'rating'\n | 'html'\n | 'compose';\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 /** Link (sanitizado) */\n link?: {\n text?: string;\n textField?: string;\n href?: string;\n hrefField?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n rel?: string;\n };\n /** Botão (ação por linha) */\n button?: {\n label?: string;\n labelField?: string;\n icon?: string;\n color?: 'primary' | 'accent' | 'warn' | string;\n variant?: 'filled' | 'outlined' | 'text';\n size?: 'sm' | 'md' | 'lg';\n ariaLabel?: string;\n disabledCondition?: string; // DSL\n action?: { id: string; payloadExpr?: string };\n };\n /** Chip (etiqueta leve) */\n chip?: {\n text?: string;\n textField?: string;\n color?: string;\n icon?: string;\n variant?: 'filled' | 'outlined' | 'soft';\n };\n /** Barra de progresso leve */\n progress?: {\n valueExpr: string; // deve resultar em 0-100\n color?: string;\n showLabel?: boolean;\n };\n /** Avaliação por estrelas (read-only em tabelas) */\n rating?: {\n valueExpr?: string; // resultado numérico\n max?: number; // itens (padrão 5)\n color?: string;\n outlineColor?: string;\n size?: 'small' | 'medium' | 'large';\n ariaLabel?: string;\n readonly?: boolean;\n };\n /** Avatar (imagem ou iniciais) */\n avatar?: {\n src?: string;\n srcField?: string;\n alt?: string;\n altField?: string;\n initialsExpr?: string;\n shape?: 'square' | 'rounded' | 'circle';\n size?: number; // px\n };\n /** Alternância (toggle) com ação */\n toggle?: {\n stateExpr: string; // booleano\n disabledCondition?: string; // DSL\n action?: { id: string; payloadExpr?: string };\n ariaLabel?: string;\n };\n /** Menu de ações \n * itemsExpr → Array<{ label: string; icon?: string; id: string; payloadExpr?: string; visibleCondition?: string }> */\n menu?: {\n itemsExpr: string;\n ariaLabel?: string;\n };\n /** HTML (sanitizado) com tokens [[field]] */\n html?: {\n template: string;\n sanitize?: 'strict' | 'basic';\n emptyFallback?: string;\n };\n /** Compose (multi-itens) */\n compose?: {\n items: Array<\n | { type: 'icon'; icon?: { name?: string; nameField?: string; color?: string; size?: number; ariaLabel?: string } }\n | { type: 'image'; image?: { src?: string; srcField?: string; alt?: string; altField?: string; width?: number; height?: number; shape?: 'square'|'rounded'|'circle'; fit?: 'cover'|'contain'; lazy?: boolean } }\n | { type: 'badge'; badge?: { text?: string; textField?: string; color?: string; variant?: 'filled'|'outlined'|'soft'; icon?: string } }\n | { type: 'link'; link?: { text?: string; textField?: string; href?: string; hrefField?: string; target?: '_blank'|'_self'|'_parent'|'_top'; rel?: string } }\n | { type: 'button'; button?: { label?: string; labelField?: string; icon?: string; color?: string; variant?: 'filled'|'outlined'|'text'; size?: 'sm'|'md'|'lg'; disabledCondition?: string; action?: { id: string; payloadExpr?: string } } }\n | { type: 'chip'; chip?: { text?: string; textField?: string; color?: string; icon?: string; variant?: 'filled'|'outlined'|'soft' } }\n | { type: 'progress'; progress?: { valueExpr: string; color?: string; showLabel?: boolean } }\n | { type: 'avatar'; avatar?: { src?: string; srcField?: string; alt?: string; altField?: string; initialsExpr?: string; shape?: 'square'|'rounded'|'circle'; size?: number } }\n | { type: 'toggle'; toggle?: { stateExpr: string; disabledCondition?: string; action?: { id: string; payloadExpr?: string } } }\n | { type: 'menu'; menu?: { itemsExpr: string; ariaLabel?: string } }\n | { type: 'rating'; rating?: { valueExpr?: string; max?: number; color?: string; outlineColor?: string; size?: 'small'|'medium'|'large'; ariaLabel?: string; readonly?: boolean } }\n | { type: 'html'; html?: { template: string; sanitize?: 'strict'|'basic'; emptyFallback?: string } }\n >;\n layout?: {\n direction?: 'row'|'column';\n gap?: number;\n align?: 'start'|'center'|'end';\n wrap?: boolean;\n ellipsis?: boolean;\n };\n };\n };\n\n /** Overrides condicionais do renderer por linha (first‑match wins) */\n conditionalRenderers?: Array<{\n condition: string;\n renderer: Partial<ColumnDefinition['renderer']>;\n description?: string;\n enabled?: boolean;\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 /** Ambiente de execução esperado para política de runtime (ex.: dev, hml, prod) */\n environment?: 'dev' | 'hml' | 'prod' | 'qa' | 'staging' | 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 /** Configurações do modo local via input `[data]` */\n localDataMode?: TableLocalDataModeConfig;\n}\n\nexport interface TableLocalDataModeConfig {\n /** Habilita a trilha de modo local via input `[data]` */\n enabled?: boolean;\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 /** Campos sempre visíveis */\n alwaysVisibleFields?: string[];\n /** Overrides de metadata por campo sempre visível (merge sobre o DTO de filtro) */\n alwaysVisibleFieldMetadataOverrides?: Record<string, Record<string, any>>;\n /** Campos extras selecionados pelo usuário */\n selectedFieldIds?: 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 (modo único) */\n mode?: 'filter';\n /** UX: move booleans para ações */\n placeBooleansInActions?: boolean;\n /** UX: mostrar labels dos toggles */\n showToggleLabels?: boolean;\n /** Largura mínima para campos sempre visíveis */\n alwaysMinWidth?: number;\n /** Colunas md para campos sempre visíveis */\n alwaysColsMd?: number;\n /** Colunas lg para campos sempre visíveis */\n alwaysColsLg?: number;\n /** Confirma remoção de tags */\n confirmTagDelete?: boolean;\n /** Tema das tags */\n tagColor?: 'primary' | 'accent' | 'warn' | 'basic';\n /** Variante das tags */\n tagVariant?: 'filled' | 'outlined';\n /** Cor do botão das tags */\n tagButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';\n /** Cor dos botões de ação */\n actionsButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';\n /** Variante dos botões de ação */\n actionsVariant?: 'standard' | 'outlined';\n /** Aparência do overlay */\n overlayVariant?: 'card' | 'frosted';\n /** Backdrop do overlay */\n overlayBackdrop?: boolean;\n /** Modo de abertura do painel avançado */\n advancedOpenMode?: 'overlay' | 'modal' | 'drawer';\n /** Botão de limpar nos campos do formulário avançado */\n advancedClearButtonsEnabled?: boolean;\n /** Nível de log */\n logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';\n /** Métricas de performance */\n enablePerformanceMetrics?: boolean;\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 /** Posição das ações da toolbar */\n actionsPosition?: 'top' | 'bottom' | 'both';\n\n /** Cor de fundo da barra de ações */\n actionsBackgroundColor?: string;\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 /** Escopo do atalho: somente toolbar ativa ou global */\n shortcutScope?: 'toolbar' | 'global';\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: true,\n rows: false,\n showDragIndicator: true,\n },\n localDataMode: {\n enabled: 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 actionsPosition: 'top',\n },\n actions: {\n row: {\n enabled: false,\n position: 'end',\n width: '120px',\n display: 'icons',\n trigger: 'hover',\n actions: [],\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 { 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 private readonly componentTypeAliases: Record<string, string> = {\n table: 'praxis-table',\n form: 'praxis-dynamic-form',\n crud: 'praxis-crud',\n tabs: 'praxis-tabs',\n stepper: 'praxis-stepper',\n list: 'praxis-list',\n expansion: 'praxis-expansion',\n };\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(this.normalizeComponentType(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 normalizedId = this.normalizeComponentType(meta.id);\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, id: normalizedId, inputs: normInputs, outputs: normOutputs };\n }\n\n private normalizeComponentType(type: string): string {\n return this.componentTypeAliases[type] ?? type;\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport type {\n GlobalActionHandlerEntry,\n GlobalAnalyticsService,\n GlobalApiClient,\n GlobalDialogService,\n GlobalRouteGuardResolver,\n GlobalToastService,\n} from '../models/global-action.model';\n\nexport const GLOBAL_ACTION_HANDLERS = new InjectionToken<GlobalActionHandlerEntry[]>(\n 'GLOBAL_ACTION_HANDLERS',\n);\n\nexport const GLOBAL_DIALOG_SERVICE = new InjectionToken<GlobalDialogService>(\n 'GLOBAL_DIALOG_SERVICE',\n);\n\nexport const GLOBAL_TOAST_SERVICE = new InjectionToken<GlobalToastService>(\n 'GLOBAL_TOAST_SERVICE',\n);\n\nexport const GLOBAL_ANALYTICS_SERVICE = new InjectionToken<GlobalAnalyticsService>(\n 'GLOBAL_ANALYTICS_SERVICE',\n);\n\nexport const GLOBAL_API_CLIENT = new InjectionToken<GlobalApiClient>(\n 'GLOBAL_API_CLIENT',\n);\n\nexport const GLOBAL_ROUTE_GUARD_RESOLVER = new InjectionToken<GlobalRouteGuardResolver>(\n 'GLOBAL_ROUTE_GUARD_RESOLVER',\n);\n\nexport function provideGlobalActionHandler(entry: GlobalActionHandlerEntry): Provider {\n return {\n provide: GLOBAL_ACTION_HANDLERS,\n multi: true,\n useValue: entry,\n };\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { ComponentMetadataRegistry } from './component-metadata-registry.service';\nimport { GlobalConfigService } from './global-config.service';\nimport {\n GLOBAL_ACTION_HANDLERS,\n GLOBAL_ANALYTICS_SERVICE,\n GLOBAL_API_CLIENT,\n GLOBAL_DIALOG_SERVICE,\n GLOBAL_ROUTE_GUARD_RESOLVER,\n GLOBAL_TOAST_SERVICE,\n} from '../tokens/global-action.token';\nimport type {\n GlobalActionContext,\n GlobalActionHandler,\n GlobalActionHandlerEntry,\n GlobalActionResult,\n GlobalApiClient,\n GlobalDialogService,\n GlobalToastService,\n GlobalAnalyticsService,\n GlobalRouteGuardResolver,\n} from '../models/global-action.model';\n\ntype RouteRegisterPayload = {\n path: string;\n componentId?: string;\n loadChildren?: any;\n data?: Record<string, any>;\n resolve?: Record<string, any>;\n guards?: string[];\n canMatch?: string[];\n canActivateChild?: string[];\n replace?: boolean;\n position?: 'append' | 'prepend' | 'before-wildcard';\n};\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalActionService {\n private readonly handlers = new Map<string, GlobalActionHandler>();\n\n private readonly router = (() => { try { return inject(Router); } catch { return null; } })();\n private readonly location = (() => { try { return inject(Location); } catch { return null; } })();\n private readonly registry = (() => { try { return inject(ComponentMetadataRegistry); } catch { return null; } })();\n private readonly globalConfig = (() => { try { return inject(GlobalConfigService); } catch { return null; } })();\n\n private readonly dialog = inject(GLOBAL_DIALOG_SERVICE, { optional: true });\n private readonly toast = inject(GLOBAL_TOAST_SERVICE, { optional: true });\n private readonly analytics = inject(GLOBAL_ANALYTICS_SERVICE, { optional: true });\n private readonly api = inject(GLOBAL_API_CLIENT, { optional: true });\n private readonly guardResolver = inject(GLOBAL_ROUTE_GUARD_RESOLVER, { optional: true });\n\n constructor() {\n const entries = inject(GLOBAL_ACTION_HANDLERS, { optional: true }) as GlobalActionHandlerEntry[] | null;\n (entries || []).forEach((e) => this.register(e.id, e.handler));\n this.registerBuiltins();\n }\n\n register(id: string, handler: GlobalActionHandler): void {\n if (!id || !handler) return;\n this.handlers.set(id, handler);\n }\n\n has(id: string): boolean {\n return this.handlers.has(id);\n }\n\n async execute(id: string, payload?: any, context?: GlobalActionContext): Promise<GlobalActionResult> {\n const handler = this.handlers.get(id);\n if (!handler) {\n return { success: false, error: `Global action '${id}' not registered` };\n }\n try {\n const result = await handler(payload, context);\n return result || { success: true };\n } catch (err: any) {\n return { success: false, error: err?.message || String(err) };\n }\n }\n\n private registerBuiltins(): void {\n this.register('navigation.back', async () => {\n if (this.location) {\n this.location.back();\n return { success: true };\n }\n if (typeof window !== 'undefined' && window.history) {\n window.history.back();\n return { success: true };\n }\n return { success: false, error: 'History not available' };\n });\n\n this.register('navigation.openExternal', async (payload) => {\n const url = payload?.url || payload?.href || payload;\n if (!url) return { success: false, error: 'Missing url' };\n if (typeof window !== 'undefined') {\n window.open(url, '_blank', 'noopener,noreferrer');\n return { success: true };\n }\n return { success: false, error: 'Window not available' };\n });\n\n this.register('dialog.alert', async (payload) => {\n if (!this.dialog) return { success: false, error: 'Dialog service not available' };\n await this.dialog.alert(payload || {});\n return { success: true };\n });\n\n this.register('dialog.confirm', async (payload) => {\n if (!this.dialog) return { success: false, error: 'Dialog service not available' };\n const data = await this.dialog.confirm(payload || {});\n return { success: true, data: !!data };\n });\n\n this.register('dialog.prompt', async (payload) => {\n if (!this.dialog) return { success: false, error: 'Dialog service not available' };\n const data = await this.dialog.prompt(payload || {});\n return { success: true, data };\n });\n\n this.register('dialog.open', async (payload) => {\n if (!this.dialog) return { success: false, error: 'Dialog service not available' };\n const data = await this.dialog.open(payload || {});\n return { success: true, data };\n });\n\n this.register('toast.success', async (payload) => {\n const message = payload?.message || payload;\n if (!message) return { success: false, error: 'Missing message' };\n if (!this.toast) return { success: false, error: 'Toast service not available' };\n this.toast.success(message, payload);\n return { success: true };\n });\n\n this.register('toast.error', async (payload) => {\n const message = payload?.message || payload;\n if (!message) return { success: false, error: 'Missing message' };\n if (!this.toast) return { success: false, error: 'Toast service not available' };\n this.toast.error(message, payload);\n return { success: true };\n });\n\n this.register('clipboard.copy', async (payload) => {\n const text = payload?.text ?? payload?.value ?? payload;\n if (text == null) return { success: false, error: 'Missing text' };\n try {\n await navigator.clipboard.writeText(String(text));\n return { success: true };\n } catch {\n return { success: false, error: 'Clipboard not available' };\n }\n });\n\n this.register('trackEvent', async (payload) => {\n const eventName = payload?.eventName || payload?.name;\n if (!eventName) return { success: false, error: 'Missing eventName' };\n if (!this.analytics) return { success: false, error: 'Analytics service not available' };\n this.analytics.track(eventName, payload?.payload ?? payload?.data);\n return { success: true };\n });\n\n this.register('log', async (payload) => {\n const level = payload?.level || 'info';\n const message = payload?.message || '';\n const data = payload?.payload ?? payload?.data;\n const fn = (console as any)[level] || console.log;\n fn('[GlobalAction]', message, data ?? payload);\n return { success: true };\n });\n\n this.register('api.get', async (payload) => this.handleApi('get', payload));\n this.register('api.post', async (payload) => this.handleApi('post', payload));\n this.register('api.patch', async (payload) => this.handleApi('patch', payload));\n\n this.register('route.register', async (payload) => this.handleRouteRegister(payload as RouteRegisterPayload));\n }\n\n private async handleApi(method: 'get' | 'post' | 'patch', payload: any): Promise<GlobalActionResult> {\n if (!this.api) return { success: false, error: 'API client not available' };\n const url = payload?.url || payload?.href;\n if (!url) return { success: false, error: 'Missing url' };\n const body = payload?.body;\n const params = payload?.params;\n try {\n let data: any;\n if (method === 'get') data = await (this.api as GlobalApiClient).get(url, params);\n if (method === 'post') data = await (this.api as GlobalApiClient).post(url, body);\n if (method === 'patch') data = await (this.api as GlobalApiClient).patch(url, body);\n return { success: true, data };\n } catch (err: any) {\n return { success: false, error: err?.message || String(err) };\n }\n }\n\n private async handleRouteRegister(payload: RouteRegisterPayload): Promise<GlobalActionResult> {\n if (!this.router) return { success: false, error: 'Router not available' };\n const path = payload?.path;\n if (!path) return { success: false, error: 'Missing path' };\n if (!payload?.componentId && !payload?.loadChildren) {\n return { success: false, error: 'Missing target: componentId or loadChildren is required' };\n }\n const cleanPath = path.startsWith('/') ? path.slice(1) : path;\n\n const routes = [...this.router.config];\n const existingIndex = routes.findIndex((r) => r.path === cleanPath);\n if (existingIndex >= 0 && !payload.replace) {\n return { success: false, error: `Route already exists: ${cleanPath}` };\n }\n\n let component: any | undefined;\n if (payload.componentId) {\n if (!this.registry) {\n return { success: false, error: 'Component registry not available' };\n }\n component = this.registry.get(payload.componentId)?.component as any;\n if (!component) {\n return { success: false, error: `Component not found: ${payload.componentId}` };\n }\n }\n\n const guards = (payload.guards || [])\n .map((g) => this.guardResolver?.resolve?.(g))\n .filter(Boolean);\n const canMatch = (payload.canMatch || [])\n .map((g) => this.guardResolver?.resolve?.(g))\n .filter(Boolean);\n const canActivateChild = (payload.canActivateChild || [])\n .map((g) => this.guardResolver?.resolve?.(g))\n .filter(Boolean);\n\n const newRoute: any = {\n path: cleanPath,\n component,\n loadChildren: component ? undefined : payload.loadChildren,\n data: payload.data,\n resolve: payload.resolve,\n canActivate: guards.length ? guards : undefined,\n canLoad: payload.loadChildren && guards.length ? guards : undefined,\n canMatch: canMatch.length ? canMatch : undefined,\n canActivateChild: canActivateChild.length ? canActivateChild : undefined,\n };\n\n if (existingIndex >= 0 && payload.replace) {\n routes[existingIndex] = newRoute;\n } else if (payload.position === 'prepend') {\n routes.unshift(newRoute);\n } else if (payload.position === 'before-wildcard') {\n const wildcardIndex = routes.findIndex((r) => r.path === '**');\n if (wildcardIndex >= 0) routes.splice(wildcardIndex, 0, newRoute);\n else routes.push(newRoute);\n } else {\n routes.push(newRoute);\n }\n\n this.router.resetConfig(routes);\n\n try {\n const existing = (this.globalConfig?.get('routes.dynamic') as any[]) || [];\n const next = payload.replace\n ? [...existing.filter((r) => r?.path !== cleanPath), payload]\n : [...existing, payload];\n await this.globalConfig?.saveGlobalConfig({ routes: { dynamic: next } } as any);\n } catch {}\n\n return { success: true };\n }\n}\n","import { Inject, Injectable, InjectionToken, inject } from '@angular/core';\nimport { ASYNC_CONFIG_STORAGE, type AsyncConfigStorage } 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\nimport { Observable } from 'rxjs';\n\nexport interface ConnectionStorage {\n loadConnection(key: string): Observable<ConnectionConfigV1 | null>;\n saveConnection(key: string, cfg: ConnectionConfigV1): Observable<void>;\n clearConnection(key: string): Observable<void>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LocalConnectionStorage implements ConnectionStorage {\n constructor(@Inject(ASYNC_CONFIG_STORAGE) private storage: AsyncConfigStorage) { }\n\n loadConnection(key: string): Observable<ConnectionConfigV1 | null> {\n return this.storage.loadConfig<ConnectionConfigV1>(key);\n }\n\n saveConnection(key: string, cfg: ConnectionConfigV1): Observable<void> {\n return this.storage.saveConfig(key, cfg);\n }\n\n clearConnection(key: string): Observable<void> {\n return this.storage.clearConfig(key);\n }\n}\n\nexport const CONNECTION_STORAGE = new InjectionToken<ConnectionStorage>(\n 'CONNECTION_STORAGE',\n {\n providedIn: 'root',\n factory: () => inject(LocalConnectionStorage),\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","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 ASYNC_SELECT: 'async-select',\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 SEARCHABLE_SELECT: 'searchable-select',\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 MaterialPriceRangeMetadata,\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/PRICE_RANGE: 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 md.required ? ({ required: true } as any) : null;\n const start = val.startDate ? new Date(val.startDate) : null;\n const end = val.endDate ? new Date(val.endDate) : null;\n if (md.required && (!start || !end)) return { required: true } as any;\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 (\n meta.controlType === (FieldControlType as any).RANGE_SLIDER ||\n meta.controlType === (FieldControlType as any).PRICE_RANGE\n ) {\n const md = meta as unknown as MaterialRangeSliderMetadata | MaterialPriceRangeMetadata;\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, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport type ComponentKeyParams = {\n componentType: string;\n componentId?: string | null;\n resourcePath?: string | null;\n instanceKey?: string | null;\n componentRef?: object;\n route?: ActivatedRoute | null;\n requireComponentId?: boolean;\n useResourcePathFallback?: boolean;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class ComponentKeyService {\n private readonly router = (() => {\n try {\n return inject(Router);\n } catch {\n return undefined as Router | undefined;\n }\n })();\n\n buildComponentId(params: ComponentKeyParams): string | null {\n const routeKey = this.resolveRouteKey(params.route);\n const componentType = this.sanitizeSegment(params.componentType);\n const componentId = this.sanitizeSegment(params.componentId);\n const resourcePath = this.normalizeResourcePath(params.resourcePath);\n const requireComponentId = params.requireComponentId ?? false;\n const useResourceFallback =\n (params.useResourcePathFallback ?? true) && !componentId && !!resourcePath;\n\n if (!componentId && !useResourceFallback && requireComponentId) {\n return null;\n }\n\n const idPart = componentId || '-';\n const scopeKey = this.buildScopeKey({\n routeKey,\n componentType,\n componentId: idPart,\n resourcePath: useResourceFallback ? resourcePath : undefined,\n });\n const instanceKey = this.resolveInstanceKey(\n scopeKey,\n params.componentRef,\n params.instanceKey,\n );\n\n const parts = [\n `rk=${routeKey}`,\n `ct=${componentType}`,\n `id=${idPart}`,\n `ik=${instanceKey}`,\n ];\n if (useResourceFallback && resourcePath) {\n parts.push(`rp=${resourcePath}`);\n }\n const base = parts.join('|');\n return this.hashIfNeeded(base, {\n routeKey,\n componentType,\n componentId: idPart,\n instanceKey,\n resourcePath: useResourceFallback ? resourcePath : undefined,\n });\n }\n\n private resolveRouteKey(route?: ActivatedRoute | null): string {\n const override = this.resolveRouteOverride(route);\n if (override) return override;\n const fromRoute = this.buildRoutePath(route);\n if (fromRoute) return fromRoute;\n const url = this.router?.url || '';\n return this.normalizeRouteKey(url) || 'root';\n }\n\n private resolveRouteOverride(route?: ActivatedRoute | null): string | null {\n if (!route) return null;\n try {\n const chain = route.snapshot?.pathFromRoot || [];\n for (let i = chain.length - 1; i >= 0; i -= 1) {\n const data = chain[i]?.data as Record<string, unknown> | undefined;\n const value = data?.['praxisId'];\n if (typeof value === 'string' && value.trim()) {\n return this.normalizeRouteKey(value);\n }\n }\n } catch {\n return null;\n }\n return null;\n }\n\n private buildRoutePath(route?: ActivatedRoute | null): string | null {\n if (!route) return null;\n try {\n const chain = route.snapshot?.pathFromRoot || [];\n const parts: string[] = [];\n for (const snap of chain) {\n const path = snap.routeConfig?.path;\n if (!path) continue;\n if (path === '') continue;\n parts.push(path);\n }\n const joined = parts.join('/');\n return this.normalizeRouteKey(joined);\n } catch {\n return null;\n }\n }\n\n private normalizeRouteKey(value: string): string {\n const base = this.stripQueryAndFragment(value);\n const cleaned = base.replace(/\\/+/g, '/').replace(/(^\\/|\\/$)/g, '');\n return cleaned || 'root';\n }\n\n private stripQueryAndFragment(value: string): string {\n return value.split('?')[0].split('#')[0].split(';')[0].trim();\n }\n\n private normalizeResourcePath(value?: string | null): string | undefined {\n if (!value) return undefined;\n const cleaned = this.stripQueryAndFragment(value);\n const trimmed = cleaned.replace(/\\/+/g, '/').replace(/\\/$/g, '').trim();\n return this.sanitizeSegment(trimmed) || undefined;\n }\n\n private sanitizeSegment(value?: string | null): string {\n if (!value) return '';\n const trimmed = String(value).trim();\n if (!trimmed) return '';\n return trimmed.replace(/[\\r\\n\\t|]/g, '-');\n }\n\n private buildScopeKey(args: {\n routeKey: string;\n componentType: string;\n componentId: string;\n resourcePath?: string;\n }): string {\n const parts = [\n `rk=${args.routeKey}`,\n `ct=${args.componentType}`,\n `id=${args.componentId}`,\n ];\n if (args.resourcePath) parts.push(`rp=${args.resourcePath}`);\n return parts.join('|');\n }\n\n private resolveInstanceKey(\n _scopeKey: string,\n _componentRef?: object,\n explicit?: string | null,\n ): string {\n const cleaned = this.sanitizeSegment(explicit);\n return cleaned || '0';\n }\n\n private hashIfNeeded(\n base: string,\n readable: {\n routeKey: string;\n componentType: string;\n componentId: string;\n instanceKey: string;\n resourcePath?: string;\n },\n ): string {\n if (base.length <= 255) return base;\n const hash = sha256Hex(encodeUtf8(base));\n const rk = this.shortSegment(readable.routeKey);\n const ct = this.shortSegment(readable.componentType);\n const id = this.shortSegment(readable.componentId);\n const ik = this.shortSegment(readable.instanceKey);\n const parts = [`h:${hash}`, `rk=${rk}`, `ct=${ct}`, `id=${id}`, `ik=${ik}`];\n if (readable.resourcePath) {\n const rp = this.shortSegment(readable.resourcePath);\n parts.push(`rp=${rp}`);\n }\n return parts.join('|');\n }\n\n private shortSegment(value: string): string {\n const cleaned = this.sanitizeSegment(value);\n if (cleaned.length <= 32) return cleaned;\n return cleaned.slice(0, 32);\n }\n}\n\nfunction encodeUtf8(value: string): Uint8Array {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(value);\n }\n const out = new Uint8Array(value.length);\n for (let i = 0; i < value.length; i += 1) {\n out[i] = value.charCodeAt(i) & 0xff;\n }\n return out;\n}\n\nfunction sha256Hex(message: Uint8Array): string {\n const K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n ];\n const H = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ];\n\n const length = message.length;\n const bitLenHi = Math.floor((length * 8) / 0x100000000);\n const bitLenLo = (length * 8) >>> 0;\n const withOne = length + 1;\n const mod = withOne % 64;\n const padLen = mod <= 56 ? 56 - mod : 56 + 64 - mod;\n const total = length + 1 + padLen + 8;\n const padded = new Uint8Array(total);\n padded.set(message);\n padded[length] = 0x80;\n padded[total - 8] = (bitLenHi >>> 24) & 0xff;\n padded[total - 7] = (bitLenHi >>> 16) & 0xff;\n padded[total - 6] = (bitLenHi >>> 8) & 0xff;\n padded[total - 5] = bitLenHi & 0xff;\n padded[total - 4] = (bitLenLo >>> 24) & 0xff;\n padded[total - 3] = (bitLenLo >>> 16) & 0xff;\n padded[total - 2] = (bitLenLo >>> 8) & 0xff;\n padded[total - 1] = bitLenLo & 0xff;\n\n const w = new Array<number>(64);\n for (let offset = 0; offset < total; offset += 64) {\n for (let i = 0; i < 16; i += 1) {\n const j = offset + i * 4;\n w[i] =\n ((padded[j] << 24) | (padded[j + 1] << 16) | (padded[j + 2] << 8) | padded[j + 3]) >>> 0;\n }\n for (let i = 16; i < 64; i += 1) {\n const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n let f = H[5];\n let g = H[6];\n let h = H[7];\n\n for (let i = 0; i < 64; i += 1) {\n const s1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = (e & f) ^ (~e & g);\n const temp1 = (h + s1 + ch + K[i] + w[i]) >>> 0;\n const s0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (s0 + maj) >>> 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n H[0] = (H[0] + a) >>> 0;\n H[1] = (H[1] + b) >>> 0;\n H[2] = (H[2] + c) >>> 0;\n H[3] = (H[3] + d) >>> 0;\n H[4] = (H[4] + e) >>> 0;\n H[5] = (H[5] + f) >>> 0;\n H[6] = (H[6] + g) >>> 0;\n H[7] = (H[7] + h) >>> 0;\n }\n\n let hex = '';\n for (const h of H) {\n hex += h.toString(16).padStart(8, '0');\n }\n return hex;\n}\n\nfunction rotr(value: number, amount: number): number {\n return (value >>> amount) | (value << (32 - amount));\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nexport interface TelemetryEvent {\n name: string;\n payload?: unknown;\n timestamp: string;\n}\n\nexport interface TelemetryTransport {\n emit(event: TelemetryEvent): void;\n}\n\nexport const PRAXIS_TELEMETRY_TRANSPORT = new InjectionToken<TelemetryTransport>(\n 'PRAXIS_TELEMETRY_TRANSPORT',\n {\n providedIn: 'root',\n factory: () => ({\n emit: (event: TelemetryEvent) => {\n try {\n (console.log || console.info)('[Telemetry]', event);\n } catch {\n // Telemetry transport must never break runtime.\n }\n },\n }),\n },\n);\n\n@Injectable({ providedIn: 'root' })\nexport class TelemetryService {\n private readonly transport = inject(PRAXIS_TELEMETRY_TRANSPORT);\n private readonly eventsSubject = new Subject<TelemetryEvent>();\n\n readonly events$: Observable<TelemetryEvent> = this.eventsSubject.asObservable();\n\n record(name: string, payload?: unknown): void {\n const evt: TelemetryEvent = { name, payload, timestamp: new Date().toISOString() };\n this.emit(evt);\n }\n\n emit(event: TelemetryEvent): void {\n try {\n this.eventsSubject.next(event);\n } catch {\n // Local telemetry observers must not break runtime.\n }\n try {\n this.transport.emit(event);\n } catch {\n // Telemetry failures should be ignored.\n }\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { FieldControlType } from '../models/material-field-metadata.interface';\n\nexport type FieldSelectorRegistryMap = Record<string, FieldControlType>;\n\nexport const FIELD_SELECTOR_REGISTRY_BASE = new InjectionToken<FieldSelectorRegistryMap>(\n 'FIELD_SELECTOR_REGISTRY_BASE',\n);\n\nexport const FIELD_SELECTOR_REGISTRY_OVERRIDES = new InjectionToken<FieldSelectorRegistryMap[]>(\n 'FIELD_SELECTOR_REGISTRY_OVERRIDES',\n);\n\nexport const FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS = new InjectionToken<boolean>(\n 'FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS',\n);\n\nexport function provideFieldSelectorRegistryBase(map: FieldSelectorRegistryMap): Provider {\n return { provide: FIELD_SELECTOR_REGISTRY_BASE, useValue: map };\n}\n\nexport function provideFieldSelectorRegistryOverride(map: FieldSelectorRegistryMap): Provider {\n return { provide: FIELD_SELECTOR_REGISTRY_OVERRIDES, useValue: map, multi: true };\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n FIELD_SELECTOR_REGISTRY_BASE,\n FIELD_SELECTOR_REGISTRY_OVERRIDES,\n FieldSelectorRegistryMap,\n} from '../tokens/field-selector-registry.token';\nimport { FieldControlType } from '../models/material-field-metadata.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class FieldSelectorRegistry {\n private readonly baseMap =\n inject(FIELD_SELECTOR_REGISTRY_BASE, { optional: true }) ?? {};\n private readonly overrideMaps =\n inject(FIELD_SELECTOR_REGISTRY_OVERRIDES, { optional: true }) ?? [];\n\n private readonly registry: Record<string, FieldControlType> = {};\n\n constructor() {\n this.applyMap(this.baseMap);\n for (const map of this.overrideMaps) {\n this.applyMap(map);\n }\n }\n\n register(map: FieldSelectorRegistryMap, opts?: { overwrite?: boolean }): void {\n this.applyMap(map, opts?.overwrite ?? true);\n }\n\n resolve(selector: string | undefined | null): FieldControlType | undefined {\n const key = this.normalizeSelector(selector);\n if (!key) return undefined;\n return this.registry[key];\n }\n\n getAll(): FieldSelectorRegistryMap {\n return { ...this.registry };\n }\n\n private applyMap(map: FieldSelectorRegistryMap, overwrite = true): void {\n if (!map) return;\n for (const [rawKey, value] of Object.entries(map)) {\n const key = this.normalizeSelector(rawKey);\n if (!key) continue;\n if (!overwrite && key in this.registry) continue;\n this.registry[key] = value;\n }\n }\n\n private normalizeSelector(value: string | undefined | null): string {\n if (!value) return '';\n return String(value).trim().toLowerCase();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport type { LoadingContext } from '../models/loading-context.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LoadingOrchestrator {\n private readonly counters = new Map<string, number>();\n private readonly state$ = new BehaviorSubject<Map<string, LoadingContext>>(\n new Map(),\n );\n\n begin(ctx: LoadingContext): string {\n const key = this.keyOf(ctx);\n const count = (this.counters.get(key) ?? 0) + 1;\n this.counters.set(key, count);\n\n if (count === 1) {\n const next = new Map(this.state$.value);\n next.set(key, ctx);\n this.state$.next(next);\n }\n return key;\n }\n\n end(ctx: LoadingContext): void {\n const key = this.keyOf(ctx);\n const nextCount = (this.counters.get(key) ?? 1) - 1;\n\n if (nextCount <= 0) {\n this.counters.delete(key);\n const next = new Map(this.state$.value);\n next.delete(key);\n this.state$.next(next);\n } else {\n this.counters.set(key, nextCount);\n }\n }\n\n watch(): Observable<LoadingContext[]> {\n return this.state$.pipe(map((m) => Array.from(m.values())));\n }\n\n private keyOf(ctx: LoadingContext): string {\n const { componentType, componentId, routeKey } = ctx.scope;\n return `${routeKey ?? 'no-route'}::${componentType}::${componentId}::${ctx.phase}`;\n }\n}\n","import { HttpContextToken } from '@angular/common/http';\nimport type { LoadingContext } from '../models/loading-context.model';\n\nexport const PRAXIS_LOADING_CTX =\n new HttpContextToken<LoadingContext | null>(() => null);\n","import { InjectionToken } from '@angular/core';\nimport type { LoadingContext } from '../models/loading-context.model';\n\nexport interface PraxisLoadingRenderer {\n show(ctx: LoadingContext): void;\n update?(ctx: LoadingContext): void;\n hide(ctx: LoadingContext): void;\n}\n\nexport const PRAXIS_LOADING_RENDERER =\n new InjectionToken<PraxisLoadingRenderer>('PRAXIS_LOADING_RENDERER');\n","import {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport { LoadingOrchestrator } from './loading-orchestrator.service';\nimport { PRAXIS_LOADING_CTX } from '../tokens/loading-context.token';\nimport {\n PRAXIS_LOADING_RENDERER,\n PraxisLoadingRenderer,\n} from '../tokens/loading-renderer.token';\n\n@Injectable()\nexport class PraxisLoadingInterceptor implements HttpInterceptor {\n constructor(\n private orchestrator: LoadingOrchestrator,\n @Optional()\n @Inject(PRAXIS_LOADING_RENDERER)\n private renderer?: PraxisLoadingRenderer,\n ) {}\n\n intercept(\n req: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n const ctx = req.context.get(PRAXIS_LOADING_CTX);\n if (!ctx) return next.handle(req);\n\n this.orchestrator.begin(ctx);\n this.renderer?.show?.(ctx);\n\n return next.handle(req).pipe(\n finalize(() => {\n this.orchestrator.end(ctx);\n this.renderer?.hide?.(ctx);\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport type { LoadingContext } from '../models/loading-context.model';\nimport type { PraxisLoadingRenderer } from '../tokens/loading-renderer.token';\n\n@Injectable()\nexport class DefaultLoadingRenderer implements PraxisLoadingRenderer {\n private readonly rootId = 'praxis-loading-root';\n private readonly styleId = 'praxis-loading-style';\n\n show(ctx: LoadingContext): void {\n const doc = this.getDocument();\n if (!doc) return;\n this.ensureStyles(doc);\n const root = this.ensureRoot(doc);\n const key = this.keyOf(ctx);\n let entry = root.querySelector(`[data-key=\"${key}\"]`) as HTMLElement | null;\n const label = ctx.label || this.defaultLabel(ctx);\n\n if (!entry) {\n entry = doc.createElement('div');\n entry.className = 'pfx-loading-entry';\n entry.setAttribute('data-key', key);\n entry.setAttribute('data-blocking', ctx.blocking ? 'true' : 'false');\n entry.innerHTML = ctx.blocking\n ? `\n <div class=\"pfx-loading-backdrop\"></div>\n <div class=\"pfx-loading-card\" role=\"status\" aria-live=\"polite\">\n <div class=\"pfx-loading-spinner\" aria-hidden=\"true\"></div>\n <div class=\"pfx-loading-text\"></div>\n </div>\n `\n : `\n <div class=\"pfx-loading-topbar\" role=\"status\" aria-live=\"polite\"></div>\n <div class=\"pfx-loading-inline-text\"></div>\n `;\n root.appendChild(entry);\n }\n\n const textEl = entry.querySelector(\n ctx.blocking ? '.pfx-loading-text' : '.pfx-loading-inline-text',\n ) as HTMLElement | null;\n if (textEl) textEl.textContent = label;\n }\n\n update(ctx: LoadingContext): void {\n this.show(ctx);\n }\n\n hide(ctx: LoadingContext): void {\n const doc = this.getDocument();\n if (!doc) return;\n const root = doc.getElementById(this.rootId);\n if (!root) return;\n const key = this.keyOf(ctx);\n const entry = root.querySelector(\n `[data-key=\"${key}\"]`,\n ) as HTMLElement | null;\n if (entry) entry.remove();\n }\n\n private keyOf(ctx: LoadingContext): string {\n const { componentType, componentId, routeKey } = ctx.scope;\n return `${routeKey ?? 'no-route'}::${componentType}::${componentId}::${ctx.phase}`;\n }\n\n private defaultLabel(ctx: LoadingContext): string {\n switch (ctx.phase) {\n case 'schema':\n return 'Carregando configuração…';\n case 'mount':\n return 'Montando interface…';\n case 'data':\n return 'Carregando dados…';\n case 'action':\n return 'Processando…';\n default:\n return 'Carregando…';\n }\n }\n\n private ensureRoot(doc: Document): HTMLElement {\n let root = doc.getElementById(this.rootId);\n if (!root) {\n root = doc.createElement('div');\n root.id = this.rootId;\n root.className = 'pfx-loading-root';\n doc.body.appendChild(root);\n }\n return root;\n }\n\n private ensureStyles(doc: Document): void {\n if (doc.getElementById(this.styleId)) return;\n const style = doc.createElement('style');\n style.id = this.styleId;\n style.textContent = `\n .pfx-loading-root {\n position: fixed;\n inset: 0;\n z-index: 10000;\n pointer-events: none;\n }\n .pfx-loading-entry {\n position: absolute;\n inset: 0;\n }\n .pfx-loading-entry[data-blocking=\"false\"] {\n inset: 0;\n }\n .pfx-loading-backdrop {\n position: absolute;\n inset: 0;\n background: var(--pdx-loading-overlay-bg, rgba(16,20,20,0.28));\n backdrop-filter: blur(2px);\n }\n .pfx-loading-card {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n color: var(--pdx-loading-text, #eaeaf1);\n text-shadow: var(--pdx-loading-text-shadow, 0 1px 2px rgba(0,0,0,.6));\n }\n .pfx-loading-spinner {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 3px solid var(--pdx-loading-spinner-track, rgba(255,255,255,0.2));\n border-top-color: var(--pdx-loading-spinner-accent, #8b5cf6);\n animation: pfxSpin 0.9s linear infinite;\n }\n .pfx-loading-text {\n font-size: 14px;\n opacity: .95;\n }\n .pfx-loading-topbar {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 3px;\n background: var(\n --pdx-loading-topbar-gradient,\n linear-gradient(90deg, transparent, var(--pdx-loading-spinner-accent, #8b5cf6), transparent)\n );\n animation: pfxBar 1.1s ease-in-out infinite;\n }\n .pfx-loading-inline-text {\n position: absolute;\n top: 8px;\n right: 12px;\n font-size: 12px;\n color: var(--pdx-loading-topbar-text, #5f6368);\n }\n @keyframes pfxSpin { to { transform: rotate(360deg); } }\n @keyframes pfxBar {\n 0% { transform: translateX(-60%); opacity: 0.4; }\n 50% { transform: translateX(0%); opacity: 1; }\n 100% { transform: translateX(60%); opacity: 0.4; }\n }\n `;\n doc.head.appendChild(style);\n }\n\n private getDocument(): Document | null {\n if (typeof document === 'undefined') return null;\n return document;\n }\n}\n","import { ENVIRONMENT_INITIALIZER, Provider, inject } from '@angular/core';\nimport { FieldSelectorRegistry } from '../services/field-selector-registry.service';\nimport { FieldSelectorRegistryMap } from '../tokens/field-selector-registry.token';\n\nexport function provideFieldSelectorRegistryRuntime(\n map: FieldSelectorRegistryMap,\n opts?: { overwrite?: boolean },\n): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: () => {\n const registry = inject(FieldSelectorRegistry);\n return () => registry.register(map, { overwrite: opts?.overwrite ?? false });\n },\n };\n}\n","import { inject, Provider } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { GLOBAL_TOAST_SERVICE } from '../tokens/global-action.token';\nimport type { GlobalToastService } from '../models/global-action.model';\n\nexport type PraxisToastOptions = {\n successDurationMs?: number;\n errorDurationMs?: number;\n successPanelClass?: string | string[];\n errorPanelClass?: string | string[];\n};\n\nexport function providePraxisToastGlobalActions(\n opts: PraxisToastOptions = {},\n): Provider {\n return {\n provide: GLOBAL_TOAST_SERVICE,\n useFactory: (): GlobalToastService => {\n const snack = (() => { try { return inject(MatSnackBar); } catch { return null; } })();\n const successDuration = opts.successDurationMs ?? 2500;\n const errorDuration = opts.errorDurationMs ?? 3500;\n const successClass = opts.successPanelClass ?? ['pdx-toast-success'];\n const errorClass = opts.errorPanelClass ?? ['pdx-toast-error'];\n\n return {\n success: (message: string) => {\n if (snack) {\n snack.open(message, undefined, { duration: successDuration, panelClass: successClass as any });\n } else {\n console.log('[Toast]', message);\n }\n },\n error: (message: string) => {\n if (snack) {\n snack.open(message, undefined, { duration: errorDuration, panelClass: errorClass as any });\n } else {\n console.error('[Toast]', message);\n }\n },\n };\n },\n };\n}\n\n","import { Provider, inject } from '@angular/core';\nimport { GLOBAL_ANALYTICS_SERVICE } from '../tokens/global-action.token';\nimport type { GlobalAnalyticsService } from '../models/global-action.model';\nimport { TelemetryService } from '../services/telemetry.service';\n\nexport type PraxisAnalyticsOptions = {\n prefix?: string;\n};\n\nexport function providePraxisAnalyticsGlobalActions(\n opts: PraxisAnalyticsOptions = {},\n): Provider {\n return {\n provide: GLOBAL_ANALYTICS_SERVICE,\n useFactory: (): GlobalAnalyticsService => {\n const telemetry = (() => { try { return inject(TelemetryService); } catch { return null; } })();\n const prefix = opts.prefix ? `${opts.prefix}.` : '';\n\n return {\n track: (eventName: string, payload?: any) => {\n if (telemetry) {\n telemetry.record(`${prefix}${eventName}`, payload);\n } else {\n console.log('[Analytics]', `${prefix}${eventName}`, payload ?? null);\n }\n },\n };\n },\n };\n}\n\n","import type { Provider } from '@angular/core';\nimport { DefaultLoadingRenderer } from '../services/default-loading-renderer.service';\nimport { PRAXIS_LOADING_RENDERER } from '../tokens/loading-renderer.token';\n\nexport function providePraxisLoadingDefaults(): Provider[] {\n return [\n {\n provide: PRAXIS_LOADING_RENDERER,\n useClass: DefaultLoadingRenderer,\n },\n ];\n}\n","import type {\n LoggerConfig,\n LoggerLevel,\n PraxisLoggingEnvironment,\n PraxisLoggingOptions,\n} from './logging.types';\n\nexport const LOGGER_LEVEL_PRIORITY: Record<LoggerLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n trace: 4,\n};\n\nexport const LOGGER_LEVEL_BY_ENV: Record<PraxisLoggingEnvironment, LoggerLevel> = {\n prod: 'warn',\n qa: 'warn',\n hml: 'info',\n dev: 'debug',\n};\n\nexport const PRAXIS_CORPORATE_SENSITIVE_KEYS: string[] = [\n 'password',\n 'pass',\n 'token',\n 'accessToken',\n 'refreshToken',\n 'authorization',\n 'secret',\n 'apiKey',\n 'cpf',\n 'cnpj',\n 'document',\n 'ssn',\n 'email',\n 'phone',\n];\n\nconst PRAXIS_CORPORATE_THROTTLE = {\n enabled: true,\n windowMs: 5000,\n maxOccurrences: 3,\n} as const;\n\nexport function createCorporateLoggerConfig(\n environment: PraxisLoggingEnvironment = 'prod',\n): LoggerConfig {\n return {\n environment,\n minLevel: LOGGER_LEVEL_BY_ENV[environment],\n warnOnceEnabled: true,\n throttle: { ...PRAXIS_CORPORATE_THROTTLE },\n pii: {\n enabled: true,\n redactionText: '[REDACTED]',\n sensitiveKeys: [...PRAXIS_CORPORATE_SENSITIVE_KEYS],\n },\n };\n}\n\nexport function resolveLoggerConfig(options: PraxisLoggingOptions = {}): LoggerConfig {\n const environment = options.environment ?? 'prod';\n const corporate = createCorporateLoggerConfig(environment);\n const overridePII = options.pii ?? {};\n\n return {\n ...corporate,\n minLevel: options.minLevel ?? corporate.minLevel,\n warnOnceEnabled: options.warnOnceEnabled ?? corporate.warnOnceEnabled,\n throttle: {\n ...corporate.throttle,\n ...(options.throttle ?? {}),\n },\n pii: {\n ...corporate.pii,\n ...overridePII,\n sensitiveKeys: overridePII.sensitiveKeys\n ? [...overridePII.sensitiveKeys]\n : [...corporate.pii.sensitiveKeys],\n },\n defaultContext: options.defaultContext\n ? { ...options.defaultContext }\n : corporate.defaultContext,\n environment,\n };\n}\n","import type { LoggerEvent, LoggerLevel, LoggerSink } from '../logging.types';\n\ntype ConsoleMethod = (...args: unknown[]) => void;\n\nexport class ConsoleLoggerSink implements LoggerSink {\n log(event: LoggerEvent): void {\n const print = this.resolveMethod(event.level);\n const prefix = `[Praxis][${event.level.toUpperCase()}]`;\n const envelope = {\n environment: event.environment,\n timestamp: event.timestamp,\n context: event.context ?? null,\n data: event.data ?? null,\n };\n\n if (event.context || event.data !== undefined) {\n print(`${prefix} ${event.message}`, envelope);\n return;\n }\n\n print(`${prefix} ${event.message}`);\n }\n\n private resolveMethod(level: LoggerLevel): ConsoleMethod {\n if (level === 'error' && typeof console.error === 'function') {\n return console.error.bind(console);\n }\n if (level === 'warn' && typeof console.warn === 'function') {\n return console.warn.bind(console);\n }\n if (level === 'info' && typeof console.info === 'function') {\n return console.info.bind(console);\n }\n if (level === 'debug' && typeof console.debug === 'function') {\n return console.debug.bind(console);\n }\n if (level === 'trace') {\n if (typeof console.trace === 'function') {\n return console.trace.bind(console);\n }\n if (typeof console.debug === 'function') {\n return console.debug.bind(console);\n }\n }\n return console.log.bind(console);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { createCorporateLoggerConfig } from './logging.defaults';\nimport { ConsoleLoggerSink } from './sinks/console-logger.sink';\nimport type { LoggerConfig, LoggerSink } from './logging.types';\n\nexport const PRAXIS_LOGGER_CONFIG = new InjectionToken<LoggerConfig>(\n 'PRAXIS_LOGGER_CONFIG',\n {\n providedIn: 'root',\n factory: () => createCorporateLoggerConfig('prod'),\n },\n);\n\nexport const PRAXIS_LOGGER_SINKS = new InjectionToken<ReadonlyArray<LoggerSink>>(\n 'PRAXIS_LOGGER_SINKS',\n {\n providedIn: 'root',\n factory: () => [new ConsoleLoggerSink()],\n },\n);\n","export interface NormalizedError {\n name: string;\n message: string;\n stack?: string;\n}\n\nconst MAX_ERROR_TEXT_LENGTH = 2000;\nconst MAX_STACK_LINES = 12;\nconst UNKNOWN_ERROR_MESSAGE = 'Unknown error';\n\ntype ErrorRecord = Record<string, unknown>;\n\nexport function normalizeUnknownError(rawError: unknown): NormalizedError {\n const candidate = unwrapRejection(rawError);\n\n if (candidate instanceof Error) {\n return normalizeFromParts(candidate.name, candidate.message, candidate.stack);\n }\n\n if (typeof candidate === 'string') {\n return normalizeFromParts('Error', candidate);\n }\n\n if (isRecord(candidate)) {\n const name = toText(candidate['name'], 'Error');\n const message = toText(candidate['message'], safeStringify(candidate));\n const stack = toStack(candidate['stack']);\n return normalizeFromParts(name, message, stack);\n }\n\n return normalizeFromParts('Error', UNKNOWN_ERROR_MESSAGE);\n}\n\nexport function extractNormalizedError(data: unknown): NormalizedError | undefined {\n const candidate = extractErrorCandidate(data);\n if (candidate === undefined) {\n return undefined;\n }\n return normalizeUnknownError(candidate);\n}\n\nfunction extractErrorCandidate(data: unknown): unknown {\n if (data instanceof Error || typeof data === 'string') {\n return data;\n }\n\n if (!isRecord(data)) {\n return undefined;\n }\n\n if ('error' in data) {\n return data['error'];\n }\n\n if ('rejection' in data) {\n return data['rejection'];\n }\n\n if ('reason' in data) {\n return data['reason'];\n }\n\n if ('message' in data || 'stack' in data || 'name' in data) {\n return data;\n }\n\n return undefined;\n}\n\nfunction unwrapRejection(error: unknown): unknown {\n if (!isRecord(error)) {\n return error;\n }\n\n if ('rejection' in error) {\n return error['rejection'];\n }\n\n if ('reason' in error) {\n return error['reason'];\n }\n\n return error;\n}\n\nfunction normalizeFromParts(\n name: string,\n message: string,\n stack?: string,\n): NormalizedError {\n const normalized: NormalizedError = {\n name: sanitizeErrorText(name, 120) || 'Error',\n message: sanitizeErrorText(message, MAX_ERROR_TEXT_LENGTH) || UNKNOWN_ERROR_MESSAGE,\n };\n\n const safeStack = toStack(stack);\n if (safeStack) {\n normalized.stack = safeStack;\n }\n\n return normalized;\n}\n\nfunction toStack(stack: unknown): string | undefined {\n if (typeof stack !== 'string') {\n return undefined;\n }\n\n const sanitized = sanitizeErrorText(stack, MAX_ERROR_TEXT_LENGTH * 2);\n const lines = sanitized\n .split('\\n')\n .map((line) => line.trimEnd())\n .filter((line) => line.length > 0)\n .slice(0, MAX_STACK_LINES);\n\n return lines.length ? lines.join('\\n') : undefined;\n}\n\nfunction toText(value: unknown, fallback: string): string {\n if (typeof value === 'string' && value.trim().length > 0) {\n return value;\n }\n return fallback;\n}\n\nfunction sanitizeErrorText(value: string, maxLength: number): string {\n let sanitized = value;\n\n sanitized = sanitized.replace(/(Bearer\\s+)[^\\s]+/gi, '$1[REDACTED]');\n sanitized = sanitized.replace(\n /([?&](?:token|access_token|refresh_token|password|pass|secret|api[_-]?key|authorization)=)[^&\\s]+/gi,\n '$1[REDACTED]',\n );\n sanitized = sanitized.replace(\n /((?:token|access_token|refresh_token|password|pass|secret|authorization)\\s*[:=]\\s*)[^\\s,;]+/gi,\n '$1[REDACTED]',\n );\n sanitized = sanitized.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi, '[REDACTED_EMAIL]');\n sanitized = sanitized.trim();\n\n if (sanitized.length > maxLength) {\n return `${sanitized.slice(0, maxLength)}...`;\n }\n return sanitized;\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value) || UNKNOWN_ERROR_MESSAGE;\n } catch {\n return UNKNOWN_ERROR_MESSAGE;\n }\n}\n\nfunction isRecord(value: unknown): value is ErrorRecord {\n return !!value && typeof value === 'object';\n}\n","import type { LoggerThrottleConfig } from '../logging.types';\n\ninterface ThrottleWindow {\n count: number;\n windowStart: number;\n}\n\nexport class LoggerThrottleTracker {\n private readonly windows = new Map<string, ThrottleWindow>();\n\n constructor(private readonly config: LoggerThrottleConfig) {}\n\n shouldEmit(key: string, now: number = Date.now()): boolean {\n if (\n !this.config.enabled ||\n this.config.windowMs <= 0 ||\n this.config.maxOccurrences < 1\n ) {\n return true;\n }\n\n const current = this.windows.get(key);\n if (!current || now - current.windowStart >= this.config.windowMs) {\n this.windows.set(key, { count: 1, windowStart: now });\n return true;\n }\n\n if (current.count >= this.config.maxOccurrences) {\n return false;\n }\n\n current.count += 1;\n return true;\n }\n\n clear(): void {\n this.windows.clear();\n }\n}\n","export class LoggerWarnOnceTracker {\n private readonly emittedKeys = new Set<string>();\n\n shouldEmit(key: string): boolean {\n if (this.emittedKeys.has(key)) {\n return false;\n }\n this.emittedKeys.add(key);\n return true;\n }\n\n clear(): void {\n this.emittedKeys.clear();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { LOGGER_LEVEL_PRIORITY } from './logging.defaults';\nimport { normalizeUnknownError } from './helpers/error-normalizer.helper';\nimport { LoggerThrottleTracker } from './helpers/throttle.helper';\nimport { LoggerWarnOnceTracker } from './helpers/warn-once.helper';\nimport { PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS } from './logging.tokens';\nimport type {\n LoggerConfig,\n LoggerContext,\n LoggerEvent,\n LoggerLevel,\n LoggerLogOptions,\n LoggerSink,\n} from './logging.types';\n\n@Injectable({ providedIn: 'root' })\nexport class LoggerService {\n private readonly warnOnceTracker = new LoggerWarnOnceTracker();\n private readonly throttleTracker: LoggerThrottleTracker;\n private readonly sensitiveKeys: Set<string>;\n\n constructor(\n @Inject(PRAXIS_LOGGER_CONFIG) private readonly config: LoggerConfig,\n @Inject(PRAXIS_LOGGER_SINKS) private readonly sinks: ReadonlyArray<LoggerSink>,\n ) {\n this.throttleTracker = new LoggerThrottleTracker(this.config.throttle);\n this.sensitiveKeys = new Set(\n this.config.pii.sensitiveKeys.map((key) => key.toLowerCase()),\n );\n }\n\n error(message: string, options?: LoggerLogOptions): void {\n this.log('error', message, options);\n }\n\n warn(message: string, options?: LoggerLogOptions): void {\n this.log('warn', message, options);\n }\n\n info(message: string, options?: LoggerLogOptions): void {\n this.log('info', message, options);\n }\n\n debug(message: string, options?: LoggerLogOptions): void {\n this.log('debug', message, options);\n }\n\n trace(message: string, options?: LoggerLogOptions): void {\n this.log('trace', message, options);\n }\n\n warnOnce(message: string, options: LoggerLogOptions = {}): void {\n if (!this.config.warnOnceEnabled) {\n this.warn(message, options);\n return;\n }\n\n const dedupeKey = options.dedupeKey ?? this.composeKey('warn', message, options.context);\n if (!this.warnOnceTracker.shouldEmit(dedupeKey)) {\n return;\n }\n\n this.warn(message, {\n ...options,\n dedupeKey,\n });\n }\n\n log(level: LoggerLevel, message: string, options: LoggerLogOptions = {}): void {\n if (!this.isLevelEnabled(level)) {\n return;\n }\n\n if (!this.shouldEmitByThrottle(level, message, options)) {\n return;\n }\n\n const event: LoggerEvent = {\n level,\n message,\n timestamp: new Date().toISOString(),\n environment: this.config.environment,\n context: this.sanitizeContext(this.buildContext(options.context)),\n data: this.sanitizeData(options.data),\n };\n\n for (const sink of this.sinks) {\n try {\n sink.log(event);\n } catch {\n // Sink failures should never break runtime execution.\n }\n }\n }\n\n private isLevelEnabled(level: LoggerLevel): boolean {\n return LOGGER_LEVEL_PRIORITY[level] <= LOGGER_LEVEL_PRIORITY[this.config.minLevel];\n }\n\n private shouldEmitByThrottle(\n level: LoggerLevel,\n message: string,\n options: LoggerLogOptions,\n ): boolean {\n if (options.skipThrottle || level === 'error') {\n return true;\n }\n\n const throttleKey = options.throttleKey ?? this.composeKey(level, message, options.context);\n return this.throttleTracker.shouldEmit(throttleKey);\n }\n\n private composeKey(level: LoggerLevel, message: string, context?: LoggerContext): string {\n const lib = typeof context?.lib === 'string' ? context.lib : '';\n const component = typeof context?.component === 'string' ? context.component : '';\n return `${level}:${lib}:${component}:${message}`;\n }\n\n private buildContext(context?: LoggerContext): LoggerContext | undefined {\n if (!this.config.defaultContext && !context) {\n return undefined;\n }\n return {\n ...(this.config.defaultContext ?? {}),\n ...(context ?? {}),\n };\n }\n\n private sanitizeContext(context?: LoggerContext): LoggerContext | undefined {\n if (!context) {\n return undefined;\n }\n return this.sanitizeValue(context) as LoggerContext;\n }\n\n private sanitizeData(data: unknown): unknown {\n if (data === undefined) {\n return undefined;\n }\n return this.sanitizeValue(data);\n }\n\n private sanitizeValue(\n value: unknown,\n seen: WeakSet<object> = new WeakSet(),\n ): unknown {\n if (value instanceof Error) {\n return this.sanitizeValue(normalizeUnknownError(value), seen);\n }\n\n if (!this.config.pii.enabled) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.sanitizeValue(item, seen));\n }\n\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n\n const source = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n for (const [rawKey, rawValue] of Object.entries(source)) {\n const normalizedKey = rawKey.toLowerCase();\n if (this.sensitiveKeys.has(normalizedKey)) {\n sanitized[rawKey] = this.config.pii.redactionText;\n } else {\n sanitized[rawKey] = this.sanitizeValue(rawValue, seen);\n }\n }\n return sanitized;\n }\n}\n","import { ErrorHandler, Injectable } from '@angular/core';\nimport { normalizeUnknownError } from './helpers/error-normalizer.helper';\nimport { LoggerService } from './logger.service';\n\n@Injectable()\nexport class PraxisGlobalErrorHandler implements ErrorHandler {\n private handlingError = false;\n\n constructor(private readonly logger: LoggerService) {}\n\n handleError(error: unknown): void {\n const normalizedError = normalizeUnknownError(error);\n\n if (this.handlingError) {\n this.safeFallback(normalizedError);\n return;\n }\n\n this.handlingError = true;\n try {\n this.logger.error('[GlobalErrorHandler] Unhandled application error', {\n context: {\n lib: 'praxis-core',\n component: 'PraxisGlobalErrorHandler',\n },\n data: {\n error: normalizedError,\n },\n skipThrottle: true,\n dedupeKey: `global-error:${normalizedError.name}:${normalizedError.message}`,\n });\n } catch {\n this.safeFallback(normalizedError);\n } finally {\n this.handlingError = false;\n }\n }\n\n private safeFallback(error: { name: string; message: string; stack?: string }): void {\n try {\n console.error('[Praxis][GlobalErrorHandler]', error);\n } catch {\n // Final fallback: ignore.\n }\n }\n}\n","import { TelemetryService } from '../../services/telemetry.service';\nimport { extractNormalizedError } from '../helpers/error-normalizer.helper';\nimport { PRAXIS_CORPORATE_SENSITIVE_KEYS } from '../logging.defaults';\nimport type {\n LoggerEvent,\n LoggerSink,\n LoggerTelemetryPayload,\n} from '../logging.types';\n\nexport interface TelemetryLoggerSinkOptions {\n eventName?: string;\n sensitiveKeys?: string[];\n redactionText?: string;\n}\n\nconst DEFAULT_TELEMETRY_LOG_EVENT_NAME = 'praxis.logging.event';\nconst DEFAULT_REDACTION_TEXT = '[REDACTED]';\n\nexport class TelemetryLoggerSink implements LoggerSink {\n private readonly sensitiveKeys: Set<string>;\n private readonly redactionText: string;\n\n constructor(\n private readonly telemetry: TelemetryService,\n private readonly options: TelemetryLoggerSinkOptions = {},\n ) {\n this.sensitiveKeys = new Set(\n (this.options.sensitiveKeys ?? PRAXIS_CORPORATE_SENSITIVE_KEYS).map((key) =>\n key.toLowerCase(),\n ),\n );\n this.redactionText = this.options.redactionText ?? DEFAULT_REDACTION_TEXT;\n }\n\n log(event: LoggerEvent): void {\n const payload = this.buildPayload(event);\n try {\n this.telemetry.record(\n this.options.eventName ?? DEFAULT_TELEMETRY_LOG_EVENT_NAME,\n payload,\n );\n } catch {\n // Telemetry sink must never break primary logging flow.\n }\n }\n\n private buildPayload(event: LoggerEvent): LoggerTelemetryPayload {\n const sanitizedData = this.sanitizeValue(event.data);\n const normalizedError = extractNormalizedError(sanitizedData);\n\n return {\n timestamp: event.timestamp,\n level: event.level,\n message: event.message,\n environment: event.environment,\n context: {\n lib: event.context?.lib ?? 'unknown',\n component: event.context?.component ?? 'unknown',\n ...(event.context?.actionId ? { actionId: event.context.actionId } : {}),\n ...(event.context?.correlationId\n ? { correlationId: event.context.correlationId }\n : {}),\n },\n ...(normalizedError ? { error: normalizedError } : {}),\n ...(sanitizedData !== undefined ? { data: sanitizedData } : {}),\n };\n }\n\n private sanitizeValue(\n value: unknown,\n seen: WeakSet<object> = new WeakSet(),\n ): unknown {\n if (typeof value === 'string') {\n return this.sanitizeText(value);\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => this.sanitizeValue(item, seen));\n }\n\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n\n const sanitized: Record<string, unknown> = {};\n for (const [rawKey, rawValue] of Object.entries(value as Record<string, unknown>)) {\n const normalizedKey = rawKey.toLowerCase();\n if (this.sensitiveKeys.has(normalizedKey)) {\n sanitized[rawKey] = this.redactionText;\n } else {\n sanitized[rawKey] = this.sanitizeValue(rawValue, seen);\n }\n }\n return sanitized;\n }\n\n private sanitizeText(value: string): string {\n return value\n .replace(/(Bearer\\s+)[^\\s]+/gi, `$1${this.redactionText}`)\n .replace(\n /([?&](?:token|access_token|refresh_token|password|pass|secret|api[_-]?key|authorization)=)[^&\\s]+/gi,\n `$1${this.redactionText}`,\n )\n .replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi, '[REDACTED_EMAIL]');\n }\n}\n","import { ErrorHandler, Optional, type Provider } from '@angular/core';\nimport { TelemetryService } from '../services/telemetry.service';\nimport { resolveLoggerConfig } from './logging.defaults';\nimport { PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS } from './logging.tokens';\nimport { PraxisGlobalErrorHandler } from './praxis-global-error-handler';\nimport { ConsoleLoggerSink } from './sinks/console-logger.sink';\nimport { TelemetryLoggerSink } from './sinks/telemetry-logger.sink';\nimport type { LoggerSink, PraxisLoggingOptions } from './logging.types';\n\nfunction resolveSinks(\n options: PraxisLoggingOptions,\n redactionText: string,\n sensitiveKeys: string[],\n telemetryService: TelemetryService | null,\n): ReadonlyArray<LoggerSink> {\n const sinks: LoggerSink[] = [];\n\n if (options.enableConsoleSink ?? true) {\n sinks.push(new ConsoleLoggerSink());\n }\n\n if ((options.enableTelemetrySink ?? false) && telemetryService) {\n sinks.push(\n new TelemetryLoggerSink(telemetryService, {\n eventName: options.telemetryEventName,\n redactionText,\n sensitiveKeys,\n }),\n );\n }\n\n if (options.sinks?.length) {\n sinks.push(...options.sinks);\n }\n\n return sinks;\n}\n\nexport function providePraxisLogging(options: PraxisLoggingOptions = {}): Provider[] {\n const config = resolveLoggerConfig(options);\n const providers: Provider[] = [\n { provide: PRAXIS_LOGGER_CONFIG, useValue: config },\n {\n provide: PRAXIS_LOGGER_SINKS,\n useFactory: (telemetryService: TelemetryService | null) =>\n resolveSinks(\n options,\n config.pii.redactionText,\n config.pii.sensitiveKeys,\n telemetryService,\n ),\n deps: [[new Optional(), TelemetryService]],\n },\n ];\n\n if (options.enableGlobalErrorHandler ?? true) {\n providers.push({\n provide: ErrorHandler,\n useClass: PraxisGlobalErrorHandler,\n });\n }\n\n return providers;\n}\n","import type {\n ObservabilityAlertRule,\n ObservabilityDashboardOptions,\n} from './observability.types';\n\nconst MINUTE = 60_000;\n\nexport const PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES: ReadonlyArray<ObservabilityAlertRule> = [\n {\n id: 'warn-trend-by-lib',\n name: 'Warn trend by library',\n severity: 'warn',\n level: 'warn',\n threshold: 20,\n windowMs: 10 * MINUTE,\n groupBy: 'lib',\n throttleMs: 10 * MINUTE,\n },\n {\n id: 'error-burst-by-lib',\n name: 'Error burst by library',\n severity: 'error',\n level: 'error',\n threshold: 5,\n windowMs: 5 * MINUTE,\n groupBy: 'lib',\n throttleMs: 5 * MINUTE,\n },\n {\n id: 'critical-error-burst-by-lib',\n name: 'Critical error burst by library',\n severity: 'critical',\n level: 'error',\n threshold: 10,\n windowMs: 5 * MINUTE,\n groupBy: 'lib',\n throttleMs: 5 * MINUTE,\n },\n];\n\nexport function createCorporateObservabilityOptions(): ObservabilityDashboardOptions {\n return {\n enabled: true,\n telemetryEventNames: ['praxis.logging.event'],\n defaultWindowMs: 15 * MINUTE,\n maxStoredEvents: 5_000,\n maxStoredAlerts: 200,\n topActionsLimit: 10,\n defaultAlertThrottleMs: 5 * MINUTE,\n alertRules: PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES,\n nowProvider: () => Date.now(),\n };\n}\n\nexport function resolveObservabilityOptions(\n options: Partial<ObservabilityDashboardOptions> = {},\n): ObservabilityDashboardOptions {\n const defaults = createCorporateObservabilityOptions();\n return {\n ...defaults,\n ...options,\n telemetryEventNames:\n options.telemetryEventNames?.length\n ? [...options.telemetryEventNames]\n : [...defaults.telemetryEventNames],\n alertRules: options.alertRules?.length\n ? options.alertRules.map((rule) => ({ ...rule }))\n : defaults.alertRules.map((rule) => ({ ...rule })),\n };\n}\n","import { InjectionToken } from '@angular/core';\nimport { createCorporateObservabilityOptions } from './observability.defaults';\nimport type { ObservabilityDashboardOptions } from './observability.types';\n\nexport const PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS =\n new InjectionToken<ObservabilityDashboardOptions>(\n 'PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS',\n {\n providedIn: 'root',\n factory: () => createCorporateObservabilityOptions(),\n },\n );\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport {\n TelemetryService,\n type TelemetryEvent,\n} from '../../services/telemetry.service';\nimport type {\n LoggerLevel,\n LoggerTelemetryPayload,\n} from '../logging.types';\nimport { resolveObservabilityOptions } from './observability.defaults';\nimport { PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS } from './observability.tokens';\nimport type {\n ObservabilityAlert,\n ObservabilityAlertGroupBy,\n ObservabilityAlertRule,\n ObservabilityCountBucket,\n ObservabilityDashboardOptions,\n ObservabilityMetricsSnapshot,\n} from './observability.types';\n\ninterface NormalizedTelemetryRecord {\n timestamp: string;\n timestampMs: number;\n level: LoggerLevel;\n message: string;\n context: {\n lib: string;\n component: string;\n actionId?: string;\n correlationId?: string;\n };\n}\n\nconst LOGGER_LEVELS: LoggerLevel[] = ['error', 'warn', 'info', 'debug', 'trace'];\n\n@Injectable({ providedIn: 'root' })\nexport class ObservabilityDashboardService {\n private readonly options: ObservabilityDashboardOptions;\n private readonly trackedEventNames: Set<string>;\n private readonly retentionWindowMs: number;\n private readonly recentAlerts: ObservabilityAlert[] = [];\n private readonly alertThrottleMap = new Map<string, number>();\n private readonly records: NormalizedTelemetryRecord[] = [];\n\n private readonly alertsSubject = new Subject<ObservabilityAlert>();\n private readonly metricsSubject = new BehaviorSubject<ObservabilityMetricsSnapshot>(\n {\n generatedAt: new Date(0).toISOString(),\n windowMs: 60_000,\n totalEvents: 0,\n bySeverity: {\n error: 0,\n warn: 0,\n info: 0,\n debug: 0,\n trace: 0,\n },\n byLib: [],\n byComponent: [],\n topActionIds: [],\n },\n );\n\n readonly alerts$: Observable<ObservabilityAlert> = this.alertsSubject.asObservable();\n readonly metrics$: Observable<ObservabilityMetricsSnapshot> =\n this.metricsSubject.asObservable();\n\n constructor(\n @Inject(PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS)\n options: ObservabilityDashboardOptions,\n @Optional() telemetryService: TelemetryService | null,\n ) {\n this.options = resolveObservabilityOptions(options);\n this.trackedEventNames = new Set(this.options.telemetryEventNames);\n this.retentionWindowMs = Math.max(\n this.options.defaultWindowMs,\n ...this.options.alertRules.map((rule) => rule.windowMs),\n );\n this.metricsSubject.next(\n this.buildSnapshot(this.now(), this.options.defaultWindowMs),\n );\n\n if (this.options.enabled && telemetryService) {\n telemetryService.events$.subscribe((event) => {\n this.ingestTelemetryEvent(event);\n });\n }\n }\n\n ingestPayload(payload: LoggerTelemetryPayload): void {\n if (!this.options.enabled) {\n return;\n }\n\n const nowMs = this.now();\n const normalized = this.normalizePayload(payload, nowMs);\n if (!normalized) {\n return;\n }\n\n this.records.push(normalized);\n this.trimRecords(nowMs);\n this.evaluateAlerts(nowMs);\n this.metricsSubject.next(this.buildSnapshot(nowMs, this.options.defaultWindowMs));\n }\n\n ingestTelemetryEvent(event: TelemetryEvent): void {\n if (!this.options.enabled) {\n return;\n }\n if (!this.trackedEventNames.has(event.name)) {\n return;\n }\n const payload = this.toLoggerTelemetryPayload(event.payload);\n if (!payload) {\n return;\n }\n this.ingestPayload(payload);\n }\n\n getSnapshot(windowMs = this.options.defaultWindowMs): ObservabilityMetricsSnapshot {\n return this.buildSnapshot(this.now(), this.normalizeWindowMs(windowMs));\n }\n\n getRecentAlerts(limit = 50): ReadonlyArray<ObservabilityAlert> {\n if (limit <= 0) {\n return [];\n }\n return this.recentAlerts.slice(-limit);\n }\n\n clear(): void {\n this.records.length = 0;\n this.recentAlerts.length = 0;\n this.alertThrottleMap.clear();\n this.metricsSubject.next(\n this.buildSnapshot(this.now(), this.options.defaultWindowMs),\n );\n }\n\n private evaluateAlerts(nowMs: number): void {\n for (const rule of this.options.alertRules) {\n const windowStart = nowMs - rule.windowMs;\n const matching = this.records.filter(\n (record) =>\n record.timestampMs >= windowStart && record.level === rule.level,\n );\n const grouped = this.groupRecordsByRule(matching, rule.groupBy);\n\n for (const [groupKey, groupRecords] of grouped.entries()) {\n if (groupRecords.length < rule.threshold) {\n continue;\n }\n\n const throttleMs =\n rule.throttleMs ?? this.options.defaultAlertThrottleMs;\n const throttleKey = `${rule.id}:${groupKey}`;\n const lastAlertAt = this.alertThrottleMap.get(throttleKey);\n if (\n typeof lastAlertAt === 'number' &&\n nowMs - lastAlertAt < throttleMs\n ) {\n continue;\n }\n\n const latest = groupRecords[groupRecords.length - 1];\n const alert: ObservabilityAlert = {\n severity: rule.severity,\n rule: {\n id: rule.id,\n name: rule.name,\n level: rule.level,\n groupBy: rule.groupBy,\n threshold: rule.threshold,\n windowMs: rule.windowMs,\n },\n timestamp: new Date(nowMs).toISOString(),\n observedCount: groupRecords.length,\n context: this.buildAlertContext(rule.groupBy, groupKey, latest),\n };\n\n this.alertThrottleMap.set(throttleKey, nowMs);\n this.recentAlerts.push(alert);\n if (this.recentAlerts.length > this.options.maxStoredAlerts) {\n this.recentAlerts.splice(\n 0,\n this.recentAlerts.length - this.options.maxStoredAlerts,\n );\n }\n this.alertsSubject.next(alert);\n }\n }\n }\n\n private buildAlertContext(\n groupBy: ObservabilityAlertGroupBy,\n groupKey: string,\n latest: NormalizedTelemetryRecord,\n ): ObservabilityAlert['context'] {\n if (groupBy === 'global') {\n return {\n lib: latest.context.lib,\n component: latest.context.component,\n actionId: latest.context.actionId,\n correlationId: latest.context.correlationId,\n };\n }\n if (groupBy === 'lib') {\n return {\n lib: groupKey,\n component: latest.context.component,\n actionId: latest.context.actionId,\n correlationId: latest.context.correlationId,\n };\n }\n if (groupBy === 'component') {\n return {\n lib: latest.context.lib,\n component: groupKey,\n actionId: latest.context.actionId,\n correlationId: latest.context.correlationId,\n };\n }\n return {\n lib: latest.context.lib,\n component: latest.context.component,\n actionId: groupKey,\n correlationId: latest.context.correlationId,\n };\n }\n\n private groupRecordsByRule(\n records: ReadonlyArray<NormalizedTelemetryRecord>,\n groupBy: ObservabilityAlertGroupBy,\n ): Map<string, NormalizedTelemetryRecord[]> {\n const grouped = new Map<string, NormalizedTelemetryRecord[]>();\n for (const record of records) {\n const groupKey =\n groupBy === 'global'\n ? 'global'\n : groupBy === 'lib'\n ? record.context.lib\n : groupBy === 'component'\n ? record.context.component\n : record.context.actionId ?? 'unknown';\n if (!grouped.has(groupKey)) {\n grouped.set(groupKey, []);\n }\n grouped.get(groupKey)!.push(record);\n }\n return grouped;\n }\n\n private trimRecords(nowMs: number): void {\n const windowStart = nowMs - this.retentionWindowMs;\n while (this.records.length > 0 && this.records[0].timestampMs < windowStart) {\n this.records.shift();\n }\n if (this.records.length > this.options.maxStoredEvents) {\n this.records.splice(0, this.records.length - this.options.maxStoredEvents);\n }\n }\n\n private buildSnapshot(\n nowMs: number,\n windowMs: number,\n ): ObservabilityMetricsSnapshot {\n const windowStart = nowMs - windowMs;\n const withinWindow = this.records.filter(\n (record) => record.timestampMs >= windowStart,\n );\n\n const bySeverity: Record<LoggerLevel, number> = {\n error: 0,\n warn: 0,\n info: 0,\n debug: 0,\n trace: 0,\n };\n const byLib = new Map<string, number>();\n const byComponent = new Map<string, number>();\n const byActionId = new Map<string, number>();\n\n for (const record of withinWindow) {\n bySeverity[record.level] += 1;\n this.incrementCounter(byLib, record.context.lib);\n this.incrementCounter(byComponent, record.context.component);\n if (record.context.actionId) {\n this.incrementCounter(byActionId, record.context.actionId);\n }\n }\n\n return {\n generatedAt: new Date(nowMs).toISOString(),\n windowMs,\n totalEvents: withinWindow.length,\n bySeverity,\n byLib: this.toSortedBuckets(byLib),\n byComponent: this.toSortedBuckets(byComponent),\n topActionIds: this.toSortedBuckets(byActionId).slice(\n 0,\n this.options.topActionsLimit,\n ),\n };\n }\n\n private incrementCounter(counter: Map<string, number>, key: string): void {\n counter.set(key, (counter.get(key) ?? 0) + 1);\n }\n\n private toSortedBuckets(counter: Map<string, number>): ReadonlyArray<ObservabilityCountBucket> {\n return [...counter.entries()]\n .sort((a, b) => {\n if (b[1] !== a[1]) {\n return b[1] - a[1];\n }\n return a[0].localeCompare(b[0]);\n })\n .map(([key, count]) => ({ key, count }));\n }\n\n private normalizePayload(\n payload: LoggerTelemetryPayload,\n nowMs: number,\n ): NormalizedTelemetryRecord | null {\n if (!LOGGER_LEVELS.includes(payload.level)) {\n return null;\n }\n const timestampMs = this.toTimestampMs(payload.timestamp, nowMs);\n return {\n timestamp: payload.timestamp,\n timestampMs,\n level: payload.level,\n message: payload.message,\n context: {\n lib: payload.context?.lib || 'unknown',\n component: payload.context?.component || 'unknown',\n ...(payload.context?.actionId\n ? { actionId: payload.context.actionId }\n : {}),\n ...(payload.context?.correlationId\n ? { correlationId: payload.context.correlationId }\n : {}),\n },\n };\n }\n\n private toLoggerTelemetryPayload(\n payload: unknown,\n ): LoggerTelemetryPayload | null {\n if (!payload || typeof payload !== 'object') {\n return null;\n }\n const value = payload as Partial<LoggerTelemetryPayload>;\n if (\n typeof value.timestamp !== 'string' ||\n typeof value.level !== 'string' ||\n typeof value.message !== 'string' ||\n !value.context ||\n typeof value.context.lib !== 'string' ||\n typeof value.context.component !== 'string'\n ) {\n return null;\n }\n if (!LOGGER_LEVELS.includes(value.level as LoggerLevel)) {\n return null;\n }\n return value as LoggerTelemetryPayload;\n }\n\n private toTimestampMs(timestamp: string, fallbackMs: number): number {\n const parsed = Date.parse(timestamp);\n return Number.isFinite(parsed) ? parsed : fallbackMs;\n }\n\n private normalizeWindowMs(windowMs: number): number {\n if (!Number.isFinite(windowMs) || windowMs <= 0) {\n return this.options.defaultWindowMs;\n }\n return Math.floor(windowMs);\n }\n\n private now(): number {\n return this.options.nowProvider ? this.options.nowProvider() : Date.now();\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';\nimport {\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS,\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY,\n PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER,\n type PraxisGlobalConfigBootstrapOptions,\n} from './global-config.token';\nimport {\n API_CONFIG_STORAGE_OPTIONS,\n ASYNC_CONFIG_STORAGE,\n ApiConfigStorage,\n DeferredAsyncConfigStorage,\n type ApiConfigStorageOptions,\n} from '../services/config-storage.service';\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 return svc.ready();\n },\n };\n}\n\n/** Block app bootstrap until the global config is loaded for the active tenant. */\nexport function provideGlobalConfigReady(): Provider {\n return {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [GlobalConfigService],\n useFactory: (svc: GlobalConfigService) => () => svc.ready(),\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 void svc.saveGlobalConfig(seed).catch(() => {});\n }\n } catch {\n // On error, attempt to save anyway (best effort)\n try { void svc.saveGlobalConfig(seed).catch(() => {}); } 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 { void svc.saveGlobalConfig(cfg as Partial<GlobalConfig>).catch(() => {}); } catch {}\n resolve();\n },\n error: () => resolve(),\n complete: () => resolve(),\n });\n }),\n };\n}\n\nfunction normalizeBootstrapOptions(\n options?: PraxisGlobalConfigBootstrapOptions,\n): PraxisGlobalConfigBootstrapOptions {\n const auth = options?.auth;\n return {\n ...options,\n blocking: options?.blocking ?? (auth ? 'auth+global' : 'global'),\n errorPolicy: options?.errorPolicy ?? 'fail',\n includeDefaultHeaders: options?.includeDefaultHeaders ?? false,\n };\n}\n\nfunction resolveBaseUrl(remote?: { baseUrl?: string; apiPath?: string }): string | undefined {\n if (remote?.baseUrl) return remote.baseUrl.replace(/\\/$/, '');\n if (!remote?.apiPath) return undefined;\n const apiPath = remote.apiPath.replace(/\\/$/, '');\n try {\n const origin =\n typeof window !== 'undefined' && window.location\n ? window.location.origin\n : '';\n return origin ? `${origin}${apiPath}/praxis/config/ui` : `${apiPath}/praxis/config/ui`;\n } catch {\n return `${apiPath}/praxis/config/ui`;\n }\n}\n\nfunction normalizeHeaderValue(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction mergeHeaders(\n base?: Record<string, string>,\n extra?: Record<string, string>,\n): Record<string, string> {\n const merged: Record<string, string> = {};\n const apply = (source?: Record<string, string>) => {\n if (!source) return;\n for (const [key, value] of Object.entries(source)) {\n const normalized = normalizeHeaderValue(value);\n if (normalized) merged[key] = normalized;\n }\n };\n apply(base);\n apply(extra);\n return merged;\n}\n\nfunction buildHeadersFactory(options: PraxisGlobalConfigBootstrapOptions): () => Record<string, string> {\n const auth = options.auth;\n const baseHeaders = options.headers;\n const extraFactory = options.headersFactory;\n return () => {\n const extra = (extraFactory && extraFactory()) || {};\n const merged = mergeHeaders(baseHeaders, extra);\n const tenant = normalizeHeaderValue(auth?.tenant?.());\n const tenantId = normalizeHeaderValue(merged['X-Tenant-ID']);\n const legacyTenant = normalizeHeaderValue(merged['X-Tenant']);\n if (!tenantId && legacyTenant) {\n merged['X-Tenant-ID'] = legacyTenant;\n }\n if (!normalizeHeaderValue(merged['X-Tenant-ID']) && tenant) {\n merged['X-Tenant-ID'] = tenant;\n }\n const token = normalizeHeaderValue(auth?.token?.());\n const locale = normalizeHeaderValue(auth?.locale?.());\n if (token && !('Authorization' in merged)) merged['Authorization'] = `Bearer ${token}`;\n if (locale && !('Accept-Language' in merged)) merged['Accept-Language'] = locale;\n return merged;\n };\n}\n\nexport function providePraxisGlobalConfigBootstrap(\n options?: PraxisGlobalConfigBootstrapOptions,\n): Provider[] {\n const normalized = normalizeBootstrapOptions(options);\n const resolveTenant = () => {\n const extra = normalized.headersFactory?.();\n const merged = mergeHeaders(normalized.headers, extra);\n const tenantId = normalizeHeaderValue(merged['X-Tenant-ID']);\n const legacyTenant = normalizeHeaderValue(merged['X-Tenant']);\n const authTenant = normalizeHeaderValue(normalized.auth?.tenant?.());\n return tenantId || legacyTenant || authTenant;\n };\n const headersFactory = buildHeadersFactory(normalized);\n const baseUrl = resolveBaseUrl(normalized.remote);\n const apiOptions: ApiConfigStorageOptions = {\n ...(baseUrl ? { baseUrl } : {}),\n headersFactory,\n defaultHeaders: normalized.includeDefaultHeaders ? undefined : {},\n errorPolicy: normalized.errorPolicy,\n };\n return [\n { provide: PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, useValue: normalized },\n { provide: PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, useValue: resolveTenant },\n {\n provide: PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY,\n useFactory: () => {\n let promise: Promise<void> | null = null;\n return () => {\n if (promise) return promise;\n promise = (async () => {\n if (normalized.blocking === 'none') return;\n if (normalized.blocking === 'auth+global') {\n const ready = normalized.auth?.ready;\n if (ready) {\n try {\n await ready();\n } catch (err) {\n if (normalized.errorPolicy === 'fail') throw err;\n }\n }\n if (normalized.errorPolicy === 'fail') {\n const tenant = resolveTenant();\n if (!tenant) {\n throw new Error('Missing tenant for global config bootstrap.');\n }\n }\n }\n })();\n return promise;\n };\n },\n },\n { provide: API_CONFIG_STORAGE_OPTIONS, useValue: apiOptions },\n {\n provide: ASYNC_CONFIG_STORAGE,\n useFactory: (delegate: ApiConfigStorage, gate: () => Promise<void>) =>\n new DeferredAsyncConfigStorage(delegate, gate),\n deps: [ApiConfigStorage, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY],\n },\n {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [\n GlobalConfigService,\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY,\n PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER,\n PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS,\n ],\n useFactory: (\n svc: GlobalConfigService,\n gate: () => Promise<void>,\n tenantResolver: () => string | undefined,\n opts: PraxisGlobalConfigBootstrapOptions,\n ) => async () => {\n if (opts.blocking === 'none') return;\n if (opts.blocking === 'auth+global') {\n await gate();\n }\n const tenant = tenantResolver?.();\n if (!tenant && opts.errorPolicy === 'fail' && opts.blocking === 'auth+global') {\n throw new Error('Missing tenant for global config bootstrap.');\n }\n if (tenant) {\n svc.setTenant(tenant);\n }\n await svc.ready();\n },\n },\n ];\n}\n","import { inject, Provider } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport {\n GLOBAL_ANALYTICS_SERVICE,\n GLOBAL_API_CLIENT,\n GLOBAL_DIALOG_SERVICE,\n GLOBAL_ROUTE_GUARD_RESOLVER,\n GLOBAL_TOAST_SERVICE,\n} from './global-action.token';\nimport type {\n GlobalAnalyticsService,\n GlobalApiClient,\n GlobalDialogService,\n GlobalRouteGuardResolver,\n GlobalToastService,\n} from '../models/global-action.model';\n\nexport type PraxisGlobalActionsOptions = {\n dialog?: boolean | GlobalDialogService;\n toast?: boolean | GlobalToastService;\n analytics?: boolean | GlobalAnalyticsService;\n api?: boolean | GlobalApiClient;\n guards?: boolean | GlobalRouteGuardResolver;\n};\n\nexport function providePraxisGlobalActions(\n opts: PraxisGlobalActionsOptions = {\n dialog: true,\n toast: true,\n analytics: true,\n api: true,\n guards: true,\n },\n): Provider[] {\n const providers: Provider[] = [];\n\n if (opts.dialog) {\n providers.push({\n provide: GLOBAL_DIALOG_SERVICE,\n useFactory: () => {\n if (typeof opts.dialog === 'object') return opts.dialog;\n const fallback: GlobalDialogService = {\n alert: async (p: any) => {\n if (typeof window !== 'undefined' && window.alert) {\n window.alert(p?.message || p?.title || '');\n }\n },\n confirm: async (p: any) => {\n if (typeof window !== 'undefined' && window.confirm) {\n return window.confirm(p?.message || p?.title || '');\n }\n return true;\n },\n prompt: async (p: any) => {\n if (typeof window !== 'undefined' && window.prompt) {\n return window.prompt(p?.message || p?.title || '', p?.defaultValue || '');\n }\n return null;\n },\n open: async () => {\n throw new Error('Dialog open not available (override GLOBAL_DIALOG_SERVICE).');\n },\n };\n return fallback;\n },\n });\n }\n\n if (opts.toast) {\n providers.push({\n provide: GLOBAL_TOAST_SERVICE,\n useFactory: () => {\n if (typeof opts.toast === 'object') return opts.toast;\n const snack = (() => { try { return inject(MatSnackBar); } catch { return null; } })();\n const fallback: GlobalToastService = {\n success: (message: string) => {\n if (snack) snack.open(message, undefined, { duration: 2500, panelClass: ['pdx-toast-success'] });\n else console.log('[Toast]', message);\n },\n error: (message: string) => {\n if (snack) snack.open(message, undefined, { duration: 3500, panelClass: ['pdx-toast-error'] });\n else console.error('[Toast]', message);\n },\n };\n return fallback;\n },\n });\n }\n\n if (opts.analytics) {\n providers.push({\n provide: GLOBAL_ANALYTICS_SERVICE,\n useFactory: () => {\n if (typeof opts.analytics === 'object') return opts.analytics;\n const fallback: GlobalAnalyticsService = {\n track: (eventName: string, payload?: any) => {\n console.log('[Analytics]', eventName, payload ?? null);\n },\n };\n return fallback;\n },\n });\n }\n\n if (opts.api) {\n providers.push({\n provide: GLOBAL_API_CLIENT,\n useFactory: () => {\n if (typeof opts.api === 'object') return opts.api;\n const http = (() => { try { return inject(HttpClient); } catch { return null; } })();\n if (!http) {\n return {\n get: async () => { throw new Error('HttpClient not available'); },\n post: async () => { throw new Error('HttpClient not available'); },\n patch: async () => { throw new Error('HttpClient not available'); },\n } as GlobalApiClient;\n }\n const client: GlobalApiClient = {\n get: (url: string, params?: Record<string, any>) => {\n const hp = new HttpParams({ fromObject: params || {} });\n return firstValueFrom(http.get(url, { params: hp }));\n },\n post: (url: string, body?: any) => firstValueFrom(http.post(url, body)),\n patch: (url: string, body?: any) => firstValueFrom(http.patch(url, body)),\n };\n return client;\n },\n });\n }\n\n if (opts.guards) {\n providers.push({\n provide: GLOBAL_ROUTE_GUARD_RESOLVER,\n useFactory: () => {\n if (typeof opts.guards === 'object') return opts.guards;\n const fallback: GlobalRouteGuardResolver = {\n resolve: (_guardId: string) => null,\n };\n return fallback;\n },\n });\n }\n\n return providers;\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport type GlobalActionCatalogEntry = {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n payloadSchema?: {\n type: 'object' | 'string' | 'number' | 'boolean' | 'array';\n properties?: Record<string, { type: string; description?: string; required?: boolean }>;\n required?: string[];\n example?: any;\n };\n};\n\nexport const GLOBAL_ACTION_CATALOG = new InjectionToken<ReadonlyArray<GlobalActionCatalogEntry[]>>(\n 'GLOBAL_ACTION_CATALOG',\n);\n\nexport function provideGlobalActionCatalog(entries: GlobalActionCatalogEntry[]): Provider {\n return { provide: GLOBAL_ACTION_CATALOG, multi: true, useValue: entries };\n}\n\nexport function getGlobalActionCatalog(\n catalog: ReadonlyArray<GlobalActionCatalogEntry[]> | null | undefined,\n): GlobalActionCatalogEntry[] {\n if (!catalog?.length) return [];\n return (catalog as GlobalActionCatalogEntry[][]).flat();\n}\n\nexport const PRAXIS_GLOBAL_ACTION_CATALOG: GlobalActionCatalogEntry[] = [\n {\n id: 'navigation.back',\n label: 'Voltar',\n icon: 'arrow_back',\n description: 'Navega para a rota anterior.',\n },\n {\n id: 'navigation.openExternal',\n label: 'Abrir URL Externa',\n icon: 'open_in_new',\n description: 'Abre uma URL em nova aba.',\n payloadSchema: {\n type: 'object',\n properties: { url: { type: 'string', description: 'URL absoluta/relativa' } },\n required: ['url'],\n example: { url: 'https://example.com' },\n },\n },\n {\n id: 'dialog.alert',\n label: 'Dialog Alert',\n icon: 'info',\n description: 'Exibe um alerta simples.',\n payloadSchema: {\n type: 'object',\n properties: {\n title: { type: 'string' },\n message: { type: 'string' },\n variant: { type: 'string' },\n },\n example: { title: 'Atenção', message: 'Operação concluída' },\n },\n },\n {\n id: 'dialog.prompt',\n label: 'Dialog Prompt',\n icon: 'chat',\n description: 'Solicita um valor via prompt.',\n payloadSchema: {\n type: 'object',\n properties: {\n title: { type: 'string' },\n message: { type: 'string' },\n placeholder: { type: 'string' },\n defaultValue: { type: 'string' },\n },\n example: { title: 'Confirmação', message: 'Digite seu nome' },\n },\n },\n {\n id: 'dialog.open',\n label: 'Dialog Open',\n icon: 'open_in_new',\n description: 'Abre um componente em dialog.',\n payloadSchema: {\n type: 'object',\n properties: {\n componentId: { type: 'string' },\n inputs: { type: 'object' },\n size: { type: 'string' },\n data: { type: 'object' },\n },\n required: ['componentId'],\n example: { componentId: 'praxis-dynamic-form', inputs: { formId: 'clientes' } },\n },\n },\n {\n id: 'toast.success',\n label: 'Toast Sucesso',\n icon: 'check_circle',\n description: 'Exibe toast de sucesso.',\n payloadSchema: {\n type: 'object',\n properties: { message: { type: 'string' } },\n required: ['message'],\n example: { message: 'Salvo com sucesso' },\n },\n },\n {\n id: 'toast.error',\n label: 'Toast Erro',\n icon: 'error',\n description: 'Exibe toast de erro.',\n payloadSchema: {\n type: 'object',\n properties: { message: { type: 'string' } },\n required: ['message'],\n example: { message: 'Falha ao salvar' },\n },\n },\n {\n id: 'clipboard.copy',\n label: 'Copiar para área de transferência',\n icon: 'content_copy',\n description: 'Copia texto para o clipboard.',\n payloadSchema: {\n type: 'object',\n properties: { text: { type: 'string' } },\n required: ['text'],\n example: { text: '${item.code}' },\n },\n },\n {\n id: 'trackEvent',\n label: 'Track Event',\n icon: 'analytics',\n description: 'Dispara evento de analytics.',\n payloadSchema: {\n type: 'object',\n properties: { eventName: { type: 'string' }, payload: { type: 'object' } },\n required: ['eventName'],\n example: { eventName: 'list.favorite', payload: { id: '${item.id}' } },\n },\n },\n {\n id: 'log',\n label: 'Log',\n icon: 'terminal',\n description: 'Emite log (info/warn/error).',\n payloadSchema: {\n type: 'object',\n properties: { level: { type: 'string' }, message: { type: 'string' }, payload: { type: 'object' } },\n example: { level: 'info', message: 'Action clicked', payload: { id: '${item.id}' } },\n },\n },\n {\n id: 'api.get',\n label: 'API GET',\n icon: 'cloud_download',\n description: 'Chamada GET.',\n payloadSchema: {\n type: 'object',\n properties: { url: { type: 'string' }, params: { type: 'object' } },\n required: ['url'],\n example: { url: '/api/items', params: { q: '${item.name}' } },\n },\n },\n {\n id: 'api.post',\n label: 'API POST',\n icon: 'cloud_upload',\n description: 'Chamada POST.',\n payloadSchema: {\n type: 'object',\n properties: { url: { type: 'string' }, body: { type: 'object' } },\n required: ['url'],\n example: { url: '/api/favorite', body: { id: '${item.id}' } },\n },\n },\n {\n id: 'api.patch',\n label: 'API PATCH',\n icon: 'cloud_upload',\n description: 'Chamada PATCH.',\n payloadSchema: {\n type: 'object',\n properties: { url: { type: 'string' }, body: { type: 'object' } },\n required: ['url'],\n example: { url: '/api/items/${item.id}', body: { status: 'done' } },\n },\n },\n {\n id: 'route.register',\n label: 'Registrar rota',\n icon: 'route',\n description: 'Registra rota dinâmica.',\n payloadSchema: {\n type: 'object',\n properties: {\n path: { type: 'string' },\n componentId: { type: 'string' },\n loadChildren: { type: 'string' },\n },\n required: ['path'],\n example: { path: '/clientes/novo', componentId: 'praxis-dynamic-page' },\n },\n },\n];\n\nexport function providePraxisGlobalActionCatalog(): Provider[] {\n return [provideGlobalActionCatalog(PRAXIS_GLOBAL_ACTION_CATALOG)];\n}\n","export type GlobalActionId =\n | 'navigate'\n | 'openUrl'\n | 'showAlert'\n | 'log'\n | 'openDialog'\n | 'confirm'\n | 'alert'\n | 'prompt'\n | 'submitForm'\n | 'resetForm'\n | 'validateForm'\n | 'clearValidation'\n | 'saveFormDraft'\n | 'loadFormDraft'\n | 'clearFormDraft'\n | 'apiCall'\n | 'download'\n | 'copyToClipboard'\n | 'refreshOptions'\n | 'loadDependentData';\n\nexport type GlobalActionParam = {\n required?: boolean;\n label?: string;\n placeholder?: string;\n hint?: string;\n example?: string;\n};\n\nexport interface GlobalActionSpec {\n id: GlobalActionId;\n label: string;\n description: string;\n param?: GlobalActionParam;\n}\n\nexport const GLOBAL_ACTION_CATALOG: GlobalActionSpec[] = [\n {\n id: 'navigate',\n label: 'Navegar (router)',\n description: 'Navega para uma rota interna ou URL externa.',\n param: {\n required: true,\n label: 'Destino',\n placeholder: '/dashboard ou https://exemplo.com',\n example: '/dashboard',\n },\n },\n {\n id: 'openUrl',\n label: 'Abrir URL (nova aba)',\n description: 'Abre uma URL externa em nova aba.',\n param: {\n required: true,\n label: 'URL',\n placeholder: 'https://exemplo.com',\n example: 'https://docs.exemplo.com',\n },\n },\n {\n id: 'showAlert',\n label: 'Alerta simples',\n description: 'Exibe alerta nativo do navegador.',\n param: {\n label: 'Mensagem',\n placeholder: 'Mensagem do alerta ou JSON',\n hint: 'Aceita texto simples ou JSON: {\"message\":\"...\",\"title\":\"...\",\"themeColor\":\"primary\",\"position\":{\"top\":\"12px\"}}',\n example: 'Dados salvos com sucesso!',\n },\n },\n {\n id: 'log',\n label: 'Log (console)',\n description: 'Registra mensagem no console para depuração.',\n param: {\n label: 'Mensagem',\n placeholder: 'Mensagem de log',\n example: 'Botão acionado',\n },\n },\n {\n id: 'openDialog',\n label: 'Abrir diálogo (PraxisDialog)',\n description: 'Abre um diálogo definido em metadata.dialog.',\n param: {\n label: 'JSON opcional',\n placeholder: '{\"content\":{\"type\":\"template\",\"templateId\":\"...\"},\"title\":\"...\"}',\n hint: 'Suporta overrides: title/themeColor/position/styles e content (templateId/componentRef/safeHtml).',\n example: '{\"content\":{\"type\":\"template\",\"templateId\":\"dialog-info\"},\"title\":\"Detalhes\"}',\n },\n },\n {\n id: 'confirm',\n label: 'Confirmar (PraxisDialog)',\n description: 'Abre diálogo de confirmação usando presets globais.',\n param: {\n label: 'Mensagem / JSON',\n placeholder: 'Deseja continuar? ou {\"message\":\"...\",\"themeColor\":\"primary\"}',\n hint: 'Pode sobrescrever title/message/themeColor/position/labels via JSON.',\n example: 'Confirmar exclusão?',\n },\n },\n {\n id: 'alert',\n label: 'Alerta (PraxisDialog)',\n description: 'Abre diálogo de alerta usando presets globais.',\n param: {\n label: 'Mensagem / JSON',\n placeholder: 'Operação concluída ou {\"message\":\"...\",\"themeColor\":\"primary\"}',\n hint: 'Pode sobrescrever title/message/themeColor/position/okLabel via JSON.',\n example: 'Operação concluída.',\n },\n },\n {\n id: 'prompt',\n label: 'Prompt (PraxisDialog)',\n description: 'Abre diálogo de prompt usando presets globais.',\n param: {\n label: 'Mensagem / JSON',\n placeholder: 'Informe o motivo ou {\"message\":\"...\",\"placeholder\":\"...\"}',\n hint: 'Pode sobrescrever title/message/themeColor/position/placeholder/defaultValue via JSON.',\n example: 'Informe o motivo.',\n },\n },\n {\n id: 'submitForm',\n label: 'Submeter formulário',\n description: 'Submete o form pai do componente.',\n },\n {\n id: 'resetForm',\n label: 'Resetar formulário',\n description: 'Reseta o form pai do componente.',\n },\n {\n id: 'validateForm',\n label: 'Validar formulário',\n description: 'Valida o form pai sem submeter.',\n },\n {\n id: 'clearValidation',\n label: 'Limpar validação',\n description: 'Remove mensagens de erro de validação.',\n },\n {\n id: 'saveFormDraft',\n label: 'Salvar rascunho',\n description: 'Salva o formulário no localStorage.',\n param: {\n label: 'Chave (opcional)',\n placeholder: 'formDraft_meuFormulario',\n },\n },\n {\n id: 'loadFormDraft',\n label: 'Carregar rascunho',\n description: 'Carrega rascunho do localStorage.',\n param: {\n label: 'Chave (opcional)',\n placeholder: 'formDraft_meuFormulario',\n },\n },\n {\n id: 'clearFormDraft',\n label: 'Limpar rascunho',\n description: 'Remove rascunho do localStorage.',\n param: {\n label: 'Chave (opcional)',\n placeholder: 'formDraft_meuFormulario',\n },\n },\n {\n id: 'apiCall',\n label: 'Chamada HTTP',\n description: 'Executa uma requisição HTTP configurável.',\n param: {\n required: true,\n label: 'Método e URL',\n placeholder: 'GET:https://api.com/endpoint',\n example: 'POST:https://api.com/save',\n },\n },\n {\n id: 'download',\n label: 'Download',\n description: 'Inicia download de arquivo por URL.',\n param: {\n required: true,\n label: 'URL',\n placeholder: 'https://exemplo.com/arquivo.pdf',\n },\n },\n {\n id: 'copyToClipboard',\n label: 'Copiar para clipboard',\n description: 'Copia texto ou valor do campo para a área de transferência.',\n param: {\n label: 'Texto (opcional)',\n placeholder: 'Texto ou URL',\n },\n },\n {\n id: 'refreshOptions',\n label: 'Recarregar opções',\n description: 'Recarrega opções de um campo select.',\n param: {\n required: true,\n label: 'Campo',\n placeholder: 'nomeDoCampo',\n example: 'cidade',\n },\n },\n {\n id: 'loadDependentData',\n label: 'Carregar dados dependentes',\n description: 'Carrega dados em um campo dependente.',\n param: {\n required: true,\n label: 'Campo alvo',\n placeholder: 'nomeDoCampo',\n example: 'produtos',\n },\n },\n];\n\nexport function findGlobalActionSpec(id: string | undefined): GlobalActionSpec | undefined {\n if (!id) return undefined;\n return GLOBAL_ACTION_CATALOG.find((item) => item.id === id);\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');\nexport const DYNAMIC_PAGE_SHELL_EDITOR = new InjectionToken<Type<any>>('DYNAMIC_PAGE_SHELL_EDITOR');\nexport const DYNAMIC_PAGE_CONFIG_EDITOR = new InjectionToken<Type<any>>('DYNAMIC_PAGE_CONFIG_EDITOR');\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 /** Tooltip for suffix icon (used for help actions) */\n suffixIconTooltip?: string;\n /** ARIA label for suffix icon when used as help */\n suffixIconAriaLabel?: string;\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 { FieldControlType };\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 /** Cor do ícone (tema ou CSS) */\n iconColor?: 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 /** Minimum allowed value for start input */\n startMin?: number;\n\n /** Maximum allowed value for start input */\n startMax?: number;\n\n /** Minimum allowed value for end input */\n endMin?: number;\n\n /** Maximum allowed value for end input */\n endMax?: number;\n\n /** Custom message for start min validation */\n startMinMessage?: string;\n\n /** Custom message for start max validation */\n startMaxMessage?: string;\n\n /** Custom message for end min validation */\n endMinMessage?: string;\n\n /** Custom message for end max validation */\n endMaxMessage?: string;\n\n /**\n * Offset mínimo do fim em relação ao início.\n * Ex.: 10 => fim >= início + 10\n */\n endMinOffset?: number;\n\n /**\n * Offset máximo do início em relação ao fim.\n * Ex.: 10 => início <= fim - 10\n */\n startMaxOffset?: number;\n\n /** Custom message for endMinOffset validation */\n endMinOffsetMessage?: string;\n\n /** Custom message for startMaxOffset validation */\n startMaxOffsetMessage?: string;\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 /** Inline/runtime compatibility for panel search icon. */\n panelSearchIcon?: string;\n /** Inline/runtime compatibility for panel search icon color. */\n panelSearchIconColor?: string;\n /** Inline/runtime compatibility for panel reset icon. */\n panelResetIcon?: string;\n /** Inline/runtime compatibility for panel reset icon color. */\n panelResetIconColor?: string;\n /** Inline/runtime compatibility for selected option icon. */\n optionSelectedIcon?: string;\n /** Inline/runtime compatibility for selected option icon color. */\n optionSelectedIconColor?: string;\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 // Praxis DateRange Shortcuts\n // ==========================\n /** Enable sidebar shortcuts overlay (phase 1). */\n showShortcuts?: boolean;\n\n /**\n * Shortcuts configuration. Accepts built-in identifiers or custom presets.\n * Example: ['thisMonth', 'lastMonth', { id: 'last7', label: 'Últimos 7 dias', calculateRange: fn }]\n */\n shortcuts?: (string | import('./component-metadata.interface').DateRangePreset)[];\n\n /**\n * Inline quick presets for compact filters (`filter-date-range-inline`).\n * - `true`: enabled with defaults\n * - `false`: disabled\n * - object: fine-grained control\n */\n inlineQuickPresets?: boolean | {\n enabled?: boolean;\n maxVisible?: number;\n };\n\n /** Accessibility label for the inline quick presets group. */\n inlineQuickPresetsAriaLabel?: string;\n\n /** Action label shown in the overlay footer for cancel. */\n inlineQuickPresetsCancelLabel?: string;\n\n /** Accessibility label for the cancel action in overlay footer. */\n inlineQuickPresetsCancelAriaLabel?: string;\n\n /** Action label shown in the overlay footer for apply. */\n inlineQuickPresetsApplyLabel?: string;\n\n /** Accessibility label for the apply action in overlay footer. */\n inlineQuickPresetsApplyAriaLabel?: string;\n\n /**\n * Apply behavior for inline quick presets:\n * - `auto`: applies immediately and closes the overlay\n * - `confirm`: keeps selection as draft and only commits on explicit confirmation\n */\n inlineQuickPresetsApplyMode?: 'auto' | 'confirm';\n\n /** Position of shortcuts sidebar relative to the form field. */\n shortcutsPosition?: 'left' | 'right';\n\n /** Apply immediately when clicking a shortcut. Defaults to true. */\n applyOnShortcutClick?: boolean;\n\n /** Timezone identifier (e.g., 'America/Sao_Paulo') for normalization. */\n timezone?: string;\n\n /** First day of week override; otherwise use DateAdapter.getFirstDayOfWeek(). */\n startOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n /**\n * Localized labels for built-in shortcuts.\n * Keys: today, yesterday, thisWeek, lastWeek, thisMonth, lastMonth, thisYear, lastYear\n */\n i18nShortcuts?: Partial<Record<\n 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'thisYear' | 'lastYear',\n string\n >>;\n\n /**\n * Now provider for deterministic testing and reporting alignment.\n * Defaults to () => new Date().\n */\n nowProvider?: () => Date;\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 /** Hide labels for start/end sub-inputs (compact mode). */\n hideSubLabels?: boolean;\n\n /** Layout dos inputs (lado a lado ou em linhas). */\n layout?: 'row' | 'column';\n\n /** Espaçamento entre os inputs (px ou CSS). */\n gap?: number | string;\n\n /** Onde exibir o botão clear: no grupo ou em cada subinput. */\n clearButtonPlacement?: 'group' | 'subinputs';\n\n /**\n * Configuração do botão de limpar a faixa.\n * Aceita boolean para compatibilidade ou objeto detalhado.\n */\n clearButton?:\n | boolean\n | {\n enabled: boolean;\n icon?: string;\n iconColor?: string;\n tooltip?: string;\n ariaLabel?: string;\n showOnlyWhenFilled?: boolean;\n };\n\n /**\n * Optional mini histogram/bars rendered above the inline range slider track.\n * Accepts array shorthand, object config, or JSON string for editor compatibility.\n */\n inlineDistribution?:\n | InlineRangeDistributionConfig\n | Array<number | InlineRangeDistributionBin>\n | string;\n\n /**\n * Alias accepted by inline range components for legacy payloads.\n */\n distribution?:\n | InlineRangeDistributionConfig\n | Array<number | InlineRangeDistributionBin>\n | string;\n}\n\n/**\n * Metadata for the generic numeric range slider component.\n */\nexport interface InlineRangeDistributionBin {\n /** Optional unique identifier */\n id?: string;\n\n /** Primary numeric amount for the bin */\n value?: number;\n\n /** Alias for `value` used by analytics payloads */\n count?: number;\n\n /** Alias for `value` used by finance payloads */\n amount?: number;\n\n /** Optional custom bar color */\n color?: string;\n\n /** Optional label for accessibility/reporting */\n label?: string;\n}\n\nexport interface InlineRangeDistributionConfig {\n /**\n * Histogram bins as numeric shorthand or rich objects.\n * Accepts array or JSON string for editor compatibility.\n */\n bins?: Array<number | InlineRangeDistributionBin> | string;\n\n /** Optional normalization ceiling; defaults to the highest bin value. */\n maxValue?: number;\n\n /** Optional minimum visible ratio in the [0..1] range for non-zero bars. */\n minBarRatio?: number;\n\n /** Alias for `minBarRatio`. */\n minVisibleRatio?: number;\n\n /** Optional container height in px. */\n height?: number;\n\n /** Optional gap between bars in px. */\n gap?: number;\n\n /** Optional top border radius for bars in px. */\n radius?: number;\n\n /** Optional global opacity multiplier in the [0..1] range. */\n opacity?: number;\n\n /** Optional accessibility label for the bars group. */\n ariaLabel?: string;\n}\n\nexport interface RangeSliderQuickPreset {\n /** Optional unique identifier */\n id?: string;\n\n /** Label shown in the inline preset chip/button */\n label: string;\n\n /** Optional icon (Material icon name) */\n icon?: string;\n\n /** Preset for single mode */\n value?: number | null;\n\n /** Preset start for range mode */\n start?: number | null;\n\n /** Preset end for range mode */\n end?: number | null;\n}\n\nexport interface RangeSliderInlineTexts {\n minLabel?: string;\n maxLabel?: string;\n valueLabel?: string;\n quickPresetsLabel?: string;\n}\n\nexport interface RangeSliderQuickPresetLabels {\n low?: string;\n middle?: string;\n high?: string;\n uptoMid?: string;\n fromMid?: string;\n full?: string;\n}\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 /**\n * Optional mini histogram/bars rendered above the inline slider track.\n * Accepts array shorthand, object config, or JSON string for editor compatibility.\n */\n inlineDistribution?:\n | InlineRangeDistributionConfig\n | Array<number | InlineRangeDistributionBin>\n | string;\n\n /**\n * Alias accepted by inline range components for legacy payloads.\n */\n distribution?:\n | InlineRangeDistributionConfig\n | Array<number | InlineRangeDistributionBin>\n | string;\n\n /**\n * Quick presets shown in compact inline variant.\n * Accepts a typed array or JSON string for editor/backward compatibility.\n */\n quickPresets?: RangeSliderQuickPreset[] | string;\n\n /** Enables auto-generated quick presets when `quickPresets` is not provided. */\n quickPresetsAuto?: boolean;\n\n /**\n * Optional labels for auto-generated presets.\n * Accepts object or JSON string for editor/backward compatibility.\n */\n quickPresetsLabels?: RangeSliderQuickPresetLabels | string;\n\n /**\n * Compact inline textual labels (inputs and quick presets group).\n * Accepts object or JSON string for editor/backward compatibility.\n */\n inlineTexts?: RangeSliderInlineTexts | string;\n\n /**\n * Enables half-step interactions for inline rating ranges.\n * When `true`, the rating range defaults to step `0.5` unless an explicit step is set.\n */\n allowHalf?: boolean;\n\n /**\n * Legacy alias for `allowHalf` used by some integrations.\n */\n ratingAllowHalf?: boolean;\n\n /**\n * Optional precision hint for rating-range interpretation (`0.5` enables half-step).\n */\n ratingPrecision?: number;\n\n /**\n * Optional precision token for rating-range interpretation (`half` enables half-step).\n */\n precision?: string | number;\n\n /**\n * Optional aliases consumed by inline rating implementations.\n * `ratingMin` and `ratingMax` are fallbacks when `min`/`max` are omitted.\n */\n ratingMin?: number;\n ratingMax?: number;\n ratingStep?: number;\n itemsCount?: number;\n\n /**\n * Optional visual customization for inline rating tone colors.\n */\n ratingToneLowColor?: string;\n ratingToneMidColor?: string;\n ratingToneHighColor?: string;\n ratingBadgeColor?: string;\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 * Configuração do botão de limpar no painel do color picker.\n * Aceita boolean para compatibilidade ou objeto detalhado.\n */\n clearButton?:\n | boolean\n | {\n enabled: boolean;\n icon?: string;\n iconColor?: string;\n tooltip?: string;\n ariaLabel?: string;\n showOnlyWhenFilled?: boolean;\n };\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 * Optional reveal toggle (show/hide password).\n * Use style: 'icon' for eye icon, 'text' for a small text button.\n */\n revealToggle?: {\n enabled?: boolean;\n style?: 'icon' | 'text';\n showLabel?: string;\n hideLabel?: string;\n iconShow?: string;\n iconHide?: string;\n ariaLabel?: string;\n };\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 /** Inline/runtime compatibility for compact filter variant. */\n interval?: number | string;\n /** Inline/runtime compatibility for compact filter variant. */\n timeOptions?: string[];\n /** Inline/runtime compatibility for compact filter variant. */\n showSeconds?: boolean;\n /** Inline/runtime compatibility for compact filter variant. */\n stepMinute?: number;\n /** Inline/runtime compatibility for compact filter variant. */\n stepSecond?: number;\n /** Inline/runtime compatibility for compact filter variant. */\n inlineTimeMode?: 'auto' | 'list' | 'columns';\n /** Inline/runtime compatibility for compact filter variant. */\n inlineListMaxOptions?: number;\n /** Inline/runtime compatibility for compact filter variant. */\n inlineTexts?: MaterialTimepickerMetadata['inlineTexts'];\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 `timeOptions` 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 /**\n * Rendering mode for inline filter variant:\n * - `list`: single list of options\n * - `columns`: independent columns for hour/minute(/second)\n * - `auto`: chooses best mode based on metadata/options\n */\n inlineTimeMode?: 'auto' | 'list' | 'columns';\n\n /**\n * Max options threshold for `inlineTimeMode: 'auto'` to still prefer list.\n * Values outside range are clamped by the component.\n */\n inlineListMaxOptions?: number;\n\n /**\n * Text overrides for inline time variant.\n */\n inlineTexts?: {\n hourLabel?: string;\n minuteLabel?: string;\n secondLabel?: string;\n emptyStateLabel?: string;\n openPanelAriaLabel?: string;\n closePanelAriaLabel?: string;\n };\n\n /** Inline/runtime compatibility for panel toggle icon when closed. */\n panelToggleCloseIcon?: string;\n /** Inline/runtime compatibility for panel toggle icon when open. */\n panelToggleOpenIcon?: string;\n /** Inline/runtime compatibility for panel toggle icon color. */\n panelToggleIconColor?: string;\n /** Inline/runtime compatibility for selected option icon. */\n optionSelectedIcon?: string;\n /** Inline/runtime compatibility for selected option icon color. */\n optionSelectedIconColor?: string;\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 /** Enable search input */\n searchable?: boolean;\n /** Placeholder text for tree search input */\n searchPlaceholder?: string;\n /** Empty state message for filtered tree */\n emptyStateText?: string;\n /** Inline/runtime compatibility for panel search icon. */\n panelSearchIcon?: string;\n /** Inline/runtime compatibility for panel search icon color. */\n panelSearchIconColor?: string;\n /** Inline/runtime compatibility for panel toggle icon when closed. */\n panelToggleCloseIcon?: string;\n /** Inline/runtime compatibility for panel toggle icon when open. */\n panelToggleOpenIcon?: string;\n /** Inline/runtime compatibility for panel toggle icon color. */\n panelToggleIconColor?: string;\n /** Inline/runtime compatibility for expanded tree node icon. */\n treeNodeExpandedIcon?: string;\n /** Inline/runtime compatibility for collapsed tree node icon. */\n treeNodeCollapsedIcon?: string;\n /** Inline/runtime compatibility for tree node toggle icon color. */\n treeNodeIconColor?: string;\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';\nimport { getDefaultFormHints, FormModeHints } from '../models/form/form-config.model';\nimport { fillUndefined } from '../utils/deep-merge.util';\nimport {\n ConsoleLoggerSink,\n createCorporateLoggerConfig,\n LoggerService,\n} from '../logging';\n\nconst METADATA_NORMALIZER_LOGGER = new LoggerService(\n createCorporateLoggerConfig('dev'),\n [new ConsoleLoggerSink()],\n);\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 // Ensure hints exist and fill missing values with defaults\n try {\n const defaults: FormModeHints = getDefaultFormHints();\n const current = (normalized as any).hints as FormModeHints | undefined;\n (normalized as any).hints = fillUndefined(current || ({} as any), defaults);\n } catch {}\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 METADATA_NORMALIZER_LOGGER.warnOnce(\n '[MetadataNormalizer] Normalized aliases',\n {\n context: {\n lib: 'praxis-core',\n component: 'MetadataNormalizer',\n actionId: 'normalize-select-aliases',\n },\n data: {\n field: m.name,\n controlType: ct,\n changes: warnings,\n },\n dedupeKey: `metadata-normalizer:${ct}:${m.name ?? 'unknown'}:${warnings.join('|')}`,\n },\n );\n } catch {}\n }\n\n // Remove legacy aliases after canonicalization.\n if (m.displayField !== undefined) delete m.displayField;\n if (m.valueField !== undefined) delete m.valueField;\n if (m.filter !== undefined) delete m.filter;\n if (m.endpoint !== undefined) delete m.endpoint;\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 /** When true, allows the section content to be collapsed/expanded in the UI. */\n collapsible?: boolean;\n /** Initial collapsed state when `collapsible` is true. */\n collapsed?: boolean;\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 /** Optional colors for title/description (CSS color or token) */\n titleColor?: string;\n descriptionColor?: string;\n /** Optional alignment for the header content */\n headerAlign?: 'start' | 'center';\n /** Optional tooltip for the section header */\n headerTooltip?: string;\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 /**\n * Dicas e tooltips para modos de dados e modos globais de UI.\n * Útil para padronizar mensagens didáticas no host.\n */\n hints?: FormModeHints;\n}\n\nexport interface FormModeHints {\n dataModes: {\n create: string;\n edit: string;\n view: string;\n };\n uiModes: {\n presentation: string;\n readonly: string;\n disabled: string;\n visible: string;\n };\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 // Default mode hints (didactic tooltips)\n hints: getDefaultFormHints(),\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 * Default hint texts for data and UI modes.\n */\nexport function getDefaultFormHints(): FormModeHints {\n return {\n dataModes: {\n create:\n 'Criar novo registro. Campos editáveis e ações de salvar habilitadas.',\n edit:\n 'Editar registro existente. Campos editáveis e ações de salvar habilitadas.',\n view:\n 'Visualizar registro. Sem edição por padrão; combine com Modo Leitura ou Apresentação.',\n },\n uiModes: {\n presentation:\n 'Modo apresentação: exibe rótulo + valor formatado e oculta inputs/ações. Efetivo apenas em Visualizar.',\n readonly:\n 'Modo leitura: mantém os inputs visíveis, porém bloqueados (sem interação). Continua participando da validação e do envio.',\n disabled:\n 'Desabilitado: aparência inativa; ideal para bloquear interação visualmente. Evite desativar campos essenciais.',\n visible:\n 'Visibilidade: controla exibição sem destruir controles (útil para regras condicionais).',\n },\n };\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","export type RulePropertyType = 'string' | 'boolean' | 'object' | 'enum' | 'number';\n\nexport interface RulePropertyDefinition {\n name: string;\n type: RulePropertyType;\n label: string;\n description?: string;\n enumValues?: Array<{ value: string; label: string }>;\n category?: 'content' | 'appearance' | 'behavior' | 'layout' | 'validation';\n}\n\nexport type RulePropertySchema = Record<\n 'field' | 'section' | 'action' | 'row' | 'column',\n RulePropertyDefinition[]\n>;\n\nexport const RULE_PROPERTY_SCHEMA: RulePropertySchema = {\n field: [\n { name: 'visible', type: 'boolean', label: 'Visível' },\n { name: 'required', type: 'boolean', label: 'Obrigatório' },\n { name: 'readonly', type: 'boolean', label: 'Somente leitura' },\n { name: 'disabled', type: 'boolean', label: 'Desabilitado' },\n { name: 'className', type: 'string', label: 'Classe CSS' },\n { name: 'style', type: 'object', label: 'Estilos inline' },\n { name: 'label', type: 'string', label: 'Rótulo' },\n { name: 'description', type: 'string', label: 'Descrição' },\n { name: 'placeholder', type: 'string', label: 'Placeholder' },\n { name: 'hint', type: 'string', label: 'Hint' },\n { name: 'tooltip', type: 'string', label: 'Tooltip' },\n { name: 'prefixIcon', type: 'string', label: 'Ícone prefixo' },\n { name: 'suffixIcon', type: 'string', label: 'Ícone sufixo' },\n { name: 'prefixText', type: 'string', label: 'Texto prefixo' },\n { name: 'suffixText', type: 'string', label: 'Texto sufixo' },\n { name: 'defaultValue', type: 'object', label: 'Valor padrão' },\n { name: 'options', type: 'object', label: 'Opções (select/radio)' },\n {\n name: 'appearance',\n type: 'enum',\n label: 'Aparência',\n enumValues: [\n { value: 'fill', label: 'Fill' },\n { value: 'outline', label: 'Outline' },\n ],\n },\n {\n name: 'color',\n type: 'enum',\n label: 'Cor',\n enumValues: [\n { value: 'primary', label: 'Primária' },\n { value: 'accent', label: 'Acento' },\n { value: 'warn', label: 'Aviso' },\n ],\n },\n {\n name: 'floatLabel',\n type: 'enum',\n label: 'Float label',\n enumValues: [\n { value: 'auto', label: 'Auto' },\n { value: 'always', label: 'Sempre' },\n { value: 'never', label: 'Nunca' },\n ],\n },\n {\n name: 'hintPosition',\n type: 'enum',\n label: 'Posição do hint',\n enumValues: [\n { value: 'start', label: 'Início' },\n { value: 'end', label: 'Fim' },\n ],\n },\n { name: 'validators', type: 'object', label: 'Validadores' },\n ],\n section: [\n { name: 'visible', type: 'boolean', label: 'Visível' },\n { name: 'title', type: 'string', label: 'Título' },\n { name: 'description', type: 'string', label: 'Descrição' },\n { name: 'icon', type: 'string', label: 'Ícone' },\n { name: 'className', type: 'string', label: 'Classe CSS' },\n { name: 'style', type: 'object', label: 'Estilos inline' },\n { name: 'borderColor', type: 'string', label: 'Cor da borda' },\n { name: 'borderStyle', type: 'string', label: 'Estilo da borda' },\n { name: 'borderWidth', type: 'number', label: 'Largura da borda (px)' },\n { name: 'collapsible', type: 'boolean', label: 'Colapsável' },\n { name: 'collapsed', type: 'boolean', label: 'Colapsada' },\n { name: 'headerTooltip', type: 'string', label: 'Tooltip do cabeçalho' },\n {\n name: 'headerAlign',\n type: 'enum',\n label: 'Alinhamento do cabeçalho',\n enumValues: [\n { value: 'start', label: 'Início' },\n { value: 'center', label: 'Centro' },\n ],\n },\n { name: 'gapBottom', type: 'number', label: 'Gap inferior' },\n { name: 'titleGapBottom', type: 'number', label: 'Gap do título' },\n { name: 'descriptionGapBottom', type: 'number', label: 'Gap da descrição' },\n { name: 'titleColor', type: 'string', label: 'Cor do título' },\n { name: 'descriptionColor', type: 'string', label: 'Cor da descrição' },\n {\n name: 'titleStyle',\n type: 'enum',\n label: 'Estilo do título',\n enumValues: [\n { value: 'titleLarge', label: 'Título grande' },\n { value: 'titleMedium', label: 'Título médio' },\n { value: 'titleSmall', label: 'Título pequeno' },\n { value: 'headlineSmall', label: 'Headline' },\n ],\n },\n {\n name: 'descriptionStyle',\n type: 'enum',\n label: 'Estilo da descrição',\n enumValues: [\n { value: 'bodyLarge', label: 'Body grande' },\n { value: 'bodyMedium', label: 'Body médio' },\n { value: 'bodySmall', label: 'Body pequeno' },\n ],\n },\n { name: 'appearance', type: 'string', label: 'Aparência' },\n ],\n action: [\n { name: 'visible', type: 'boolean', label: 'Visível' },\n { name: 'disabled', type: 'boolean', label: 'Desabilitada' },\n { name: 'loading', type: 'boolean', label: 'Carregando' },\n { name: 'label', type: 'string', label: 'Rótulo' },\n { name: 'icon', type: 'string', label: 'Ícone' },\n { name: 'tooltip', type: 'string', label: 'Tooltip' },\n {\n name: 'color',\n type: 'enum',\n label: 'Cor',\n enumValues: [\n { value: 'primary', label: 'Primária' },\n { value: 'accent', label: 'Acento' },\n { value: 'warn', label: 'Aviso' },\n { value: 'basic', label: 'Básica' },\n ],\n },\n {\n name: 'variant',\n type: 'enum',\n label: 'Variante',\n enumValues: [\n { value: 'raised', label: 'Raised' },\n { value: 'stroked', label: 'Stroked' },\n { value: 'flat', label: 'Flat' },\n { value: 'fab', label: 'Fab' },\n ],\n },\n {\n name: 'size',\n type: 'enum',\n label: 'Tamanho',\n enumValues: [\n { value: 'small', label: 'Pequeno' },\n { value: 'medium', label: 'Médio' },\n { value: 'large', label: 'Grande' },\n ],\n },\n { name: 'className', type: 'string', label: 'Classe CSS' },\n { name: 'style', type: 'object', label: 'Estilos inline' },\n ],\n row: [\n { name: 'visible', type: 'boolean', label: 'Visível' },\n { name: 'gap', type: 'number', label: 'Gap entre colunas (px)' },\n { name: 'rowGap', type: 'number', label: 'Gap após linha (px)' },\n { name: 'className', type: 'string', label: 'Classe CSS' },\n { name: 'style', type: 'object', label: 'Estilos inline' },\n ],\n column: [\n { name: 'visible', type: 'boolean', label: 'Visível' },\n { name: 'span', type: 'object', label: 'Largura por breakpoint' },\n { name: 'offset', type: 'object', label: 'Offset por breakpoint' },\n { name: 'order', type: 'object', label: 'Ordem por breakpoint' },\n { name: 'hidden', type: 'object', label: 'Ocultar por breakpoint' },\n {\n name: 'align',\n type: 'enum',\n label: 'Alinhamento vertical',\n enumValues: [\n { value: 'start', label: 'Início' },\n { value: 'center', label: 'Centro' },\n { value: 'end', label: 'Fim' },\n { value: 'stretch', label: 'Esticado' },\n ],\n },\n { name: 'padding', type: 'number', label: 'Padding (px)' },\n { name: 'className', type: 'string', label: 'Classe CSS' },\n { name: 'style', type: 'object', label: 'Estilos inline' },\n ],\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 * Quando usado via <praxis-crud>, habilita automaticamente a coluna de ações por linha\n * com base nas ações declaradas (ex.: view/edit). Desligue para controlar manualmente.\n * Default: true\n */\n autoRowActions?: boolean;\n /**\n * Formato padrão para exibição das ações de linha geradas automaticamente.\n * Default: 'icons'\n */\n rowActionsDisplay?: 'icons' | 'buttons' | 'menu';\n /**\n * Inclui ação de delete na coluna de ações quando houver ação 'delete' declarada.\n * Por padrão permanece desabilitado para evitar comportamentos não intencionais.\n */\n includeDeleteInRow?: boolean;\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 type GlobalAiProvider = 'gemini' | 'openai' | 'xai' | 'mock';\n\nexport interface GlobalAiEmbeddingConfig {\n useSameAsLlm?: boolean;\n provider?: GlobalAiProvider;\n apiKey?: string;\n apiKeyLast4?: string;\n hasApiKey?: boolean;\n model?: string;\n dimensions?: number;\n}\n\nexport interface GlobalAiConfig {\n provider?: GlobalAiProvider;\n /** Policy for UI confirmation on risky AI patches. */\n riskPolicy?: 'strict' | 'standard';\n apiKey?: string;\n apiKeyLast4?: string;\n hasApiKey?: boolean;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n embedding?: GlobalAiEmbeddingConfig;\n}\n\nexport interface GlobalCacheConfig {\n /**\n * Se verdadeiro, desabilita o cache persistente (LocalStorage) para schemas de metadados.\n * Isso força o download do schema a cada recarga da aplicação, útil quando se deseja\n * priorizar a configuração vinda do servidor ou durante desenvolvimento intenso de API.\n * Default: false\n */\n disableSchemaCache?: boolean;\n}\n\nexport interface GlobalConfig {\n crud?: GlobalCrudConfig;\n dynamicFields?: GlobalDynamicFieldsConfig;\n table?: GlobalTableConfig;\n dialog?: GlobalDialogConfig;\n /** Dynamic routes registered at runtime (host-resolved). */\n routes?: {\n dynamic?: Array<{\n path: string;\n componentId?: string;\n loadChildren?: any;\n data?: Record<string, any>;\n resolve?: Record<string, any>;\n guards?: string[];\n canMatch?: string[];\n canActivateChild?: string[];\n replace?: boolean;\n position?: 'append' | 'prepend' | 'before-wildcard';\n }>;\n };\n ai?: GlobalAiConfig;\n cache?: GlobalCacheConfig;\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 svgIcon?: string | null;\n fillMode?: 'solid' | 'flat' | 'outline';\n themeColor?: 'primary' | 'accent' | 'warn' | 'neutral';\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 containerBorderColor?: string;\n containerSmallMaxWidth?: string;\n contentPadding?: string;\n headlinePadding?: string;\n withActionsContentPadding?: string;\n backdropColor?: string;\n actionButtonRadius?: string;\n actionButtonMinHeight?: string;\n actionButtonPadding?: 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 themeColor?: 'primary' | 'light' | 'dark';\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","import { FieldControlType } from '../models/material-field-metadata.interface';\n\nexport const DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP: Record<string, FieldControlType> = {\n 'pdx-text-input': FieldControlType.INPUT,\n 'pdx-email-input': FieldControlType.EMAIL_INPUT,\n 'pdx-password-input': FieldControlType.PASSWORD,\n 'pdx-color-input': FieldControlType.COLOR_INPUT,\n 'pdx-date-input': FieldControlType.DATE_INPUT,\n 'pdx-datetime-local-input': FieldControlType.DATETIME_LOCAL_INPUT,\n 'pdx-month-input': FieldControlType.MONTH_INPUT,\n 'pdx-number-input': FieldControlType.NUMERIC_TEXT_BOX,\n 'pdx-material-slider': FieldControlType.SLIDER,\n 'pdx-material-avatar': FieldControlType.AVATAR,\n 'pdx-material-currency': FieldControlType.CURRENCY_INPUT,\n 'pdx-material-cpf-cnpj-input': FieldControlType.CPF_CNPJ_INPUT,\n 'pdx-material-range-slider': FieldControlType.RANGE_SLIDER,\n 'pdx-material-price-range': FieldControlType.PRICE_RANGE,\n 'pdx-search-input': FieldControlType.SEARCH_INPUT,\n 'pdx-phone-input': FieldControlType.PHONE,\n 'pdx-time-input': FieldControlType.TIME_INPUT,\n 'pdx-material-timepicker': FieldControlType.TIME_PICKER,\n 'pdx-url-input': FieldControlType.URL_INPUT,\n 'pdx-week-input': FieldControlType.WEEK_INPUT,\n 'pdx-color-picker': FieldControlType.COLOR_PICKER,\n 'pdx-material-colorpicker': FieldControlType.COLOR_PICKER,\n 'pdx-material-rating': FieldControlType.RATING,\n 'pdx-material-datepicker': FieldControlType.DATE_PICKER,\n 'pdx-material-date-range': FieldControlType.DATE_RANGE,\n 'pdx-material-textarea': FieldControlType.TEXTAREA,\n 'pdx-material-select': FieldControlType.SELECT,\n 'pdx-material-multi-select': FieldControlType.MULTI_SELECT,\n 'pdx-material-multi-select-tree': FieldControlType.MULTI_SELECT_TREE,\n 'pdx-material-tree-select': FieldControlType.TREE_SELECT,\n 'pdx-material-file-upload': FieldControlType.FILE_UPLOAD,\n 'pdx-material-transfer-list': FieldControlType.TRANSFER_LIST,\n 'pdx-material-searchable-select': FieldControlType.SEARCHABLE_SELECT,\n 'pdx-material-autocomplete': FieldControlType.AUTO_COMPLETE,\n 'pdx-material-chips': FieldControlType.CHIP_INPUT,\n 'pdx-material-slide-toggle': FieldControlType.TOGGLE,\n 'pdx-material-async-select': FieldControlType.ASYNC_SELECT,\n 'pdx-material-radio-group': FieldControlType.RADIO,\n 'pdx-material-checkbox-group': FieldControlType.CHECKBOX,\n 'pdx-material-button-toggle': FieldControlType.BUTTON_TOGGLE,\n 'pdx-material-selection-list': FieldControlType.SELECTION_LIST,\n 'pdx-material-button': FieldControlType.BUTTON,\n 'pdx-year-input': FieldControlType.YEAR_INPUT,\n 'pdx-material-time-range': FieldControlType.TIME_RANGE,\n 'pdx-cron-builder': FieldControlType.CRON_BUILDER,\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 'mode',\n 'width',\n 'isFlex',\n 'disabled',\n 'readOnly',\n 'hidden',\n 'formHidden',\n 'tableHidden',\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 const rawFormat = (field as any).format;\n if (rawFormat !== undefined && rawFormat !== null) {\n const normalized = String(rawFormat).trim();\n if (normalized.length) {\n (metadata as any).format = normalized;\n }\n }\n if (field.numericFormat !== undefined && field.numericFormat !== null) {\n const normalizedNumericFormat = String(field.numericFormat).trim();\n if (normalizedNumericFormat.length) {\n (metadata as any).numericFormat = normalizedNumericFormat;\n if ((metadata as any).format === undefined) {\n (metadata as any).format = normalizedNumericFormat;\n }\n }\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 as any).clearButton !== undefined) {\n (metadata as any).clearButton = (field as any).clearButton;\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","import { FormLayoutRule, FormRuleTargetType } from '../models/form/form-layout.model';\n\n/**\n * Migra regras legadas (context/targetFields) para o formato canônico\n * `targetType/targets/effect.properties`.\n */\nexport function migrateFormLayoutRule(rule: any): FormLayoutRule {\n if (!rule) {\n throw new Error('Regra inválida ou indefinida');\n }\n\n const normalizedTargets = normalizeTargets(rule);\n const properties =\n (rule.effect && rule.effect.properties) ||\n inferPropertiesFromContext(rule.context);\n\n return {\n ...rule,\n targetType: normalizedTargets.targetType,\n targets: normalizedTargets.targets,\n targetFields: rule.targetFields,\n context: rule.context,\n effect: {\n ...(rule.effect || {}),\n properties,\n },\n };\n}\n\nfunction normalizeTargets(\n rule: any,\n): { targetType: FormRuleTargetType; targets: string[] } {\n const rawTargets: string[] =\n (Array.isArray(rule.targets) && rule.targets.length && rule.targets) ||\n (Array.isArray(rule.targetFields) && rule.targetFields.length && rule.targetFields) ||\n [];\n\n const targetType: FormRuleTargetType =\n rule.targetType ||\n (rawTargets.some((t) => t?.startsWith('section:')) ? 'section'\n : rawTargets.some((t) => t?.startsWith('action:')) ? 'action'\n : rawTargets.some((t) => t?.startsWith('row:')) ? 'row'\n : rawTargets.some((t) => t?.startsWith('column:')) ? 'column'\n : 'field');\n\n const targets = rawTargets.map((t) => stripPrefix(t));\n return { targetType, targets };\n}\n\nfunction stripPrefix(value: string): string {\n if (value?.startsWith('section:')) return value.substring('section:'.length);\n if (value?.startsWith('action:')) return value.substring('action:'.length);\n if (value?.startsWith('row:')) return value.substring('row:'.length);\n if (value?.startsWith('column:')) return value.substring('column:'.length);\n return value;\n}\n\nfunction inferPropertiesFromContext(\n context: string | undefined,\n): Record<string, any> | undefined {\n switch (context) {\n case 'visibility':\n return { visible: true };\n case 'readOnly':\n return { readonly: true };\n case 'validation':\n return { required: true };\n case 'style':\n return {};\n default:\n return undefined;\n }\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 { DateAdapter } from '@angular/material/core';\nimport { DateRangePreset, DateRangeValue } from '../models/component-metadata.interface';\n\nexport interface ResolvePresetOptions {\n timezone?: string;\n startOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n now?: Date;\n /** If true, require every day in range to pass filter, else only start/end. */\n strictFilter?: boolean;\n /** Optional date filter to validate computed ranges. */\n dateFilter?: (d: Date | null) => boolean;\n /** Optional min/max clamp. */\n minDate?: Date | null;\n maxDate?: Date | null;\n}\n\n/** Normalize a date to start of day (00:00:00.000) respecting timezone if provided. */\nexport function normalizeStart(date: Date, timezone?: string): Date {\n return normalizeAtBoundary(date, 'start', timezone);\n}\n\n/** Normalize a date to end of day (23:59:59.999) respecting timezone if provided. */\nexport function normalizeEnd(date: Date, timezone?: string): Date {\n return normalizeAtBoundary(date, 'end', timezone);\n}\n\nfunction normalizeAtBoundary(date: Date, which: 'start' | 'end', timezone?: string): Date {\n const d = new Date(date);\n if (timezone) {\n // Build from local parts interpreted in the target timezone using Intl\n const parts = new Intl.DateTimeFormat('en-CA', {\n timeZone: timezone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })\n .formatToParts(d)\n .reduce<Record<string, string>>((acc, p) => {\n if (p.type !== 'literal') acc[p.type] = p.value;\n return acc;\n }, {});\n const y = Number(parts.year);\n const m = Number(parts.month) - 1;\n const day = Number(parts.day);\n const h = which === 'start' ? 0 : 23;\n const min = which === 'start' ? 0 : 59;\n const s = which === 'start' ? 0 : 59;\n const ms = which === 'start' ? 0 : 999;\n // Construct as if in local time then shift using the timezone offset at that instant\n const local = new Date(y, m, day, h, min, s, ms);\n const tzOffset = getTimeZoneOffsetMs(timezone, local);\n return new Date(local.getTime() - tzOffset + local.getTimezoneOffset() * 60_000);\n }\n if (which === 'start') {\n d.setHours(0, 0, 0, 0);\n } else {\n d.setHours(23, 59, 59, 999);\n }\n return d;\n}\n\nfunction getTimeZoneOffsetMs(timeZone: string, date: Date): number {\n // Approximate the offset between target timezone and UTC in ms at given date\n const f = new Intl.DateTimeFormat('en-US', {\n timeZone,\n hour12: false,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n const parts = f.formatToParts(date);\n const get = (t: string) => Number(parts.find((p) => p.type === t)?.value || 0);\n const asLocal = new Date(get('year'), get('month') - 1, get('day'), get('hour'), get('minute'), get('second'));\n return asLocal.getTime() - Date.UTC(get('year'), get('month') - 1, get('day'), get('hour'), get('minute'), get('second'));\n}\n\nexport function clampRange(\n range: DateRangeValue,\n minDate?: Date | null,\n maxDate?: Date | null,\n timezone?: string,\n): DateRangeValue {\n let { startDate, endDate } = range;\n if (startDate) startDate = normalizeStart(startDate, timezone);\n if (endDate) endDate = normalizeEnd(endDate, timezone);\n if (minDate && startDate && startDate < minDate) startDate = normalizeStart(minDate, timezone);\n if (maxDate && endDate && endDate > maxDate) endDate = normalizeEnd(maxDate, timezone);\n return { ...range, startDate, endDate };\n}\n\nexport function isRangeValidForFilter(\n range: DateRangeValue,\n dateFilter?: (d: Date | null) => boolean,\n strict = true,\n): boolean {\n if (!dateFilter) return true;\n const { startDate, endDate } = range;\n if (!startDate || !endDate) return false;\n if (!strict) return !!dateFilter(startDate) && !!dateFilter(endDate);\n // Iterate days inclusive\n const d = new Date(startDate);\n d.setHours(0, 0, 0, 0);\n const end = new Date(endDate);\n end.setHours(0, 0, 0, 0);\n while (d <= end) {\n if (!dateFilter(d)) return false;\n d.setDate(d.getDate() + 1);\n }\n return true;\n}\n\nfunction startOfWeekDate(d: Date, firstDay: number): Date {\n const day = d.getDay();\n const diff = (day - firstDay + 7) % 7;\n const s = new Date(d);\n s.setDate(s.getDate() - diff);\n s.setHours(0, 0, 0, 0);\n return s;\n}\n\nfunction endOfWeekDate(d: Date, firstDay: number): Date {\n const s = startOfWeekDate(d, firstDay);\n const e = new Date(s);\n e.setDate(e.getDate() + 6);\n e.setHours(23, 59, 59, 999);\n return e;\n}\n\nfunction startOfMonthDate(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0);\n}\nfunction endOfMonthDate(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59, 999);\n}\nfunction startOfYearDate(d: Date): Date {\n return new Date(d.getFullYear(), 0, 1, 0, 0, 0, 0);\n}\nfunction endOfYearDate(d: Date): Date {\n return new Date(d.getFullYear(), 11, 31, 23, 59, 59, 999);\n}\n\n/** Build built-in presets based on locale and DateAdapter. */\nexport function resolveBuiltinPresets(\n locale: string,\n dateAdapter: DateAdapter<Date>,\n opts: ResolvePresetOptions = {},\n): Record<string, DateRangePreset> {\n const { timezone, startOfWeek, now, strictFilter = true, dateFilter, minDate, maxDate } = opts;\n const nowDate = now ?? new Date();\n const first = startOfWeek ?? (typeof dateAdapter.getFirstDayOfWeek === 'function' ? dateAdapter.getFirstDayOfWeek() : 1);\n\n const apply = (id: string, label: string, calc: () => { start: Date; end: Date }): DateRangePreset => ({\n id,\n label,\n calculateRange: () => {\n const { start, end } = calc();\n let value: DateRangeValue = { startDate: normalizeStart(start, timezone), endDate: normalizeEnd(end, timezone), preset: id, label };\n value = clampRange(value, minDate ?? null, maxDate ?? null, timezone);\n if (!value.startDate || !value.endDate) return value;\n if (!isRangeValidForFilter(value, dateFilter, strictFilter)) {\n // Mark as invalid by clearing range; caller can disable UI\n return { startDate: null, endDate: null, preset: id, label };\n }\n return value;\n },\n });\n\n const presets: Record<string, DateRangePreset> = {\n today: apply('today', 'Today', () => ({ start: nowDate, end: nowDate })),\n yesterday: apply('yesterday', 'Yesterday', () => {\n const y = new Date(nowDate);\n y.setDate(y.getDate() - 1);\n return { start: y, end: y };\n }),\n thisWeek: apply('thisWeek', 'This week', () => ({\n start: startOfWeekDate(nowDate, first),\n end: endOfWeekDate(nowDate, first),\n })),\n lastWeek: apply('lastWeek', 'Last week', () => {\n const s = startOfWeekDate(nowDate, first);\n s.setDate(s.getDate() - 7);\n const e = new Date(s);\n e.setDate(e.getDate() + 6);\n e.setHours(23, 59, 59, 999);\n return { start: s, end: e };\n }),\n thisMonth: apply('thisMonth', 'This month', () => ({ start: startOfMonthDate(nowDate), end: endOfMonthDate(nowDate) })),\n lastMonth: apply('lastMonth', 'Last month', () => {\n const m = new Date(nowDate.getFullYear(), nowDate.getMonth() - 1, 1);\n return { start: startOfMonthDate(m), end: endOfMonthDate(m) };\n }),\n thisYear: apply('thisYear', 'This year', () => ({ start: startOfYearDate(nowDate), end: endOfYearDate(nowDate) })),\n lastYear: apply('lastYear', 'Last year', () => {\n const y = new Date(nowDate.getFullYear() - 1, 0, 1);\n return { start: startOfYearDate(y), end: endOfYearDate(y) };\n }),\n };\n\n return presets;\n}\n\n","import { FieldControlType } from '../metadata/field-control-type.constants';\n\ntype FieldControlTypeValue =\n (typeof FieldControlType)[keyof typeof FieldControlType];\n\nexport const INLINE_FILTER_CONTROL_TYPES = Object.freeze({\n SELECT: 'filter-select-inline',\n SEARCHABLE_SELECT: 'filter-searchable-select-inline',\n ASYNC_SELECT: 'filter-async-select-inline',\n ENTITY_LOOKUP: 'filter-entity-lookup-inline',\n AUTOCOMPLETE: 'filter-autocomplete-inline',\n NUMBER: 'filter-number-inline',\n CURRENCY: 'filter-currency-inline',\n CURRENCY_RANGE: 'filter-currency-range-inline',\n MULTI_SELECT: 'filter-multiselect-inline',\n INPUT: 'filter-input-inline',\n TOGGLE: 'filter-toggle-inline',\n RANGE: 'filter-range-inline',\n DATE: 'filter-date-inline',\n DATE_RANGE: 'filter-date-range-inline',\n TIME: 'filter-time-inline',\n TIME_RANGE: 'filter-time-range-inline',\n TREE_SELECT: 'filter-tree-select-inline',\n RATING: 'filter-rating-inline',\n DISTANCE_RADIUS: 'filter-distance-radius-inline',\n PIPELINE_STATUS: 'filter-pipeline-status-inline',\n SCORE_PRIORITY: 'filter-score-priority-inline',\n RELATIVE_PERIOD: 'filter-relative-period-inline',\n SENTIMENT: 'filter-sentiment-inline',\n COLOR_LABEL: 'filter-color-label-inline',\n} as const);\n\nexport type InlineFilterControlType =\n (typeof INLINE_FILTER_CONTROL_TYPES)[keyof typeof INLINE_FILTER_CONTROL_TYPES];\n\nexport const INLINE_FILTER_CONTROL_TYPE_VALUES = Object.freeze(\n Object.values(INLINE_FILTER_CONTROL_TYPES) as InlineFilterControlType[],\n);\n\nexport const INLINE_FILTER_CONTROL_TYPE_SET: ReadonlySet<InlineFilterControlType> =\n new Set<InlineFilterControlType>(INLINE_FILTER_CONTROL_TYPE_VALUES);\n\nfunction normalizeInlineControlTypeToken(value: unknown): string {\n return String(value || '')\n .trim()\n .toLowerCase()\n .replace(/[-_\\s]/g, '');\n}\n\nconst INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE_MAP: Record<\n string,\n InlineFilterControlType\n> = {\n filterselectinline: INLINE_FILTER_CONTROL_TYPES.SELECT,\n filterinlineselect: INLINE_FILTER_CONTROL_TYPES.SELECT,\n pdxfilterinlineselect: INLINE_FILTER_CONTROL_TYPES.SELECT,\n\n filtersearchableselectinline: INLINE_FILTER_CONTROL_TYPES.SEARCHABLE_SELECT,\n filterinlinesearchableselect: INLINE_FILTER_CONTROL_TYPES.SEARCHABLE_SELECT,\n pdxfilterinlinesearchableselect:\n INLINE_FILTER_CONTROL_TYPES.SEARCHABLE_SELECT,\n\n filterasyncselectinline: INLINE_FILTER_CONTROL_TYPES.ASYNC_SELECT,\n filterinlineasyncselect: INLINE_FILTER_CONTROL_TYPES.ASYNC_SELECT,\n pdxfilterinlineasyncselect: INLINE_FILTER_CONTROL_TYPES.ASYNC_SELECT,\n\n filterentitylookupinline: INLINE_FILTER_CONTROL_TYPES.ENTITY_LOOKUP,\n filterinlineentitylookup: INLINE_FILTER_CONTROL_TYPES.ENTITY_LOOKUP,\n entitylookupinline: INLINE_FILTER_CONTROL_TYPES.ENTITY_LOOKUP,\n entitylookup: INLINE_FILTER_CONTROL_TYPES.ENTITY_LOOKUP,\n pdxfilterinlineentitylookup: INLINE_FILTER_CONTROL_TYPES.ENTITY_LOOKUP,\n\n filterautocompleteinline: INLINE_FILTER_CONTROL_TYPES.AUTOCOMPLETE,\n filterinlineautocomplete: INLINE_FILTER_CONTROL_TYPES.AUTOCOMPLETE,\n pdxfilterinlineautocomplete: INLINE_FILTER_CONTROL_TYPES.AUTOCOMPLETE,\n\n filternumberinline: INLINE_FILTER_CONTROL_TYPES.NUMBER,\n filterinlinenumber: INLINE_FILTER_CONTROL_TYPES.NUMBER,\n pdxfilterinlinenumber: INLINE_FILTER_CONTROL_TYPES.NUMBER,\n\n filtercurrencyinline: INLINE_FILTER_CONTROL_TYPES.CURRENCY,\n filterinlinecurrency: INLINE_FILTER_CONTROL_TYPES.CURRENCY,\n pdxfilterinlinecurrency: INLINE_FILTER_CONTROL_TYPES.CURRENCY,\n\n filtercurrencyrangeinline: INLINE_FILTER_CONTROL_TYPES.CURRENCY_RANGE,\n filterinlinecurrencyrange: INLINE_FILTER_CONTROL_TYPES.CURRENCY_RANGE,\n pdxfilterinlinecurrencyrange: INLINE_FILTER_CONTROL_TYPES.CURRENCY_RANGE,\n\n filtermultiselectinline: INLINE_FILTER_CONTROL_TYPES.MULTI_SELECT,\n filterinlinemultiselect: INLINE_FILTER_CONTROL_TYPES.MULTI_SELECT,\n pdxfilterinlinemultiselect: INLINE_FILTER_CONTROL_TYPES.MULTI_SELECT,\n\n filterinputinline: INLINE_FILTER_CONTROL_TYPES.INPUT,\n filterinlineinput: INLINE_FILTER_CONTROL_TYPES.INPUT,\n pdxfilterinlineinput: INLINE_FILTER_CONTROL_TYPES.INPUT,\n\n filtertoggleinline: INLINE_FILTER_CONTROL_TYPES.TOGGLE,\n filterinlinetoggle: INLINE_FILTER_CONTROL_TYPES.TOGGLE,\n pdxfilterinlinetoggle: INLINE_FILTER_CONTROL_TYPES.TOGGLE,\n\n filterrangeinline: INLINE_FILTER_CONTROL_TYPES.RANGE,\n filterinlinerangeslider: INLINE_FILTER_CONTROL_TYPES.RANGE,\n pdxfilterinlinerangeslider: INLINE_FILTER_CONTROL_TYPES.RANGE,\n\n filterdateinline: INLINE_FILTER_CONTROL_TYPES.DATE,\n filterinlinedate: INLINE_FILTER_CONTROL_TYPES.DATE,\n pdxfilterinlinedate: INLINE_FILTER_CONTROL_TYPES.DATE,\n\n filterdaterangeinline: INLINE_FILTER_CONTROL_TYPES.DATE_RANGE,\n filterinlinedaterange: INLINE_FILTER_CONTROL_TYPES.DATE_RANGE,\n pdxfilterinlinedaterange: INLINE_FILTER_CONTROL_TYPES.DATE_RANGE,\n\n filtertimeinline: INLINE_FILTER_CONTROL_TYPES.TIME,\n filterinlinetime: INLINE_FILTER_CONTROL_TYPES.TIME,\n pdxfilterinlinetime: INLINE_FILTER_CONTROL_TYPES.TIME,\n\n filtertimerangeinline: INLINE_FILTER_CONTROL_TYPES.TIME_RANGE,\n filterinlinetimerange: INLINE_FILTER_CONTROL_TYPES.TIME_RANGE,\n pdxfilterinlinetimerange: INLINE_FILTER_CONTROL_TYPES.TIME_RANGE,\n\n filtertreeselectinline: INLINE_FILTER_CONTROL_TYPES.TREE_SELECT,\n filterinlinetreeselect: INLINE_FILTER_CONTROL_TYPES.TREE_SELECT,\n pdxfilterinlinetreeselect: INLINE_FILTER_CONTROL_TYPES.TREE_SELECT,\n\n filterratinginline: INLINE_FILTER_CONTROL_TYPES.RATING,\n filterinlinerating: INLINE_FILTER_CONTROL_TYPES.RATING,\n pdxfilterinlinerating: INLINE_FILTER_CONTROL_TYPES.RATING,\n\n filterdistanceradiusinline: INLINE_FILTER_CONTROL_TYPES.DISTANCE_RADIUS,\n filterinlinedistanceradius: INLINE_FILTER_CONTROL_TYPES.DISTANCE_RADIUS,\n pdxfilterinlinedistanceradius: INLINE_FILTER_CONTROL_TYPES.DISTANCE_RADIUS,\n\n filterpipelinestatusinline: INLINE_FILTER_CONTROL_TYPES.PIPELINE_STATUS,\n filterinlinepipelinestatus: INLINE_FILTER_CONTROL_TYPES.PIPELINE_STATUS,\n pdxfilterinlinepipelinestatus: INLINE_FILTER_CONTROL_TYPES.PIPELINE_STATUS,\n\n filterscorepriorityinline: INLINE_FILTER_CONTROL_TYPES.SCORE_PRIORITY,\n filterinlinescorepriority: INLINE_FILTER_CONTROL_TYPES.SCORE_PRIORITY,\n pdxfilterinlinescorepriority: INLINE_FILTER_CONTROL_TYPES.SCORE_PRIORITY,\n\n filterrelativeperiodinline: INLINE_FILTER_CONTROL_TYPES.RELATIVE_PERIOD,\n filterinlinerelativeperiod: INLINE_FILTER_CONTROL_TYPES.RELATIVE_PERIOD,\n pdxfilterinlinerelativeperiod: INLINE_FILTER_CONTROL_TYPES.RELATIVE_PERIOD,\n\n filtersentimentinline: INLINE_FILTER_CONTROL_TYPES.SENTIMENT,\n filterinlinesentiment: INLINE_FILTER_CONTROL_TYPES.SENTIMENT,\n pdxfilterinlinesentiment: INLINE_FILTER_CONTROL_TYPES.SENTIMENT,\n\n filtercolorlabelinline: INLINE_FILTER_CONTROL_TYPES.COLOR_LABEL,\n filterinlinecolorlabel: INLINE_FILTER_CONTROL_TYPES.COLOR_LABEL,\n pdxfilterinlinecolorlabel: INLINE_FILTER_CONTROL_TYPES.COLOR_LABEL,\n};\n\nexport const INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE: Readonly<\n Record<string, InlineFilterControlType>\n> = Object.freeze(INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE_MAP);\n\nexport const INLINE_FILTER_ALIAS_TOKENS = Object.freeze(\n Object.keys(INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE),\n);\n\nconst INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE_MAP: Record<\n string,\n FieldControlTypeValue\n> = {\n filterselectinline: FieldControlType.SELECT,\n filterinlineselect: FieldControlType.SELECT,\n pdxfilterinlineselect: FieldControlType.SELECT,\n\n filtermultiselectinline: FieldControlType.MULTI_SELECT,\n filterinlinemultiselect: FieldControlType.MULTI_SELECT,\n pdxfilterinlinemultiselect: FieldControlType.MULTI_SELECT,\n\n filterinputinline: FieldControlType.INPUT,\n filterinlineinput: FieldControlType.INPUT,\n pdxfilterinlineinput: FieldControlType.INPUT,\n\n filtertoggleinline: FieldControlType.TOGGLE,\n filterinlinetoggle: FieldControlType.TOGGLE,\n pdxfilterinlinetoggle: FieldControlType.TOGGLE,\n\n filterrangeinline: FieldControlType.RANGE_SLIDER,\n filterinlinerangeslider: FieldControlType.RANGE_SLIDER,\n pdxfilterinlinerangeslider: FieldControlType.RANGE_SLIDER,\n\n filtersearchableselectinline: FieldControlType.SEARCHABLE_SELECT,\n filterinlinesearchableselect: FieldControlType.SEARCHABLE_SELECT,\n pdxfilterinlinesearchableselect: FieldControlType.SEARCHABLE_SELECT,\n\n filterasyncselectinline: FieldControlType.ASYNC_SELECT,\n filterinlineasyncselect: FieldControlType.ASYNC_SELECT,\n pdxfilterinlineasyncselect: FieldControlType.ASYNC_SELECT,\n\n filterentitylookupinline: FieldControlType.ASYNC_SELECT,\n filterinlineentitylookup: FieldControlType.ASYNC_SELECT,\n entitylookupinline: FieldControlType.ASYNC_SELECT,\n entitylookup: FieldControlType.ASYNC_SELECT,\n pdxfilterinlineentitylookup: FieldControlType.ASYNC_SELECT,\n\n filterautocompleteinline: FieldControlType.AUTO_COMPLETE,\n filterinlineautocomplete: FieldControlType.AUTO_COMPLETE,\n pdxfilterinlineautocomplete: FieldControlType.AUTO_COMPLETE,\n\n filternumberinline: FieldControlType.NUMERIC_TEXT_BOX,\n filterinlinenumber: FieldControlType.NUMERIC_TEXT_BOX,\n pdxfilterinlinenumber: FieldControlType.NUMERIC_TEXT_BOX,\n\n filtercurrencyinline: FieldControlType.CURRENCY_INPUT,\n filterinlinecurrency: FieldControlType.CURRENCY_INPUT,\n pdxfilterinlinecurrency: FieldControlType.CURRENCY_INPUT,\n\n filtercurrencyrangeinline: FieldControlType.PRICE_RANGE,\n filterinlinecurrencyrange: FieldControlType.PRICE_RANGE,\n pdxfilterinlinecurrencyrange: FieldControlType.PRICE_RANGE,\n\n filterdateinline: FieldControlType.DATE_PICKER,\n filterinlinedate: FieldControlType.DATE_PICKER,\n pdxfilterinlinedate: FieldControlType.DATE_PICKER,\n\n filterdaterangeinline: FieldControlType.DATE_RANGE,\n filterinlinedaterange: FieldControlType.DATE_RANGE,\n pdxfilterinlinedaterange: FieldControlType.DATE_RANGE,\n\n filtertimeinline: FieldControlType.TIME_PICKER,\n filterinlinetime: FieldControlType.TIME_PICKER,\n pdxfilterinlinetime: FieldControlType.TIME_PICKER,\n\n filtertimerangeinline: FieldControlType.TIME_RANGE,\n filterinlinetimerange: FieldControlType.TIME_RANGE,\n pdxfilterinlinetimerange: FieldControlType.TIME_RANGE,\n\n filtertreeselectinline: FieldControlType.TREE_SELECT,\n filterinlinetreeselect: FieldControlType.TREE_SELECT,\n pdxfilterinlinetreeselect: FieldControlType.TREE_SELECT,\n};\n\nexport const INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE: Readonly<\n Record<string, FieldControlTypeValue>\n> = Object.freeze(INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE_MAP);\n\nexport function resolveInlineFilterControlTypeAlias(\n value: unknown,\n): InlineFilterControlType | undefined {\n const token = normalizeInlineControlTypeToken(value);\n if (!token) return undefined;\n return INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE[token];\n}\n\nexport function resolveInlineFilterAliasToBaseControlType(\n value: unknown,\n): FieldControlTypeValue | undefined {\n const token = normalizeInlineControlTypeToken(value);\n if (!token) return undefined;\n return INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE[token];\n}\n\nexport function isInlineFilterControlType(\n value: unknown,\n): value is InlineFilterControlType {\n return INLINE_FILTER_CONTROL_TYPE_SET.has(\n String(value || '').trim() as InlineFilterControlType,\n );\n}\n","import { FieldControlType } from '../metadata/field-control-type.constants';\nimport { INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE } from './inline-filter-controls.util';\n\ntype FieldControlTypeValue =\n (typeof FieldControlType)[keyof typeof FieldControlType];\n\nfunction toUpperSnakeCase(raw: string): string {\n return raw\n .trim()\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/[-\\s]+/g, '_')\n .replace(/__+/g, '_')\n .toUpperCase();\n}\n\nexport function normalizeControlTypeToken(value: unknown): string {\n return String(value || '')\n .trim()\n .toLowerCase()\n .replace(/[-_\\s]/g, '');\n}\n\nconst CONTROL_TYPE_TOKEN_TO_KEY: Record<string, string> = Object.entries(\n FieldControlType,\n).reduce((acc, [key, controlTypeValue]) => {\n acc[normalizeControlTypeToken(key)] = key;\n acc[normalizeControlTypeToken(controlTypeValue)] = key;\n return acc;\n}, {} as Record<string, string>);\n\nconst ALIAS_TOKEN_TO_CONTROL_TYPE: Record<string, FieldControlTypeValue> = {\n // Legacy/common synonyms\n searchable: FieldControlType.SEARCHABLE_SELECT,\n searchableinput: FieldControlType.SEARCHABLE_SELECT,\n searchableselect: FieldControlType.SEARCHABLE_SELECT,\n materialsearchableselect: FieldControlType.SEARCHABLE_SELECT,\n asyncselect: FieldControlType.ASYNC_SELECT,\n materialasyncselect: FieldControlType.ASYNC_SELECT,\n autocomplete: FieldControlType.AUTO_COMPLETE,\n multiselect: FieldControlType.MULTI_SELECT,\n multiselecttree: FieldControlType.MULTI_SELECT_TREE,\n treeselect: FieldControlType.TREE_SELECT,\n datepicker: FieldControlType.DATE_PICKER,\n daterange: FieldControlType.DATE_RANGE,\n datetime: FieldControlType.DATETIME_LOCAL_INPUT,\n timepicker: FieldControlType.TIME_PICKER,\n timerange: FieldControlType.TIME_RANGE,\n pricerange: FieldControlType.PRICE_RANGE,\n rangeslider: FieldControlType.RANGE_SLIDER,\n number: FieldControlType.NUMERIC_TEXT_BOX,\n numeric: FieldControlType.NUMERIC_TEXT_BOX,\n currencyinput: FieldControlType.CURRENCY_INPUT,\n switch: FieldControlType.TOGGLE,\n radiogroup: FieldControlType.RADIO,\n checkboxgroup: FieldControlType.CHECKBOX,\n chiplist: FieldControlType.CHIP_LIST,\n chipinput: FieldControlType.CHIP_INPUT,\n searchinput: FieldControlType.SEARCH_INPUT,\n};\n\nexport function normalizeControlTypeKey(value: unknown): string {\n const token = normalizeControlTypeToken(value);\n if (!token) return '';\n const resolvedKey = CONTROL_TYPE_TOKEN_TO_KEY[token];\n if (resolvedKey) return resolvedKey;\n return toUpperSnakeCase(String(value || ''));\n}\n\nexport function resolveControlTypeAlias(\n value: unknown,\n fallback: FieldControlTypeValue | string = FieldControlType.INPUT,\n): FieldControlTypeValue | string {\n const raw = String(value || '').trim();\n if (!raw) return fallback;\n\n const token = normalizeControlTypeToken(raw);\n const inlineAliased = INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE[token];\n if (inlineAliased) return inlineAliased;\n\n const aliased = ALIAS_TOKEN_TO_CONTROL_TYPE[token];\n if (aliased) return aliased;\n\n const resolvedKey = CONTROL_TYPE_TOKEN_TO_KEY[token];\n if (resolvedKey) {\n return FieldControlType[resolvedKey as keyof typeof FieldControlType];\n }\n\n return raw;\n}\n","import { GlobalActionId } from './global-action-catalog';\n\nexport type GlobalActionFieldType =\n | 'text'\n | 'textarea'\n | 'number'\n | 'select'\n | 'toggle'\n | 'json';\n\nexport interface GlobalActionFieldOption {\n value: string;\n label: string;\n}\n\nexport interface GlobalActionField {\n key: string;\n label: string;\n type: GlobalActionFieldType;\n hint?: string;\n placeholder?: string;\n required?: boolean;\n options?: GlobalActionFieldOption[];\n rows?: number;\n dependsOnKey?: string;\n dependsOnValue?: string;\n}\n\nexport interface GlobalActionUiSchema {\n id: GlobalActionId;\n label: string;\n fields: GlobalActionField[];\n}\n\nconst dialogBaseFields: GlobalActionField[] = [\n { key: 'message', label: 'Mensagem', type: 'textarea', rows: 2, placeholder: 'Texto principal' },\n { key: 'title', label: 'Título', type: 'text', placeholder: 'Título do diálogo' },\n {\n key: 'themeColor',\n label: 'Tema',\n type: 'select',\n options: [\n { value: 'primary', label: 'Primary' },\n { value: 'light', label: 'Light' },\n { value: 'dark', label: 'Dark' },\n ],\n },\n { key: 'positionTop', label: 'Posição topo', type: 'text', placeholder: '12px' },\n { key: 'positionRight', label: 'Posição direita', type: 'text', placeholder: '12px' },\n { key: 'positionBottom', label: 'Posição base', type: 'text', placeholder: '12px' },\n { key: 'positionLeft', label: 'Posição esquerda', type: 'text', placeholder: '12px' },\n {\n key: 'actionsLayout',\n label: 'Layout das ações',\n type: 'select',\n options: [\n { value: 'start', label: 'Start' },\n { value: 'center', label: 'Center' },\n { value: 'end', label: 'End' },\n { value: 'stretched', label: 'Stretched' },\n ],\n },\n {\n key: 'animationType',\n label: 'Animação',\n type: 'select',\n options: [\n { value: 'translate', label: 'Translate' },\n { value: 'slide', label: 'Slide' },\n { value: 'fade', label: 'Fade' },\n { value: 'expand', label: 'Expand' },\n { value: 'zoom', label: 'Zoom' },\n ],\n },\n {\n key: 'animationDirection',\n label: 'Direção animação',\n type: 'select',\n options: [\n { value: 'up', label: 'Up' },\n { value: 'down', label: 'Down' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' },\n ],\n },\n { key: 'animationDuration', label: 'Duração (ms)', type: 'number', placeholder: '300' },\n { key: 'width', label: 'Largura', type: 'text', placeholder: '480px' },\n { key: 'height', label: 'Altura', type: 'text', placeholder: 'auto' },\n { key: 'minWidth', label: 'Largura mínima', type: 'text', placeholder: '280px' },\n { key: 'maxWidth', label: 'Largura máxima', type: 'text', placeholder: '90vw' },\n { key: 'minHeight', label: 'Altura mínima', type: 'text', placeholder: '120px' },\n { key: 'maxHeight', label: 'Altura máxima', type: 'text', placeholder: '90vh' },\n { key: 'disableClose', label: 'Bloquear fechar', type: 'toggle' },\n { key: 'hasBackdrop', label: 'Backdrop', type: 'toggle' },\n { key: 'closeOnBackdropClick', label: 'Fechar ao clicar no backdrop', type: 'toggle' },\n { key: 'backdropClass', label: 'Classe do backdrop', type: 'text' },\n { key: 'panelClass', label: 'Classe do painel', type: 'text' },\n { key: 'autoFocus', label: 'Auto focus', type: 'toggle' },\n { key: 'autoFocusedElement', label: 'Elemento focado', type: 'text' },\n { key: 'restoreFocus', label: 'Restaurar foco', type: 'toggle' },\n {\n key: 'ariaRole',\n label: 'ARIA role',\n type: 'select',\n options: [\n { value: 'dialog', label: 'dialog' },\n { value: 'alertdialog', label: 'alertdialog' },\n ],\n },\n { key: 'ariaLabel', label: 'ARIA label', type: 'text' },\n { key: 'ariaLabelledBy', label: 'ARIA labelledBy', type: 'text' },\n { key: 'ariaDescribedBy', label: 'ARIA describedBy', type: 'text' },\n { key: 'styles', label: 'Styles (JSON)', type: 'json', rows: 3 },\n];\n\nconst dialogFieldsWithoutMessage = dialogBaseFields.filter((field) => field.key !== 'message');\n\nconst dialogFieldsWithModeDependency: GlobalActionField[] = dialogFieldsWithoutMessage.map(\n (field) => ({\n ...field,\n dependsOnKey: field.dependsOnKey ?? 'mode',\n dependsOnValue: field.dependsOnValue ?? 'true',\n hint: field.hint ?? 'Disponível quando \"Usar diálogo\" estiver ativo.',\n }),\n);\n\nexport const GLOBAL_ACTION_UI_SCHEMAS: GlobalActionUiSchema[] = [\n {\n id: 'navigate',\n label: 'Navegar',\n fields: [\n { key: 'url', label: 'URL', type: 'text', required: true, placeholder: '/dashboard' },\n { key: 'newTab', label: 'Abrir em nova aba', type: 'toggle' },\n { key: 'replaceUrl', label: 'Substituir histórico', type: 'toggle' },\n ],\n },\n {\n id: 'openUrl',\n label: 'Abrir URL',\n fields: [\n { key: 'url', label: 'URL', type: 'text', required: true, placeholder: 'https://exemplo.com' },\n {\n key: 'target',\n label: 'Target',\n type: 'select',\n options: [\n { value: '_blank', label: '_blank' },\n { value: '_self', label: '_self' },\n ],\n },\n ],\n },\n {\n id: 'showAlert',\n label: 'Alerta simples',\n fields: [\n {\n key: 'message',\n label: 'Mensagem do alerta',\n type: 'textarea',\n rows: 2,\n required: true,\n placeholder: 'Texto exibido no alerta simples',\n },\n { key: 'mode', label: 'Usar diálogo (avançado)', type: 'toggle' },\n ...dialogFieldsWithModeDependency,\n ],\n },\n {\n id: 'confirm',\n label: 'Confirmar',\n fields: [\n ...dialogBaseFields,\n { key: 'confirmLabel', label: 'Texto confirmar', type: 'text' },\n { key: 'cancelLabel', label: 'Texto cancelar', type: 'text' },\n ],\n },\n {\n id: 'alert',\n label: 'Alerta (dialog)',\n fields: [\n ...dialogBaseFields,\n { key: 'okLabel', label: 'Texto OK', type: 'text' },\n ],\n },\n {\n id: 'prompt',\n label: 'Prompt',\n fields: [\n ...dialogBaseFields,\n { key: 'placeholder', label: 'Placeholder', type: 'text' },\n { key: 'defaultValue', label: 'Valor padrão', type: 'text' },\n { key: 'okLabel', label: 'Texto OK', type: 'text' },\n { key: 'cancelLabel', label: 'Texto cancelar', type: 'text' },\n ],\n },\n {\n id: 'openDialog',\n label: 'Abrir diálogo',\n fields: [\n ...dialogBaseFields,\n {\n key: 'contentType',\n label: 'Tipo de conteúdo',\n type: 'select',\n options: [\n { value: 'template', label: 'Template' },\n { value: 'component', label: 'Component' },\n { value: 'html', label: 'HTML' },\n ],\n },\n { key: 'templateId', label: 'Template ID', type: 'text', dependsOnKey: 'contentType', dependsOnValue: 'template' },\n { key: 'componentRef', label: 'Component Ref', type: 'text', dependsOnKey: 'contentType', dependsOnValue: 'component' },\n { key: 'safeHtml', label: 'HTML seguro', type: 'textarea', rows: 2, dependsOnKey: 'contentType', dependsOnValue: 'html' },\n { key: 'contentData', label: 'Data (JSON)', type: 'json', rows: 3 },\n ],\n },\n {\n id: 'log',\n label: 'Log',\n fields: [\n { key: 'message', label: 'Mensagem', type: 'text' },\n {\n key: 'level',\n label: 'Nível',\n type: 'select',\n options: [\n { value: 'log', label: 'log' },\n { value: 'info', label: 'info' },\n { value: 'warn', label: 'warn' },\n { value: 'error', label: 'error' },\n ],\n },\n ],\n },\n {\n id: 'submitForm',\n label: 'Submeter formulário',\n fields: [],\n },\n {\n id: 'resetForm',\n label: 'Resetar formulário',\n fields: [],\n },\n {\n id: 'validateForm',\n label: 'Validar formulário',\n fields: [],\n },\n {\n id: 'clearValidation',\n label: 'Limpar validação',\n fields: [],\n },\n {\n id: 'saveFormDraft',\n label: 'Salvar rascunho',\n fields: [{ key: 'key', label: 'Chave', type: 'text' }],\n },\n {\n id: 'loadFormDraft',\n label: 'Carregar rascunho',\n fields: [{ key: 'key', label: 'Chave', type: 'text' }],\n },\n {\n id: 'clearFormDraft',\n label: 'Limpar rascunho',\n fields: [{ key: 'key', label: 'Chave', type: 'text' }],\n },\n {\n id: 'apiCall',\n label: 'Chamada HTTP',\n fields: [\n {\n key: 'method',\n label: 'Método',\n type: 'select',\n options: [\n { value: 'GET', label: 'GET' },\n { value: 'POST', label: 'POST' },\n { value: 'PUT', label: 'PUT' },\n { value: 'PATCH', label: 'PATCH' },\n { value: 'DELETE', label: 'DELETE' },\n ],\n },\n { key: 'url', label: 'URL', type: 'text', required: true },\n {\n key: 'bodySource',\n label: 'Body source',\n type: 'select',\n options: [\n { value: 'formData', label: 'Form data' },\n { value: 'fieldValue', label: 'Field value' },\n { value: 'static', label: 'Static' },\n ],\n },\n { key: 'body', label: 'Body (JSON)', type: 'json', rows: 3 },\n { key: 'headers', label: 'Headers (JSON)', type: 'json', rows: 3 },\n ],\n },\n {\n id: 'download',\n label: 'Download',\n fields: [\n { key: 'url', label: 'URL', type: 'text', required: true },\n { key: 'filename', label: 'Nome do arquivo', type: 'text' },\n ],\n },\n {\n id: 'copyToClipboard',\n label: 'Copiar para clipboard',\n fields: [\n { key: 'text', label: 'Texto', type: 'text' },\n { key: 'useFieldValue', label: 'Usar valor do campo', type: 'toggle' },\n ],\n },\n {\n id: 'refreshOptions',\n label: 'Recarregar opções',\n fields: [{ key: 'field', label: 'Campo', type: 'text', required: true }],\n },\n {\n id: 'loadDependentData',\n label: 'Carregar dependentes',\n fields: [{ key: 'field', label: 'Campo alvo', type: 'text', required: true }],\n },\n];\n\nexport function getGlobalActionUiSchema(\n id: string | undefined,\n): GlobalActionUiSchema | undefined {\n if (!id) return undefined;\n return GLOBAL_ACTION_UI_SCHEMAS.find((schema) => schema.id === id);\n}\n","/**\n * Catálogo de capacidades genéricas de FieldMetadata para uso da IA.\n * Baseado em projects/praxis-core/src/lib/models/component-metadata.interface.ts\n */\n\nimport { FieldControlType, FieldDataType } from '../models/component-metadata.interface';\nimport type {\n AiCapability,\n AiCapabilityCategory,\n AiCapabilityCatalog,\n AiValueKind,\n} from './capability.types';\n\nexport type CapabilityCategory = AiCapabilityCategory;\n\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS = {\n fieldControlType: Object.values(FieldControlType),\n fieldDataType: Object.values(FieldDataType),\n componentContext: ['form', 'filter', 'table', 'dialog', 'standalone'],\n iconPosition: ['start', 'end'],\n iconSize: ['small', 'medium', 'large'],\n validationMode: ['immediate', 'blur', 'submit'],\n validatorTrigger: ['change', 'blur', 'submit', 'immediate'],\n validatorErrorPosition: ['bottom', 'top', 'tooltip'],\n dependencyMergeStrategy: ['replace', 'merge'],\n dependencyLoadOnChange: ['respectLoadOn', 'immediate', 'manual'],\n textTransformApply: ['displayOnly', 'saveOnly', 'both'],\n visibleIn: ['form', 'filter', 'table', 'dialog'],\n appearance: ['fill', 'outline'],\n color: ['primary', 'accent', 'warn'],\n floatLabel: ['auto', 'always', 'never'],\n hintPosition: ['start', 'end'],\n align: ['start', 'center', 'end', 'stretch'],\n sectionTitleStyle: ['titleLarge', 'titleMedium', 'titleSmall', 'headlineSmall'],\n sectionDescriptionStyle: ['bodyLarge', 'bodyMedium', 'bodySmall'],\n};\n\nexport const FIELD_METADATA_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.3',\n enums: ENUMS,\n notes: [\n 'Este catálogo define as capacidades genéricas de FieldMetadata.',\n 'O host típico para estes metadados é FormConfig (via fieldMetadata[]) ou FormLayout.',\n 'Detalhes específicos de cada controle (ex: opções de datepicker, máscaras específicas) devem ser consultados nos catálogos de microcomponentes.',\n 'POLICY: Arrays e objetos (ex: options, validators) devem sofrer merge/append, nunca substituição completa sem confirmação.',\n 'Funções (conditionalRequired, transforms) não são serializáveis. O LLM não deve gerar código de função, apenas expressões string se suportado pelo interpretador, ou solicitar configuração manual.',\n ],\n capabilities: [\n // =============================================================================\n // COMPONENT METADATA (BASE)\n // =============================================================================\n {\n path: 'id',\n category: 'identity',\n valueKind: 'string',\n description: 'Identificador unico da instancia do componente.',\n intentExamples: ['id do componente', 'definir id fixo'],\n },\n {\n path: 'version',\n category: 'identity',\n valueKind: 'string',\n description: 'Versao do schema de metadata (migracao).',\n intentExamples: ['versao do metadata', 'ajustar versao'],\n },\n {\n path: 'context',\n category: 'identity',\n valueKind: 'enum',\n allowedValues: ENUMS.componentContext,\n description: 'Contexto de uso do componente (form/filter/table/dialog/standalone).',\n intentExamples: ['contexto form', 'usar em tabela'],\n },\n {\n path: 'createdAt',\n category: 'misc',\n valueKind: 'string',\n description: 'Timestamp de criacao (ISO).',\n safetyNotes: 'Valor de auditoria; preferir preenchimento pelo host.',\n },\n {\n path: 'updatedAt',\n category: 'misc',\n valueKind: 'string',\n description: 'Timestamp de atualizacao (ISO).',\n safetyNotes: 'Valor de auditoria; preferir preenchimento pelo host.',\n },\n {\n path: 'tags',\n category: 'identity',\n valueKind: 'array',\n description: 'Tags para categorizacao e busca.',\n intentExamples: ['tag para busca', 'categorizar campo'],\n },\n {\n path: 'cssClass',\n category: 'appearance',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao host do componente.',\n intentExamples: ['classe custom', 'aplicar classe'],\n },\n {\n path: 'style',\n category: 'appearance',\n valueKind: 'object',\n description: 'Estilos inline (objeto CSS).',\n safetyNotes: 'Validar chaves e valores CSS permitidos.',\n },\n {\n path: 'dataAttributes',\n category: 'data',\n valueKind: 'object',\n description: 'Data attributes para teste/analytics.',\n intentExamples: ['data-testid', 'atributos de tracking'],\n },\n\n // =============================================================================\n // IDENTITY / UX\n // =============================================================================\n {\n path: 'name',\n category: 'identity',\n valueKind: 'string',\n description: 'Identificador único do campo. Essencial para binding.',\n critical: true,\n intentExamples: ['nomear campo como email', 'id do campo'],\n },\n {\n path: 'label',\n category: 'identity',\n valueKind: 'string',\n description: 'Rótulo principal exibido para o usuário.',\n intentExamples: ['alterar label', 'mudar texto do rótulo'],\n },\n {\n path: 'placeholder',\n category: 'identity',\n valueKind: 'string',\n description: 'Texto temporário exibido quando vazio.',\n intentExamples: ['adicionar placeholder', 'texto de ajuda no input'],\n },\n {\n path: 'hint',\n category: 'identity',\n valueKind: 'string',\n description: 'Texto de ajuda exibido abaixo do campo.',\n intentExamples: ['colocar dica', 'ajuda no rodapé do campo'],\n },\n {\n path: 'tooltip',\n category: 'identity',\n valueKind: 'string',\n description: 'Texto exibido ao passar o mouse.',\n intentExamples: ['adicionar tooltip'],\n },\n {\n path: 'description',\n category: 'identity',\n valueKind: 'string',\n description: 'Descrição detalhada (usada em documentação ou helps extensos).',\n intentExamples: ['descrição completa do campo', 'texto explicativo longo', 'documentação do input'],\n },\n {\n path: 'group',\n category: 'identity',\n valueKind: 'string',\n description: 'Agrupador lógico do campo.',\n intentExamples: ['agrupar em Dados Pessoais', 'colocar no grupo de endereço', 'categoria do campo'],\n },\n {\n path: 'order',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem de exibição do campo.',\n intentExamples: ['mover para o final', 'reordenar campo', 'exibir primeiro', 'posição 3'],\n },\n {\n path: 'width',\n category: 'layout',\n valueKind: 'string',\n description: 'Largura do campo (ex: 50%, 100px).',\n intentExamples: ['campo meia largura', 'largura fixa 200px', 'ocupar 50%', 'width total'],\n },\n {\n path: 'isFlex',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Se true, usa flex-grow para preencher espaço.',\n intentExamples: ['preencher espaço sobrando', 'campo flexível', 'expandir para caber'],\n },\n\n // =============================================================================\n // CONTROL TYPE\n // =============================================================================\n {\n path: 'controlType',\n category: 'behavior',\n valueKind: 'enum',\n allowedValues: ENUMS.fieldControlType,\n description: 'Tipo do componente de UI (input, select, datepicker, etc).',\n critical: true,\n safetyNotes: 'Mudar controlType pode invalidar propriedades específicas do componente anterior. Aplique o overlay de microcomponente correspondente.',\n intentExamples: ['mudar para select', 'usar datepicker', 'transformar em checkbox', 'tipo do controle'],\n },\n {\n path: 'dataType',\n category: 'data',\n valueKind: 'enum',\n allowedValues: ENUMS.fieldDataType,\n description: 'Tipo de dado do campo (text, number, date, etc).',\n intentExamples: ['tipo de dado numero', 'campo de data'],\n },\n\n // =============================================================================\n // MATERIAL DESIGN (APARÊNCIA GLOBAL)\n // =============================================================================\n {\n path: 'materialDesign.appearance',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.appearance,\n description: 'Aparência do campo Material (fill/outline).',\n intentExamples: ['estilo outline', 'aparência preenchida', 'campo com borda'],\n },\n {\n path: 'materialDesign.color',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.color,\n description: 'Tema de cor Material (primary/accent/warn).',\n intentExamples: ['cor primária', 'destacar com accent'],\n },\n {\n path: 'materialDesign.floatLabel',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.floatLabel,\n description: 'Comportamento do rótulo flutuante.',\n intentExamples: ['label sempre flutuando', 'nunca flutuar label'],\n },\n {\n path: 'materialDesign.subscriptSizing',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ['fixed', 'dynamic'],\n description: 'Estratégia de sizing do subscript (erros/hints).',\n },\n {\n path: 'materialDesign.hideRequiredMarker',\n category: 'appearance',\n valueKind: 'boolean',\n description: 'Oculta o asterisco de campo obrigatório.',\n },\n {\n path: 'materialDesign.density',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ['comfortable', 'compact', 'dense'],\n description: 'Densidade do campo Material.',\n },\n {\n path: 'materialDesign.disableRipple',\n category: 'appearance',\n valueKind: 'boolean',\n description: 'Desativa ripple/ondulação em componentes Material.',\n },\n {\n path: 'materialDesign.customPalette',\n category: 'appearance',\n valueKind: 'object',\n description: 'Override de paleta (primary/accent/warn).',\n safetyNotes: 'Use cores válidas; validar contra o tema.',\n },\n {\n path: 'materialDesign.animations',\n category: 'appearance',\n valueKind: 'object',\n description: 'Configuração de animações (disable, duration, easing).',\n },\n\n // =============================================================================\n // ICONS\n // =============================================================================\n {\n path: 'prefixIcon',\n category: 'appearance',\n valueKind: 'string',\n description: 'Ícone exibido antes do valor.',\n intentExamples: ['ícone de usuário no início', 'prefixar ícone', 'imagem antes do texto'],\n },\n {\n path: 'suffixIcon',\n category: 'appearance',\n valueKind: 'string',\n description: 'Ícone exibido depois do valor.',\n intentExamples: ['ícone de busca no final', 'sufixar ícone', 'botão de ação no fim'],\n },\n {\n path: 'iconPosition',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.iconPosition,\n description: 'Posição preferencial do ícone principal.',\n intentExamples: ['ícone à esquerda', 'posicionar ícone no fim'],\n },\n {\n path: 'iconSize',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.iconSize,\n description: 'Tamanho do ícone.',\n intentExamples: ['ícone pequeno', 'aumentar tamanho do ícone', 'ícone grande'],\n },\n\n // =============================================================================\n // MASK / FORMAT\n // =============================================================================\n {\n path: 'mask',\n category: 'appearance',\n valueKind: 'string',\n description: 'Máscara de input (padrão do componente).',\n intentExamples: ['máscara de CPF', 'formatar telefone', 'aplicar máscara de data', 'pattern visual'],\n },\n {\n path: 'format',\n category: 'appearance',\n valueKind: 'string',\n description: 'Formato de exibição (ex: pipes).',\n intentExamples: ['formato de data dd/mm/yyyy', 'formato de moeda', 'exibir como porcentagem'],\n },\n\n // =============================================================================\n // VALIDATORS (Generic)\n // =============================================================================\n {\n path: 'validators',\n category: 'validation',\n valueKind: 'object',\n description: 'Objeto contendo todas as regras de validação.',\n safetyNotes: 'Não sobrescreva este objeto inteiramente; faça merge das propriedades.',\n intentExamples: ['adicionar validações', 'regras de validação', 'objeto validators'],\n },\n {\n path: 'validators.required',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Campo obrigatório.',\n intentExamples: ['tornar obrigatório', 'campo mandatório', 'exigir preenchimento', 'remover required'],\n },\n {\n path: 'required',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Campo obrigatorio (alias rapido do validators.required).',\n intentExamples: ['campo obrigatorio', 'exigir preenchimento'],\n },\n {\n path: 'validators.requiredMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para required.',\n },\n {\n path: 'validators.email',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validação de formato de e-mail.',\n intentExamples: ['validar como email', 'aceitar apenas emails', 'formato de correio eletrônico'],\n },\n {\n path: 'validators.emailMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para validacao de email.',\n },\n {\n path: 'validators.minLength',\n category: 'validation',\n valueKind: 'number',\n description: 'Comprimento mínimo do texto.',\n intentExamples: ['mínimo de 5 caracteres', 'pelo menos 3 letras', 'tamanho mínimo'],\n },\n {\n path: 'validators.minLengthMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para minLength.',\n },\n {\n path: 'validators.maxLength',\n category: 'validation',\n valueKind: 'number',\n description: 'Comprimento máximo do texto.',\n intentExamples: ['máximo de 100 caracteres', 'limitar tamanho', 'não exceder 50 letras'],\n },\n {\n path: 'validators.maxLengthMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para maxLength.',\n },\n {\n path: 'validators.min',\n category: 'validation',\n valueKind: 'number',\n description: 'Valor numérico mínimo.',\n intentExamples: ['valor mínimo 10', 'não aceitar menor que 0', 'piso de valor'],\n },\n {\n path: 'validators.minMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para min.',\n },\n {\n path: 'validators.max',\n category: 'validation',\n valueKind: 'number',\n description: 'Valor numérico máximo.',\n intentExamples: ['valor máximo 100', 'teto de valor', 'não aceitar maior que 50'],\n },\n {\n path: 'validators.maxMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para max.',\n },\n {\n path: 'validators.pattern',\n category: 'validation',\n valueKind: 'string',\n description: 'Regex para validação.',\n safetyNotes: 'Cuidado com ReDoS em regex complexos.',\n intentExamples: ['validar com regex', 'padrão customizado', 'expressão regular'],\n },\n {\n path: 'validators.patternMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para pattern.',\n },\n {\n path: 'validators.cpf',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validador de CPF (legado).',\n },\n {\n path: 'validators.cnpj',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validador de CNPJ (legado).',\n },\n {\n path: 'validators.cpfCnpj',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validador automatico CPF/CNPJ (legado).',\n },\n {\n path: 'validators.cnpjAlpha',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validador de CNPJ alfanumerico (legado).',\n },\n {\n path: 'validators.cpfMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para CPF.',\n },\n {\n path: 'validators.cnpjMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para CNPJ.',\n },\n {\n path: 'validators.cnpjAlphaMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para CNPJ alfanumerico.',\n },\n {\n path: 'validators.url',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Validador de URL.',\n },\n {\n path: 'validators.urlMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para URL.',\n },\n {\n path: 'validators.minWords',\n category: 'validation',\n valueKind: 'number',\n description: 'Mínimo de palavras.',\n intentExamples: ['mínimo de 2 palavras', 'exigir nome completo (2 palavras)'],\n },\n {\n path: 'validators.requiredChecked',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Exige checkbox marcado (ex: termos de uso).',\n intentExamples: ['obrigar marcar checkbox', 'aceitar termos é obrigatório'],\n },\n {\n path: 'validators.customValidator',\n category: 'validation',\n valueKind: 'expression',\n description: 'Validador customizado (funcao).',\n safetyNotes: 'Funcoes nao sao serializaveis; exige wiring manual.',\n },\n {\n path: 'validators.asyncValidator',\n category: 'validation',\n valueKind: 'expression',\n description: 'Validador async customizado (funcao).',\n safetyNotes: 'Funcoes nao sao serializaveis; exige wiring manual.',\n },\n {\n path: 'validators.matchField',\n category: 'validation',\n valueKind: 'string',\n description: 'Campo que deve coincidir (cross-field).',\n },\n {\n path: 'validators.matchFieldMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para matchField.',\n },\n {\n path: 'validators.uniqueValidator',\n category: 'validation',\n valueKind: 'expression',\n description: 'Validador de unicidade via API (funcao).',\n safetyNotes: 'Funcoes nao sao serializaveis; exige wiring manual.',\n },\n {\n path: 'validators.uniqueMessage',\n category: 'validation',\n valueKind: 'string',\n description: 'Mensagem customizada para unicidade.',\n },\n {\n path: 'validators.conditionalValidation',\n category: 'validation',\n valueKind: 'array',\n description: 'Regras de validacao condicional.',\n safetyNotes: 'Condicoes com funcao exigem wiring manual.',\n },\n {\n path: 'validators.conditionalValidation[].condition',\n category: 'validation',\n valueKind: 'expression',\n description: 'Condicao para aplicar validadores.',\n safetyNotes: 'Funcoes nao sao serializaveis; use expressao quando suportado.',\n },\n {\n path: 'validators.conditionalValidation[].validators',\n category: 'validation',\n valueKind: 'object',\n description: 'Conjunto de validadores aplicados quando a condicao for verdadeira.',\n },\n {\n path: 'validators.validationTrigger',\n category: 'validation',\n valueKind: 'enum',\n allowedValues: ENUMS.validatorTrigger,\n description: 'Gatilho de validacao no validator.',\n },\n {\n path: 'validators.validationDebounce',\n category: 'validation',\n valueKind: 'number',\n description: 'Debounce de validacao no validator (ms).',\n },\n {\n path: 'validators.showInlineErrors',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Exibe erros inline (validator).',\n },\n {\n path: 'validators.errorPosition',\n category: 'validation',\n valueKind: 'enum',\n allowedValues: ENUMS.validatorErrorPosition,\n description: 'Posicao do erro (validator).',\n },\n {\n path: 'validationMode',\n category: 'validation',\n valueKind: 'enum',\n allowedValues: ENUMS.validationMode,\n description: 'Gatilho da validação (change/blur/submit).',\n intentExamples: ['validar ao sair do campo (blur)', 'validar apenas no submit', 'validação em tempo real'],\n },\n {\n path: 'debounceTime',\n category: 'validation',\n valueKind: 'number',\n description: 'Debounce para validação em ms.',\n intentExamples: ['aguardar para validar', 'debounce de 500ms', 'delay na validação'],\n },\n\n // =============================================================================\n // DATA / OPTIONS\n // =============================================================================\n {\n path: 'options',\n category: 'data',\n valueKind: 'array',\n description: 'Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).',\n intentExamples: ['adicionar opções estáticas', 'lista fixa de itens', 'opções do select'],\n safetyNotes: 'Respeite o formato esperado pelo controlType; prefira merge/append em vez de substituir o array inteiro.',\n },\n {\n path: 'endpoint',\n category: 'data',\n valueKind: 'string',\n description: 'URL para carregar opções remotas.',\n intentExamples: ['carregar do servidor', 'buscar API', 'endpoint de dados', 'url das opções'],\n },\n {\n path: 'valueField',\n category: 'data',\n valueKind: 'string',\n description: 'Nome da propriedade de valor nas opções.',\n intentExamples: ['usar \"id\" como valor', 'campo de valor das opções'],\n },\n {\n path: 'displayField',\n category: 'data',\n valueKind: 'string',\n description: 'Nome da propriedade de texto nas opções.',\n intentExamples: ['usar \"nome\" como texto', 'exibir campo \"label\"', 'campo de exibição'],\n },\n {\n path: 'filterField',\n category: 'data',\n valueKind: 'string',\n description: 'Campo para filtragem no backend.',\n intentExamples: ['filtrar por \"categoria\"', 'campo de filtro na api'],\n },\n {\n path: 'queryParams',\n category: 'data',\n valueKind: 'object',\n description: 'Parâmetros fixos para a query do endpoint.',\n intentExamples: ['parâmetros extras na busca', 'enviar tipo=ativo na query'],\n },\n {\n path: 'cacheDuration',\n category: 'data',\n valueKind: 'number',\n description: 'Duração do cache de dados em ms.',\n intentExamples: ['cachear por 5 minutos', 'tempo de cache', 'validade dos dados'],\n },\n\n // =============================================================================\n // VISIBILITY\n // =============================================================================\n {\n path: 'hidden',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Oculta o campo globalmente.',\n critical: true,\n intentExamples: ['ocultar campo', 'esconder input', 'campo invisível'],\n },\n {\n path: 'visibleIn',\n category: 'behavior',\n valueKind: 'array',\n allowedValues: ENUMS.visibleIn,\n description: 'Contextos onde o campo é visível.',\n intentExamples: ['mostrar apenas no filtro', 'esconder na tabela', 'visível só no form'],\n },\n {\n path: 'formHidden',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Oculta apenas no formulário.',\n intentExamples: ['esconder no form', 'invisível na edição'],\n },\n {\n path: 'tableHidden',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Oculta apenas na tabela.',\n intentExamples: ['esconder na listagem', 'não mostrar na tabela'],\n },\n {\n path: 'filterHidden',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Oculta apenas no filtro.',\n intentExamples: ['esconder na busca', 'remover do filtro'],\n },\n\n // =============================================================================\n // DEPENDENCIES\n // =============================================================================\n {\n path: 'dependencyFields',\n category: 'dependency',\n valueKind: 'array',\n description: 'Campos dos quais este campo depende.',\n intentExamples: ['depende de estado', 'campo dependente', 'cascata com outro campo'],\n },\n {\n path: 'conditionalRequired',\n category: 'dependency',\n valueKind: 'expression',\n description: 'Condição para obrigatoriedade (função ou string).',\n safetyNotes: 'Funções não são serializáveis. Use string se o parser suportar.',\n intentExamples: ['obrigatório se outro campo for X', 'condicionalmente requerido'],\n },\n {\n path: 'conditionalDisplay',\n category: 'dependency',\n valueKind: 'expression',\n description: 'Condição para visibilidade (função ou string).',\n safetyNotes: 'Funções não são serializáveis.',\n intentExamples: ['mostrar se checkbox marcado', 'visibilidade condicional'],\n },\n {\n path: 'dependencyFilterMap',\n category: 'dependency',\n valueKind: 'object',\n description: 'Mapeamento de filtro baseado na dependência.',\n intentExamples: ['filtrar cidade por estado', 'mapear valor da dependência'],\n },\n {\n path: 'dependencyValuePath',\n category: 'dependency',\n valueKind: 'string',\n description: 'Caminho no valor da dependência.',\n intentExamples: ['usar propriedade aninhada da dependência', 'caminho do valor dependente'],\n },\n {\n path: 'dependencyMergeStrategy',\n category: 'dependency',\n valueKind: 'enum',\n allowedValues: ENUMS.dependencyMergeStrategy,\n description: 'Estratégia de merge dos dados carregados.',\n intentExamples: ['substituir opções ao carregar', 'mesclar resultados'],\n },\n {\n path: 'dependencyLoadOnChange',\n category: 'dependency',\n valueKind: 'enum',\n allowedValues: ENUMS.dependencyLoadOnChange,\n description: 'Quando recarregar dependência.',\n intentExamples: ['recarregar assim que mudar', 'recarregar manualmente', 'carregar imediatamente'],\n },\n {\n path: 'resetOnDependentChange',\n category: 'dependency',\n valueKind: 'boolean',\n description: 'Zera valor se dependência mudar.',\n intentExamples: ['limpar se o pai mudar', 'resetar valor na troca da dependência'],\n },\n {\n path: 'enableDependencyCascade',\n category: 'dependency',\n valueKind: 'boolean',\n description: 'Habilita/desabilita cascata nativa de dependências entre campos.',\n intentExamples: ['desativar cascata nativa', 'habilitar cascata', 'usar connections sem cascata'],\n },\n {\n path: 'dependencyDebounceMs',\n category: 'dependency',\n valueKind: 'number',\n description: 'Delay para reagir à mudança de dependência.',\n intentExamples: ['esperar para recarregar dependência', 'debounce da cascata'],\n },\n {\n path: 'suppressInlineErrorsOnCascade',\n category: 'dependency',\n valueKind: 'boolean',\n description: 'Suprime erros inline durante cascata.',\n },\n\n // =============================================================================\n // TRANSFORMS\n // =============================================================================\n {\n path: 'transformDisplayValue',\n category: 'transform',\n valueKind: 'expression',\n description: 'Transforma valor para exibição.',\n safetyNotes: 'Função não serializável.',\n intentExamples: ['formatar valor visualmente', 'transformar display'],\n },\n {\n path: 'transformSaveValue',\n category: 'transform',\n valueKind: 'expression',\n description: 'Transforma valor para salvar.',\n safetyNotes: 'Função não serializável.',\n intentExamples: ['formatar valor para envio', 'transformar payload'],\n },\n {\n path: 'textTransformApply',\n category: 'transform',\n valueKind: 'enum',\n allowedValues: ENUMS.textTransformApply,\n description: 'Quando aplicar transformação de texto.',\n intentExamples: ['aplicar transformação apenas no display', 'transformar ao salvar e exibir'],\n },\n\n // =============================================================================\n // MISC\n // =============================================================================\n {\n path: 'inlineEditing',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Permite edição inline (tabelas).',\n intentExamples: ['permitir edição na tabela', 'editar na linha'],\n },\n {\n path: 'unique',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Valida unicidade no backend.',\n intentExamples: ['validar se é único', 'não permitir duplicados'],\n },\n {\n path: 'readOnly',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Campo somente leitura.',\n intentExamples: ['somente leitura', 'bloquear edição', 'campo readonly'],\n },\n {\n path: 'disabled',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Campo desabilitado.',\n intentExamples: ['desabilitar campo', 'campo disabled', 'cinza e bloqueado'],\n },\n {\n path: 'defaultValue',\n category: 'data',\n valueKind: 'object',\n description: 'Valor inicial do campo.',\n safetyNotes: 'Aceita tipos primitivos/objetos; respeite o controlType.',\n intentExamples: ['valor padrão', 'iniciar com valor X', 'default value'],\n },\n {\n path: 'ariaLabel',\n category: 'accessibility',\n valueKind: 'string',\n description: 'Label para leitores de tela.',\n intentExamples: ['label de acessibilidade', 'texto para leitor de tela'],\n },\n {\n path: 'ariaDescribedBy',\n category: 'accessibility',\n valueKind: 'string',\n description: 'IDs de descrição acessível.',\n intentExamples: ['descrito pelo elemento X', 'associar descrição aria'],\n },\n {\n path: 'tabIndex',\n category: 'accessibility',\n valueKind: 'number',\n description: 'Ordem de tabulacao para teclado.',\n intentExamples: ['tabindex 0', 'ordem de foco'],\n },\n {\n path: 'accessKey',\n category: 'accessibility',\n valueKind: 'string',\n description: 'Atalho de teclado (accessKey).',\n intentExamples: ['atalho de teclado', 'tecla de acesso rapido'],\n }\n ]\n};\n\nexport function getFieldMetadataCapabilities(): Capability[] {\n return FIELD_METADATA_CAPABILITIES.capabilities;\n}\n","/**\n * Capabilities catalog for Praxis Dynamic Page (praxis-dynamic-page).\n * Paths follow WidgetPageDefinition shape under \"page\".\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from './capability.types';\n\ndeclare module './capability.types' {\n interface AiCapabilityCategoryMap {\n page: true;\n layout: true;\n widgets: true;\n shell: true;\n connections: true;\n context: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n layoutOrientation: ['vertical', 'columns'],\n shellKind: ['dashboard-card', 'none'],\n actionVariant: ['icon', 'text', 'outlined'],\n actionPlacement: ['header', 'window'],\n};\n\nconst CAPS: Capability[] = [\n { path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página dinâmica.' },\n { path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto compartilhado entre widgets.' },\n\n { path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da página.' },\n { path: 'page.layout.orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutOrientation, description: 'Orientação do grid (vertical/columns).' },\n { path: 'page.layout.columns', category: 'layout', valueKind: 'number', description: 'Número de colunas (quando orientation=columns).' },\n { path: 'page.layout.gap', category: 'layout', valueKind: 'string', description: 'Gap entre widgets (ex: 16px).' },\n { path: 'page.layout.breakpoints', category: 'layout', valueKind: 'object', description: 'Colunas por breakpoint.' },\n { path: 'page.layout.breakpoints.sm', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint sm.' },\n { path: 'page.layout.breakpoints.md', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint md.' },\n { path: 'page.layout.breakpoints.lg', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint lg.' },\n { path: 'page.layout.breakpoints.xl', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint xl.' },\n\n { path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Lista de widgets renderizados.' },\n { path: 'page.widgets[].key', category: 'widgets', valueKind: 'string', description: 'Identificador único do widget.' },\n { path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },\n { path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente do widget (ex: praxis-table).' },\n { path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs iniciais do widget.' },\n { path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de binding de inputs.' },\n\n { path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: 'Configuração do shell do widget.' },\n { path: 'page.widgets[].shell.kind', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.shellKind, description: 'Tipo de shell.' },\n { path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: 'Título do shell.' },\n { path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: 'Subtítulo do shell.' },\n { path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: 'Ícone do shell.' },\n { path: 'page.widgets[].shell.showHeader', category: 'shell', valueKind: 'boolean', description: 'Exibe o header do shell.' },\n { path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: 'Ações do shell.' },\n { path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da ação.' },\n { path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da ação.' },\n { path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: 'Ícone da ação.' },\n { path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da ação.' },\n { path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da ação.' },\n { path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a ação.' },\n\n { path: 'page.connections', category: 'connections', valueKind: 'array', description: 'Conexões entre widgets.' },\n { path: 'page.connections[].from.widget', category: 'connections', valueKind: 'string', description: 'Widget de origem.' },\n { path: 'page.connections[].from.output', category: 'connections', valueKind: 'string', description: 'Output de origem.' },\n { path: 'page.connections[].to.widget', category: 'connections', valueKind: 'string', description: 'Widget de destino.' },\n { path: 'page.connections[].to.input', category: 'connections', valueKind: 'string', description: 'Input de destino.' },\n { path: 'page.connections[].to.bindingOrder', category: 'connections', valueKind: 'array', description: 'Ordem de binding no destino.' },\n { path: 'page.connections[].map', category: 'connections', valueKind: 'string', description: 'Caminho de extração do payload.' },\n { path: 'page.connections[].set', category: 'connections', valueKind: 'object', description: 'Valor constante para a conexão.' },\n];\n\nexport const DYNAMIC_PAGE_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: ENUMS,\n targets: ['praxis-dynamic-page'],\n notes: [\n 'Este catálogo é específico para o componente praxis-dynamic-page.',\n 'Widgets e connections são arrays; o adapter faz merge por key.',\n 'Para remoção/replace, use flags {_remove:true} ou {_replace:true} no item.',\n 'Para alterar origem/destino de conexão, inclua {_beforeKey:\"from|out|to|in\"} no item.',\n 'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.',\n 'Use keys estáveis para widgets ao criar conexões.',\n 'Objetivo: compor widgets e relacionamentos (ex.: master-detail).',\n 'Conexões típicas: table.rowClick -> form.resourceId (map: payload.row.id). Para master-detail, use este padrão.',\n ],\n capabilities: CAPS,\n};\n","import { ComponentContextPack } from './component-context.schema';\n\nexport const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK: ComponentContextPack = {\n version: 'v1.0',\n optionsByPath: {\n 'page.layout.orientation': {\n mode: 'enum',\n options: [\n { value: 'vertical', label: 'Vertical' },\n { value: 'columns', label: 'Colunas' },\n ],\n },\n 'page.widgets[].shell.kind': {\n mode: 'enum',\n options: [\n { value: 'dashboard-card', label: 'Dashboard Card' },\n { value: 'none', label: 'Sem shell' },\n ],\n },\n 'page.widgets[].shell.actions[].variant': {\n mode: 'enum',\n options: [\n { value: 'icon', label: 'Ícone' },\n { value: 'text', label: 'Texto' },\n { value: 'outlined', label: 'Outlined' },\n ],\n },\n 'page.widgets[].shell.actions[].placement': {\n mode: 'enum',\n options: [\n { value: 'header', label: 'Header' },\n { value: 'window', label: 'Janela' },\n ],\n },\n 'page.connections[].from.output': {\n mode: 'suggested',\n options: [\n { value: 'rowClick', label: 'Clique na linha (praxis-table)', example: 'Usar table.rowClick -> form.resourceId' },\n { value: 'rowAction', label: 'Ação da linha (praxis-table)' },\n { value: 'formSubmit', label: 'Submit do formulário (praxis-dynamic-form)' },\n ],\n },\n 'page.connections[].to.input': {\n mode: 'suggested',\n options: [\n { value: 'resourceId', label: 'ID do registro (praxis-dynamic-form)', example: 'map: payload.row.id' },\n { value: 'mode', label: 'Modo do formulário (create|edit|view)' },\n ],\n },\n 'page.connections[].map': {\n mode: 'suggested',\n options: [\n { value: 'payload.row.id', label: 'ID padrão do registro', example: 'rowClick -> resourceId' },\n ],\n },\n },\n actionCatalog: [\n {\n id: 'page.widget.remove',\n keywords: ['remover widget', 'excluir widget', 'apagar widget'],\n requiresExistingTarget: true,\n scope: 'ROW',\n patchTemplate: {\n page: {\n widgets: [\n { key: '{{target}}', _remove: true },\n ],\n },\n },\n },\n {\n id: 'page.connection.remove',\n keywords: ['remover conexao', 'excluir conexao', 'apagar conexao'],\n requiresExistingTarget: true,\n scope: 'ROW',\n params: [\n { name: 'fromWidget', type: 'STRING' },\n { name: 'fromOutput', type: 'STRING' },\n { name: 'toWidget', type: 'STRING' },\n { name: 'toInput', type: 'STRING' },\n ],\n patchTemplate: {\n page: {\n connections: [\n {\n _beforeKey: '{{target}}',\n from: { widget: '{{params.fromWidget}}', output: '{{params.fromOutput}}' },\n to: { widget: '{{params.toWidget}}', input: '{{params.toInput}}' },\n _remove: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.layout.orientation.set',\n keywords: ['orientacao', 'orientation', 'layout vertical', 'layout colunas'],\n patchTemplate: {\n page: {\n layout: {\n orientation: '{{value}}',\n },\n },\n },\n },\n {\n id: 'page.layout.columns.set',\n keywords: ['colunas', 'columns', 'qtde colunas'],\n patchTemplate: {\n page: {\n layout: {\n columns: '{{value}}',\n },\n },\n },\n },\n {\n id: 'page.layout.gap.set',\n keywords: ['gap', 'espacamento', 'espaco entre widgets'],\n patchTemplate: {\n page: {\n layout: {\n gap: '{{value}}',\n },\n },\n },\n },\n {\n id: 'page.layout.breakpoints.sm.set',\n keywords: ['breakpoint sm', 'colunas sm'],\n patchTemplate: {\n page: {\n layout: {\n breakpoints: {\n sm: '{{value}}',\n },\n },\n },\n },\n },\n {\n id: 'page.layout.breakpoints.md.set',\n keywords: ['breakpoint md', 'colunas md'],\n patchTemplate: {\n page: {\n layout: {\n breakpoints: {\n md: '{{value}}',\n },\n },\n },\n },\n },\n {\n id: 'page.layout.breakpoints.lg.set',\n keywords: ['breakpoint lg', 'colunas lg'],\n patchTemplate: {\n page: {\n layout: {\n breakpoints: {\n lg: '{{value}}',\n },\n },\n },\n },\n },\n {\n id: 'page.layout.breakpoints.xl.set',\n keywords: ['breakpoint xl', 'colunas xl'],\n patchTemplate: {\n page: {\n layout: {\n breakpoints: {\n xl: '{{value}}',\n },\n },\n },\n },\n },\n {\n id: 'page.connection.set',\n keywords: ['set connection', 'definir conexao', 'valor fixo', 'set constante'],\n params: [\n { name: 'fromWidget', type: 'STRING' },\n { name: 'fromOutput', type: 'STRING' },\n { name: 'toWidget', type: 'STRING' },\n { name: 'toInput', type: 'STRING' },\n { name: 'value', type: 'STRING' },\n ],\n patchTemplate: {\n page: {\n connections: [\n {\n from: { widget: '{{params.fromWidget}}', output: '{{params.fromOutput}}' },\n to: { widget: '{{params.toWidget}}', input: '{{params.toInput}}' },\n set: '{{params.value}}',\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.widget.upsert',\n keywords: ['adicionar widget', 'novo widget', 'inserir widget', 'atualizar widget'],\n params: [\n { name: 'widgetKey', type: 'STRING' },\n { name: 'widgetType', type: 'STRING' },\n ],\n patchTemplate: {\n page: {\n widgets: [\n {\n key: '{{params.widgetKey}}',\n definition: {\n id: '{{params.widgetType}}',\n inputs: {},\n bindingOrder: [],\n },\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.connection.move',\n keywords: ['mover conexao', 'alterar conexao', 'editar conexao', 'trocar conexao'],\n params: [\n { name: 'fromWidget', type: 'STRING' },\n { name: 'fromOutput', type: 'STRING' },\n { name: 'toWidget', type: 'STRING' },\n { name: 'toInput', type: 'STRING' },\n { name: 'beforeFromWidget', type: 'STRING' },\n { name: 'beforeFromOutput', type: 'STRING' },\n { name: 'beforeToWidget', type: 'STRING' },\n { name: 'beforeToInput', type: 'STRING' },\n ],\n patchTemplate: {\n page: {\n connections: [\n {\n _beforeKey: '{{params.beforeFromWidget}}|{{params.beforeFromOutput}}|{{params.beforeToWidget}}|{{params.beforeToInput}}',\n from: { widget: '{{params.fromWidget}}', output: '{{params.fromOutput}}' },\n to: { widget: '{{params.toWidget}}', input: '{{params.toInput}}' },\n },\n ],\n },\n },\n },\n {\n id: 'page.widget.createTable',\n keywords: ['criar tabela', 'adicionar tabela', 'widget tabela'],\n operation: 'create',\n scope: 'ROW',\n valueType: 'OBJECT',\n params: [\n { name: 'widgetKey', type: 'STRING' },\n { name: 'resourcePath', type: 'STRING' },\n ],\n safetyNotes: 'Use apenas resourcePath base. Evite inventar colunas; deixe config mínima.',\n patchTemplate: {\n page: {\n widgets: [\n {\n key: '{{params.widgetKey}}',\n definition: {\n id: 'praxis-table',\n bindingOrder: ['config', 'resourcePath'],\n inputs: {\n resourcePath: '{{params.resourcePath}}',\n tableId: '{{params.widgetKey}}',\n },\n },\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.widget.createForm',\n keywords: ['criar formulario', 'adicionar formulario', 'widget formulario'],\n operation: 'create',\n scope: 'ROW',\n valueType: 'OBJECT',\n params: [\n { name: 'widgetKey', type: 'STRING' },\n { name: 'resourcePath', type: 'STRING' },\n { name: 'mode', type: 'STRING' },\n ],\n safetyNotes: 'Use resourcePath base e mode=create|edit|view. Evite inventar campos.',\n patchTemplate: {\n page: {\n widgets: [\n {\n key: '{{params.widgetKey}}',\n definition: {\n id: 'praxis-dynamic-form',\n bindingOrder: ['resourcePath', 'formId', 'resourceId'],\n inputs: {\n resourcePath: '{{params.resourcePath}}',\n formId: '{{params.widgetKey}}',\n mode: '{{params.mode}}',\n },\n },\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.connection.bindRowToForm',\n keywords: ['conectar tabela ao formulario', 'master detail', 'master-detail', 'detalhe'],\n operation: 'create',\n scope: 'ROW',\n valueType: 'OBJECT',\n params: [\n { name: 'fromWidget', type: 'STRING' },\n { name: 'toWidget', type: 'STRING' },\n { name: 'fromOutput', type: 'STRING' },\n { name: 'toInput', type: 'STRING' },\n { name: 'map', type: 'STRING' },\n ],\n safetyNotes: 'Use map payload.row.id para master-detail padrão.',\n patchTemplate: {\n page: {\n connections: [\n {\n from: { widget: '{{params.fromWidget}}', output: '{{params.fromOutput}}' },\n to: { widget: '{{params.toWidget}}', input: '{{params.toInput}}' },\n map: '{{params.map}}',\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.connection.bindMasterDetail',\n keywords: ['master detail', 'master-detail', 'conectar tabela ao formulario', 'detalhe'],\n operation: 'create',\n scope: 'ROW',\n valueType: 'OBJECT',\n params: [\n { name: 'fromWidget', type: 'STRING' },\n { name: 'toWidget', type: 'STRING' },\n ],\n safetyNotes: 'Padrao master-detail: rowClick -> resourceId com map payload.row.id.',\n patchTemplate: {\n page: {\n connections: [\n {\n from: { widget: '{{params.fromWidget}}', output: 'rowClick' },\n to: { widget: '{{params.toWidget}}', input: 'resourceId' },\n map: 'payload.row.id',\n _replace: true,\n },\n ],\n },\n },\n },\n {\n id: 'page.template.applyMasterDetail',\n keywords: ['criar pagina master detail', 'setup master detail', 'tabela e formulario', 'master-detail'],\n operation: 'create',\n scope: 'GLOBAL',\n valueType: 'OBJECT',\n params: [\n { name: 'tableId', type: 'STRING' },\n { name: 'formId', type: 'STRING' },\n { name: 'resourcePath', type: 'STRING' },\n ],\n safetyNotes: 'Padrao master-detail: tabela (rowClick) -> formulario (resourceId) com map payload.row.id.',\n patchTemplate: {\n page: {\n widgets: [\n {\n key: '{{params.tableId}}',\n definition: {\n id: 'praxis-table',\n bindingOrder: ['config', 'resourcePath'],\n inputs: {\n tableId: '{{params.tableId}}',\n resourcePath: '{{params.resourcePath}}',\n },\n outputs: { rowClick: 'emit' },\n },\n _replace: true,\n },\n {\n key: '{{params.formId}}',\n definition: {\n id: 'praxis-dynamic-form',\n bindingOrder: ['resourcePath', 'formId', 'resourceId'],\n inputs: {\n formId: '{{params.formId}}',\n resourcePath: '{{params.resourcePath}}',\n mode: 'view',\n },\n },\n _replace: true,\n },\n ],\n connections: [\n {\n from: { widget: '{{params.tableId}}', output: 'rowClick' },\n to: { widget: '{{params.formId}}', input: 'resourceId' },\n map: 'payload.row.id',\n _replace: true,\n },\n ],\n },\n },\n },\n ],\n fieldResolvers: {\n 'page.widgets[]': ['key'],\n 'page.connections[]': ['_label', 'id', 'name'],\n },\n hints: [\n 'praxis-dynamic-page é um host de composição: cria widgets, conecta outputs e mantém relações.',\n 'Widgets e connections são arrays; o adapter faz merge por key (widgets) e chave composta (conexões).',\n 'Preferir mudanças incrementais: alterar/estender em vez de substituir toda a página.',\n 'Para remover um item, envie {_remove: true} junto ao widget/connection.',\n 'Para substituir um item inteiro, envie {_replace: true}.',\n 'Para alterar origem/destino de conexão, use {_beforeKey} com a chave antiga.',\n 'Use keys estáveis para widgets ao criar conexões.',\n 'resourcePath sempre é o path base do recurso (sem /filter, /all).',\n 'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns nao forem definidas.',\n 'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config nao for definida.',\n 'Praxis List pode filtrar via config.dataSource.query (enviado para /filter).',\n 'Quando houver recursos secundarios (ex.: enderecos), use contextHints.addressResourcePath.',\n 'Exemplo master-detail: tabela emite rowClick -> form.resourceId (map: payload.row.id).',\n 'Pattern Master-Detail: { \"from\": {\"output\": \"rowClick\"}, \"to\": {\"input\": \"resourceId\"}, \"map\": \"payload.row.id\" }',\n 'Ao criar widgets, use inputs mínimos e complemente depois (evite inventar campos).',\n 'Quando widgets já existem, interpretar outputs/inputs antes de conectar.',\n 'Intenção comum: criar pagina master-detail = criar tabela + criar formulário + conectar seleção.',\n 'Intenção comum: ajustar pagina existente = modificar apenas widgets/inputs necessários.',\n 'Exemplo de conexão (master-detail): { from:{widget:\\\"masterTable\\\",output:\\\"rowClick\\\"}, to:{widget:\\\"detailForm\\\",input:\\\"resourceId\\\"}, map:\\\"payload.row.id\\\" }',\n 'Exemplo de widget tabela (mínimo): { key:\\\"masterTable\\\", definition:{ id:\\\"praxis-table\\\", inputs:{ resourcePath:\\\"/api/x\\\" }}}',\n 'Exemplo de widget formulário (mínimo): { key:\\\"detailForm\\\", definition:{ id:\\\"praxis-dynamic-form\\\", inputs:{ resourcePath:\\\"/api/x\\\", mode:\\\"view\\\" }}}',\n 'Se houver idField conhecido, use map: payload.row.{idField} em conexões.',\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 {\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';\nimport { WidgetShellActionEvent } from './widget-shell.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 exportAs: 'dynamicWidgetLoader',\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 /** Dispatch a shell action to the inner widget instance when supported. */\n dispatchAction(action: WidgetShellActionEvent): boolean {\n const instance = this.compRef?.instance as any;\n if (!instance) return false;\n if (typeof instance.handleShellAction === 'function') {\n instance.handleShellAction(action);\n return true;\n }\n if (typeof instance.onShellAction === 'function') {\n instance.onShellAction(action);\n return true;\n }\n const subject = instance.shellAction$ || instance.shellAction;\n if (subject && typeof subject.next === 'function') {\n subject.next(action);\n return true;\n }\n return false;\n }\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 // Valida e ajusta tipos conforme metadata (pode atualizar inputs)\n this.validateAgainstMetadata(def.id, inputs, outputs, meta || undefined);\n // Faz o binding com coerção de tipos quando possível\n this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder, meta || undefined);\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 meta?: { inputs?: Array<{ name: string; type?: string }> },\n ): void {\n // Derive priority order\n const defaultOrderMap: Record<string, string[]> = {\n 'praxis-table': ['tableId', 'componentInstanceId', 'resourcePath', 'data', 'config'],\n 'praxis-crud': ['crudId', 'componentInstanceId', 'metadata'],\n 'praxis-dynamic-form': ['formId', 'componentInstanceId', 'resourcePath'],\n 'praxis-tabs': ['tabsId', 'componentInstanceId', 'config'],\n 'praxis-list': ['listId', 'componentInstanceId', 'config'],\n 'praxis-expansion': ['expansionId', 'componentInstanceId', 'config'],\n 'praxis-stepper': ['stepperId', 'componentInstanceId', 'config'],\n 'praxis-files-upload': ['filesUploadId', 'componentInstanceId', 'config'],\n };\n const order = bindingOrder && bindingOrder.length\n ? bindingOrder\n : defaultOrderMap[id] || [];\n\n const entries = Object.entries(inputs);\n const entriesMap = new Map(entries);\n const prioritized: Array<[string, any]> = [];\n for (const key of order) {\n if (entriesMap.has(key)) {\n prioritized.push([key, entriesMap.get(key)]);\n entriesMap.delete(key);\n }\n }\n const others = Array.from(entriesMap.entries());\n\n const apply = (key: string, raw: any) => {\n let value = this.resolveValue(raw);\n // Coerção leve baseada em metadata, quando disponível\n if (meta?.inputs?.length) {\n const metaInput = meta.inputs.find((i) => i.name === key);\n if (metaInput?.type) {\n value = this.coercePrimitive(value, (metaInput.type || '').toLowerCase());\n }\n }\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 // Caso especial: string é apenas uma única expressão ${...} → preservar tipo original\n const singleExpr = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (singleExpr) {\n const v = this.lookup(this.context, singleExpr[1].trim());\n return v;\n }\n // Caso geral: substitui expressões e mantém resultado como 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 coerced = this.coercePrimitive(resolved, primitive);\n // Atualiza inputs com valor possivelmente coerido, para bind subsequente\n inputs[metaInput.name] = coerced;\n const actualType = typeof coerced;\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 private coercePrimitive(value: any, primitive: string): any {\n try {\n if (primitive === 'number') {\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Number(value))) {\n return Number(value);\n }\n }\n if (primitive === 'boolean') {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n const v = value.trim().toLowerCase();\n if (v === 'true') return true;\n if (v === 'false') return false;\n }\n }\n if (primitive === 'string') {\n if (value == null) return value;\n if (typeof value !== 'string') return String(value);\n }\n } catch {}\n return value;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnChanges, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '../components/icon/praxis-icon.directive';\nimport { DynamicWidgetLoaderDirective } from './dynamic-widget-loader.directive';\nimport { WidgetShellAction, WidgetShellActionEvent, WidgetShellConfig } from './widget-shell.model';\n\ntype ActionList = WidgetShellAction[];\ntype Appearance = WidgetShellConfig['appearance'];\n\nexport const BUILTIN_SHELL_PRESETS: Record<string, NonNullable<Appearance>> = {\n 'dark-glass': {\n card: {\n background: '#0b1220',\n borderColor: 'rgba(255,255,255,0.12)',\n borderRadius: '16px',\n shadow: '0 12px 26px rgba(0,0,0,0.35)',\n },\n header: {\n titleColor: '#e6edf3',\n subtitleColor: '#9fb0c4',\n iconColor: '#8ab4ff',\n },\n typography: {\n titleSize: '14px',\n titleWeight: '600',\n subtitleSize: '12px',\n },\n },\n 'light-neutral': {\n card: {\n background: '#f7f8fb',\n borderColor: '#e3e7ef',\n borderRadius: '14px',\n shadow: '0 6px 18px rgba(15, 23, 42, 0.08)',\n },\n header: {\n titleColor: '#1f2937',\n subtitleColor: '#6b7280',\n iconColor: '#0f172a',\n },\n },\n graphite: {\n card: {\n background: '#1c1f24',\n borderColor: 'rgba(255,255,255,0.08)',\n borderRadius: '14px',\n shadow: '0 10px 22px rgba(0,0,0,0.28)',\n },\n header: {\n titleColor: '#f3f4f6',\n subtitleColor: '#9ca3af',\n iconColor: '#cbd5f5',\n },\n },\n};\n\n@Component({\n selector: 'praxis-widget-shell',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatMenuModule, MatTooltipModule, PraxisIconDirective],\n template: `\n <section\n class=\"pdx-shell\"\n [class.no-shell]=\"!shellEnabled\"\n [class.dashboard]=\"shellEnabled\"\n [class.collapsed]=\"collapsed\"\n [class.expanded]=\"expanded\"\n [class.fullscreen]=\"fullscreen\"\n [style.--pdx-shell-card-bg]=\"appearance?.card?.background || null\"\n [style.--pdx-shell-card-border]=\"appearance?.card?.borderColor || null\"\n [style.--pdx-shell-card-radius]=\"appearance?.card?.borderRadius || null\"\n [style.--pdx-shell-card-shadow]=\"appearance?.card?.shadow || null\"\n [style.--pdx-shell-header-bg]=\"appearance?.header?.background || null\"\n [style.--pdx-shell-header-border]=\"appearance?.header?.borderColor || null\"\n [style.--pdx-shell-title-color]=\"appearance?.header?.titleColor || null\"\n [style.--pdx-shell-subtitle-color]=\"appearance?.header?.subtitleColor || null\"\n [style.--pdx-shell-icon-color]=\"appearance?.header?.iconColor || null\"\n [style.--pdx-shell-body-bg]=\"appearance?.body?.background || null\"\n [style.--pdx-shell-body-color]=\"appearance?.body?.textColor || null\"\n [style.--pdx-shell-body-padding]=\"appearance?.body?.padding || null\"\n [style.--pdx-shell-title-size]=\"appearance?.typography?.titleSize || null\"\n [style.--pdx-shell-title-weight]=\"appearance?.typography?.titleWeight || null\"\n [style.--pdx-shell-subtitle-size]=\"appearance?.typography?.subtitleSize || null\"\n (click)=\"stopIfExpanded($event)\"\n >\n @if (showHeader) {\n <header class=\"pdx-shell-header\">\n <div class=\"pdx-shell-title\">\n @if (shell?.icon) {\n <mat-icon [praxisIcon]=\"shell?.icon\"></mat-icon>\n }\n <div class=\"pdx-shell-text\">\n <div class=\"pdx-shell-title-text\">{{ shell?.title }}</div>\n @if (shell?.subtitle) {\n <div class=\"pdx-shell-subtitle\">{{ shell?.subtitle }}</div>\n }\n </div>\n </div>\n <div class=\"pdx-shell-actions\">\n @if (!expanded && !fullscreen) {\n @for (action of visibleHeaderActions; track action.id) {\n <ng-container>\n <button\n *ngIf=\"action.variant !== 'icon'\"\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || ''\"\n matTooltipPosition=\"below\"\n [ngClass]=\"action.variant === 'outlined' ? 'pdx-action-outlined' : 'pdx-action-text'\"\n mat-button\n type=\"button\"\n (click)=\"onAction(action, $event)\"\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n <span class=\"pdx-action-label\">{{ action.label }}</span>\n </button>\n <button\n *ngIf=\"action.variant === 'icon'\"\n mat-icon-button\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || action.label || ''\"\n matTooltipPosition=\"below\"\n [attr.aria-label]=\"action.label || action.tooltip || action.id\"\n type=\"button\"\n (click)=\"onAction(action, $event)\"\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n </button>\n </ng-container>\n }\n @if (overflowHeaderActions.length) {\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"'Mais ações'\"\n matTooltipPosition=\"below\"\n aria-label=\"Mais ações\"\n [matMenuTriggerFor]=\"overflowMenu\"\n (click)=\"$event.stopPropagation()\"\n >\n <mat-icon>more_horiz</mat-icon>\n </button>\n }\n }\n @if (windowActions.length) {\n <div class=\"pdx-shell-window-actions\">\n @for (action of windowActions; track action.id) {\n <button\n mat-icon-button\n [disabled]=\"action.disabled\"\n [matTooltip]=\"action.tooltip || action.label || ''\"\n matTooltipPosition=\"below\"\n [attr.aria-label]=\"action.label || action.tooltip || action.id\"\n type=\"button\"\n (click)=\"onAction(action, $event)\"\n >\n @if (action.icon) {\n <mat-icon [praxisIcon]=\"action.icon\"></mat-icon>\n }\n </button>\n }\n </div>\n }\n </div>\n <mat-menu #overflowMenu=\"matMenu\">\n @for (action of overflowHeaderActions; track action.id) {\n <button\n mat-menu-item\n (click)=\"onAction(action, $event)\"\n >\n @if (action.icon) {\n <mat-icon [praxisIcon]=\"action.icon\"></mat-icon>\n }\n <span>{{ action.label || action.id }}</span>\n </button>\n }\n </mat-menu>\n </header>\n }\n <div class=\"pdx-shell-body\" [class.hidden]=\"collapsed\">\n <ng-content></ng-content>\n </div>\n </section>\n @if (expanded || fullscreen) {\n <div class=\"pdx-shell-backdrop\" (click)=\"closeOverlay()\"></div>\n }\n `,\n styles: [\n `\n :host { display: block; height: 100%; }\n .pdx-shell { position: relative; height: 100%; display: flex; flex-direction: column; }\n .pdx-shell.no-shell { background: transparent; border: none; border-radius: 0; box-shadow: none; }\n .pdx-shell.dashboard {\n background: var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));\n border: 1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));\n border-radius: var(--pdx-shell-card-radius, 14px);\n box-shadow: var(--pdx-shell-card-shadow, var(--mat-elevation-level2));\n overflow: hidden;\n }\n .pdx-shell-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px 8px 12px;\n border-bottom: 1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));\n background: var(--pdx-shell-header-bg, var(--md-sys-color-surface-container));\n }\n .pdx-shell-title { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1; color: var(--pdx-shell-title-color, inherit); }\n .pdx-shell-title mat-icon { color: var(--pdx-shell-icon-color, currentColor); }\n .pdx-shell-text { min-width: 0; }\n .pdx-shell-title-text { font-weight: var(--pdx-shell-title-weight, 600); font-size: var(--pdx-shell-title-size, 14px); line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .pdx-shell-subtitle { font-size: var(--pdx-shell-subtitle-size, 12px); opacity: 0.75; color: var(--pdx-shell-subtitle-color, currentColor); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .pdx-shell-actions, .pdx-shell-window-actions { display: flex; align-items: center; gap: 6px; }\n .pdx-shell-window-actions { margin-left: auto; }\n .pdx-action-outlined {\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 999px;\n padding: 0 10px;\n }\n .pdx-action-text { padding: 0 8px; }\n .pdx-action-label { font-size: 12px; font-weight: 500; }\n .pdx-shell-body { flex: 1; min-height: 0; padding: var(--pdx-shell-body-padding, 10px 12px 12px 12px); background: var(--pdx-shell-body-bg, transparent); color: var(--pdx-shell-body-color, inherit); }\n .pdx-shell.no-shell .pdx-shell-body { padding: 0; }\n .pdx-shell-body.hidden { display: none; }\n .pdx-shell.collapsed .pdx-shell-header { border-bottom-color: transparent; }\n .pdx-shell.expanded .pdx-shell-body,\n .pdx-shell.fullscreen .pdx-shell-body { overflow: auto; }\n .pdx-shell.expanded {\n position: fixed;\n top: 10vh;\n left: 50%;\n width: min(920px, 92vw);\n height: min(640px, 82vh);\n transform: translateX(-50%);\n z-index: 1200;\n box-shadow: var(--mat-elevation-level8);\n }\n .pdx-shell.fullscreen {\n position: fixed;\n top: 50%;\n left: 50%;\n width: 95vw;\n height: 95vh;\n transform: translate(-50%, -50%);\n z-index: 1201;\n box-shadow: var(--mat-elevation-level8);\n }\n .pdx-shell-backdrop {\n position: fixed;\n inset: 0;\n z-index: 1199;\n background: rgba(0,0,0,0.55);\n backdrop-filter: blur(2px);\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetShellComponent implements OnChanges {\n @Input() shell?: WidgetShellConfig | null;\n @Input() context?: Record<string, any> | null = null;\n @Output() action = new EventEmitter<WidgetShellActionEvent>();\n\n @ContentChild(DynamicWidgetLoaderDirective) loader?: DynamicWidgetLoaderDirective;\n\n get appearance(): WidgetShellConfig['appearance'] {\n const base = this.resolvePresetAppearance();\n const override = this.shell?.appearance;\n return this.mergeAppearance(base, override);\n }\n\n collapsed = false;\n expanded = false;\n fullscreen = false;\n\n ngOnChanges(): void {\n this.collapsed = !!this.shell?.collapsed;\n this.expanded = !!this.shell?.expanded;\n this.fullscreen = !!this.shell?.fullscreen;\n // no-op: debug logs removed\n }\n\n get shellEnabled(): boolean {\n return !!this.shell && this.shell.kind !== 'none';\n }\n\n get showHeader(): boolean {\n if (!this.shellEnabled) return false;\n if (this.shell?.showHeader != null) return !!this.shell.showHeader;\n return !!(this.shell?.title || this.shell?.subtitle || this.shell?.icon || this.headerActions.length || this.windowActions.length);\n }\n\n get headerActions(): ActionList {\n return (this.shell?.actions || []).filter((a) => this.isVisible(a) && (a.placement || 'header') === 'header');\n }\n\n get visibleHeaderActions(): ActionList {\n const max = this.maxHeaderActions;\n return this.headerActions.slice(0, max);\n }\n\n get overflowHeaderActions(): ActionList {\n const max = this.maxHeaderActions;\n return this.headerActions.slice(max);\n }\n\n private get maxHeaderActions(): number {\n return 3;\n }\n\n get windowActions(): ActionList {\n const custom = (this.shell?.actions || []).filter((a) => this.isVisible(a) && (a.placement || 'header') === 'window');\n const builtins = this.buildWindowActions(custom);\n return [...builtins, ...custom];\n }\n\n onAction(action: WidgetShellAction, ev: MouseEvent): void {\n ev.stopPropagation();\n const handled = this.handleWindowAction(action);\n const payload = action.payload ?? handled?.payload;\n const event: WidgetShellActionEvent = {\n id: action.id,\n command: action.command,\n emit: action.emit,\n payload,\n action,\n };\n this.loader?.dispatchAction(event);\n this.action.emit(event);\n }\n\n stopIfExpanded(ev: MouseEvent): void {\n if (this.expanded || this.fullscreen) ev.stopPropagation();\n }\n\n closeOverlay(): void {\n this.expanded = false;\n this.fullscreen = false;\n }\n\n private handleWindowAction(action: WidgetShellAction): { payload?: any } | null {\n if (action.id === 'collapse') {\n this.collapsed = !this.collapsed;\n return { payload: { collapsed: this.collapsed } };\n }\n if (action.id === 'expand') {\n this.expanded = !this.expanded;\n this.fullscreen = false;\n if (this.expanded) this.collapsed = false;\n return { payload: { expanded: this.expanded } };\n }\n if (action.id === 'fullscreen') {\n this.fullscreen = !this.fullscreen;\n if (this.fullscreen) {\n this.expanded = true;\n this.collapsed = false;\n }\n else this.expanded = false;\n return { payload: { fullscreen: this.fullscreen } };\n }\n return null;\n }\n\n private buildWindowActions(custom: ActionList): ActionList {\n if (!this.shellEnabled) return [];\n const reserved = new Set(custom.map((a) => a.id));\n const actions: ActionList = [];\n const allowCollapse = this.shell?.windowActions?.collapsible !== false && !this.fullscreen;\n const allowFullscreen = this.shell?.windowActions?.fullscreen !== false;\n if (allowCollapse && !reserved.has('collapse')) {\n actions.push({\n id: 'collapse',\n placement: 'window',\n icon: this.collapsed ? 'unfold_more' : 'unfold_less',\n tooltip: this.collapsed ? 'Expandir conteúdo' : 'Recolher conteúdo',\n variant: 'icon',\n });\n }\n if (allowFullscreen && !reserved.has('fullscreen')) {\n actions.push({\n id: 'fullscreen',\n placement: 'window',\n icon: this.fullscreen ? 'close_fullscreen' : 'open_in_full',\n tooltip: this.fullscreen ? 'Sair da tela cheia' : 'Tela cheia',\n variant: 'icon',\n });\n }\n return actions;\n }\n\n private isVisible(action: WidgetShellAction): boolean {\n if (action.visible == null) return true;\n return !!action.visible;\n }\n\n private resolvePresetAppearance(): Appearance | undefined {\n const presetId = this.shell?.preset || (this.context as any)?.ui?.shell?.preset;\n if (!presetId) return undefined;\n const ctxPresets = (this.context as any)?.ui?.shell?.presets || {};\n return (ctxPresets && ctxPresets[presetId]) || BUILTIN_SHELL_PRESETS[presetId];\n }\n\n private mergeAppearance(base?: Appearance, override?: Appearance): Appearance | undefined {\n if (!base && !override) return undefined;\n const out: Appearance = {};\n const mergeSection = <T extends object>(key: keyof NonNullable<Appearance>) => {\n const a = (base && base[key]) || undefined;\n const b = (override && override[key]) || undefined;\n if (!a && !b) return;\n out[key] = { ...(a || {}), ...(b || {}) } as any;\n };\n mergeSection('card');\n mergeSection('header');\n mergeSection('body');\n mergeSection('typography');\n return out;\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, EventEmitter, HostListener, Inject, Input, OnChanges, Optional, Output, SimpleChanges, Type, signal, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute } from '@angular/router';\nimport { take } from 'rxjs/operators';\nimport { DynamicWidgetLoaderDirective } from './dynamic-widget-loader.directive';\nimport { WidgetShellComponent } from './widget-shell.component';\nimport { WidgetShellActionEvent } from './widget-shell.model';\nimport {\n WidgetInstance,\n WidgetPageDefinition,\n WidgetPageLayout,\n} from './widget-page.model';\nimport { ConnectionManagerService } from './connection-manager.service';\nimport { GlobalActionService } from '../services/global-action.service';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage } from '../services/config-storage.service';\nimport { ComponentKeyService } from '../services/component-key.service';\nimport { PageIdentity, buildPageKey } from '../models/page/page-config.model';\nimport { DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR } from '../tokens/external-editors.tokens';\nimport { SETTINGS_PANEL_BRIDGE, SettingsPanelBridge } from '../tokens/settings-panel-bridge.token';\n\n@Component({\n selector: 'praxis-dynamic-page',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, DynamicWidgetLoaderDirective, WidgetShellComponent],\n template: `\n <div class=\"pdx-page-wrapper\" [class.editing]=\"editModeEnabled\">\n @if (editModeEnabled && showPageSettingsButton) {\n <button\n class=\"pdx-page-settings\"\n mat-icon-button\n type=\"button\"\n matTooltip=\"Configurar página\"\n matTooltipPosition=\"below\"\n aria-label=\"Configurar página\"\n (click)=\"openPageSettings()\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n }\n <div\n class=\"pdx-page\"\n [style.gap]=\"pageGap\"\n [style.gridTemplateColumns]=\"gridTemplateColumns\"\n >\n @for (w of widgets(); track w.key) {\n <div class=\"pdx-widget\" [class]=\"w.className || ''\">\n <praxis-widget-shell\n [shell]=\"w.shell\"\n [context]=\"mergedContext\"\n (action)=\"onShellAction(w.key, $event)\"\n >\n <ng-container\n [dynamicWidgetLoader]=\"w.definition\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent(w.key, $event)\"\n ></ng-container>\n </praxis-widget-shell>\n </div>\n }\n </div>\n </div>\n `,\n styles: [\n `\n .pdx-page-wrapper { position: relative; display: block; }\n .pdx-page { display: grid; gap: 16px; grid-template-columns: minmax(0, 1fr); }\n .pdx-page-settings {\n position: sticky;\n top: 8px;\n z-index: 2;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-low);\n color: inherit;\n border-radius: 999px;\n margin-bottom: 8px;\n }\n .pdx-widget {\n position: relative;\n background: var(--pfx-surface, transparent);\n border-radius: 8px;\n }\n .pdx-page-wrapper.editing .pdx-widget-settings { opacity: 1; }\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 /** Enables lightweight editing affordances (shell + page layout). */\n @Input() editModeEnabled = false;\n /** Shows page settings button when edit mode is enabled. */\n @Input() showPageSettingsButton = true;\n /** Optional editor component override for widget shell settings. */\n @Input() shellEditorComponent?: Type<any>;\n /** Optional editor component override for page settings. */\n @Input() pageEditorComponent?: Type<any>;\n /** Enables automatic persistence (load/save) for the page definition. */\n @Input() autoPersist = true;\n /** Optional identity to scope persistence (tenant/user/route). */\n @Input() pageIdentity?: PageIdentity;\n /** Optional instance key for pages rendered multiple times. */\n @Input() componentInstanceId?: string;\n\n @Output() pageChange = new EventEmitter<WidgetPageDefinition>();\n\n widgets = signal<WidgetInstance[]>([]);\n mergedContext: Record<string, any> = {};\n pageGap = '16px';\n gridTemplateColumns = 'minmax(0, 1fr)';\n private pageDefinition?: WidgetPageDefinition;\n private layout?: WidgetPageLayout;\n private appliedPersisted = false;\n private isHydrating = false;\n private persistenceReady = false;\n private warnedMissingKey = false;\n private readonly globalActions = inject(GlobalActionService);\n private readonly storage = inject(ASYNC_CONFIG_STORAGE);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n\n constructor(\n private conn: ConnectionManagerService,\n @Optional() @Inject(SETTINGS_PANEL_BRIDGE) private settingsPanel: SettingsPanelBridge | null,\n @Optional() @Inject(DYNAMIC_PAGE_SHELL_EDITOR) private defaultShellEditor: Type<any> | null,\n @Optional() @Inject(DYNAMIC_PAGE_CONFIG_EDITOR) private defaultPageEditor: Type<any> | null,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['context'] || changes['editModeEnabled']) {\n const parsed = this.parsePage(this.page);\n this.pageDefinition = parsed;\n const rawWidgets = parsed?.widgets || [];\n const widgets = this.applyEditShellActions(rawWidgets);\n this.widgets.set(widgets);\n this.mergedContext = this.mergeContext(parsed?.context, this.context);\n this.applyLayout(parsed?.layout);\n }\n if (this.autoPersist && (changes['pageIdentity'] || changes['componentInstanceId'])) {\n this.appliedPersisted = false;\n this.persistenceReady = false;\n }\n if (this.autoPersist && !this.appliedPersisted && (changes['page'] || changes['context'] || changes['pageIdentity'] || changes['componentInstanceId'])) {\n this.appliedPersisted = true;\n this.loadPersistedPage();\n }\n if (this.autoPersist && this.persistenceReady && changes['page'] && !this.isHydrating) {\n const parsed = this.parsePage(this.page);\n if (parsed) this.savePage(parsed);\n }\n }\n\n onWidgetEvent(fromKey: string, evt: { sourceId: string; output?: string; payload?: any }): void {\n if (evt?.output && this.maybeExecuteMappedAction(fromKey, evt)) {\n return;\n }\n const page = this.pageDefinition || 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 onShellAction(fromKey: string, evt: WidgetShellActionEvent): void {\n if (evt.id === 'widget-settings') {\n this.openWidgetShellSettings(fromKey);\n return;\n }\n if (this.handleSetInputCommand(fromKey, evt)) return;\n if (this.maybeExecuteGlobalCommand(fromKey, evt)) return;\n const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);\n if (!output) return;\n this.onWidgetEvent(fromKey, { sourceId: fromKey, output, payload: evt.payload });\n }\n\n private handleSetInputCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n if (evt?.command !== 'pdx:set-input') return false;\n const payload = evt?.payload as any;\n const input = typeof payload?.input === 'string' ? payload.input.trim() : '';\n if (!input) return true;\n const value = payload?.value;\n const widgets = this.conn.applyMatch(\n [...(this.widgets() as any)],\n { to: { widget: fromKey, input }, set: value } as any,\n { payload: value } as any,\n ) as any;\n this.widgets.set(widgets);\n return true;\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 maybeExecuteMappedAction(\n fromKey: string,\n evt: { output?: string; payload?: any },\n ): boolean {\n const output = evt?.output;\n if (!output) return false;\n const page = this.pageDefinition || this.parsePage(this.page);\n const widget = page?.widgets?.find((w) => w.key === fromKey);\n const mapping = widget?.definition?.outputs?.[output];\n if (!mapping || mapping === 'emit') return false;\n const actionId = (mapping as any).type;\n if (!actionId) return true;\n const payload = this.resolveActionPayload((mapping as any).params, evt, fromKey);\n void this.globalActions.execute(actionId, payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output,\n payload: evt?.payload,\n pageContext: this.mergedContext || undefined,\n });\n return true;\n }\n\n private maybeExecuteGlobalCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n const command = evt?.command || '';\n if (!command) return false;\n const prefix = command.startsWith('global:')\n ? 'global:'\n : command.startsWith('global.')\n ? 'global.'\n : '';\n if (!prefix) return false;\n const actionId = command.slice(prefix.length).trim();\n if (!actionId) return true;\n void this.globalActions.execute(actionId, evt.payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output: evt.emit,\n payload: evt.payload,\n pageContext: this.mergedContext || undefined,\n meta: { origin: 'shell' },\n });\n return true;\n }\n\n private resolveActionPayload(\n params: Record<string, any> | undefined,\n evt: { output?: string; payload?: any },\n fromKey: string,\n ): any {\n if (!params) return evt?.payload;\n const ctx = {\n payload: evt?.payload,\n output: evt?.output,\n sourceId: fromKey,\n widgetKey: fromKey,\n context: this.mergedContext || undefined,\n };\n return this.resolveTemplate(params, ctx);\n }\n\n private resolveTemplate(raw: any, ctx: Record<string, any>): any {\n if (typeof raw === 'string') {\n const singleExpr = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (singleExpr) return this.lookup(ctx, singleExpr[1].trim());\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(ctx, path.trim());\n return v != null ? String(v) : '';\n });\n }\n if (Array.isArray(raw)) return raw.map((v) => this.resolveTemplate(v, ctx));\n if (raw && typeof raw === 'object') {\n const out: any = {};\n for (const [k, v] of Object.entries(raw)) out[k] = this.resolveTemplate(v, ctx);\n return out;\n }\n return raw;\n }\n\n private lookup(ctx: any, path: string): any {\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\n }\n\n openWidgetShellSettings(key: string): void {\n if (!this.settingsPanel) return;\n const editor = this.shellEditorComponent || this.defaultShellEditor;\n if (!editor) return;\n const page = this.ensurePageDefinition();\n const widget = page.widgets.find((w) => w.key === key);\n if (!widget) return;\n const uiShell = (page.context as any)?.ui?.shell || {};\n\n const ref = this.settingsPanel.open({\n id: `dynamic-page-shell:${key}`,\n title: 'Configurar Card',\n content: {\n component: editor,\n inputs: {\n shell: widget.shell || null,\n widgetKey: key,\n widgetType: widget.definition?.id,\n presets: uiShell?.presets || null,\n pagePreset: uiShell?.preset || null,\n },\n },\n });\n\n ref.applied$.subscribe((result) => this.applyWidgetShell(key, result, false));\n ref.saved$.subscribe((result) => this.applyWidgetShell(key, result, true));\n }\n\n openPageSettings(): void {\n if (!this.settingsPanel) return;\n const editor = this.pageEditorComponent || this.defaultPageEditor;\n if (!editor) return;\n const page = this.ensurePageDefinition();\n const uiShell = (page.context as any)?.ui?.shell || {};\n const ref = this.settingsPanel.open({\n id: 'dynamic-page-settings',\n title: 'Configurar Página',\n content: {\n component: editor,\n inputs: {\n layout: page.layout || null,\n presets: uiShell?.presets || null,\n pagePreset: uiShell?.preset || null,\n },\n },\n });\n\n ref.applied$.subscribe((result) => this.applyPageLayout(result, false));\n ref.saved$.subscribe((result) => this.applyPageLayout(result, true));\n }\n\n private applyWidgetShell(\n key: string,\n result: { shell?: any; applyToAll?: boolean; pagePreset?: string } | null,\n persist: boolean,\n ): void {\n if (!result) return;\n const page = this.ensurePageDefinition();\n const widgets = page.widgets.map((w) => (w.key === key ? { ...w, shell: result.shell ?? null } : w));\n let context = page.context || {};\n if (result.applyToAll && result.pagePreset) {\n const ui = { ...(context as any).ui } as any;\n const shell = { ...(ui?.shell || {}) };\n shell.preset = result.pagePreset;\n ui.shell = shell;\n context = { ...(context as any), ui };\n }\n this.applyPageUpdate({ ...page, widgets, context }, persist);\n }\n\n private applyPageLayout(\n result: { layout?: WidgetPageLayout | null; pagePreset?: string } | null,\n persist: boolean,\n ): void {\n if (!result) return;\n const page = this.ensurePageDefinition();\n const layout = result.layout ?? undefined;\n let context = page.context || {};\n const preset = (result.pagePreset || '').trim();\n const ui = { ...(context as any).ui } as any;\n const shell = { ...(ui?.shell || {}) };\n if (preset) shell.preset = preset;\n else delete shell.preset;\n ui.shell = shell;\n context = { ...(context as any), ui };\n this.applyPageUpdate({ ...page, layout, context }, persist);\n }\n\n private applyPageUpdate(next: WidgetPageDefinition, persist = true): void {\n this.pageDefinition = next;\n this.page = next;\n this.widgets.set(this.applyEditShellActions(next.widgets || []));\n this.mergedContext = this.mergeContext(next.context, this.context);\n this.applyLayout(next.layout);\n this.pageChange.emit(next);\n if (persist && this.autoPersist && !this.isHydrating) {\n this.savePage(next);\n }\n }\n\n private applyLayout(layout?: WidgetPageLayout): void {\n this.layout = layout;\n const orientation = layout?.orientation || 'vertical';\n const columns = orientation === 'columns' ? this.resolveColumns(layout) : 1;\n this.gridTemplateColumns = `repeat(${columns}, minmax(0, 1fr))`;\n this.pageGap = layout?.gap || '16px';\n }\n\n private mergeContext(\n pageContext: Record<string, any> | undefined,\n inputContext: Record<string, any> | null | undefined,\n ): Record<string, any> {\n return { ...(pageContext || {}), ...(inputContext || {}) } as any;\n }\n\n @HostListener('window:resize')\n onWindowResize(): void {\n if (!this.layout || (this.layout.orientation || 'vertical') !== 'columns') return;\n const columns = this.resolveColumns(this.layout);\n this.gridTemplateColumns = `repeat(${columns}, minmax(0, 1fr))`;\n }\n\n private resolveColumns(layout?: WidgetPageLayout): number {\n const base = Math.max(1, Number(layout?.columns) || 2);\n const defaults = {\n sm: 1,\n md: Math.min(2, base),\n lg: Math.min(3, base),\n xl: base,\n };\n const bp = layout?.breakpoints || {};\n const columns = {\n sm: Math.max(1, Number(bp.sm ?? defaults.sm)),\n md: Math.max(1, Number(bp.md ?? defaults.md)),\n lg: Math.max(1, Number(bp.lg ?? defaults.lg)),\n xl: Math.max(1, Number(bp.xl ?? defaults.xl)),\n };\n const width = typeof window !== 'undefined' ? window.innerWidth : 0;\n if (width >= 1536) return columns.xl;\n if (width >= 1280) return columns.lg;\n if (width >= 960) return columns.md;\n if (width >= 640) return columns.sm;\n return 1;\n }\n\n private ensurePageDefinition(): WidgetPageDefinition {\n if (this.pageDefinition) return this.pageDefinition;\n const parsed = this.parsePage(this.page);\n if (parsed) return parsed;\n return { widgets: this.widgets() };\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 private applyEditShellActions(widgets: WidgetInstance[]): WidgetInstance[] {\n if (!this.editModeEnabled) return widgets;\n return widgets.map((w) => {\n if (!w.shell || w.shell.kind === 'none') return w;\n const shell = { ...w.shell };\n const actions = [...(shell.actions || [])];\n if (!actions.some((a) => a.id === 'widget-settings')) {\n actions.push({\n id: 'widget-settings',\n icon: 'settings',\n label: 'Configurar Card',\n placement: 'window',\n variant: 'icon',\n tooltip: 'Configurar Card',\n });\n }\n if (shell.showHeader === false) shell.showHeader = true;\n return { ...w, shell: { ...shell, actions } };\n });\n }\n\n private savePage(page: WidgetPageDefinition): void {\n const key = this.storageKey();\n if (!key) return;\n try {\n this.storage.saveConfig(key, page).pipe(take(1)).subscribe({ error: () => {} });\n } catch {}\n }\n\n private loadPersistedPage(): void {\n const key = this.storageKey();\n if (!key) {\n this.persistenceReady = true;\n return;\n }\n try {\n this.storage.loadConfig<WidgetPageDefinition>(key).pipe(take(1)).subscribe({\n next: (stored) => {\n if (!stored) return;\n this.isHydrating = true;\n this.applyPageUpdate(stored, false);\n this.isHydrating = false;\n },\n error: () => {\n this.persistenceReady = true;\n },\n complete: () => {\n this.persistenceReady = true;\n },\n });\n } catch { return undefined; }\n }\n\n private storageKey(): string | null {\n if (this.pageIdentity?.routePath) {\n const base = buildPageKey(this.pageIdentity);\n const instance = this.sanitizeSegment(this.componentInstanceId);\n return instance ? `dynamic-page:${base}:ik=${instance}` : `dynamic-page:${base}`;\n }\n const id = this.componentKeyId();\n if (!id) this.warnMissingKey();\n return id ? `dynamic-page:${id}` : null;\n }\n\n private componentKeyId(): string | null {\n const scopeId = this.buildPageScopeId(this.pageIdentity);\n return this.componentKeys.buildComponentId({\n componentType: 'praxis-dynamic-page',\n componentId: scopeId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n }\n\n private buildPageScopeId(identity?: PageIdentity): string {\n if (!identity) return 'default';\n const app = identity.appId || 'app';\n const tenant = identity.tenantId || '*';\n const user = identity.userId || '*';\n const parts = [app, tenant, user];\n if (identity.locale) parts.push(identity.locale);\n return parts.join(':');\n }\n\n private warnMissingKey(): void {\n if (this.warnedMissingKey) return;\n this.warnedMissingKey = true;\n console.warn('[DynamicWidgetPage] autoPersist is enabled but no persistence key could be generated.');\n }\n\n private sanitizeSegment(value?: string | null): string {\n if (!value) return '';\n return String(value).trim().replace(/[\\r\\n\\t|:]/g, '-');\n }\n}\n","import { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { DynamicWidgetPageComponent } from './dynamic-widget-page.component';\nimport { ComponentMetadataRegistry } from '../services/component-metadata-registry.service';\nimport { ComponentDocMeta } from '../models/component-doc-metadata.interface';\n\n/** Metadata for Praxis Dynamic Page component */\nexport const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-dynamic-page',\n selector: 'praxis-dynamic-page',\n component: DynamicWidgetPageComponent,\n friendlyName: 'Dynamic Page',\n description: 'Página dinâmica com widgets e conexões em layout de grid responsivo.',\n icon: 'dashboard',\n inputs: [\n { name: 'page', type: 'WidgetPageDefinition', description: 'Definição da página (widgets, layout e conexões).' },\n { name: 'context', type: 'Record<string, any>', description: 'Contexto adicional compartilhado entre widgets.' },\n { name: 'strictValidation', type: 'boolean', description: 'Habilita validação estrita de inputs.' },\n { name: 'editModeEnabled', type: 'boolean', description: 'Habilita affordances de edição na página.' },\n { name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe botão de configuração da página.' },\n { name: 'shellEditorComponent', type: 'Type<any>', description: 'Override do editor de shell dos widgets.' },\n { name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de configuração da página.' },\n { name: 'autoPersist', type: 'boolean', description: 'Ativa persistência automática (load/save) da página.' },\n { name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de persistência (tenant/usuário/rota/locale).' },\n { name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para múltiplas instâncias na mesma rota.' },\n ],\n outputs: [\n { name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a definição da página.' },\n ],\n tags: ['widget', 'page', 'dynamic', 'layout'],\n lib: '@praxisui/core',\n};\n\n/**\n * Provider que registra o metadata no ComponentMetadataRegistry durante o bootstrap.\n */\nexport function providePraxisDynamicPageMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges, computed, signal, inject } from '@angular/core';\nimport { DynamicWidgetLoaderDirective } from './dynamic-widget-loader.directive';\nimport { WidgetShellComponent } from './widget-shell.component';\nimport { WidgetShellActionEvent } from './widget-shell.model';\nimport { GridPageDefinition, GridWidgetInstance } from './grid-page.model';\nimport { ConnectionManagerService } from './connection-manager.service';\nimport { GlobalActionService } from '../services/global-action.service';\n\n@Component({\n selector: 'praxis-dynamic-grid-page',\n standalone: true,\n imports: [CommonModule, DynamicWidgetLoaderDirective, WidgetShellComponent],\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 >\n @for (w of widgets(); track w.key) {\n <div\n class=\"pdx-grid-item\"\n [style.gridColumn]=\"toGridColumn(w)\"\n [style.gridRow]=\"toGridRow(w)\"\n [class]=\"w.className || ''\"\n [class.with-shell]=\"w.shell && w.shell.kind !== 'none'\"\n [class.selected]=\"isSelected(w.key)\"\n (click)=\"onTileClick(w.key, $event)\"\n tabindex=\"0\"\n >\n <praxis-widget-shell\n [shell]=\"w.shell\"\n [context]=\"mergedContext\"\n (action)=\"onShellAction(w.key, $event)\"\n >\n <ng-container\n [dynamicWidgetLoader]=\"w.definition\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n (widgetEvent)=\"onWidgetEvent(w.key, $event)\"\n ></ng-container>\n </praxis-widget-shell>\n </div>\n }\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, var(--md-sys-color-outline-variant) 1px, transparent 1px),\n radial-gradient(circle, var(--md-sys-color-outline-variant) 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-variant, 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-variant, var(--border-color));\n }\n .pdx-grid-item.with-shell { background: transparent; border: none; box-shadow: none; }\n .pdx-grid-item:not(.with-shell):hover, .pdx-grid-item:not(.with-shell):focus-within { box-shadow: var(--mat-elevation-transition), var(--mat-elevation-level6, 0 6px 12px rgba(0,0,0,0.22)); outline: 2px solid var(--md-sys-color-primary); }\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 /** 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 readonly globalActions = inject(GlobalActionService);\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 if (evt?.output && this.maybeExecuteMappedAction(fromKey, evt)) {\n return;\n }\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 onShellAction(fromKey: string, evt: WidgetShellActionEvent): void {\n if (this.maybeExecuteGlobalCommand(fromKey, evt)) return;\n const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);\n if (!output) return;\n this.onWidgetEvent(fromKey, { sourceId: fromKey, output, payload: evt.payload });\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 maybeExecuteMappedAction(\n fromKey: string,\n evt: { output?: string; payload?: any },\n ): boolean {\n const output = evt?.output;\n if (!output) return false;\n const page = this.parsePage(this.page);\n const widget = page?.widgets?.find((w) => w.key === fromKey);\n const mapping = widget?.definition?.outputs?.[output];\n if (!mapping || mapping === 'emit') return false;\n const actionId = (mapping as any).type;\n if (!actionId) return true;\n const payload = this.resolveActionPayload((mapping as any).params, evt, fromKey);\n void this.globalActions.execute(actionId, payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output,\n payload: evt?.payload,\n });\n return true;\n }\n\n private maybeExecuteGlobalCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n const command = evt?.command || '';\n if (!command) return false;\n const prefix = command.startsWith('global:')\n ? 'global:'\n : command.startsWith('global.')\n ? 'global.'\n : '';\n if (!prefix) return false;\n const actionId = command.slice(prefix.length).trim();\n if (!actionId) return true;\n void this.globalActions.execute(actionId, evt.payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output: evt.emit,\n payload: evt.payload,\n meta: { origin: 'shell' },\n });\n return true;\n }\n\n private resolveActionPayload(\n params: Record<string, any> | undefined,\n evt: { output?: string; payload?: any },\n fromKey: string,\n ): any {\n if (!params) return evt?.payload;\n const ctx = {\n payload: evt?.payload,\n output: evt?.output,\n sourceId: fromKey,\n widgetKey: fromKey,\n };\n return this.resolveTemplate(params, ctx);\n }\n\n private resolveTemplate(raw: any, ctx: Record<string, any>): any {\n if (typeof raw === 'string') {\n const singleExpr = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (singleExpr) return this.lookup(ctx, singleExpr[1].trim());\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(ctx, path.trim());\n return v != null ? String(v) : '';\n });\n }\n if (Array.isArray(raw)) return raw.map((v) => this.resolveTemplate(v, ctx));\n if (raw && typeof raw === 'object') {\n const out: any = {};\n for (const [k, v] of Object.entries(raw)) out[k] = this.resolveTemplate(v, ctx);\n return out;\n }\n return raw;\n }\n\n private lookup(ctx: any, path: string): any {\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\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\n class=\"empty-card\"\n [class.empty-inline]=\"inline\"\n [class.tone-primary]=\"tone === 'primary'\"\n [class.tone-secondary]=\"tone === 'secondary'\"\n appearance=\"outlined\"\n >\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 {\n display: block;\n margin: 12px;\n border-color: var(--md-sys-color-outline-variant);\n --empty-icon-color: var(--md-sys-color-on-surface-variant);\n }\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; color: var(--empty-icon-color); }\n .texts { display: grid; gap: 4px; }\n .title { margin: 0; font-size: 16px; font-weight: 600; color: var(--md-sys-color-on-surface); }\n .desc { margin: 0; color: var(--md-sys-color-on-surface-variant); }\n .actions { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }\n .empty-card.tone-primary { --empty-icon-color: var(--md-sys-color-primary); }\n .empty-card.tone-secondary { --empty-icon-color: var(--md-sys-color-secondary); }\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 @Input() tone: 'neutral' | 'primary' | 'secondary' = 'neutral';\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 class=\"pdx-quick-connect\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rota do recurso (API)</mat-label>\n <input\n matInput\n [(ngModel)]=\"resourcePath\"\n (ngModelChange)=\"updateState()\"\n placeholder=\"ex.: human-resources/departamentos\"\n />\n <mat-icon matSuffix [praxisIcon]=\"'link'\"></mat-icon>\n <mat-error *ngIf=\"showInvalid()\">Use apenas letras, números, /, - ou _.</mat-error>\n </mat-form-field>\n <small class=\"pdx-quick-connect__hint\">Conecte o componente à fonte de dados (ex.: /api/&lt;rota-do-recurso&gt;)</small>\n <small class=\"pdx-quick-connect__hint\" *ngIf=\"normalizedPath() && normalizedPath() !== resourcePath\">\n Rota normalizada: {{ normalizedPath() }}\n </small>\n </div>\n `,\n styles: [`\n .pdx-quick-connect {\n display: grid;\n gap: 12px;\n padding: 12px;\n border-radius: 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-on-surface);\n }\n .pdx-quick-connect__hint {\n color: var(--md-sys-color-on-surface-variant);\n font-size: 0.9rem;\n }\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 const trimmed = this.resourcePath?.trim() || '';\n this.isValid$.next(!!trimmed && this.isValidPath(trimmed));\n }\n\n getSettingsValue(): any {\n return { resourcePath: this.normalizedPath() };\n }\n\n onSave(): any {\n return this.getSettingsValue();\n }\n\n showInvalid(): boolean {\n const trimmed = this.resourcePath?.trim() || '';\n return !!trimmed && !this.isValidPath(trimmed);\n }\n\n normalizedPath(): string {\n const trimmed = this.resourcePath?.trim() || '';\n if (!trimmed) return '';\n if (trimmed.startsWith('/')) return trimmed;\n if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) return trimmed;\n return `/${trimmed}`;\n }\n\n private isValidPath(value: string): boolean {\n if (value.startsWith('http://') || value.startsWith('https://')) return true;\n return /^\\/?[a-zA-Z0-9][a-zA-Z0-9/_-]*$/.test(value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, HostListener, Inject, Input, Output, Optional, ViewChild, ElementRef } 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';\nimport { MatTooltipModule } from '@angular/material/tooltip';\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, MatTooltipModule],\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\n #searchInput\n matInput\n [(ngModel)]=\"query\"\n placeholder=\"ex.: star, schedule\"\n (ngModelChange)=\"onFilter()\"\n (keydown.enter)=\"confirmTyped()\"\n />\n </mat-form-field>\n <button mat-stroked-button color=\"primary\" (click)=\"clear()\">\n <mat-icon>backspace</mat-icon>\n <span>Limpar</span>\n </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 <span>Material Icons</span>\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-stats\">\n <span>{{ filtered.length }} resultado(s)</span>\n <span class=\"pip-shortcut\">Atalho: pressione / para focar a busca</span>\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)\" [class.selected]=\"isSelectedIcon(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-empty\" *ngIf=\"!filtered.length\">\n Nenhum ícone encontrado. Você pode usar o nome digitado mesmo assim.\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;color:var(--md-sys-color-on-surface);}\n .pip-head{display:flex;gap:12px;align-items:center;margin-bottom:12px;flex-wrap:wrap;}\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 var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);color:inherit;cursor:pointer;transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease}\n .pip-item:hover{background:var(--md-sys-color-surface-container)}\n .pip-item:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}\n .pip-item.selected{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px var(--md-sys-color-primary)}\n .pip-name{font-size:12px;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n .pip-hint{font-size:12px;color:var(--md-sys-color-on-surface-variant);margin:-6px 0 8px 0}\n .pip-stats{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--md-sys-color-on-surface-variant);margin-bottom:8px}\n .pip-shortcut{opacity:.9}\n .pip-empty{padding:12px;border:1px dashed var(--md-sys-color-outline-variant);border-radius:10px;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);margin-top:8px}\n .pip-footer{display:flex;gap:12px;align-items:center;margin-top:10px}\n .pip-typed{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;font-size:12px;color:var(--md-sys-color-on-surface)}\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 and inherit themed color */\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;color: currentColor;}\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 @ViewChild('searchInput') searchInput?: ElementRef<HTMLInputElement>;\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 @HostListener('document:keydown', ['$event'])\n onGlobalKey(ev: KeyboardEvent): void {\n if (ev.key !== '/') return;\n const target = ev.target as HTMLElement | null;\n const tag = (target?.tagName || '').toLowerCase();\n if (tag === 'input' || tag === 'textarea' || target?.isContentEditable) {\n return;\n }\n ev.preventDefault();\n this.focusSearch();\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 isSelectedIcon(icon: string): boolean {\n return (this.value || '').trim() === icon;\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 private focusSearch(): void {\n this.searchInput?.nativeElement?.focus();\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","import { InjectionToken } from '@angular/core';\nimport { SchemaViewerContext } from '../components/schema-viewer/schema-viewer.types';\n\n/** Optional DI token used by SchemaViewer when input is not provided. */\nexport const SCHEMA_VIEWER_CONTEXT = new InjectionToken<SchemaViewerContext>('SCHEMA_VIEWER_CONTEXT');\n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges, computed, effect, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ComponentMetadataRegistry } from '../../services/component-metadata-registry.service';\nimport { ComponentDocMeta } from '../../models/component-doc-metadata.interface';\nimport { SchemaNormalizerService } from '../../services/schema-normalizer.service';\nimport { FieldDefinition } from '../../models/field-definition.model';\nimport { SchemaViewerContext } from './schema-viewer.types';\nimport { SCHEMA_VIEWER_CONTEXT } from '../../tokens/schema-viewer.token';\n\n@Component({\n selector: 'praxis-schema-viewer',\n standalone: true,\n imports: [CommonModule, MatTabsModule, MatCardModule, MatButtonModule, MatIconModule],\n template: `\n <mat-card class=\"schema-viewer\" appearance=\"outlined\">\n <mat-card-header>\n <div class=\"header\">\n <div class=\"title\">\n <mat-icon fontIcon=\"schema\"></mat-icon>\n <h3>{{ ctx()?.title || 'Schema & Metadata' }}</h3>\n </div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"copyAll()\" [disabled]=\"!hasAnyData()\">\n <mat-icon>content_copy</mat-icon>\n Copiar tudo\n </button>\n </div>\n </div>\n <div class=\"notes\" *ngIf=\"ctx()?.notes\">{{ ctx()?.notes }}</div>\n <div class=\"copy-status\" *ngIf=\"copyNote()\">{{ copyNote() }}</div>\n </mat-card-header>\n <mat-card-content>\n <mat-tab-group>\n <mat-tab label=\"Component\">\n <div class=\"section\">\n <div class=\"section-actions\">\n <button mat-stroked-button (click)=\"copySection('component')\" [disabled]=\"!componentMeta()\">\n <mat-icon>content_copy</mat-icon>\n Copiar seção\n </button>\n </div>\n <div class=\"kv\"><span>Id</span><code>{{ componentMeta()?.id }}</code></div>\n <div class=\"kv\"><span>Selector</span><code>{{ componentMeta()?.selector }}</code></div>\n <div class=\"kv\"><span>Lib</span><code>{{ componentMeta()?.lib || '—' }}</code></div>\n <div class=\"kv\"><span>Friendly</span><code>{{ componentMeta()?.friendlyName }}</code></div>\n <div class=\"kv\" *ngIf=\"componentMeta()?.description\"><span>Descrição</span><code>{{ componentMeta()?.description }}</code></div>\n\n <div class=\"sub\">Inputs</div>\n <pre class=\"pretty\" *ngIf=\"componentMeta()?.inputs?.length; else noInputs\">{{ componentMeta()?.inputs | json }}</pre>\n <ng-template #noInputs><div class=\"muted\">Sem inputs documentados.</div></ng-template>\n\n <div class=\"sub\">Outputs</div>\n <pre class=\"pretty\" *ngIf=\"componentMeta()?.outputs?.length; else noOutputs\">{{ componentMeta()?.outputs | json }}</pre>\n <ng-template #noOutputs><div class=\"muted\">Sem outputs documentados.</div></ng-template>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Config\">\n <div class=\"section\">\n <div class=\"section-actions\">\n <button mat-stroked-button (click)=\"copySection('config')\" [disabled]=\"!(ctx()?.rawConfig || ctx()?.effectiveConfig)\">\n <mat-icon>content_copy</mat-icon>\n Copiar seção\n </button>\n </div>\n <div class=\"sub\">Raw</div>\n <pre class=\"pretty\" *ngIf=\"ctx()?.rawConfig as rc; else noRaw\">{{ rc | json }}</pre>\n <ng-template #noRaw><div class=\"muted\">Sem configuração fornecida.</div></ng-template>\n\n <div class=\"sub\">Effective</div>\n <pre class=\"pretty\" *ngIf=\"ctx()?.effectiveConfig as ec; else noEff\">{{ ec | json }}</pre>\n <ng-template #noEff><div class=\"muted\">Sem configuração efetiva (usando raw/defaults do componente).</div></ng-template>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Backend Schema\">\n <div class=\"section\">\n <div class=\"section-actions\">\n <button mat-stroked-button (click)=\"copySection('backend')\" [disabled]=\"!ctx()?.backendSchema\">\n <mat-icon>content_copy</mat-icon>\n Copiar seção\n </button>\n </div>\n <div class=\"kv\" *ngIf=\"ctx()?.schemaMeta as m\">\n <span>Path</span><code>{{ m.path }}</code>\n </div>\n <div class=\"kv\" *ngIf=\"ctx()?.schemaMeta as m\">\n <span>Operation</span><code>{{ m.operation }}</code>\n </div>\n <div class=\"kv\" *ngIf=\"ctx()?.schemaMeta as m\">\n <span>Schema Type</span><code>{{ m.schemaType }}</code>\n </div>\n <div class=\"kv\" *ngIf=\"ctx()?.schemaMeta?.schemaHash\">\n <span>Server Hash</span><code>{{ ctx()?.schemaMeta?.schemaHash }}</code>\n </div>\n <pre class=\"pretty\" *ngIf=\"ctx()?.backendSchema as bs; else noSchema\">{{ bs | json }}</pre>\n <ng-template #noSchema><div class=\"muted\">Sem schema de backend.</div></ng-template>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Fields\">\n <div class=\"section\">\n <div class=\"section-actions\">\n <button mat-stroked-button (click)=\"copySection('fields')\" [disabled]=\"!normalizedFields().length\">\n <mat-icon>content_copy</mat-icon>\n Copiar seção\n </button>\n </div>\n <div class=\"muted\" *ngIf=\"!normalizedFields().length\">Sem campos normalizados.</div>\n <pre class=\"pretty\" *ngIf=\"normalizedFields().length\">{{ normalizedFields() | json }}</pre>\n </div>\n </mat-tab>\n </mat-tab-group>\n </mat-card-content>\n </mat-card>\n `,\n styles: [\n `\n .schema-viewer { display: block; border-color: var(--md-sys-color-outline-variant); }\n .header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .title { display: flex; align-items: center; gap: 8px; }\n .title h3 { margin: 0; font-weight: 600; color: var(--md-sys-color-on-surface); }\n .notes { margin-top: 6px; color: var(--md-sys-color-on-surface-variant); font-size: 12px; }\n .copy-status { margin-top: 6px; font-size: 12px; color: var(--md-sys-color-primary); }\n .section { padding: 12px; }\n .section-actions { display: flex; justify-content: flex-end; margin-bottom: 8px; }\n .sub { font-weight: 600; margin: 12px 0 4px; color: var(--md-sys-color-on-surface); }\n .pretty { background: var(--md-sys-color-surface-container); padding: 10px; border-radius: 8px; overflow: auto; border: 1px solid var(--md-sys-color-outline-variant); }\n .kv { display: grid; grid-template-columns: 140px 1fr; align-items: baseline; gap: 8px; margin: 2px 0; }\n .kv > span { color: var(--md-sys-color-on-surface-variant); }\n .kv > code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; }\n .muted { color: var(--md-sys-color-on-surface-variant); }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SchemaViewerComponent implements OnChanges {\n private readonly registry = inject(ComponentMetadataRegistry);\n private readonly normalizer = inject(SchemaNormalizerService);\n private readonly injected = inject(SCHEMA_VIEWER_CONTEXT, { optional: true });\n\n @Input() context?: SchemaViewerContext;\n\n // Internal reactive state\n private _ctx = signal<SchemaViewerContext | undefined>(undefined);\n ctx = computed(() => this._ctx());\n\n private _componentMeta = signal<ComponentDocMeta | undefined>(undefined);\n componentMeta = computed(() => this._componentMeta());\n\n private _normalizedFields = signal<FieldDefinition[]>([]);\n normalizedFields = computed(() => this._normalizedFields());\n private _copyNote = signal<string | null>(null);\n copyNote = computed(() => this._copyNote());\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('context' in changes) {\n this.refresh();\n }\n }\n\n private refresh(): void {\n const ctx = this.context || this.injected || undefined;\n this._ctx.set(ctx);\n if (!ctx) {\n this._componentMeta.set(undefined);\n this._normalizedFields.set([]);\n return;\n }\n\n const meta = ctx.componentId ? this.registry.get(ctx.componentId) : undefined;\n this._componentMeta.set(meta);\n\n // Compute normalized fields if needed\n if (ctx.normalizedFields && ctx.normalizedFields.length) {\n this._normalizedFields.set(ctx.normalizedFields);\n } else if (ctx.backendSchema) {\n try {\n const defs = this.normalizer.normalizeSchema(ctx.backendSchema as any);\n this._normalizedFields.set(defs || []);\n } catch {\n this._normalizedFields.set([]);\n }\n } else {\n this._normalizedFields.set([]);\n }\n }\n\n hasAnyData(): boolean {\n const c = this._ctx();\n return !!(c?.rawConfig || c?.effectiveConfig || c?.backendSchema || (this._normalizedFields()?.length));\n }\n\n copyAll(): void {\n const c = this._ctx();\n const payload = {\n component: this._componentMeta(),\n config: { raw: c?.rawConfig, effective: c?.effectiveConfig },\n backendSchema: { meta: c?.schemaMeta, body: c?.backendSchema },\n fields: this._normalizedFields(),\n };\n try {\n const text = JSON.stringify(payload, null, 2);\n if (typeof navigator !== 'undefined' && (navigator as any).clipboard?.writeText) {\n (navigator as any).clipboard.writeText(text);\n } else {\n // Fallback: create a temp textarea\n const ta = document.createElement('textarea');\n ta.value = text;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n } catch {}\n }\n\n copySection(kind: 'component' | 'config' | 'backend' | 'fields'): void {\n const c = this._ctx();\n let payload: any = null;\n if (kind === 'component') payload = this._componentMeta();\n if (kind === 'config') payload = { raw: c?.rawConfig, effective: c?.effectiveConfig };\n if (kind === 'backend') payload = { meta: c?.schemaMeta, body: c?.backendSchema };\n if (kind === 'fields') payload = this._normalizedFields();\n this.copyPayload(payload);\n }\n\n private copyPayload(payload: any): void {\n if (!payload) return;\n try {\n const text = JSON.stringify(payload, null, 2);\n if (typeof navigator !== 'undefined' && (navigator as any).clipboard?.writeText) {\n (navigator as any).clipboard.writeText(text);\n } else {\n const ta = document.createElement('textarea');\n ta.value = text;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n this.flashNote('Copiado para a área de transferência.');\n } catch {}\n }\n\n private flashNote(message: string): void {\n this._copyNote.set(message);\n setTimeout(() => this._copyNote.set(null), 1600);\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 parseJsonResponseOrEmpty(\n res: Response,\n context = 'response',\n): Promise<any> {\n const raw = await res.text();\n if (!raw || !raw.trim()) {\n return {};\n }\n try {\n return JSON.parse(raw);\n } catch (error) {\n const e = new Error(`${context}: invalid JSON payload`);\n (e as any).cause = error;\n throw e;\n }\n}\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 if (!res.ok) {\n const raw = await res.text().catch(() => '');\n const bodyHint = raw?.trim() ? `: ${raw.trim().slice(0, 240)}` : '';\n throw new Error(\n `fetchWithETag failed (${res.status} ${res.statusText || 'HTTP error'})${bodyHint}`,\n );\n }\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 parseJsonResponseOrEmpty(res, 'fetchWithETag');\n return { status: 200, schema, schemaHash };\n}\n","import { buildSchemaId, SchemaIdParams } from '../utils/schema-id.util';\nimport { fetchWithETag, parseJsonResponseOrEmpty } 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 {\n apiOrigin = new URL(params.baseUrl).origin;\n } catch {\n try { apiOrigin = (globalThis as any)?.location?.origin || ''; } catch {}\n }\n const schemaId = buildSchemaId({ ...params, apiOrigin });\n const cached = await this.cache.get(schemaId);\n\n // Build URL with query params\n let u: URL;\n try {\n u = new URL(params.baseUrl);\n } catch (err) {\n // Accept relative baseUrl by resolving against the app origin when available\n const origin = (() => {\n try { return (globalThis as any)?.location?.origin as string | undefined; } catch { return undefined; }\n })();\n if (origin && origin.startsWith('http')) {\n u = new URL(params.baseUrl, origin);\n } else {\n // Friendly error for hosts: instruct to set absolute baseUrl or provide runtime origin\n const e = new Error(\n `Failed to construct schema URL. API_URL.baseUrl appears relative and no runtime origin is available. ` +\n `Set API_URL.baseUrl to an absolute URL (e.g., http://localhost:4200/api) or run in a browser context. ` +\n `Received baseUrl=\"${params.baseUrl}\".`\n );\n (e as any).cause = err;\n throw e;\n }\n }\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 if (!refetch.ok) {\n const raw = await refetch.text().catch(() => '');\n const bodyHint = raw?.trim() ? `: ${raw.trim().slice(0, 240)}` : '';\n throw new Error(\n `SchemaMetadataClient refetch failed (${refetch.status} ${refetch.statusText || 'HTTP error'})${bodyHint}`,\n );\n }\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 parseJsonResponseOrEmpty(refetch, 'SchemaMetadataClient refetch');\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\n */\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/global-action.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/component-key.service';\nexport * from './lib/services/telemetry.service';\nexport * from './lib/services/field-selector-registry.service';\nexport * from './lib/services/loading-orchestrator.service';\nexport * from './lib/services/praxis-loading.interceptor';\nexport * from './lib/services/default-loading-renderer.service';\nexport * from './lib/providers/field-selector-registry.providers';\nexport * from './lib/providers/global-action-toast.provider';\nexport * from './lib/providers/global-action-analytics.provider';\nexport * from './lib/providers/loading.providers';\n// Logging\nexport * from './lib/logging';\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/global-action.providers';\nexport * from './lib/tokens/global-action.token';\nexport * from './lib/tokens/global-action.catalog';\nexport type { GlobalActionId, GlobalActionParam, GlobalActionSpec } from './lib/actions/global-action-catalog';\nexport { GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG } from './lib/actions/global-action-catalog';\nexport * from './lib/tokens/settings-panel-bridge.token';\nexport * from './lib/tokens/external-editors.tokens';\nexport * from './lib/tokens/field-selector-registry.token';\nexport * from './lib/tokens/loading-context.token';\nexport * from './lib/tokens/loading-renderer.token';\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/form/rule-property.schema';\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/global-action.model';\nexport * from './lib/models/back-config.model';\nexport * from './lib/models/loading-context.model';\nexport type { LoadingPhase as LoadingStatePhase, LoadingState } from './lib/models/loading-state.model';\n\n// Metadata constants\nexport * from './lib/metadata/field-control-type.constants';\nexport * from './lib/metadata/field-selector-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';\nexport * from './lib/helpers/rule-migration.helper';\n// Utils\nexport * from './lib/utils/text-transform.util';\nexport * from './lib/utils/deep-merge.util';\nexport * from './lib/utils/date-range-presets.util';\nexport * from './lib/utils/control-type-normalizer.util';\nexport * from './lib/utils/inline-filter-controls.util';\n// Actions\nexport * from './lib/actions/global-action-ui';\n\n// AI capabilities\nexport * from './lib/ai/capability.types';\nexport * from './lib/ai/field-metadata-ai-capabilities';\nexport {\n DYNAMIC_PAGE_AI_CAPABILITIES,\n} from './lib/ai/dynamic-page-ai-capabilities';\nexport type {\n Capability as DynamicPageCapability,\n CapabilityCatalog as DynamicPageCapabilityCatalog,\n CapabilityCategory as DynamicPageCapabilityCategory,\n ValueKind as DynamicPageValueKind,\n} from './lib/ai/dynamic-page-ai-capabilities';\nexport * from './lib/ai/dynamic-page-context-pack';\nexport * from './lib/ai/component-context.schema';\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/widget-shell.model';\nexport * from './lib/widgets/widget-shell.component';\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/dynamic-widget-page.metadata';\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// Schema Viewer (for showcases/docs)\nexport * from './lib/components/schema-viewer/schema-viewer.component';\nexport * from './lib/components/schema-viewer/schema-viewer.types';\nexport * from './lib/tokens/schema-viewer.token';\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/cache/memory-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.LoggerService","i1.TelemetryService","GLOBAL_ACTION_CATALOG","ENUMS","i1","i1.ConnectionManagerService","i4","i2","i5","i3","i6","i7","i9","applyLocal"],"mappings":"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"}