{"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/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","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      // 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\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 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, { 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; 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    ).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; 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, { 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.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  /**\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   * 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      | '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    /** 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: '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  /** 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: 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 { 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';\nimport { getDefaultFormHints, FormModeHints } from '../models/form/form-config.model';\nimport { fillUndefined } from '../utils/deep-merge.util';\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      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  /**\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","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 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    '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\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 var(--md-sys-color-outline-variant, rgba(0,0,0,.14));border-radius:10px;background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer}\n  .pip-item:hover{background:color-mix(in oklab, var(--md-sys-color-on-surface) 8%, transparent)}\n  .pip-name{font-size:12px;color:var(--md-sys-color-on-surface-variant, rgba(0,0,0,.6));white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n  .pip-hint{font-size:12px;color:var(--md-sys-color-on-surface-variant, 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:var(--md-sys-color-on-surface, 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 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\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","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      </mat-card-header>\n      <mat-card-content>\n        <mat-tab-group>\n          <mat-tab label=\"Component\">\n            <div class=\"section\">\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=\"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=\"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=\"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; }\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; }\n    .notes { margin-top: 6px; opacity: .78; font-size: 12px; }\n    .section { padding: 12px; }\n    .sub { font-weight: 600; margin: 12px 0 4px; opacity: .9; }\n    .pretty { background: #0b0b0b0d; padding: 8px; border-radius: 4px; overflow: auto; }\n    .kv { display: grid; grid-template-columns: 140px 1fr; align-items: baseline; gap: 8px; margin: 2px 0; }\n    .kv > span { opacity: .75; }\n    .kv > code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; }\n    .muted { opacity: .6; }\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\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\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 {\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        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// 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/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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"}