@praxisui/settings-panel 3.0.0-beta.2 → 3.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"praxisui-settings-panel.mjs","sources":["../../../projects/praxis-settings-panel/src/lib/settings-panel.component.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.component.html","../../../projects/praxis-settings-panel/src/lib/settings-panel.ref.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.tokens.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.service.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-admin.service.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.schema.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.tokens.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.component.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/open-global-config-editor.ts","../../../projects/praxis-settings-panel/src/lib/ai/settings-panel-ai-capabilities.ts","../../../projects/praxis-settings-panel/src/praxisui-settings-panel.ts"],"sourcesContent":["import {\n Component,\n ComponentRef,\n HostListener,\n Injector,\n DestroyRef,\n inject,\n Type,\n ViewChild,\n ChangeDetectorRef,\n ViewContainerRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { SettingsPanelRef } from './settings-panel.ref';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { firstValueFrom, isObservable, of } from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n} from '@praxisui/dynamic-fields';\n\n@Component({\n selector: 'praxis-settings-panel',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n CdkTrapFocus,\n MatProgressSpinnerModule,\n MatDialogModule,\n ],\n templateUrl: './settings-panel.component.html',\n styleUrls: ['./settings-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SettingsPanelComponent {\n title = '';\n titleIcon?: string;\n expanded = false;\n ref!: SettingsPanelRef;\n contentRef?: ComponentRef<any>;\n private static nextId = 0;\n titleId = `praxis-settings-panel-title-${SettingsPanelComponent.nextId++}`;\n\n isDirty = false;\n isValid = true;\n isBusy = false;\n private lastSavedAt: number | null = null;\n\n get canApply(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get canSave(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get disabledReason(): string {\n if (this.isBusy) {\n return 'Operação em andamento...';\n }\n if (!this.isValid) {\n return 'O formulário contém erros que precisam ser corrigidos.';\n }\n if (!this.isDirty) {\n return 'Nenhuma alteração para aplicar ou salvar.';\n }\n return '';\n }\n\n get statusTone(): 'busy' | 'dirty' | 'saved' | 'idle' {\n if (this.isBusy) return 'busy';\n if (this.isDirty) return 'dirty';\n if (this.lastSavedAt) return 'saved';\n return 'idle';\n }\n\n get statusMessage(): string {\n if (this.statusTone === 'busy') {\n return 'Operação em andamento...';\n }\n if (this.statusTone === 'dirty') {\n return 'Alterações não salvas';\n }\n if (this.statusTone === 'saved' && this.lastSavedAt) {\n return `Salvo às ${this.formatClock(this.lastSavedAt)}`;\n }\n return 'Sem alterações';\n }\n\n private readonly destroyRef = inject(DestroyRef);\n\n @ViewChild('contentHost', { read: ViewContainerRef, static: true })\n private contentHost!: ViewContainerRef;\n\n constructor(private cdr: ChangeDetectorRef, private dialog: MatDialog) {}\n\n attachContent(\n component: Type<any>,\n injector: Injector,\n ref: SettingsPanelRef,\n ): void {\n this.ref = ref;\n this.contentRef = this.contentHost.createComponent(component, {\n injector,\n });\n\n const instance: any = this.contentRef.instance;\n\n if (instance.isDirty$) {\n instance.isDirty$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((dirty: boolean) => {\n this.isDirty = dirty;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isValid$) {\n instance.isValid$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((valid: boolean) => {\n this.isValid = valid;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isBusy$) {\n instance.isBusy$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((busy: boolean) => {\n this.isBusy = busy;\n this.cdr.markForCheck();\n });\n }\n\n // Generic output bridging: if the embedded component emits `selected`, save and close.\n try {\n const selected$ = instance?.selected;\n if (selected$ && typeof selected$.subscribe === 'function') {\n const obs = typeof selected$.pipe === 'function'\n ? selected$.pipe(takeUntilDestroyed(this.destroyRef))\n : selected$;\n obs.subscribe((value: any) => {\n // Apply emits value to the opener without closing the panel.\n this.ref.apply(value);\n });\n }\n } catch {}\n }\n\n onReset(): void {\n const dialogData: ConfirmDialogData = {\n title: 'Redefinir Alterações',\n message: 'Tem certeza de que deseja redefinir todas as alterações?',\n confirmText: 'Redefinir',\n cancelText: 'Cancelar',\n type: 'warning',\n icon: 'restart_alt',\n };\n\n this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed()\n .pipe(filter((confirmed) => confirmed))\n .subscribe(() => {\n this.contentRef?.instance?.reset?.();\n this.lastSavedAt = null;\n this.ref.reset();\n });\n }\n\n onApply(): void {\n if (!this.canApply) return;\n const value = this.contentRef?.instance?.getSettingsValue?.();\n this.ref.apply(value);\n }\n\n onSave(): void {\n if (!this.canSave) return;\n const instance: any = this.contentRef?.instance;\n const result = instance?.onSave?.();\n\n if (isObservable(result)) {\n firstValueFrom(result)\n .then((value) => this.emitSave(value))\n .catch(() => {});\n } else if (result instanceof Promise) {\n result\n .then((value: unknown) => this.emitSave(value))\n .catch(() => {});\n } else if (result !== undefined) {\n this.emitSave(result);\n } else {\n const value = instance?.getSettingsValue?.();\n this.emitSave(value);\n }\n }\n\n private emitSave(value: unknown): void {\n if (value === undefined) return;\n this.lastSavedAt = Date.now();\n this.isDirty = false;\n this.ref.save(value);\n this.cdr.markForCheck();\n }\n\n private formatClock(timestamp: number): string {\n try {\n return new Intl.DateTimeFormat('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }).format(timestamp);\n } catch {\n return '';\n }\n }\n\n toggleExpand(): void {\n this.expanded = !this.expanded;\n this.cdr.markForCheck();\n }\n\n onCancel(): void {\n of(this.isDirty)\n .pipe(\n switchMap((dirty) => {\n if (!dirty) {\n return of(true);\n }\n const dialogData: ConfirmDialogData = {\n title: 'Descartar Alterações',\n message:\n 'Você tem alterações não salvas. Tem certeza de que deseja descartá-las?',\n confirmText: 'Descartar',\n cancelText: 'Continuar Editando',\n type: 'warning',\n icon: 'warning',\n };\n return this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed();\n }),\n filter((confirmed) => confirmed),\n )\n .subscribe(() => {\n this.ref.close('cancel');\n });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.onCancel();\n } else if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.onSave();\n } else if ((event.key === 's' || event.key === 'S') && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.onSave();\n }\n }\n}\n","<div\n class=\"settings-panel\"\n data-testid=\"settings-panel-root\"\n [class.expanded]=\"expanded\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n>\n <header class=\"settings-panel-header\">\n <h2 class=\"settings-panel-title\" [id]=\"titleId\">\n <mat-icon *ngIf=\"titleIcon\" class=\"title-icon\" [praxisIcon]=\"titleIcon\"></mat-icon>\n <span>{{ title }}</span>\n </h2>\n <span class=\"spacer\"></span>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-toggle-expand\"\n [attr.aria-label]=\"expanded ? 'Reduzir painel' : 'Expandir painel'\"\n [attr.aria-expanded]=\"expanded\"\n [matTooltip]=\"expanded ? 'Reduzir painel' : 'Expandir painel'\"\n (click)=\"toggleExpand()\"\n >\n <mat-icon [praxisIcon]=\"expanded ? 'close_fullscreen' : 'open_in_full'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-close-icon\"\n aria-label=\"Fechar\"\n matTooltip=\"Fechar\"\n (click)=\"onCancel()\"\n >\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n </header>\n <div\n class=\"settings-panel-status\"\n [attr.data-status]=\"statusTone\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <mat-icon\n aria-hidden=\"true\"\n [praxisIcon]=\"\n statusTone === 'dirty'\n ? 'warning'\n : statusTone === 'saved'\n ? 'check_circle'\n : statusTone === 'busy'\n ? 'autorenew'\n : 'info'\n \"\n ></mat-icon>\n <span>{{ statusMessage }}</span>\n </div>\n <div class=\"settings-panel-body\">\n <ng-template #contentHost></ng-template>\n </div>\n <footer class=\"settings-panel-footer\">\n <button mat-button type=\"button\" data-testid=\"settings-panel-reset\" (click)=\"onReset()\" [disabled]=\"isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'restart_alt'\"></mat-icon>\n <span>Redefinir</span>\n </button>\n <span class=\"spacer\"></span>\n <button\n mat-button\n type=\"button\"\n data-testid=\"settings-panel-cancel\"\n (click)=\"onCancel()\"\n [disabled]=\"isBusy\"\n >\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'close'\"></mat-icon>\n <span>Cancelar</span>\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n data-testid=\"settings-panel-apply\"\n (click)=\"onApply()\"\n [disabled]=\"!canApply\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canApply\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'done'\"></mat-icon>\n <span>Aplicar</span>\n </ng-container>\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n data-testid=\"settings-panel-save\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canSave\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'save'\"></mat-icon>\n <span>Salvar & Fechar</span>\n </ng-container>\n </button>\n </footer>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Subject } from 'rxjs';\nimport { SettingsPanelCloseReason } from './settings-panel.types';\n\nexport class SettingsPanelRef {\n private appliedSubject = new Subject<any>();\n private savedSubject = new Subject<any>();\n private resetSubject = new Subject<void>();\n private closedSubject = new Subject<SettingsPanelCloseReason>();\n\n applied$ = this.appliedSubject.asObservable();\n saved$ = this.savedSubject.asObservable();\n reset$ = this.resetSubject.asObservable();\n closed$ = this.closedSubject.asObservable();\n\n constructor(private overlayRef: OverlayRef) {}\n\n apply(value: any): void {\n this.appliedSubject.next(value);\n }\n\n /**\n * Emits the provided value on {@link saved$} and closes the panel.\n *\n * This should be called with the configuration object returned by the\n * editor's `onSave()` method so that consumers can persist the new settings.\n */\n save(value: any): void {\n this.savedSubject.next(value);\n this.close('save');\n }\n\n reset(): void {\n this.resetSubject.next();\n }\n\n updateSize(width: string | number): void {\n this.overlayRef.updateSize({ width });\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.dispose();\n this.closedSubject.next(reason);\n this.complete();\n }\n\n private complete(): void {\n this.appliedSubject.complete();\n this.savedSubject.complete();\n this.resetSubject.complete();\n this.closedSubject.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { SettingsPanelRef } from './settings-panel.ref';\n\nexport const SETTINGS_PANEL_DATA = new InjectionToken<any>('SETTINGS_PANEL_DATA');\nexport const SETTINGS_PANEL_REF = new InjectionToken<SettingsPanelRef>('SETTINGS_PANEL_REF');\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SettingsPanelComponent } from './settings-panel.component';\nimport { SettingsPanelRef } from './settings-panel.ref';\nimport {\n SettingsPanelCloseReason,\n SettingsPanelConfig,\n} from './settings-panel.types';\nimport {\n SETTINGS_PANEL_DATA,\n SETTINGS_PANEL_REF,\n} from './settings-panel.tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsPanelService {\n private currentRef?: SettingsPanelRef;\n\n constructor(\n private overlay: Overlay,\n private injector: Injector,\n ) { }\n\n /**\n * Opens a new settings panel. If another panel is already open it will be\n * closed before the new one is created. Future improvements may reuse the\n * same overlay when the provided id matches.\n */\n open(config: SettingsPanelConfig): SettingsPanelRef {\n if (this.currentRef) {\n this.currentRef.close('cancel');\n }\n\n const overlayConfig: OverlayConfig = {\n hasBackdrop: true,\n backdropClass: 'praxis-settings-panel-backdrop',\n panelClass: 'praxis-settings-panel-pane',\n positionStrategy: this.overlay.position().global().top('0').right('0'),\n height: '100vh',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n };\n\n const overlayRef = this.overlay.create(overlayConfig);\n const ref = new SettingsPanelRef(overlayRef);\n\n const panelPortal = new ComponentPortal(SettingsPanelComponent);\n const panelRef = overlayRef.attach(panelPortal);\n panelRef.instance.title = config.title;\n (panelRef.instance as any).titleIcon = (config as any).titleIcon;\n panelRef.instance.expanded = config.expanded || false;\n\n const inputs = config.content.inputs;\n try {\n const dbg = inputs && (inputs as any).page ? { hasPage: true, conns: Array.isArray((inputs as any).page.connections) ? (inputs as any).page.connections.length : undefined } : { hasPage: false };\n (console.log || console.debug)('[SettingsPanel] open()', { id: (config as any).id, title: config.title, inputs: dbg });\n } catch { }\n\n const injector = Injector.create({\n providers: [\n { provide: SETTINGS_PANEL_DATA, useValue: inputs },\n { provide: SETTINGS_PANEL_REF, useValue: ref },\n ],\n parent: this.injector,\n });\n panelRef.instance.attachContent(config.content.component, injector, ref);\n\n overlayRef.backdropClick().subscribe(() => ref.close('backdrop'));\n overlayRef.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape') {\n ref.close('esc');\n }\n });\n ref.closed$.subscribe(() => {\n if (this.currentRef === ref) {\n this.currentRef = undefined;\n }\n });\n\n this.currentRef = ref;\n return ref;\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n this.currentRef?.close(reason);\n this.currentRef = undefined;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { GlobalConfigService } from '@praxisui/core';\nimport type { GlobalConfig } from '@praxisui/core';\n\n/**\n * Admin helper to load, patch and persist GlobalConfig.\n * Intended to be used by the Global Config Editor UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigAdminService {\n private readonly global = inject(GlobalConfigService) as GlobalConfigService;\n\n /** Returns the effective merged configuration (providers + storage). */\n getEffectiveConfig(): GlobalConfig {\n // buildConfig is internal in service; use public getters instead\n return {\n crud: this.global.getCrud(),\n dynamicFields: this.global.getDynamicFields(),\n table: this.global.getTable(),\n dialog: this.global.getDialog(),\n ai: this.global.get('ai'),\n cache: this.global.get('cache'),\n } as GlobalConfig;\n }\n\n /** Persist a partial update and notify listeners. */\n save(partial: Partial<GlobalConfig>): Promise<void> {\n return this.global.saveGlobalConfig(partial);\n }\n\n /** True when a tenant/global config exists in storage (overrides env defaults). */\n async hasStoredConfig(): Promise<boolean> {\n await this.global.ready();\n return this.global.hasStoredConfig();\n }\n\n /** Clear stored config for the active tenant and refresh the cache. */\n clearStoredConfig(): Promise<void> {\n return this.global.clearGlobalConfig();\n }\n}\n","import type { FormConfig } from '@praxisui/core';\nimport { FieldControlType } from '@praxisui/core';\n\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`;\nconst TABLE_COMPACT_FONT_SIZE_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`;\n\nfunction safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Minimal FormConfig schema for the Global Config editor UI.\n * This can be extended incrementally as new domains/settings are added.\n */\nexport function buildGlobalConfigFormConfig(): FormConfig {\n const fields = [\n // CRUD\n {\n name: safeName('crud.defaults.openMode'),\n label: 'Modo de abertura padrão',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'Rota', value: 'route' },\n { text: 'Modal', value: 'modal' },\n { text: 'Drawer', value: 'drawer' },\n ],\n hint: 'Aplicado quando ação/metadado não definem modo.',\n dataAttributes: { globalPath: 'crud.defaults.openMode' },\n },\n {\n name: safeName('crud.defaults.back.confirmOnDirty'),\n label: 'Confirmar ao sair com alterações',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.back.confirmOnDirty' },\n },\n {\n name: safeName('crud.defaults.back.strategy'),\n label: 'Back: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'auto', value: 'auto' },\n { text: 'close', value: 'close' },\n { text: 'navigate', value: 'navigate' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.back.strategy' },\n },\n {\n name: safeName('crud.defaults.header.showBack'),\n label: 'Header: mostrar voltar',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.showBack' },\n },\n {\n name: safeName('crud.defaults.header.variant'),\n label: 'Header: variante',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'ghost', value: 'ghost' },\n { text: 'tonal', value: 'tonal' },\n { text: 'outlined', value: 'outlined' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.header.variant' },\n },\n {\n name: safeName('crud.defaults.header.sticky'),\n label: 'Header: fixo (sticky)',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.sticky' },\n },\n {\n name: safeName('crud.defaults.header.divider'),\n label: 'Header: mostrar divisor',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.divider' },\n },\n {\n name: safeName('crud.defaults.modal.width'),\n label: 'Modal: largura (ex.: 900px)',\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.width' },\n },\n {\n name: safeName('crud.defaults.modal.maxWidth'),\n label: 'Modal: largura máxima (ex.: 96vw)',\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.maxWidth' },\n },\n {\n name: safeName('crud.defaults.modal.backdropStyle'),\n label: 'Modal: backdrop',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'blur', value: 'blur' },\n { text: 'dim', value: 'dim' },\n { text: 'transparent', value: 'transparent' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.modal.backdropStyle' },\n },\n\n // Dynamic Fields\n {\n name: safeName('dynamicFields.asyncSelect.loadOn'),\n label: 'Async Select: loadOn',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'open', value: 'open' },\n { text: 'init', value: 'init' },\n { text: 'none', value: 'none' },\n ],\n hint: 'Estratégia de primeira carga quando metadado não definir.',\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.loadOn' },\n },\n {\n name: safeName('dynamicFields.cascade.enable'),\n label: 'Cascata nativa habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.cascade.enable' },\n },\n {\n name: safeName('dynamicFields.cascade.loadOnChange'),\n label: 'Cascata: loadOnChange',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'respectLoadOn', value: 'respectLoadOn' },\n { text: 'immediate', value: 'immediate' },\n { text: 'manual', value: 'manual' },\n ],\n dataAttributes: { globalPath: 'dynamicFields.cascade.loadOnChange' },\n },\n {\n name: safeName('dynamicFields.cascade.debounceMs'),\n label: 'Cascata: debounce (ms)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.cascade.debounceMs' },\n },\n\n // Dynamic Fields async-select extra\n {\n name: safeName('dynamicFields.asyncSelect.pageSize'),\n label: 'Async Select: pageSize',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.pageSize' },\n },\n {\n name: safeName('dynamicFields.asyncSelect.useCursor'),\n label: 'Async Select: usar cursor',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.useCursor' },\n },\n\n // AI\n {\n name: safeName('ai.provider'),\n label: 'Provedor LLM',\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: 'Selecione o provedor para listar modelos e testar a chave.',\n dataAttributes: { globalPath: 'ai.provider' },\n },\n {\n name: safeName('ai.apiKey'),\n label: 'Chave de API',\n controlType: FieldControlType.INPUT,\n hint: 'Informe a chave do provedor selecionado para testar.',\n dataAttributes: { globalPath: 'ai.apiKey' },\n },\n {\n name: safeName('ai.model'),\n label: 'Modelo de IA',\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [],\n resourcePath: '',\n dataAttributes: { globalPath: 'ai.model' },\n },\n {\n name: safeName('ai.temperature'),\n label: 'Temperatura (Criatividade)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: '0.0 (determinístico) a 1.0 (criativo)',\n dataAttributes: { globalPath: 'ai.temperature' },\n },\n {\n name: safeName('ai.maxTokens'),\n label: 'Max tokens',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: 'Limite maximo de tokens na resposta.',\n dataAttributes: { globalPath: 'ai.maxTokens' },\n },\n {\n name: safeName('ai.riskPolicy'),\n label: 'Assistente: validação de risco',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'Estrito (recomendado)', value: 'strict' },\n { text: 'Padrão', value: 'standard' },\n ],\n hint: 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.',\n dataAttributes: { globalPath: 'ai.riskPolicy' },\n },\n {\n name: safeName('ai.embedding.useSameAsLlm'),\n label: 'Embeddings: usar mesmo LLM',\n controlType: FieldControlType.TOGGLE,\n hint: 'Replica provedor e chave do LLM para embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.useSameAsLlm' },\n },\n {\n name: safeName('ai.embedding.provider'),\n label: 'Embeddings: provedor',\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: 'Provedor usado para gerar embeddings (RAG).',\n dataAttributes: { globalPath: 'ai.embedding.provider' },\n },\n {\n name: safeName('ai.embedding.apiKey'),\n label: 'Embeddings: chave de API',\n controlType: FieldControlType.INPUT,\n hint: 'Chave do provedor de embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.apiKey' },\n },\n {\n name: safeName('ai.embedding.model'),\n label: 'Embeddings: modelo',\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ],\n emptyOptionText: 'Padrão do provedor',\n hint: 'Modelos OpenAI para embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.model' },\n },\n {\n name: safeName('ai.embedding.dimensions'),\n label: 'Embeddings: dimensoes',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: 'Dimensoes do vetor de embedding (default 768).',\n dataAttributes: { globalPath: 'ai.embedding.dimensions' },\n },\n\n // Cache\n {\n name: safeName('cache.disableSchemaCache'),\n label: 'Desabilitar cache de schema (LocalStorage)',\n controlType: FieldControlType.TOGGLE,\n hint: 'Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.',\n dataAttributes: { globalPath: 'cache.disableSchemaCache' },\n },\n\n // Table\n {\n name: safeName('table.behavior.pagination.enabled'),\n label: 'Paginação habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.pagination.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.pageSize'),\n label: 'Tamanho da página',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.pageSize' },\n },\n {\n name: safeName('table.behavior.filtering.debounceTime'),\n label: 'Debounce do filtro (ms)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.filtering.debounceTime' },\n },\n {\n name: safeName('table.behavior.sorting.enabled'),\n label: 'Ordenação habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.sorting.enabled' },\n },\n {\n name: safeName('table.behavior.selection.enabled'),\n label: 'Seleção habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.selection.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.strategy'),\n label: 'Paginação: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.pagination.strategy' },\n },\n {\n name: safeName('table.behavior.sorting.strategy'),\n label: 'Ordenação: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.sorting.strategy' },\n },\n {\n name: safeName('table.behavior.pagination.showFirstLastButtons'),\n label: 'Paginação: botões Primeiro/Último',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.showFirstLastButtons' },\n },\n {\n name: safeName('table.toolbar.visible'),\n label: 'Toolbar visível',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.toolbar.visible' },\n },\n {\n name: safeName('table.appearance.density'),\n label: 'Aparência: densidade',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'compact', value: 'compact' },\n { text: 'comfortable', value: 'comfortable' },\n { text: 'spacious', value: 'spacious' },\n ],\n dataAttributes: { globalPath: 'table.appearance.density' },\n },\n {\n name: safeName('table.appearance.spacing.cellPadding'),\n label: 'Aparência: padding das células',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px',\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: 'Use 1 a 4 medidas CSS válidas, como 6px 12px.',\n dataAttributes: { globalPath: 'table.appearance.spacing.cellPadding' },\n },\n {\n name: safeName('table.appearance.spacing.headerPadding'),\n label: 'Aparência: padding do cabeçalho',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px',\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: 'Use 1 a 4 medidas CSS válidas, como 8px 12px.',\n dataAttributes: { globalPath: 'table.appearance.spacing.headerPadding' },\n },\n {\n name: safeName('table.appearance.typography.fontSize'),\n label: 'Aparência: fonte das células',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: 'Use uma medida CSS válida, como 13px.',\n dataAttributes: { globalPath: 'table.appearance.typography.fontSize' },\n },\n {\n name: safeName('table.appearance.typography.headerFontSize'),\n label: 'Aparência: fonte do cabeçalho',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: 'Use uma medida CSS válida, como 13px.',\n dataAttributes: { globalPath: 'table.appearance.typography.headerFontSize' },\n },\n {\n name: safeName('table.filteringUi.advancedOpenMode'),\n label: 'Filtro: modo de abertura',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'overlay', value: 'overlay' },\n { text: 'modal', value: 'modal' },\n { text: 'drawer', value: 'drawer' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.advancedOpenMode' },\n },\n {\n name: safeName('table.filteringUi.overlayVariant'),\n label: 'Filtro: overlay (visual)',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'card', value: 'card' },\n { text: 'frosted', value: 'frosted' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.overlayVariant' },\n },\n {\n name: safeName('table.filteringUi.overlayBackdrop'),\n label: 'Filtro: backdrop no overlay',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.filteringUi.overlayBackdrop' },\n },\n // Table messages - confirmations\n { name: safeName('table.messages.actions.confirmations.delete'), label: 'Excluir — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.delete' } },\n { name: safeName('table.messages.actions.confirmations.deleteMultiple'), label: 'Excluir (múltiplos) — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.deleteMultiple' } },\n { name: safeName('table.messages.actions.confirmations.save'), label: 'Salvar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.save' } },\n { name: safeName('table.messages.actions.confirmations.cancel'), label: 'Cancelar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.cancel' } },\n { name: safeName('table.messages.actions.confirmations.export'), label: 'Exportar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.export' } },\n // Table messages - progress\n { name: safeName('table.messages.actions.progress.delete'), label: 'Excluir — progresso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.delete' } },\n { name: safeName('table.messages.actions.progress.deleteMultiple'), label: 'Excluir (múltiplos) — progresso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.deleteMultiple' } },\n // Table messages - success\n { name: safeName('table.messages.actions.success.delete'), label: 'Excluir — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.delete' } },\n { name: safeName('table.messages.actions.success.save'), label: 'Salvar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.save' } },\n { name: safeName('table.messages.actions.success.export'), label: 'Exportar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.export' } },\n { name: safeName('table.messages.actions.success.import'), label: 'Importar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.import' } },\n // Table messages - errors\n { name: safeName('table.messages.actions.errors.delete'), label: 'Excluir — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.delete' } },\n { name: safeName('table.messages.actions.errors.save'), label: 'Salvar — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.save' } },\n { name: safeName('table.messages.actions.errors.export'), label: 'Exportar — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.export' } },\n { name: safeName('table.messages.actions.errors.network'), label: 'Rede — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.network' } },\n { name: safeName('table.messages.actions.errors.permission'), label: 'Permissão — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.permission' } },\n\n // Dialog — Defaults by type\n {\n name: safeName('dialog.defaults.confirm.ariaRole'),\n label: 'Dialog Defaults: confirm — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.confirm.ariaRole' },\n },\n { name: safeName('dialog.defaults.confirm.title'), label: 'Dialog Defaults: confirm — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.title' } },\n { name: safeName('dialog.defaults.confirm.icon'), label: 'Dialog Defaults: confirm — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.icon' } },\n { name: safeName('dialog.defaults.confirm.message'), label: 'Dialog Defaults: confirm — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.message' } },\n { name: safeName('dialog.defaults.confirm.themeColor'), label: 'Dialog Defaults: confirm — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.confirm.themeColor' } },\n {\n name: safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n label: 'Dialog Defaults: confirm — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.confirm.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.confirm.disableClose'), label: 'Dialog Defaults: confirm — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.disableClose' } },\n { name: safeName('dialog.defaults.confirm.hasBackdrop'), label: 'Dialog Defaults: confirm — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.hasBackdrop' } },\n { name: safeName('dialog.defaults.confirm.panelClass'), label: 'Dialog Defaults: confirm — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.panelClass' } },\n { name: safeName('dialog.defaults.confirm.styles'), label: 'Dialog Defaults: confirm — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.confirm.animation'), label: 'Dialog Defaults: confirm — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.alert.ariaRole'),\n label: 'Dialog Defaults: alert — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.alert.ariaRole' },\n },\n { name: safeName('dialog.defaults.alert.title'), label: 'Dialog Defaults: alert — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.title' } },\n { name: safeName('dialog.defaults.alert.icon'), label: 'Dialog Defaults: alert — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.icon' } },\n { name: safeName('dialog.defaults.alert.message'), label: 'Dialog Defaults: alert — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.message' } },\n { name: safeName('dialog.defaults.alert.themeColor'), label: 'Dialog Defaults: alert — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.alert.themeColor' } },\n {\n name: safeName('dialog.defaults.alert.closeOnBackdropClick'),\n label: 'Dialog Defaults: alert — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.alert.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.alert.disableClose'), label: 'Dialog Defaults: alert — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.disableClose' } },\n { name: safeName('dialog.defaults.alert.hasBackdrop'), label: 'Dialog Defaults: alert — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.hasBackdrop' } },\n { name: safeName('dialog.defaults.alert.panelClass'), label: 'Dialog Defaults: alert — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.panelClass' } },\n { name: safeName('dialog.defaults.alert.styles'), label: 'Dialog Defaults: alert — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.alert.animation'), label: 'Dialog Defaults: alert — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.prompt.ariaRole'),\n label: 'Dialog Defaults: prompt — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.prompt.ariaRole' },\n },\n { name: safeName('dialog.defaults.prompt.title'), label: 'Dialog Defaults: prompt — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.title' } },\n { name: safeName('dialog.defaults.prompt.icon'), label: 'Dialog Defaults: prompt — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.icon' } },\n { name: safeName('dialog.defaults.prompt.message'), label: 'Dialog Defaults: prompt — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.message' } },\n { name: safeName('dialog.defaults.prompt.themeColor'), label: 'Dialog Defaults: prompt — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.prompt.themeColor' } },\n {\n name: safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n label: 'Dialog Defaults: prompt — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.prompt.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.prompt.disableClose'), label: 'Dialog Defaults: prompt — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.disableClose' } },\n { name: safeName('dialog.defaults.prompt.hasBackdrop'), label: 'Dialog Defaults: prompt — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.hasBackdrop' } },\n { name: safeName('dialog.defaults.prompt.panelClass'), label: 'Dialog Defaults: prompt — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.panelClass' } },\n { name: safeName('dialog.defaults.prompt.styles'), label: 'Dialog Defaults: prompt — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.prompt.animation'), label: 'Dialog Defaults: prompt — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.animation', monospace: true } },\n\n // Dialog — Variants per profile (danger, info, success, question, error)\n // Each variant exposes commonly customized fields + JSON editors for actions/styles\n // danger\n { name: safeName('dialog.variants.danger.title'), label: 'Variant danger — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.title' } },\n { name: safeName('dialog.variants.danger.icon'), label: 'Variant danger — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.icon' } },\n { name: safeName('dialog.variants.danger.message'), label: 'Variant danger — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.message' } },\n { name: safeName('dialog.variants.danger.ariaRole'), label: 'Variant danger — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.danger.ariaRole' } },\n { name: safeName('dialog.variants.danger.closeOnBackdropClick'), label: 'Variant danger — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.danger.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.danger.panelClass'), label: 'Variant danger — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.panelClass' } },\n { name: safeName('dialog.variants.danger.actions'), label: 'Variant danger — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.actions', monospace: true }, hint: 'Ex.: [{\"id\":\"cancel\",\"text\":\"Cancelar\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Excluir\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]' },\n { name: safeName('dialog.variants.danger.styles'), label: 'Variant danger — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.danger.animation'), label: 'Variant danger — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.animation', monospace: true } },\n // info\n { name: safeName('dialog.variants.info.title'), label: 'Variant info — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.title' } },\n { name: safeName('dialog.variants.info.icon'), label: 'Variant info — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.icon' } },\n { name: safeName('dialog.variants.info.message'), label: 'Variant info — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.message' } },\n { name: safeName('dialog.variants.info.ariaRole'), label: 'Variant info — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.info.ariaRole' } },\n { name: safeName('dialog.variants.info.closeOnBackdropClick'), label: 'Variant info — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.info.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.info.panelClass'), label: 'Variant info — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.panelClass' } },\n { name: safeName('dialog.variants.info.actions'), label: 'Variant info — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.actions', monospace: true } },\n { name: safeName('dialog.variants.info.styles'), label: 'Variant info — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.info.animation'), label: 'Variant info — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.animation', monospace: true } },\n // success\n { name: safeName('dialog.variants.success.title'), label: 'Variant success — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.title' } },\n { name: safeName('dialog.variants.success.icon'), label: 'Variant success — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.icon' } },\n { name: safeName('dialog.variants.success.message'), label: 'Variant success — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.message' } },\n { name: safeName('dialog.variants.success.ariaRole'), label: 'Variant success — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.success.ariaRole' } },\n { name: safeName('dialog.variants.success.closeOnBackdropClick'), label: 'Variant success — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.success.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.success.panelClass'), label: 'Variant success — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.panelClass' } },\n { name: safeName('dialog.variants.success.actions'), label: 'Variant success — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.actions', monospace: true } },\n { name: safeName('dialog.variants.success.styles'), label: 'Variant success — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.success.animation'), label: 'Variant success — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.animation', monospace: true } },\n // question\n { name: safeName('dialog.variants.question.title'), label: 'Variant question — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.title' } },\n { name: safeName('dialog.variants.question.icon'), label: 'Variant question — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.icon' } },\n { name: safeName('dialog.variants.question.message'), label: 'Variant question — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.message' } },\n { name: safeName('dialog.variants.question.ariaRole'), label: 'Variant question — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.question.ariaRole' } },\n { name: safeName('dialog.variants.question.closeOnBackdropClick'), label: 'Variant question — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.question.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.question.panelClass'), label: 'Variant question — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.panelClass' } },\n { name: safeName('dialog.variants.question.actions'), label: 'Variant question — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.actions', monospace: true } },\n { name: safeName('dialog.variants.question.styles'), label: 'Variant question — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.question.animation'), label: 'Variant question — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.animation', monospace: true } },\n // error\n { name: safeName('dialog.variants.error.title'), label: 'Variant error — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.title' } },\n { name: safeName('dialog.variants.error.icon'), label: 'Variant error — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.icon' } },\n { name: safeName('dialog.variants.error.message'), label: 'Variant error — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.message' } },\n { name: safeName('dialog.variants.error.ariaRole'), label: 'Variant error — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.error.ariaRole' } },\n { name: safeName('dialog.variants.error.closeOnBackdropClick'), label: 'Variant error — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.error.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.error.panelClass'), label: 'Variant error — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.panelClass' } },\n { name: safeName('dialog.variants.error.actions'), label: 'Variant error — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.actions', monospace: true } },\n { name: safeName('dialog.variants.error.styles'), label: 'Variant error — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.error.animation'), label: 'Variant error — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.animation', monospace: true } },\n ];\n\n const cfg: FormConfig = {\n sections: [\n {\n id: 'crud',\n title: 'CRUD',\n rows: [\n {\n id: 'crud-row-1',\n columns: [\n { id: 'crud-col-1', fields: [\n safeName('crud.defaults.openMode'),\n safeName('crud.defaults.back.strategy'),\n safeName('crud.defaults.back.confirmOnDirty'),\n ] },\n { id: 'crud-col-2', fields: [\n safeName('crud.defaults.header.showBack'),\n safeName('crud.defaults.header.variant'),\n safeName('crud.defaults.header.sticky'),\n safeName('crud.defaults.header.divider'),\n ] },\n { id: 'crud-col-3', fields: [\n safeName('crud.defaults.modal.width'),\n safeName('crud.defaults.modal.maxWidth'),\n safeName('crud.defaults.modal.backdropStyle'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dynamic-fields',\n title: 'Dynamic Fields',\n rows: [\n {\n id: 'df-row-1',\n columns: [\n { id: 'df-col-1', fields: [\n safeName('dynamicFields.asyncSelect.loadOn'),\n safeName('dynamicFields.asyncSelect.pageSize'),\n safeName('dynamicFields.asyncSelect.useCursor'),\n ] },\n { id: 'df-col-2', fields: [\n safeName('dynamicFields.cascade.enable'),\n safeName('dynamicFields.cascade.loadOnChange'),\n safeName('dynamicFields.cascade.debounceMs'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'ai-credentials',\n title: 'Credenciais', // Internal title, UI might override\n rows: [\n {\n id: 'ai-cred-row-1',\n columns: [\n { id: 'ai-cred-col-1', fields: [safeName('ai.provider')] },\n { id: 'ai-cred-col-2', fields: [safeName('ai.apiKey')] },\n ],\n },\n ],\n },\n {\n id: 'ai-model',\n title: 'Modelo & Comportamento',\n rows: [\n {\n id: 'ai-mod-row-1',\n columns: [\n { id: 'ai-mod-col-1', fields: [safeName('ai.model'), safeName('ai.temperature'), safeName('ai.maxTokens')] },\n { id: 'ai-mod-col-2', fields: [safeName('ai.riskPolicy')] },\n ],\n },\n ],\n },\n {\n id: 'ai-embedding',\n title: 'Embeddings',\n rows: [\n {\n id: 'ai-embed-row-1',\n columns: [\n { id: 'ai-embed-col-1', fields: [safeName('ai.embedding.useSameAsLlm')] },\n { id: 'ai-embed-col-2', fields: [safeName('ai.embedding.provider'), safeName('ai.embedding.apiKey')] },\n { id: 'ai-embed-col-3', fields: [safeName('ai.embedding.model'), safeName('ai.embedding.dimensions')] },\n ],\n },\n ],\n },\n {\n id: 'cache',\n title: 'Cache & Persistência',\n rows: [\n {\n id: 'cache-row-1',\n columns: [\n { id: 'cache-col-1', fields: [safeName('cache.disableSchemaCache')] },\n ],\n },\n ],\n },\n {\n id: 'table',\n title: 'Tabela',\n rows: [\n {\n id: 'tbl-row-1',\n columns: [\n { id: 'tbl-col-1', fields: [\n safeName('table.toolbar.visible'),\n safeName('table.appearance.density'),\n safeName('table.appearance.spacing.cellPadding'),\n safeName('table.appearance.spacing.headerPadding'),\n safeName('table.appearance.typography.fontSize'),\n safeName('table.appearance.typography.headerFontSize'),\n safeName('table.filteringUi.advancedOpenMode'),\n safeName('table.filteringUi.overlayVariant'),\n safeName('table.filteringUi.overlayBackdrop'),\n ] },\n { id: 'tbl-col-2', fields: [\n safeName('table.behavior.pagination.enabled'),\n safeName('table.behavior.pagination.pageSize'),\n safeName('table.behavior.pagination.showFirstLastButtons'),\n safeName('table.behavior.pagination.strategy'),\n ] },\n { id: 'tbl-col-3', fields: [\n safeName('table.behavior.filtering.debounceTime'),\n safeName('table.behavior.sorting.enabled'),\n safeName('table.behavior.sorting.strategy'),\n safeName('table.behavior.selection.enabled'),\n ] },\n ],\n },\n {\n id: 'tbl-row-messages',\n columns: [\n { id: 'tbl-msg-col-1', fields: [\n safeName('table.messages.actions.confirmations.delete'),\n safeName('table.messages.actions.confirmations.deleteMultiple'),\n safeName('table.messages.actions.confirmations.save'),\n safeName('table.messages.actions.confirmations.cancel'),\n safeName('table.messages.actions.confirmations.export'),\n ] },\n { id: 'tbl-msg-col-2', fields: [\n safeName('table.messages.actions.progress.delete'),\n safeName('table.messages.actions.progress.deleteMultiple'),\n safeName('table.messages.actions.success.delete'),\n safeName('table.messages.actions.success.save'),\n safeName('table.messages.actions.success.export'),\n safeName('table.messages.actions.success.import'),\n ] },\n { id: 'tbl-msg-col-3', fields: [\n safeName('table.messages.actions.errors.delete'),\n safeName('table.messages.actions.errors.save'),\n safeName('table.messages.actions.errors.export'),\n safeName('table.messages.actions.errors.network'),\n safeName('table.messages.actions.errors.permission'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dialog',\n title: 'Dialog',\n rows: [\n {\n id: 'dlg-row-defaults',\n columns: [\n { id: 'dlg-def-col-1', fields: [\n safeName('dialog.defaults.confirm.ariaRole'),\n safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-2', fields: [\n safeName('dialog.defaults.alert.ariaRole'),\n safeName('dialog.defaults.alert.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-3', fields: [\n safeName('dialog.defaults.prompt.ariaRole'),\n safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-danger',\n columns: [\n { id: 'dlg-var-danger-col-1', fields: [\n safeName('dialog.variants.danger.title'),\n safeName('dialog.variants.danger.icon'),\n safeName('dialog.variants.danger.message'),\n ] },\n { id: 'dlg-var-danger-col-2', fields: [\n safeName('dialog.variants.danger.ariaRole'),\n safeName('dialog.variants.danger.closeOnBackdropClick'),\n safeName('dialog.variants.danger.panelClass'),\n ] },\n { id: 'dlg-var-danger-col-3', fields: [\n safeName('dialog.variants.danger.actions'),\n safeName('dialog.variants.danger.styles'),\n safeName('dialog.variants.danger.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-info',\n columns: [\n { id: 'dlg-var-info-col-1', fields: [\n safeName('dialog.variants.info.title'),\n safeName('dialog.variants.info.icon'),\n safeName('dialog.variants.info.message'),\n ] },\n { id: 'dlg-var-info-col-2', fields: [\n safeName('dialog.variants.info.ariaRole'),\n safeName('dialog.variants.info.closeOnBackdropClick'),\n safeName('dialog.variants.info.panelClass'),\n ] },\n { id: 'dlg-var-info-col-3', fields: [\n safeName('dialog.variants.info.actions'),\n safeName('dialog.variants.info.styles'),\n safeName('dialog.variants.info.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-success',\n columns: [\n { id: 'dlg-var-success-col-1', fields: [\n safeName('dialog.variants.success.title'),\n safeName('dialog.variants.success.icon'),\n safeName('dialog.variants.success.message'),\n ] },\n { id: 'dlg-var-success-col-2', fields: [\n safeName('dialog.variants.success.ariaRole'),\n safeName('dialog.variants.success.closeOnBackdropClick'),\n safeName('dialog.variants.success.panelClass'),\n ] },\n { id: 'dlg-var-success-col-3', fields: [\n safeName('dialog.variants.success.actions'),\n safeName('dialog.variants.success.styles'),\n safeName('dialog.variants.success.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-question',\n columns: [\n { id: 'dlg-var-question-col-1', fields: [\n safeName('dialog.variants.question.title'),\n safeName('dialog.variants.question.icon'),\n safeName('dialog.variants.question.message'),\n ] },\n { id: 'dlg-var-question-col-2', fields: [\n safeName('dialog.variants.question.ariaRole'),\n safeName('dialog.variants.question.closeOnBackdropClick'),\n safeName('dialog.variants.question.panelClass'),\n ] },\n { id: 'dlg-var-question-col-3', fields: [\n safeName('dialog.variants.question.actions'),\n safeName('dialog.variants.question.styles'),\n safeName('dialog.variants.question.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-error',\n columns: [\n { id: 'dlg-var-error-col-1', fields: [\n safeName('dialog.variants.error.title'),\n safeName('dialog.variants.error.icon'),\n safeName('dialog.variants.error.message'),\n ] },\n { id: 'dlg-var-error-col-2', fields: [\n safeName('dialog.variants.error.ariaRole'),\n safeName('dialog.variants.error.closeOnBackdropClick'),\n safeName('dialog.variants.error.panelClass'),\n ] },\n { id: 'dlg-var-error-col-3', fields: [\n safeName('dialog.variants.error.actions'),\n safeName('dialog.variants.error.styles'),\n safeName('dialog.variants.error.animation'),\n ] },\n ],\n },\n ],\n },\n ],\n actions: {\n placement: 'afterSections',\n // Hide internal form actions; Settings Panel footer handles Apply/Save\n submit: { visible: false, label: 'Salvar' },\n cancel: { visible: false, label: 'Cancelar' },\n reset: { visible: false, label: 'Redefinir', type: 'reset' as any },\n },\n fieldMetadata: fields as any,\n };\n\n return cfg;\n}\n","import { InjectionToken, Type } from '@angular/core';\n\n/**\n * Optional token used by GlobalConfigEditorComponent to render forms.\n * Provide the PraxisDynamicForm component (or a compatible dynamic form)\n * to avoid creating a hard dependency from @praxisui/settings-panel to\n * @praxisui/dynamic-form.\n */\nexport const GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT = new InjectionToken<Type<any> | null>(\n 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT',\n {\n factory: () => null,\n },\n);\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, OnInit, ViewChild, ViewContainerRef, DestroyRef, inject, AfterViewInit, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Subject, firstValueFrom } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport type {\n FormConfig,\n FormValueChangeEvent,\n LoggerContext,\n LoggerLogOptions,\n} from '@praxisui/core';\nimport { GlobalConfigAdminService } from './global-config-admin.service';\nimport { buildGlobalConfigFormConfig } from './global-config-editor.schema';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatChipsModule } from '@angular/material/chips'; // Added MatChipsModule\nimport { IconPickerService, LoggerService, PraxisIconDirective } from '@praxisui/core';\nimport { AiBackendApiService, AiModel, AiProviderCatalogItem } from '@praxisui/ai';\nimport { GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT } from './global-config-editor.tokens';\n\nconst TABLE_COMPACT_SPACING_PATHS = new Set([\n 'table.appearance.spacing.cellPadding',\n 'table.appearance.spacing.headerPadding',\n]);\nconst TABLE_COMPACT_FONT_SIZE_PATHS = new Set([\n 'table.appearance.typography.fontSize',\n 'table.appearance.typography.headerFontSize',\n]);\nconst TABLE_COMPACT_FIELD_LABELS: Record<string, string> = {\n 'table.appearance.spacing.cellPadding': 'padding das células',\n 'table.appearance.spacing.headerPadding': 'padding do cabeçalho',\n 'table.appearance.typography.fontSize': 'fonte das células',\n 'table.appearance.typography.headerFontSize': 'fonte do cabeçalho',\n};\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`,\n 'i',\n);\nconst TABLE_COMPACT_FONT_SIZE_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`,\n 'i',\n);\n\n@Component({\n selector: 'praxis-global-config-editor',\n standalone: true,\n imports: [CommonModule, MatSnackBarModule, MatExpansionModule, MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule, MatChipsModule, PraxisIconDirective],\n template: `\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">construction</mat-icon>\n CRUD\n </mat-panel-title>\n <mat-panel-description>Políticas globais de abertura, back e header</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCrud></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">dynamic_form</mat-icon>\n Dynamic Fields\n </mat-panel-title>\n <mat-panel-description>Async Select, cascata e paginação</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostFields></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">cached</mat-icon>\n Cache & Persistência\n </mat-panel-title>\n <mat-panel-description>Estratégia de cache de schema (local vs server)</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCache></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">psychology</mat-icon>\n Inteligência Artificial\n </mat-panel-title>\n <mat-panel-description>Integração com LLM</mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"ai-config-container\">\n <div class=\"ai-config-source\">\n <div class=\"ai-config-source__meta\">\n <mat-icon>settings_suggest</mat-icon>\n <span>{{ configSourceLabel }}</span>\n </div>\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn ai-action-btn--clear\"\n *ngIf=\"hasStoredGlobalConfig\"\n [attr.aria-busy]=\"isClearingGlobalConfig ? 'true' : null\"\n [disabled]=\"isClearingGlobalConfig\"\n (click)=\"clearStoredConfig()\"\n matTooltip=\"Apaga o config salvo e volta aos defaults do servidor\"\n >\n <ng-container *ngIf=\"isClearingGlobalConfig; else clearContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">Limpando...</span>\n </ng-container>\n <ng-template #clearContent>\n <mat-icon>delete_sweep</mat-icon>\n <span class=\"ai-action-label\">Limpar config salvo</span>\n </ng-template>\n </button>\n </div>\n <!-- Group 1: Credentials -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>vpn_key</mat-icon> Credenciais\n </div>\n <button mat-stroked-button \n type=\"button\"\n class=\"ai-action-btn\"\n [class.is-success]=\"aiTestResult?.success\"\n [attr.aria-busy]=\"isTestingAi ? 'true' : null\"\n (click)=\"testAiConnection()\" \n [disabled]=\"isTestingAi || !hasApiKey\"\n matTooltip=\"Testar conexão com a chave informada\">\n <ng-container *ngIf=\"isTestingAi; else btnContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">Conectando...</span>\n </ng-container>\n <ng-template #btnContent>\n <mat-icon>{{ aiTestResult?.success ? 'check' : 'bolt' }}</mat-icon>\n <span class=\"ai-action-label\">\n {{ aiTestResult?.success ? 'Conectado' : 'Testar conexão' }}\n </span>\n </ng-template>\n </button>\n </div>\n <div class=\"ai-provider-summary\" *ngIf=\"selectedProvider\">\n <span class=\"ai-provider-icon\" aria-hidden=\"true\">\n <ng-container [ngSwitch]=\"selectedProvider.iconKey\">\n <svg *ngSwitchCase=\"'gemini'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <path d=\"M12 3l2.6 5.4L20 11l-5.4 2.6L12 19l-2.6-5.4L4 11l5.4-2.6L12 3z\" />\n </svg>\n <svg *ngSwitchCase=\"'openai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <polygon points=\"12,2 20,7 20,17 12,22 4,17 4,7\" />\n </svg>\n <svg *ngSwitchCase=\"'xai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\" />\n </svg>\n <svg *ngSwitchCase=\"'mock'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <rect x=\"4.5\" y=\"4.5\" width=\"15\" height=\"15\" rx=\"2\" ry=\"2\" stroke-dasharray=\"2 2\" />\n </svg>\n <svg *ngSwitchDefault viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <circle cx=\"12\" cy=\"12\" r=\"7.5\" />\n </svg>\n </ng-container>\n </span>\n <div class=\"ai-provider-meta\">\n <div class=\"ai-provider-name\">{{ selectedProvider.label }}</div>\n <div class=\"ai-provider-desc\">{{ selectedProvider.description }}</div>\n </div>\n <div\n class=\"ai-provider-key\"\n *ngIf=\"selectedProvider?.requiresApiKey !== false\"\n [class.is-present]=\"hasCurrentApiKey\"\n [class.is-saved]=\"!hasCurrentApiKey && (apiKeyLast4 || hasStoredApiKey)\"\n [class.is-missing]=\"!hasCurrentApiKey && !apiKeyLast4 && !hasStoredApiKey\"\n >\n <mat-icon>vpn_key</mat-icon>\n <span>{{ apiKeyStatusLabel }}</span>\n </div>\n <div class=\"ai-provider-key is-unlocked\" *ngIf=\"selectedProvider?.requiresApiKey === false\">\n <mat-icon>check_circle</mat-icon>\n <span>Sem chave necessária</span>\n </div>\n </div>\n <div class=\"ai-credentials-row\">\n <div class=\"ai-form-inline\">\n <ng-template #hostAiCredentials></ng-template>\n </div>\n </div>\n \n <!-- Feedback / Error Message -->\n <div class=\"ai-feedback\" *ngIf=\"aiTestResult && !aiTestResult.success\">\n <mat-icon color=\"warn\">error</mat-icon>\n <span class=\"error-text\">{{ aiTestResult.message }}</span>\n </div>\n </div>\n\n <!-- Group 2: Model & Behavior (Only visible if Key is present) -->\n <div class=\"ai-group\" [class.disabled-group]=\"!hasApiKey\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>smart_toy</mat-icon> Modelo & Comportamento\n </div>\n <div class=\"ai-header-actions\">\n <span class=\"ai-subtext\" *ngIf=\"hasApiKey\">Escolha o modelo após validar a chave.</span>\n <mat-chip-option *ngIf=\"!hasApiKey\" disabled>Requer chave API validada</mat-chip-option>\n <button mat-icon-button (click)=\"refreshModels(true)\" [disabled]=\"isTestingAi || !hasApiKey\" matTooltip=\"Atualizar lista de modelos\" aria-label=\"Atualizar lista de modelos\">\n <mat-icon [class.spin]=\"isRefetchingModels\">sync</mat-icon>\n </button>\n </div>\n </div>\n \n <div class=\"ai-model-content\" *ngIf=\"hasApiKey\">\n <div class=\"ai-model-controls\">\n <ng-template #hostAiModel></ng-template>\n </div>\n\n <!-- Model Details (Placeholder for future metadata) -->\n <div class=\"ai-model-details\" *ngIf=\"selectedModelDetails\">\n <mat-icon inline>info</mat-icon> {{ selectedModelDetails }}\n </div>\n </div>\n \n <div class=\"ai-placeholder\" *ngIf=\"!hasApiKey\">\n <mat-icon>lock</mat-icon>\n <span>Configure e teste sua chave de API para desbloquear a seleção de modelos.</span>\n </div>\n </div>\n\n <!-- Group 3: Embeddings (RAG) -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>scatter_plot</mat-icon> Embeddings (RAG)\n </div>\n <div class=\"ai-header-actions\">\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn\"\n (click)=\"useLlmForEmbeddings()\"\n [disabled]=\"!canUseLlmForEmbeddings\"\n matTooltip=\"Aplicar provedor e chave do LLM aos embeddings\"\n >\n <mat-icon>merge_type</mat-icon>\n <span class=\"ai-action-label\">Usar mesmo LLM</span>\n </button>\n <mat-chip-option *ngIf=\"!canUseLlmForEmbeddings\" disabled>Provedor sem embeddings</mat-chip-option>\n </div>\n </div>\n <div class=\"ai-subtext\">\n Configure o provedor de embeddings para buscas vetoriais (templates e schemas).\n </div>\n <div class=\"ai-subtext\" *ngIf=\"embeddingUseSameAsLlm\">\n Sincronizado com o LLM. Os campos abaixo acompanham a credencial principal.\n </div>\n <div class=\"ai-embedding-row\">\n <ng-template #hostAiEmbedding></ng-template>\n </div>\n <div class=\"ai-feedback ai-feedback--warn\" *ngIf=\"embeddingDimensionMismatch\">\n <mat-icon>warning</mat-icon>\n <span class=\"error-text\">\n Dimensão de embeddings diferente do banco (768). Ajuste para 768 ou refaça a migração.\n </span>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">table_chart</mat-icon>\n Tabela\n </mat-panel-title>\n <mat-panel-description>Toolbar, aparência e filtro avançado</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostTable></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">forum</mat-icon>\n Dialog\n </mat-panel-title>\n <mat-panel-description>Defaults e variants (danger, info, success, question, error)</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostDialog></ng-template>\n <!-- Icon UX helpers for Dialog variants -->\n <div class=\"dlg-icon-helpers\">\n <div class=\"dlg-icon-helpers__head\">Ícones por perfil (atalhos)</div>\n <div class=\"dlg-icon-helpers__row\" *ngFor=\"let k of dialogVariantKeys\">\n <div class=\"dlg-icon-helpers__label\">{{ k }}</div>\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"getVariantIcon(k) || 'mi:help_outline'\" class=\"dlg-icon-helpers__preview\"></mat-icon>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"pickVariantIcon(k)\" matTooltip=\"Escolher ícone para {{k}}\">\n <mat-icon>search</mat-icon>\n Escolher ícone\n </button>\n <button mat-icon-button type=\"button\" *ngIf=\"getVariantIcon(k)\" (click)=\"clearVariantIcon(k)\" matTooltip=\"Limpar ícone de {{k}}\" aria-label=\"Limpar ícone\">\n <mat-icon>backspace</mat-icon>\n </button>\n <span class=\"dlg-icon-helpers__value\" *ngIf=\"getVariantIcon(k)\">{{ getVariantIcon(k) }}</span>\n </div>\n <div class=\"dlg-icon-helpers__hint\">Dica: O campo de texto acima permanece editável. Estes botões apenas facilitam a escolha/limpeza com preview.</div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n `,\n styles: [`\n .dlg-icon-helpers{margin:12px 16px 4px 16px; padding:12px; border:1px dashed var(--md-sys-color-outline-variant); border-radius:var(--md-sys-shape-corner-small, 8px);}\n .dlg-icon-helpers__head{font-weight:600; margin-bottom:8px; opacity:.8}\n .dlg-icon-helpers__row{display:flex; align-items:center; gap:12px; padding:6px 0}\n .dlg-icon-helpers__label{text-transform:capitalize; width:96px; opacity:.8}\n .dlg-icon-helpers__preview{width:24px; height:24px;}\n .dlg-icon-helpers__value{font-family:monospace; font-size:12px; opacity:.8}\n .dlg-icon-helpers__hint{margin-top:8px; font-size:12px; opacity:.7}\n \n .panel-icon { margin-right: 12px; color: var(--md-sys-color-primary); }\n\n /* AI Section Styles */\n .ai-config-container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .ai-config-source {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n border: 1px dashed var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-low);\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n flex-wrap: wrap;\n }\n\n .ai-config-source__meta {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n\n .ai-action-btn--clear {\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-container-color: var(--md-sys-color-error-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-error);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-error-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-error-container);\n }\n\n .ai-action-btn--clear:hover {\n background: var(--md-sys-color-error-container);\n }\n\n .ai-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 14px;\n color: var(--md-sys-color-primary);\n margin-bottom: 12px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 4px;\n }\n\n .ai-group-title mat-icon {\n font-size: 20px;\n width: 20px;\n height: 20px;\n }\n\n /* Ocultar botões de envio padrão do dynamic-form nas seções de IA */\n .ai-group ::ng-deep .form-actions,\n .ai-group ::ng-deep button[type=\"submit\"] {\n display: none !important;\n }\n\n /* Credentials Row */\n .ai-credentials-row {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex-wrap: wrap;\n }\n\n .ai-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .ai-provider-summary {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n background: var(--md-sys-color-surface-variant);\n border: 1px solid var(--md-sys-color-outline-variant);\n margin: 8px 0 4px 0;\n flex-wrap: wrap;\n }\n\n .ai-provider-icon {\n width: 32px;\n height: 32px;\n border-radius: var(--md-sys-shape-corner-small, 8px);\n border: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-primary);\n flex: 0 0 auto;\n }\n\n .provider-svg {\n width: 18px;\n height: 18px;\n }\n\n .ai-provider-meta {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 200px;\n flex: 1 1 auto;\n }\n\n .ai-provider-name {\n font-weight: 600;\n font-size: 13px;\n }\n\n .ai-provider-desc {\n font-size: 12px;\n opacity: 0.75;\n }\n\n .ai-provider-key {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-lowest);\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.2px;\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n }\n\n .ai-provider-key mat-icon {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n\n .ai-provider-key.is-present {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n border-color: var(--md-sys-color-primary);\n }\n\n .ai-provider-key.is-saved {\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-secondary);\n }\n\n .ai-provider-key.is-missing {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-style: dashed;\n opacity: 0.9;\n }\n\n .ai-provider-key.is-unlocked {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n }\n\n .ai-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n height: 40px;\n padding: 0 14px;\n min-width: 168px;\n border-radius: var(--md-sys-shape-corner-medium, 12px);\n white-space: nowrap;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.06s ease;\n\n --mdc-outlined-button-container-color: var(--md-sys-color-secondary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-secondary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-outline-variant);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-secondary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-secondary-container);\n }\n\n .ai-action-btn .mat-button-wrapper,\n .ai-action-btn .mdc-button__label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n height: 100%;\n }\n\n .ai-action-btn .mat-icon {\n width: 18px;\n height: 18px;\n font-size: 18px;\n line-height: 18px;\n }\n\n .ai-action-btn .ai-action-label {\n display: inline-flex;\n align-items: center;\n line-height: 1;\n }\n\n .ai-action-btn .mat-progress-spinner,\n .ai-action-btn .btn-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n .ai-action-btn:hover {\n background: var(--md-sys-color-secondary-container);\n box-shadow: var(--md-sys-elevation-level2, 0 2px 6px rgba(0,0,0,0.25));\n }\n\n .ai-action-btn:active {\n transform: translateY(1px);\n }\n\n .ai-action-btn:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n\n .ai-action-btn.is-success {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n\n --mdc-outlined-button-container-color: var(--md-sys-color-tertiary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-tertiary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-tertiary);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-tertiary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-tertiary-container);\n }\n\n .ai-action-btn.is-success:hover {\n background: var(--md-sys-color-tertiary-container);\n }\n\n .ai-action-btn:disabled {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: none;\n opacity: 0.7;\n }\n\n .ai-form-inline {\n flex: 1;\n min-width: 300px;\n }\n\n .ai-credentials-row button {\n margin-top: 4px; /* Align with input */\n height: 40px;\n }\n\n .btn-spinner {\n margin-right: 8px;\n }\n\n /* Feedback */\n .ai-feedback {\n margin-top: 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border-radius: var(--md-sys-shape-corner-extra-small, 4px);\n font-size: 13px;\n }\n\n .ai-feedback--warn {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n }\n\n /* Model Section */\n .disabled-group {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .ai-model-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .ai-model-controls {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n .ai-model-controls ::ng-deep praxis-dynamic-form {\n flex: 1;\n }\n\n .ai-model-details {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n margin-left: 4px;\n }\n\n .ai-subtext {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .ai-header-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .ai-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: var(--md-sys-color-surface-container-low);\n border-radius: var(--md-sys-shape-corner-small, 8px);\n color: var(--md-sys-color-outline);\n gap: 8px;\n text-align: center;\n font-size: 13px;\n }\n\n .spin {\n animation: spin 1s linear infinite;\n }\n @keyframes spin { \n 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } \n }\n `],\n})\nexport class GlobalConfigEditorComponent implements OnInit, AfterViewInit {\n formConfig!: FormConfig;\n private initialValues: Record<string, any> = {};\n private currentValues: Record<string, any> = {};\n private pathMap: Record<string, string> = {};\n private bootstrappedSections = new Set<string>();\n private readonly allSections = ['crud', 'dynamic-fields', 'cache', 'table', 'dialog', 'ai-credentials', 'ai-model', 'ai-embedding'] as const;\n\n // SettingsPanel integration signals\n readonly isDirty$ = new BehaviorSubject<boolean>(false);\n readonly isValid$ = new BehaviorSubject<boolean>(true);\n readonly isBusy$ = new BehaviorSubject<boolean>(false);\n\n @ViewChild('hostCrud', { read: ViewContainerRef, static: true }) hostCrud!: ViewContainerRef;\n @ViewChild('hostFields', { read: ViewContainerRef, static: true }) hostFields!: ViewContainerRef;\n @ViewChild('hostCache', { read: ViewContainerRef, static: true }) hostCache!: ViewContainerRef;\n @ViewChild('hostTable', { read: ViewContainerRef, static: true }) hostTable!: ViewContainerRef;\n @ViewChild('hostDialog', { read: ViewContainerRef, static: true }) hostDialog!: ViewContainerRef;\n @ViewChild('hostAiCredentials', { read: ViewContainerRef, static: true }) hostAiCredentials!: ViewContainerRef;\n @ViewChild('hostAiModel', { read: ViewContainerRef, static: false }) hostAiModel!: ViewContainerRef;\n @ViewChild('hostAiEmbedding', { read: ViewContainerRef, static: true }) hostAiEmbedding!: ViewContainerRef;\n private readonly destroyRef = inject(DestroyRef);\n private readonly iconPicker = inject(IconPickerService);\n private readonly aiApi = inject(AiBackendApiService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly logger = inject(LoggerService);\n private readonly logContext: LoggerContext = {\n lib: 'praxis-settings-panel',\n component: 'GlobalConfigEditorComponent',\n };\n private readonly providedDynamicFormCtor = inject<Type<any> | null>(GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT, { optional: true });\n private dynamicFormCtor: Type<any> | null = this.providedDynamicFormCtor ?? null;\n private loggedMissingDynamicForm = false;\n\n // Guardar instância do form da seção 'dialog' para atualizar controles diretamente\n private dialogFormInst: any | null = null;\n private aiModelFormRef: any | null = null;\n private aiEmbeddingFormRef: any | null = null;\n private pendingModelOptions: Array<{ text: string; value: string }> = [];\n private readonly embeddingModelOptions = [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ];\n\n\n private componentRefs = new Map<string, any>();\n readonly dialogVariantKeys = ['danger', 'info', 'success', 'question', 'error'] as const;\n\n isTestingAi = false;\n isRefetchingModels = false;\n isClearingGlobalConfig = false;\n aiTestResult: { success: boolean; message: string } | null = null;\n private availableModels: AiModel[] = [];\n providers: AiProviderCatalogItem[] = [];\n selectedProvider: AiProviderCatalogItem | null = null;\n apiKeyLast4: string | null = null;\n hasStoredApiKey = false;\n hasStoredGlobalConfig = false;\n configSourceLabel = 'Padrões do servidor (env vars)';\n\n // UX: API Key monitoring\n private apiKeyChanged$ = new Subject<{ apiKey: string; provider: string }>();\n hasApiKey = false;\n selectedModelDetails: string = '';\n get hasCurrentApiKey(): boolean {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n return !!apiKey;\n }\n get apiKeyStatusLabel(): string {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n if (apiKey) return 'Chave informada';\n if (this.apiKeyLast4) return `Chave salva (****${this.apiKeyLast4})`;\n if (this.hasStoredApiKey) return 'Chave salva';\n return 'Sem chave salva';\n }\n\n constructor(private admin: GlobalConfigAdminService, private snack: MatSnackBar) { }\n\n async ngOnInit(): Promise<void> {\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.formConfig = buildGlobalConfigFormConfig();\n this.applyConfigSnapshot(flat, { resetForms: false });\n\n await this.loadProviderCatalog();\n this.applyProviderOptions();\n this.applyEmbeddingProviderOptions();\n\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n\n await this.refreshStoredConfigState();\n\n // Monitor API Key changes to auto-fetch\n this.apiKeyChanged$.pipe(\n debounceTime(1500), // Wait for typing to stop\n distinctUntilChanged((prev, curr) => prev.apiKey === curr.apiKey && prev.provider === curr.provider),\n filter(({ apiKey, provider }) => this.canAutoRefreshModels(provider, apiKey)),\n ).subscribe(() => {\n this.refreshModels();\n });\n\n\n\n if (this.hasApiKey && this.selectedProvider?.supportsModels !== false) {\n // Auto-fetch models on load if we have a key (silent)\n this.refreshModels(false, true);\n }\n\n this.bootstrapDynamicForms();\n }\n\n\n\n ngAfterViewInit(): void {\n this.ensureAiModelForm();\n }\n\n onValueChange(sectionId: string, ev: FormValueChangeEvent): void {\n this.isValid$.next(!!ev.isValid);\n // Mesclar valores por seção (cada form emite somente seu grupo)\n this.currentValues = { ...this.currentValues, ...ev.formData };\n\n if (sectionId === 'ai-credentials') {\n const apiKeySafe = this.safeName('ai.apiKey');\n const providerSafe = this.safeName('ai.provider');\n const apiKey = ev.formData[apiKeySafe];\n const provider = ev.formData[providerSafe] || (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n const providerChanged = provider !== this.selectedProvider?.id;\n if (providerChanged) {\n this.updateSelectedProvider(provider);\n this.aiTestResult = null;\n this.availableModels = [];\n this.pendingModelOptions = [];\n this.selectedModelDetails = '';\n this.clearModelSelection(this.selectedProvider?.defaultModel);\n this.applyEmbeddingProviderOptions();\n }\n this.updateApiKeyState(provider, apiKey);\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n\n if (apiKey !== this.initialValues[apiKeySafe] || providerChanged) {\n this.apiKeyChanged$.next({ apiKey: apiKey || '', provider });\n // Reset test result when key changes\n if (this.aiTestResult) {\n this.aiTestResult = null;\n }\n }\n if (this.hasApiKey) {\n setTimeout(() => this.ensureAiModelForm(), 0);\n } else {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.availableModels = [];\n this.pendingModelOptions = [];\n }\n }\n\n if (sectionId === 'ai-model') {\n const modelSafe = this.safeName('ai.model');\n const model = ev.formData[modelSafe];\n this.updateModelDetails(model);\n }\n\n if (sectionId === 'ai-embedding') {\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n }\n\n const firstTime = !this.bootstrappedSections.has(sectionId);\n if (firstTime) {\n this.initialValues = { ...this.initialValues, ...ev.formData };\n this.bootstrappedSections.add(sectionId);\n }\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n private buildSectionConfig(sectionId: string): any {\n const sec = (this.formConfig.sections || []).find((s: any) => s.id === sectionId);\n if (!sec) return { sections: [], fieldMetadata: [] } as any;\n const names = new Set<string>();\n for (const row of sec.rows || []) {\n for (const col of row.columns || []) {\n for (const fname of col.fields || []) names.add(fname);\n }\n }\n const fms = (this.formConfig.fieldMetadata || []).filter((f: any) => names.has(f.name));\n return { sections: [sec], fieldMetadata: fms } as any;\n }\n\n private bootstrapDynamicForms(): void {\n if (!this.dynamicFormCtor) {\n if (!this.loggedMissingDynamicForm) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Dynamic form component was not provided. Set GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT to enable form rendering.',\n this.buildLogOptions(\n { token: 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT' },\n { dedupeKey: 'global-config-editor:missing-dynamic-form' },\n ),\n );\n this.loggedMissingDynamicForm = true;\n }\n return;\n }\n\n const groups: Array<{ id: string; host: ViewContainerRef; cfg: any }> = [\n { id: 'crud', host: this.hostCrud, cfg: this.buildSectionConfig('crud') },\n { id: 'dynamic-fields', host: this.hostFields, cfg: this.buildSectionConfig('dynamic-fields') },\n { id: 'cache', host: this.hostCache, cfg: this.buildSectionConfig('cache') },\n { id: 'table', host: this.hostTable, cfg: this.buildSectionConfig('table') },\n { id: 'dialog', host: this.hostDialog, cfg: this.buildSectionConfig('dialog') },\n { id: 'ai-credentials', host: this.hostAiCredentials, cfg: this.buildSectionConfig('ai-credentials') },\n { id: 'ai-embedding', host: this.hostAiEmbedding, cfg: this.buildSectionConfig('ai-embedding') },\n ];\n\n for (const g of groups) {\n try {\n if (!g.host) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Missing host for section',\n this.buildLogOptions(\n { sectionId: g.id },\n {\n dedupeKey: `global-config-editor:missing-host:${g.id}`,\n context: { actionId: `section.${g.id}` },\n },\n ),\n );\n continue;\n }\n this.logger.debug(\n '[GlobalConfigEditor] Creating form section',\n this.buildLogOptions(\n { sectionId: g.id, config: g.cfg },\n {\n context: { actionId: `section.${g.id}` },\n throttleKey: 'global-config-editor:create-form-section',\n },\n ),\n );\n const ref = g.host.createComponent(this.dynamicFormCtor);\n ref.setInput('config', g.cfg);\n ref.setInput('mode', 'edit');\n // Não habilitar o modo de edição de layout (canvas) — queremos apenas edição de valores\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n\n // FORÇAR estado de sucesso para renderizar o formulário sem resourcePath\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n {\n context: { actionId: `section.${g.id}.build-form` },\n dedupeKey: `global-config-editor:build-form-failed:${g.id}`,\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange(g.id, ev));\n }\n this.componentRefs.set(g.id, ref);\n if (g.id === 'dialog') {\n // Guardar referência para facilitar setValue em campos de ícone\n this.dialogFormInst = inst;\n }\n if (g.id === 'ai-embedding') {\n this.aiEmbeddingFormRef = ref;\n }\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create form section',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n { context: { actionId: `section.${g.id}.create` } },\n ),\n );\n }\n }\n // Criar a seção de modelo somente quando a chave estiver disponível e o host existir\n this.ensureAiModelForm();\n }\n\n private ensureAiModelForm(): void {\n if (!this.hasApiKey) return;\n if (!this.aiModelFormRef) {\n this.createAiModelForm();\n }\n }\n\n private async loadProviderCatalog(): Promise<void> {\n try {\n const response: any = await firstValueFrom(this.aiApi.listProviderCatalog() as any);\n const providers = Array.isArray(response?.providers) ? response.providers : [];\n this.providers = providers.filter((p: any) => p && p.id);\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Failed to load provider catalog, using fallback.',\n this.buildLogOptions(\n { error: err },\n {\n context: { actionId: 'providers.load-catalog' },\n dedupeKey: 'global-config-editor:provider-catalog-fallback',\n },\n ),\n );\n this.providers = this.buildFallbackProviders();\n }\n }\n\n private buildFallbackProviders(): AiProviderCatalogItem[] {\n return [\n {\n id: 'gemini',\n label: 'Google Gemini',\n description: 'Modelos rápidos e multimodais do Google.',\n defaultModel: 'gemini-2.0-flash',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'gemini',\n },\n {\n id: 'openai',\n label: 'OpenAI',\n description: 'Modelos GPT para texto e chat.',\n defaultModel: 'gpt-4o-mini',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'openai',\n },\n {\n id: 'xai',\n label: 'xAI (Grok)',\n description: 'Modelos Grok focados em raciocínio.',\n defaultModel: 'grok-2-latest',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: false,\n iconKey: 'xai',\n },\n {\n id: 'mock',\n label: 'Mock (dev)',\n description: 'Modo local para testes sem chave.',\n defaultModel: 'mock-default',\n requiresApiKey: false,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'mock',\n },\n ];\n }\n\n private applyProviderOptions(): void {\n const options = this.providers.map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setProviderFieldOptions(options);\n }\n\n private applyEmbeddingProviderOptions(): void {\n const options = this.providers\n .filter((provider) =>\n provider?.supportsEmbeddings !== false || provider?.id === 'openai',\n )\n .map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setEmbeddingProviderFieldOptions(options);\n }\n\n private setProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private setEmbeddingProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.embedding.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private resolveDefaultProvider(): string {\n const preferred = this.providers.find((provider) => provider.id === 'gemini') || this.providers[0];\n return preferred?.id || 'gemini';\n }\n\n private setFieldDefaultValue(safeName: string, value: any): void {\n const field = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeName);\n if (field) {\n (field as any).defaultValue = value;\n }\n }\n\n private updateSelectedProvider(providerId: string): void {\n this.selectedProvider = this.findProvider(providerId) || null;\n }\n\n private updateApiKeyState(providerId: string, apiKey?: string): void {\n const meta = this.findProvider(providerId);\n const requiresKey = meta?.requiresApiKey !== false;\n this.hasApiKey = !requiresKey || !!apiKey || this.hasStoredApiKey;\n }\n\n get embeddingUseSameAsLlm(): boolean {\n return !!(this.currentValues as any)?.[this.safeName('ai.embedding.useSameAsLlm')];\n }\n\n get embeddingDimensionMismatch(): boolean {\n const raw = (this.currentValues as any)?.[this.safeName('ai.embedding.dimensions')];\n if (raw === undefined || raw === null || raw === '') return false;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return false;\n return parsed !== 768;\n }\n\n get canUseLlmForEmbeddings(): boolean {\n return !!this.selectedProvider?.supportsEmbeddings;\n }\n\n private canAutoRefreshModels(providerId: string, apiKey: string): boolean {\n const meta = this.findProvider(providerId);\n if (meta?.supportsModels === false) return false;\n if (meta?.requiresApiKey === false) return true;\n if (apiKey && apiKey.length > 10) return true;\n return this.hasStoredApiKey;\n }\n\n private ensureDefaultModelSelection(): void {\n const modelSafe = this.safeName('ai.model');\n const current = (this.currentValues as any)[modelSafe];\n if (current) return;\n const fallback = this.selectedProvider?.defaultModel;\n if (!fallback) return;\n this.setFieldDefaultValue(modelSafe, fallback);\n (this.currentValues as any)[modelSafe] = fallback;\n this.updateModelDetails(fallback);\n }\n\n private clearModelSelection(defaultModel?: string): void {\n const modelSafe = this.safeName('ai.model');\n const nextValue = defaultModel || '';\n (this.currentValues as any)[modelSafe] = nextValue;\n this.setFieldDefaultValue(modelSafe, nextValue);\n this.updateModelDetails(nextValue);\n const inst: any = this.aiModelFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(modelSafe);\n if (ctrl) {\n ctrl.setValue(nextValue);\n }\n }\n\n private findProvider(providerId: string): AiProviderCatalogItem | undefined {\n return this.providers.find((provider) => provider.id === providerId);\n }\n\n private setModelFieldOptions(modelOptions: Array<{ text: string; value: string }>): void {\n const safeModelName = this.safeName('ai.model');\n const aiModelField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeModelName);\n if (aiModelField) {\n (aiModelField as any).selectOptions = modelOptions;\n }\n }\n\n private applyConfigSnapshot(flat: Record<string, any>, opts: { resetForms: boolean }): void {\n this.pathMap = {};\n for (const fm of this.formConfig.fieldMetadata || []) {\n const da: any = (fm as any).dataAttributes || {};\n const path = da.globalPath || fm.name;\n this.pathMap[fm.name] = path;\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) (fm as any).defaultValue = v;\n }\n this.initialValues = {};\n for (const safe of Object.keys(this.pathMap)) {\n const path = this.pathMap[safe];\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) this.initialValues[safe] = v;\n }\n this.currentValues = { ...this.initialValues };\n this.apiKeyLast4 = flat['ai.apiKeyLast4'] || null;\n this.hasStoredApiKey = !!flat['ai.hasApiKey'] || !!this.apiKeyLast4;\n\n if (opts.resetForms) {\n const resetValues: Record<string, any> = {};\n for (const safe of Object.keys(this.pathMap)) {\n if (safe in this.initialValues) {\n resetValues[safe] = this.initialValues[safe];\n } else {\n resetValues[safe] = null;\n }\n }\n this.patchFormsWithValues(resetValues);\n this.bootstrappedSections = new Set(this.allSections);\n this.isDirty$.next(false);\n }\n }\n\n private patchFormsWithValues(values: Record<string, any>): void {\n for (const ref of this.componentRefs.values()) {\n const inst: any = ref?.instance as any;\n const form = inst?.form;\n if (form?.patchValue) {\n try {\n form.patchValue(values, { emitEvent: false });\n } catch { }\n }\n }\n }\n\n private refreshAiStateAfterConfig(): void {\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n this.updateModelDetails((this.currentValues as any)[this.safeName('ai.model')] || '');\n }\n\n private async refreshStoredConfigState(): Promise<void> {\n try {\n this.hasStoredGlobalConfig = await this.admin.hasStoredConfig();\n } catch {\n this.hasStoredGlobalConfig = false;\n }\n this.configSourceLabel = this.hasStoredGlobalConfig\n ? 'Configuração salva (UI) — sobrescreve os defaults do servidor'\n : 'Padrões do servidor (env vars)';\n }\n\n async clearStoredConfig(): Promise<void> {\n if (this.isClearingGlobalConfig) return;\n this.isClearingGlobalConfig = true;\n try {\n await this.admin.clearStoredConfig();\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.applyConfigSnapshot(flat, { resetForms: true });\n this.aiTestResult = null;\n this.refreshAiStateAfterConfig();\n await this.refreshStoredConfigState();\n try { this.snack.open('Configuração global limpa. Usando defaults do servidor.', undefined, { duration: 2500 }); } catch { }\n } catch (err) {\n try { this.snack.open('Falha ao limpar a configuração global.', undefined, { duration: 4000 }); } catch { }\n } finally {\n this.isClearingGlobalConfig = false;\n this.cdr.detectChanges();\n }\n }\n\n private syncEmbeddingDefaults(markDirty = true): void {\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n const embeddingProviderSafe = this.safeName('ai.embedding.provider');\n const embeddingApiKeySafe = this.safeName('ai.embedding.apiKey');\n const useSame = !!(this.currentValues as any)[useSameSafe];\n if (!useSame) return;\n if (!this.canUseLlmForEmbeddings) {\n this.setEmbeddingValue(useSameSafe, false, markDirty);\n return;\n }\n const llmProvider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const llmApiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n this.setEmbeddingValue(embeddingProviderSafe, llmProvider, markDirty);\n this.setEmbeddingValue(embeddingApiKeySafe, llmApiKey, markDirty);\n }\n\n private ensureEmbeddingModelDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const modelSafe = this.safeName('ai.embedding.model');\n const provider = (this.currentValues as any)[providerSafe];\n const model = (this.currentValues as any)[modelSafe];\n if (provider === 'openai' && !model) {\n this.setEmbeddingValue(\n modelSafe,\n this.embeddingModelOptions[0]?.value || 'text-embedding-3-large',\n markDirty,\n );\n }\n }\n\n private ensureEmbeddingDimensionsDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const dimensionsSafe = this.safeName('ai.embedding.dimensions');\n const provider = (this.currentValues as any)[providerSafe];\n const dimensions = (this.currentValues as any)[dimensionsSafe];\n if (provider === 'openai' && (dimensions === undefined || dimensions === null || dimensions === '')) {\n this.setEmbeddingValue(dimensionsSafe, 768, markDirty);\n }\n }\n\n useLlmForEmbeddings(): void {\n if (!this.canUseLlmForEmbeddings) return;\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n this.setEmbeddingValue(useSameSafe, true);\n this.syncEmbeddingDefaults();\n }\n\n private createAiModelForm(): void {\n if (!this.dynamicFormCtor || !this.hostAiModel) return;\n const cfg = this.buildSectionConfig('ai-model');\n if (!cfg.sections?.length) return;\n try {\n // Apply pending options to metadata before creating\n if (this.pendingModelOptions.length) {\n this.setModelFieldOptions(this.pendingModelOptions);\n }\n const ref = this.hostAiModel.createComponent(this.dynamicFormCtor);\n ref.setInput('config', cfg);\n ref.setInput('mode', 'edit');\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: 'ai-model', error: err },\n {\n context: { actionId: 'section.ai-model.build-form' },\n dedupeKey: 'global-config-editor:build-form-failed:ai-model',\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange('ai-model', ev));\n }\n this.componentRefs.set('ai-model', ref);\n this.aiModelFormRef = ref;\n this.updateModelDetails(this.currentValues[this.safeName('ai.model')] || '');\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create AI model form',\n this.buildLogOptions(\n { error: err },\n { context: { actionId: 'section.ai-model.create' } },\n ),\n );\n }\n }\n\n private setEmbeddingValue(safeName: string, value: any, markDirty = true): void {\n (this.currentValues as any)[safeName] = value;\n const inst: any = this.aiEmbeddingFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(safeName);\n if (ctrl) {\n ctrl.setValue(value);\n }\n if (markDirty) {\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n }\n\n private recreateAiModelForm(): void {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.createAiModelForm();\n }\n\n private updateModelDetails(modelName: string) {\n const model = this.availableModels.find(m => m.name.endsWith(modelName));\n if (model) {\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : 'N/A';\n this.selectedModelDetails = `Modelo: ${model.displayName || modelName} | Tokens (in/out): ${formatLimit(model.inputTokenLimit)}/${formatLimit(model.outputTokenLimit)} | Métodos: ${model.supportedGenerationMethods?.join(', ') || 'N/A'}`;\n } else {\n this.selectedModelDetails = 'Detalhes do modelo não disponíveis.';\n }\n }\n\n // SettingsPanel expects these methods\n reset(): void {\n const flat: Record<string, any> = {};\n for (const safe of Object.keys(this.initialValues)) flat[safe] = this.initialValues[safe];\n for (const fm of this.formConfig.fieldMetadata || []) {\n const v = flat[fm.name];\n (fm as any).defaultValue = v;\n }\n this.currentValues = { ...this.initialValues };\n this.isDirty$.next(false);\n }\n\n getSettingsValue(): any {\n const flat = this.buildChangedValues();\n return this.toNested(flat);\n }\n\nasync onSave(): Promise<any> {\n const partial = this.getSettingsValue();\n const validationMessage = this.validateCompactTableAppearancePayload(partial);\n if (validationMessage) {\n try { this.snack.open(validationMessage, undefined, { duration: 5000 }); } catch { }\n return undefined;\n }\n this.isBusy$.next(true);\n try {\n await this.admin.save(partial);\n // Update baseline after save\n this.initialValues = { ...this.currentValues };\n this.isDirty$.next(false);\n try { this.snack.open('Configurações salvas', undefined, { duration: 2000 }); } catch { }\n return partial;\n } catch (err) {\n const message = this.resolveSaveErrorMessage(err);\n try { this.snack.open(message, undefined, { duration: 4000 }); } catch { }\n return undefined;\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n async refreshModels(force = false, silent = false): Promise<void> {\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n if (meta?.supportsModels === false) {\n if (!silent) {\n this.aiTestResult = { success: false, message: 'Este provedor não oferece catálogo de modelos.' };\n this.cdr.detectChanges();\n }\n return;\n }\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: 'Insira uma chave de API para buscar modelos.' };\n this.cdr.detectChanges();\n return;\n }\n\n if (!silent) {\n this.isRefetchingModels = true;\n this.cdr.detectChanges();\n }\n\n let modelOptions: Array<{ text: string; value: string }> = [];\n\n try {\n const request: any = { provider };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(this.aiApi.listModels(request) as any);\n if (!response?.success) {\n const msg = response?.message || 'Erro ao buscar modelos.';\n throw new Error(msg);\n }\n const models: AiModel[] = response.models || [];\n this.availableModels = models; // Store available models\n\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : '?';\n\n modelOptions = (models || [])\n .filter((m) => m.name)\n .map((m) => {\n const shortName = m.name.split('/').pop() || m.name;\n const details = `${formatLimit(m.inputTokenLimit)} in / ${formatLimit(m.outputTokenLimit)} out`;\n return {\n text: `${m.displayName || shortName} (${details})`,\n value: shortName\n };\n });\n\n if (modelOptions.length || force) {\n this.applyModelOptions(modelOptions, silent);\n }\n } catch (error: any) {\n this.logger.error(\n '[GlobalConfigEditor] Error fetching models',\n this.buildLogOptions(\n { error, provider },\n { context: { actionId: 'models.fetch' } },\n ),\n );\n this.aiTestResult = { success: false, message: error.message || 'Erro ao buscar modelos.' };\n if (!silent) {\n this.snack.open('Erro ao buscar modelos. Verifique a chave de API.', 'Fechar', { duration: 5000 });\n }\n } finally {\n this.logger.debug(\n '[GlobalConfigEditor] refreshModels complete.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions?.length ?? 0, hasAiModelFormRef: !!this.aiModelFormRef },\n {\n context: { actionId: 'models.refresh' },\n throttleKey: 'global-config-editor:refresh-models-complete',\n },\n ),\n );\n this.isRefetchingModels = false;\n this.cdr.detectChanges();\n }\n }\n\n // New method to apply model options to the form\n private applyModelOptions(modelOptions: Array<{ text: string; value: string }>, silent = false): void {\n // Store if form ref not ready yet\n if (!this.aiModelFormRef) {\n this.pendingModelOptions = modelOptions; // Store for later application\n this.logger.warnOnce(\n '[GlobalConfigEditor] aiModelFormRef not ready. Storing model options.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions.length },\n {\n context: { actionId: 'models.apply-options' },\n dedupeKey: 'global-config-editor:ai-model-form-ref-not-ready',\n },\n ),\n );\n this.ensureAiModelForm();\n return;\n }\n\n this.pendingModelOptions = modelOptions;\n this.setModelFieldOptions(modelOptions);\n this.ensureDefaultModelSelection();\n this.recreateAiModelForm();\n\n if (!silent) {\n try { this.snack.open(`Lista de modelos atualizada (${modelOptions.length} modelos)`, undefined, { duration: 3000 }); } catch { }\n }\n this.pendingModelOptions = [];\n }\n\n async testAiConnection(): Promise<void> {\n this.isTestingAi = true;\n this.aiTestResult = null;\n this.cdr.detectChanges(); // Force update to show spinner\n\n // Get current value from form (even if not saved)\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n const selectedModel = (this.currentValues as any)[this.safeName('ai.model')] || meta?.defaultModel || 'gemini-2.0-flash';\n\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: 'Insira uma chave de API para testar.' };\n this.isTestingAi = false;\n this.cdr.detectChanges();\n return;\n }\n\n try {\n const request: any = { provider, model: selectedModel };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(\n this.aiApi.testProvider(request) as any,\n );\n if (!response?.success) {\n throw new Error(response?.message || 'Falha ao testar conexao.');\n }\n this.aiTestResult = { success: true, message: response.message || 'Conexao estabelecida com sucesso!' };\n this.hasApiKey = true; // Garantir desbloqueio da seção de modelo após sucesso\n // Após validar a chave, já buscar a lista de modelos para preencher o select\n await this.refreshModels(true);\n } catch (err: any) {\n this.logger.error(\n '[GlobalConfigEditor] AI Connection Test Error',\n this.buildLogOptions(\n { error: err, provider, model: selectedModel },\n { context: { actionId: 'provider.test-connection' } },\n ),\n );\n const msg = err?.message || 'Erro desconhecido';\n this.aiTestResult = { success: false, message: msg };\n } finally {\n this.isTestingAi = false;\n this.cdr.detectChanges(); // Force update to hide spinner\n }\n }\n\n private buildLogOptions(\n data?: unknown,\n options: Partial<LoggerLogOptions> = {},\n ): LoggerLogOptions {\n return {\n ...options,\n context: {\n ...this.logContext,\n ...(options.context ?? {}),\n },\n data,\n };\n }\n\n // ===== Helpers de UX para ícones de Dialog (variants) =====\n private safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n }\n\nprivate buildChangedValues(): Record<string, any> {\n const out: Record<string, any> = {};\n for (const [safe, value] of Object.entries(this.currentValues)) {\n const path = this.pathMap[safe] || safe;\n const normalizedValue = this.normalizeFieldValue(path, value);\n const normalizedInitial = this.normalizeFieldValue(path, this.initialValues[safe]);\n if (!this.shouldIncludeField(normalizedInitial, normalizedValue)) continue;\n out[path] = normalizedValue;\n }\n return out;\n}\n\n private shouldIncludeField(initial: any, current: any): boolean {\n if (initial === undefined) {\n if (current === null || current === undefined) return false;\n if (typeof current === 'string' && current.trim() === '') return false;\n if (Array.isArray(current) && current.length === 0) return false;\n }\n return initial !== current;\n }\n\n private resolveSaveErrorMessage(err: any): string {\n const apiMessage = typeof err?.error?.message === 'string' ? err.error.message : null;\n const details = err?.error?.details;\n if (apiMessage && apiMessage.trim()) {\n return apiMessage;\n }\n if (details && typeof details === 'object') {\n const first = Object.values(details).find((v) => typeof v === 'string' && v.trim());\n if (typeof first === 'string') {\n return first;\n }\n }\n if (typeof err?.message === 'string' && err.message.trim()) {\n return err.message;\n }\n return 'Falha ao salvar configurações.';\n }\n private normalizeFieldValue(path: string, value: any): any {\n if (typeof value !== 'string') return value;\n if (!TABLE_COMPACT_SPACING_PATHS.has(path) && !TABLE_COMPACT_FONT_SIZE_PATHS.has(path)) {\n return value;\n }\n return value.trim().replace(/\\s+/g, ' ');\n }\n\n private validateCompactTableAppearancePayload(partial: any): string | null {\n const appearance = partial?.table?.appearance;\n if (!appearance || typeof appearance !== 'object') return null;\n\n const checks: Array<{ path: string; value: unknown; regex: RegExp; example: string }> = [\n {\n path: 'table.appearance.spacing.cellPadding',\n value: appearance?.spacing?.cellPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '6px 12px',\n },\n {\n path: 'table.appearance.spacing.headerPadding',\n value: appearance?.spacing?.headerPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '8px 12px',\n },\n {\n path: 'table.appearance.typography.fontSize',\n value: appearance?.typography?.fontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n {\n path: 'table.appearance.typography.headerFontSize',\n value: appearance?.typography?.headerFontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n ];\n\n for (const check of checks) {\n if (typeof check.value !== 'string') continue;\n const normalized = this.normalizeFieldValue(check.path, check.value);\n if (!normalized) continue;\n if (!check.regex.test(normalized)) {\n return `Valor inválido em ${TABLE_COMPACT_FIELD_LABELS[check.path]}. Use uma string CSS simples, como ${check.example}.`;\n }\n }\n\n return null;\n }\n\n getVariantIcon(key: string): string | undefined {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n return (this.currentValues as any)[safe];\n }\n async pickVariantIcon(key: string): Promise<void> {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n const current = (this.currentValues as any)[safe] || '';\n // Melhor UX: usar MatDialog (modal) em vez do Settings Panel para o picker\n const res = await this.iconPicker.openDialog({ value: current });\n if (res === undefined) return; // cancel\n this.setDialogControlValue(safe, res);\n }\n clearVariantIcon(key: string): void {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n this.setDialogControlValue(safe, '');\n }\n private setDialogControlValue(safeControlName: string, val: string): void {\n const inst: any = this.dialogFormInst as any;\n try {\n const ctrl = inst?.form?.get?.(safeControlName);\n if (ctrl) {\n ctrl.setValue(val);\n return;\n }\n } catch { }\n // Fallback: atualiza cache local e marca como sujo\n (this.currentValues as any)[safeControlName] = val;\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n\n\n private withDefaults(config: FormConfig, values: Record<string, any>): FormConfig {\n const next = JSON.parse(JSON.stringify(config)) as FormConfig;\n for (const section of next.sections || []) {\n for (const row of section.rows || []) {\n for (const col of row.columns || []) {\n for (const field of col.fields || []) {\n const key = (field as any).name as string;\n if (!key) continue;\n const v = values[key];\n if (v !== undefined) {\n (field as any).defaultValue = v;\n }\n }\n }\n }\n }\n return next;\n }\n\n private setByPath(target: any, dotPath: string, value: any): void {\n const parts = dotPath.split('.');\n let ref = target;\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i];\n if (typeof ref[p] !== 'object' || ref[p] == null) ref[p] = {};\n ref = ref[p];\n }\n ref[parts[parts.length - 1]] = value;\n }\n\n private flatten(obj: any, prefix = ''): Record<string, any> {\n const out: Record<string, any> = {};\n if (!obj || typeof obj !== 'object') return out;\n for (const key of Object.keys(obj)) {\n const val = (obj as any)[key];\n const path = prefix ? `${prefix}.${key}` : key;\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n Object.assign(out, this.flatten(val, path));\n } else {\n out[path] = val;\n }\n }\n return out;\n }\n\n private toNested(flat: Record<string, any>): any {\n const out: any = {};\n for (const k of Object.keys(flat)) {\n const v = flat[k];\n if (v === undefined) continue;\n this.setByPath(out, k, v);\n }\n return out;\n }\n\n private shallowEqual(a: Record<string, any>, b: Record<string, any>): boolean {\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n for (const k of ak) {\n if (a[k] !== b[k]) return false;\n }\n return true;\n }\n}\n","import { SettingsPanelService } from '../settings-panel.service';\nimport { GlobalConfigEditorComponent } from './global-config-editor.component';\n\nexport type OpenGlobalConfigOptions = {\n id?: string;\n title?: string;\n titleIcon?: string;\n};\n\n/**\n * Helper to open the Global Config Editor in a host application.\n * Usage:\n * openGlobalConfigEditor(settings);\n */\nexport function openGlobalConfigEditor(\n settings: SettingsPanelService,\n opts?: OpenGlobalConfigOptions,\n): void {\n settings.open({\n id: opts?.id ?? 'global-config',\n title: opts?.title ?? 'Configurações Globais',\n titleIcon: opts?.titleIcon ?? 'tune',\n content: { component: GlobalConfigEditorComponent, inputs: {} },\n });\n}\n\n","/**\n * Capabilities catalog for SettingsPanelConfig.\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n content: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nexport const SETTINGS_PANEL_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: {},\n targets: ['praxis-global-config-editor', 'praxis-settings-panel'],\n notes: [\n 'SettingsPanelConfig descreve o painel e o componente embutido (content.component).',\n 'content.component deve ser uma referencia de classe Angular fornecida pelo host.',\n ],\n capabilities: [\n { path: 'id', category: 'identity', valueKind: 'string', description: 'ID do painel.' },\n { path: 'title', category: 'identity', valueKind: 'string', description: 'Titulo do painel.' },\n { path: 'titleIcon', category: 'identity', valueKind: 'string', description: 'Icone do titulo (Material icon name).' },\n { path: 'expanded', category: 'behavior', valueKind: 'boolean', description: 'Estado inicial expandido.' },\n { path: 'content', category: 'content', valueKind: 'object', description: 'Conteudo do painel.' },\n {\n path: 'content.component',\n category: 'content',\n valueKind: 'object',\n description: 'Referencia do componente Angular a ser renderizado.',\n critical: true,\n safetyNotes: 'Nao gerar dinamicamente; o host deve fornecer a referencia.',\n },\n {\n path: 'content.inputs',\n category: 'content',\n valueKind: 'object',\n description: 'Inputs passados para o componente de conteudo.',\n },\n ],\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","TABLE_COMPACT_LENGTH_TOKEN","i1.GlobalConfigAdminService","i5","i6","i7","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"praxisui-settings-panel.mjs","sources":["../../../projects/praxis-settings-panel/src/lib/settings-panel.component.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.component.html","../../../projects/praxis-settings-panel/src/lib/settings-panel.ref.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.tokens.ts","../../../projects/praxis-settings-panel/src/lib/settings-panel.service.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-admin.service.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.schema.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.tokens.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/global-config-editor.component.ts","../../../projects/praxis-settings-panel/src/lib/global-config-editor/open-global-config-editor.ts","../../../projects/praxis-settings-panel/src/lib/ai/settings-panel-ai-capabilities.ts","../../../projects/praxis-settings-panel/src/praxisui-settings-panel.ts"],"sourcesContent":["import {\n Component,\n ComponentRef,\n HostListener,\n Injector,\n DestroyRef,\n inject,\n Type,\n ViewChild,\n ChangeDetectorRef,\n ViewContainerRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { SettingsPanelRef } from './settings-panel.ref';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { firstValueFrom, isObservable, of } from 'rxjs';\nimport { filter, switchMap } from 'rxjs/operators';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n} from '@praxisui/dynamic-fields';\n\n@Component({\n selector: 'praxis-settings-panel',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n CdkTrapFocus,\n MatProgressSpinnerModule,\n MatDialogModule,\n ],\n templateUrl: './settings-panel.component.html',\n styleUrls: ['./settings-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SettingsPanelComponent {\n title = '';\n titleIcon?: string;\n expanded = false;\n ref!: SettingsPanelRef;\n contentRef?: ComponentRef<any>;\n private static nextId = 0;\n titleId = `praxis-settings-panel-title-${SettingsPanelComponent.nextId++}`;\n\n isDirty = false;\n isValid = true;\n isBusy = false;\n private lastSavedAt: number | null = null;\n\n get canApply(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get canSave(): boolean {\n return this.isDirty && this.isValid && !this.isBusy;\n }\n\n get disabledReason(): string {\n if (this.isBusy) {\n return 'Operação em andamento...';\n }\n if (!this.isValid) {\n return 'O formulário contém erros que precisam ser corrigidos.';\n }\n if (!this.isDirty) {\n return 'Nenhuma alteração para aplicar ou salvar.';\n }\n return '';\n }\n\n get statusTone(): 'busy' | 'dirty' | 'saved' | 'idle' {\n if (this.isBusy) return 'busy';\n if (this.isDirty) return 'dirty';\n if (this.lastSavedAt) return 'saved';\n return 'idle';\n }\n\n get statusMessage(): string {\n if (this.statusTone === 'busy') {\n return 'Operação em andamento...';\n }\n if (this.statusTone === 'dirty') {\n return 'Alterações não salvas';\n }\n if (this.statusTone === 'saved' && this.lastSavedAt) {\n return `Salvo às ${this.formatClock(this.lastSavedAt)}`;\n }\n return 'Sem alterações';\n }\n\n private readonly destroyRef = inject(DestroyRef);\n\n @ViewChild('contentHost', { read: ViewContainerRef, static: true })\n private contentHost!: ViewContainerRef;\n\n constructor(private cdr: ChangeDetectorRef, private dialog: MatDialog) {}\n\n attachContent(\n component: Type<any>,\n injector: Injector,\n ref: SettingsPanelRef,\n inputs?: Record<string, unknown>,\n ): void {\n this.ref = ref;\n this.contentRef = this.contentHost.createComponent(component, {\n injector,\n });\n this.applyInputs(this.contentRef, inputs);\n\n const instance: any = this.contentRef.instance;\n\n if (instance.isDirty$) {\n instance.isDirty$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((dirty: boolean) => {\n this.isDirty = dirty;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isValid$) {\n instance.isValid$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((valid: boolean) => {\n this.isValid = valid;\n this.cdr.markForCheck();\n });\n }\n\n if (instance.isBusy$) {\n instance.isBusy$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((busy: boolean) => {\n this.isBusy = busy;\n this.cdr.markForCheck();\n });\n }\n\n // Generic output bridging: if the embedded component emits `selected`, save and close.\n try {\n const selected$ = instance?.selected;\n if (selected$ && typeof selected$.subscribe === 'function') {\n const obs = typeof selected$.pipe === 'function'\n ? selected$.pipe(takeUntilDestroyed(this.destroyRef))\n : selected$;\n obs.subscribe((value: any) => {\n // Apply emits value to the opener without closing the panel.\n this.ref.apply(value);\n });\n }\n } catch {}\n }\n\n private applyInputs(contentRef: ComponentRef<any>, inputs?: Record<string, unknown>): void {\n if (!inputs) {\n return;\n }\n\n const supportedInputs = this.resolveSupportedInputs(contentRef);\n for (const [key, value] of Object.entries(inputs)) {\n if (supportedInputs && !supportedInputs.has(key)) {\n continue;\n }\n\n try {\n if (typeof contentRef.setInput === 'function') {\n contentRef.setInput(key, value);\n } else {\n (contentRef.instance as Record<string, unknown>)[key] = value;\n }\n } catch {}\n }\n\n contentRef.changeDetectorRef.detectChanges();\n }\n\n private resolveSupportedInputs(contentRef: ComponentRef<any>): Set<string> | null {\n const componentDef = (contentRef.componentType as any)?.ɵcmp;\n const declaredInputs = componentDef?.inputs;\n if (!declaredInputs || typeof declaredInputs !== 'object') {\n return null;\n }\n\n return new Set(Object.keys(declaredInputs));\n }\n\n onReset(): void {\n const dialogData: ConfirmDialogData = {\n title: 'Redefinir Alterações',\n message: 'Tem certeza de que deseja redefinir todas as alterações?',\n confirmText: 'Redefinir',\n cancelText: 'Cancelar',\n type: 'warning',\n icon: 'restart_alt',\n };\n\n this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed()\n .pipe(filter((confirmed) => confirmed))\n .subscribe(() => {\n this.contentRef?.instance?.reset?.();\n this.lastSavedAt = null;\n this.ref.reset();\n });\n }\n\n onApply(): void {\n if (!this.canApply) return;\n const value = this.contentRef?.instance?.getSettingsValue?.();\n this.ref.apply(value);\n }\n\n onSave(): void {\n if (!this.canSave) return;\n const instance: any = this.contentRef?.instance;\n const result = instance?.onSave?.();\n\n if (isObservable(result)) {\n firstValueFrom(result)\n .then((value) => this.emitSave(value))\n .catch(() => {});\n } else if (result instanceof Promise) {\n result\n .then((value: unknown) => this.emitSave(value))\n .catch(() => {});\n } else if (result !== undefined) {\n this.emitSave(result);\n } else {\n const value = instance?.getSettingsValue?.();\n this.emitSave(value);\n }\n }\n\n private emitSave(value: unknown): void {\n if (value === undefined) return;\n this.lastSavedAt = Date.now();\n this.isDirty = false;\n this.ref.save(value);\n this.cdr.markForCheck();\n }\n\n private formatClock(timestamp: number): string {\n try {\n return new Intl.DateTimeFormat('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }).format(timestamp);\n } catch {\n return '';\n }\n }\n\n toggleExpand(): void {\n this.expanded = !this.expanded;\n this.cdr.markForCheck();\n }\n\n onCancel(): void {\n of(this.isDirty)\n .pipe(\n switchMap((dirty) => {\n if (!dirty) {\n return of(true);\n }\n const dialogData: ConfirmDialogData = {\n title: 'Descartar Alterações',\n message:\n 'Você tem alterações não salvas. Tem certeza de que deseja descartá-las?',\n confirmText: 'Descartar',\n cancelText: 'Continuar Editando',\n type: 'warning',\n icon: 'warning',\n };\n return this.dialog\n .open(ConfirmDialogComponent, { data: dialogData, autoFocus: false })\n .afterClosed();\n }),\n filter((confirmed) => confirmed),\n )\n .subscribe(() => {\n this.ref.close('cancel');\n });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.onCancel();\n } else if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.onSave();\n } else if ((event.key === 's' || event.key === 'S') && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this.onSave();\n }\n }\n}\n","<div\n class=\"settings-panel\"\n data-testid=\"settings-panel-root\"\n [class.expanded]=\"expanded\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n>\n <header class=\"settings-panel-header\">\n <h2 class=\"settings-panel-title\" [id]=\"titleId\">\n <mat-icon *ngIf=\"titleIcon\" class=\"title-icon\" [praxisIcon]=\"titleIcon\"></mat-icon>\n <span>{{ title }}</span>\n </h2>\n <span class=\"spacer\"></span>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-toggle-expand\"\n [attr.aria-label]=\"expanded ? 'Reduzir painel' : 'Expandir painel'\"\n [attr.aria-expanded]=\"expanded\"\n [matTooltip]=\"expanded ? 'Reduzir painel' : 'Expandir painel'\"\n (click)=\"toggleExpand()\"\n >\n <mat-icon [praxisIcon]=\"expanded ? 'close_fullscreen' : 'open_in_full'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n data-testid=\"settings-panel-close-icon\"\n aria-label=\"Fechar\"\n matTooltip=\"Fechar\"\n (click)=\"onCancel()\"\n >\n <mat-icon [praxisIcon]=\"'close'\"></mat-icon>\n </button>\n </header>\n <div\n class=\"settings-panel-status\"\n [attr.data-status]=\"statusTone\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <mat-icon\n aria-hidden=\"true\"\n [praxisIcon]=\"\n statusTone === 'dirty'\n ? 'warning'\n : statusTone === 'saved'\n ? 'check_circle'\n : statusTone === 'busy'\n ? 'autorenew'\n : 'info'\n \"\n ></mat-icon>\n <span>{{ statusMessage }}</span>\n </div>\n <div class=\"settings-panel-body\">\n <ng-template #contentHost></ng-template>\n </div>\n <footer class=\"settings-panel-footer\">\n <button mat-button type=\"button\" data-testid=\"settings-panel-reset\" (click)=\"onReset()\" [disabled]=\"isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'restart_alt'\"></mat-icon>\n <span>Redefinir</span>\n </button>\n <span class=\"spacer\"></span>\n <button\n mat-button\n type=\"button\"\n data-testid=\"settings-panel-cancel\"\n (click)=\"onCancel()\"\n [disabled]=\"isBusy\"\n >\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'close'\"></mat-icon>\n <span>Cancelar</span>\n </button>\n <button\n mat-stroked-button\n type=\"button\"\n data-testid=\"settings-panel-apply\"\n (click)=\"onApply()\"\n [disabled]=\"!canApply\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canApply\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'done'\"></mat-icon>\n <span>Aplicar</span>\n </ng-container>\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n data-testid=\"settings-panel-save\"\n (click)=\"onSave()\"\n [disabled]=\"!canSave\"\n [matTooltip]=\"disabledReason\"\n [matTooltipDisabled]=\"canSave\"\n [attr.aria-busy]=\"isBusy\"\n >\n <mat-progress-spinner\n *ngIf=\"isBusy\"\n mode=\"indeterminate\"\n diameter=\"20\"\n ></mat-progress-spinner>\n <ng-container *ngIf=\"!isBusy\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'save'\"></mat-icon>\n <span>Salvar & Fechar</span>\n </ng-container>\n </button>\n </footer>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Subject } from 'rxjs';\nimport { SettingsPanelCloseReason } from './settings-panel.types';\n\nexport class SettingsPanelRef {\n private appliedSubject = new Subject<any>();\n private savedSubject = new Subject<any>();\n private resetSubject = new Subject<void>();\n private closedSubject = new Subject<SettingsPanelCloseReason>();\n\n applied$ = this.appliedSubject.asObservable();\n saved$ = this.savedSubject.asObservable();\n reset$ = this.resetSubject.asObservable();\n closed$ = this.closedSubject.asObservable();\n\n constructor(private overlayRef: OverlayRef) {}\n\n apply(value: any): void {\n this.appliedSubject.next(value);\n }\n\n /**\n * Emits the provided value on {@link saved$} and closes the panel.\n *\n * This should be called with the configuration object returned by the\n * editor's `onSave()` method so that consumers can persist the new settings.\n */\n save(value: any): void {\n this.savedSubject.next(value);\n this.close('save');\n }\n\n reset(): void {\n this.resetSubject.next();\n }\n\n updateSize(width: string | number): void {\n this.overlayRef.updateSize({ width });\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n if (!this.overlayRef?.hasAttached()) {\n return;\n }\n this.overlayRef.dispose();\n this.closedSubject.next(reason);\n this.complete();\n }\n\n private complete(): void {\n this.appliedSubject.complete();\n this.savedSubject.complete();\n this.resetSubject.complete();\n this.closedSubject.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { SETTINGS_PANEL_DATA as CORE_SETTINGS_PANEL_DATA } from '@praxisui/core';\nimport { SettingsPanelRef } from './settings-panel.ref';\n\nexport const SETTINGS_PANEL_DATA = CORE_SETTINGS_PANEL_DATA;\nexport const SETTINGS_PANEL_REF = new InjectionToken<SettingsPanelRef>('SETTINGS_PANEL_REF');\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { SettingsPanelComponent } from './settings-panel.component';\nimport { SettingsPanelRef } from './settings-panel.ref';\nimport {\n SettingsPanelCloseReason,\n SettingsPanelConfig,\n} from './settings-panel.types';\nimport {\n SETTINGS_PANEL_DATA,\n SETTINGS_PANEL_REF,\n} from './settings-panel.tokens';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsPanelService {\n private currentRef?: SettingsPanelRef;\n\n constructor(\n private overlay: Overlay,\n private injector: Injector,\n ) { }\n\n /**\n * Opens a new settings panel. If another panel is already open it will be\n * closed before the new one is created. Future improvements may reuse the\n * same overlay when the provided id matches.\n */\n open(config: SettingsPanelConfig): SettingsPanelRef {\n if (this.currentRef) {\n this.currentRef.close('cancel');\n }\n\n const overlayConfig: OverlayConfig = {\n hasBackdrop: true,\n backdropClass: 'praxis-settings-panel-backdrop',\n panelClass: 'praxis-settings-panel-pane',\n positionStrategy: this.overlay.position().global().top('0').right('0'),\n height: '100vh',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n };\n\n const overlayRef = this.overlay.create(overlayConfig);\n const ref = new SettingsPanelRef(overlayRef);\n\n const panelPortal = new ComponentPortal(SettingsPanelComponent);\n const panelRef = overlayRef.attach(panelPortal);\n panelRef.instance.title = config.title;\n (panelRef.instance as any).titleIcon = (config as any).titleIcon;\n panelRef.instance.expanded = config.expanded || false;\n\n const inputs = config.content.inputs;\n try {\n const dbg = inputs && (inputs as any).page ? { hasPage: true, conns: Array.isArray((inputs as any).page.connections) ? (inputs as any).page.connections.length : undefined } : { hasPage: false };\n (console.log || console.debug)('[SettingsPanel] open()', { id: (config as any).id, title: config.title, inputs: dbg });\n } catch { }\n\n const injector = Injector.create({\n providers: [\n { provide: SETTINGS_PANEL_DATA, useValue: inputs },\n { provide: SETTINGS_PANEL_REF, useValue: ref },\n ],\n parent: this.injector,\n });\n panelRef.instance.attachContent(config.content.component, injector, ref, inputs);\n\n overlayRef.backdropClick().subscribe(() => ref.close('backdrop'));\n overlayRef.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape') {\n ref.close('esc');\n }\n });\n ref.closed$.subscribe(() => {\n if (this.currentRef === ref) {\n this.currentRef = undefined;\n }\n });\n\n this.currentRef = ref;\n return ref;\n }\n\n close(reason: SettingsPanelCloseReason = 'cancel'): void {\n this.currentRef?.close(reason);\n this.currentRef = undefined;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { GlobalConfigService } from '@praxisui/core';\nimport type { GlobalConfig } from '@praxisui/core';\n\n/**\n * Admin helper to load, patch and persist GlobalConfig.\n * Intended to be used by the Global Config Editor UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigAdminService {\n private readonly global = inject(GlobalConfigService) as GlobalConfigService;\n\n /** Returns the effective merged configuration (providers + storage). */\n getEffectiveConfig(): GlobalConfig {\n // buildConfig is internal in service; use public getters instead\n return {\n crud: this.global.getCrud(),\n dynamicFields: this.global.getDynamicFields(),\n table: this.global.getTable(),\n dialog: this.global.getDialog(),\n ai: this.global.get('ai'),\n cache: this.global.get('cache'),\n } as GlobalConfig;\n }\n\n /** Persist a partial update and notify listeners. */\n save(partial: Partial<GlobalConfig>): Promise<void> {\n return this.global.saveGlobalConfig(partial);\n }\n\n /** True when a tenant/global config exists in storage (overrides env defaults). */\n async hasStoredConfig(): Promise<boolean> {\n await this.global.ready();\n return this.global.hasStoredConfig();\n }\n\n /** Clear stored config for the active tenant and refresh the cache. */\n clearStoredConfig(): Promise<void> {\n return this.global.clearGlobalConfig();\n }\n}\n","import type { FormConfig } from '@praxisui/core';\nimport { FieldControlType } from '@praxisui/core';\n\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`;\nconst TABLE_COMPACT_FONT_SIZE_PATTERN =\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`;\n\nfunction safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n}\n\n/**\n * Minimal FormConfig schema for the Global Config editor UI.\n * This can be extended incrementally as new domains/settings are added.\n */\nexport function buildGlobalConfigFormConfig(): FormConfig {\n const fields = [\n // CRUD\n {\n name: safeName('crud.defaults.openMode'),\n label: 'Modo de abertura padrão',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'Rota', value: 'route' },\n { text: 'Modal', value: 'modal' },\n { text: 'Drawer', value: 'drawer' },\n ],\n hint: 'Aplicado quando ação/metadado não definem modo.',\n dataAttributes: { globalPath: 'crud.defaults.openMode' },\n },\n {\n name: safeName('crud.defaults.back.confirmOnDirty'),\n label: 'Confirmar ao sair com alterações',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.back.confirmOnDirty' },\n },\n {\n name: safeName('crud.defaults.back.strategy'),\n label: 'Back: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'auto', value: 'auto' },\n { text: 'close', value: 'close' },\n { text: 'navigate', value: 'navigate' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.back.strategy' },\n },\n {\n name: safeName('crud.defaults.header.showBack'),\n label: 'Header: mostrar voltar',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.showBack' },\n },\n {\n name: safeName('crud.defaults.header.variant'),\n label: 'Header: variante',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'ghost', value: 'ghost' },\n { text: 'tonal', value: 'tonal' },\n { text: 'outlined', value: 'outlined' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.header.variant' },\n },\n {\n name: safeName('crud.defaults.header.sticky'),\n label: 'Header: fixo (sticky)',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.sticky' },\n },\n {\n name: safeName('crud.defaults.header.divider'),\n label: 'Header: mostrar divisor',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'crud.defaults.header.divider' },\n },\n {\n name: safeName('crud.defaults.modal.width'),\n label: 'Modal: largura (ex.: 900px)',\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.width' },\n },\n {\n name: safeName('crud.defaults.modal.maxWidth'),\n label: 'Modal: largura máxima (ex.: 96vw)',\n controlType: FieldControlType.INPUT,\n dataAttributes: { globalPath: 'crud.defaults.modal.maxWidth' },\n },\n {\n name: safeName('crud.defaults.modal.backdropStyle'),\n label: 'Modal: backdrop',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'blur', value: 'blur' },\n { text: 'dim', value: 'dim' },\n { text: 'transparent', value: 'transparent' },\n ],\n dataAttributes: { globalPath: 'crud.defaults.modal.backdropStyle' },\n },\n\n // Dynamic Fields\n {\n name: safeName('dynamicFields.asyncSelect.loadOn'),\n label: 'Async Select: loadOn',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'open', value: 'open' },\n { text: 'init', value: 'init' },\n { text: 'none', value: 'none' },\n ],\n hint: 'Estratégia de primeira carga quando metadado não definir.',\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.loadOn' },\n },\n {\n name: safeName('dynamicFields.cascade.enable'),\n label: 'Cascata nativa habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.cascade.enable' },\n },\n {\n name: safeName('dynamicFields.cascade.loadOnChange'),\n label: 'Cascata: loadOnChange',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'respectLoadOn', value: 'respectLoadOn' },\n { text: 'immediate', value: 'immediate' },\n { text: 'manual', value: 'manual' },\n ],\n dataAttributes: { globalPath: 'dynamicFields.cascade.loadOnChange' },\n },\n {\n name: safeName('dynamicFields.cascade.debounceMs'),\n label: 'Cascata: debounce (ms)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.cascade.debounceMs' },\n },\n\n // Dynamic Fields async-select extra\n {\n name: safeName('dynamicFields.asyncSelect.pageSize'),\n label: 'Async Select: pageSize',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.pageSize' },\n },\n {\n name: safeName('dynamicFields.asyncSelect.useCursor'),\n label: 'Async Select: usar cursor',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dynamicFields.asyncSelect.useCursor' },\n },\n\n // AI\n {\n name: safeName('ai.provider'),\n label: 'Provedor LLM',\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: 'Selecione o provedor para listar modelos e testar a chave.',\n dataAttributes: { globalPath: 'ai.provider' },\n },\n {\n name: safeName('ai.apiKey'),\n label: 'Chave de API',\n controlType: FieldControlType.INPUT,\n hint: 'Informe a chave do provedor selecionado para testar.',\n dataAttributes: { globalPath: 'ai.apiKey' },\n },\n {\n name: safeName('ai.model'),\n label: 'Modelo de IA',\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [],\n resourcePath: '',\n dataAttributes: { globalPath: 'ai.model' },\n },\n {\n name: safeName('ai.temperature'),\n label: 'Temperatura (Criatividade)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: '0.0 (determinístico) a 1.0 (criativo)',\n dataAttributes: { globalPath: 'ai.temperature' },\n },\n {\n name: safeName('ai.maxTokens'),\n label: 'Max tokens',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: 'Limite maximo de tokens na resposta.',\n dataAttributes: { globalPath: 'ai.maxTokens' },\n },\n {\n name: safeName('ai.riskPolicy'),\n label: 'Assistente: validação de risco',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'Estrito (recomendado)', value: 'strict' },\n { text: 'Padrão', value: 'standard' },\n ],\n hint: 'Estrito exige confirmação em risco médio/alto. Padrão segue a indicação retornada pelo backend.',\n dataAttributes: { globalPath: 'ai.riskPolicy' },\n },\n {\n name: safeName('ai.embedding.useSameAsLlm'),\n label: 'Embeddings: usar mesmo LLM',\n controlType: FieldControlType.TOGGLE,\n hint: 'Replica provedor e chave do LLM para embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.useSameAsLlm' },\n },\n {\n name: safeName('ai.embedding.provider'),\n label: 'Embeddings: provedor',\n controlType: FieldControlType.SELECT,\n selectOptions: [],\n hint: 'Provedor usado para gerar embeddings (RAG).',\n dataAttributes: { globalPath: 'ai.embedding.provider' },\n },\n {\n name: safeName('ai.embedding.apiKey'),\n label: 'Embeddings: chave de API',\n controlType: FieldControlType.INPUT,\n hint: 'Chave do provedor de embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.apiKey' },\n },\n {\n name: safeName('ai.embedding.model'),\n label: 'Embeddings: modelo',\n controlType: FieldControlType.SEARCHABLE_SELECT,\n selectOptions: [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ],\n emptyOptionText: 'Padrão do provedor',\n hint: 'Modelos OpenAI para embeddings.',\n dataAttributes: { globalPath: 'ai.embedding.model' },\n },\n {\n name: safeName('ai.embedding.dimensions'),\n label: 'Embeddings: dimensoes',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n hint: 'Dimensoes do vetor de embedding (default 768).',\n dataAttributes: { globalPath: 'ai.embedding.dimensions' },\n },\n\n // Cache\n {\n name: safeName('cache.disableSchemaCache'),\n label: 'Desabilitar cache de schema (LocalStorage)',\n controlType: FieldControlType.TOGGLE,\n hint: 'Se ativo, sempre baixa o schema do servidor (ignora cache local). Útil para desenvolvimento.',\n dataAttributes: { globalPath: 'cache.disableSchemaCache' },\n },\n\n // Table\n {\n name: safeName('table.behavior.pagination.enabled'),\n label: 'Paginação habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.pagination.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.pageSize'),\n label: 'Tamanho da página',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.pageSize' },\n },\n {\n name: safeName('table.behavior.filtering.debounceTime'),\n label: 'Debounce do filtro (ms)',\n controlType: FieldControlType.NUMERIC_TEXT_BOX,\n dataAttributes: { globalPath: 'table.behavior.filtering.debounceTime' },\n },\n {\n name: safeName('table.behavior.sorting.enabled'),\n label: 'Ordenação habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.sorting.enabled' },\n },\n {\n name: safeName('table.behavior.selection.enabled'),\n label: 'Seleção habilitada',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'table.behavior.selection.enabled' },\n },\n {\n name: safeName('table.behavior.pagination.strategy'),\n label: 'Paginação: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.pagination.strategy' },\n },\n {\n name: safeName('table.behavior.sorting.strategy'),\n label: 'Ordenação: estratégia',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'client', value: 'client' },\n { text: 'server', value: 'server' },\n ],\n dataAttributes: { globalPath: 'table.behavior.sorting.strategy' },\n },\n {\n name: safeName('table.behavior.pagination.showFirstLastButtons'),\n label: 'Paginação: botões Primeiro/Último',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.behavior.pagination.showFirstLastButtons' },\n },\n {\n name: safeName('table.toolbar.visible'),\n label: 'Toolbar visível',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.toolbar.visible' },\n },\n {\n name: safeName('table.appearance.density'),\n label: 'Aparência: densidade',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'compact', value: 'compact' },\n { text: 'comfortable', value: 'comfortable' },\n { text: 'spacious', value: 'spacious' },\n ],\n dataAttributes: { globalPath: 'table.appearance.density' },\n },\n {\n name: safeName('table.appearance.spacing.cellPadding'),\n label: 'Aparência: padding das células',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 6px 12px',\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: 'Use 1 a 4 medidas CSS válidas, como 6px 12px.',\n dataAttributes: { globalPath: 'table.appearance.spacing.cellPadding' },\n },\n {\n name: safeName('table.appearance.spacing.headerPadding'),\n label: 'Aparência: padding do cabeçalho',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita 1 a 4 medidas CSS com unidade, var(...) ou calc(...). Ex.: 8px 12px',\n pattern: TABLE_COMPACT_SPACING_PATTERN,\n patternMessage: 'Use 1 a 4 medidas CSS válidas, como 8px 12px.',\n dataAttributes: { globalPath: 'table.appearance.spacing.headerPadding' },\n },\n {\n name: safeName('table.appearance.typography.fontSize'),\n label: 'Aparência: fonte das células',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: 'Use uma medida CSS válida, como 13px.',\n dataAttributes: { globalPath: 'table.appearance.typography.fontSize' },\n },\n {\n name: safeName('table.appearance.typography.headerFontSize'),\n label: 'Aparência: fonte do cabeçalho',\n controlType: FieldControlType.INPUT,\n hint: 'Aceita uma medida CSS com unidade, var(...) ou calc(...). Ex.: 13px',\n pattern: TABLE_COMPACT_FONT_SIZE_PATTERN,\n patternMessage: 'Use uma medida CSS válida, como 13px.',\n dataAttributes: { globalPath: 'table.appearance.typography.headerFontSize' },\n },\n {\n name: safeName('table.filteringUi.advancedOpenMode'),\n label: 'Filtro: modo de abertura',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'overlay', value: 'overlay' },\n { text: 'modal', value: 'modal' },\n { text: 'drawer', value: 'drawer' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.advancedOpenMode' },\n },\n {\n name: safeName('table.filteringUi.overlayVariant'),\n label: 'Filtro: overlay (visual)',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'card', value: 'card' },\n { text: 'frosted', value: 'frosted' },\n ],\n dataAttributes: { globalPath: 'table.filteringUi.overlayVariant' },\n },\n {\n name: safeName('table.filteringUi.overlayBackdrop'),\n label: 'Filtro: backdrop no overlay',\n controlType: FieldControlType.CHECKBOX,\n dataAttributes: { globalPath: 'table.filteringUi.overlayBackdrop' },\n },\n // Table messages - confirmations\n { name: safeName('table.messages.actions.confirmations.delete'), label: 'Excluir — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.delete' } },\n { name: safeName('table.messages.actions.confirmations.deleteMultiple'), label: 'Excluir (múltiplos) — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.deleteMultiple' } },\n { name: safeName('table.messages.actions.confirmations.save'), label: 'Salvar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.save' } },\n { name: safeName('table.messages.actions.confirmations.cancel'), label: 'Cancelar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.cancel' } },\n { name: safeName('table.messages.actions.confirmations.export'), label: 'Exportar — confirmação', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.confirmations.export' } },\n // Table messages - progress\n { name: safeName('table.messages.actions.progress.delete'), label: 'Excluir — progresso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.delete' } },\n { name: safeName('table.messages.actions.progress.deleteMultiple'), label: 'Excluir (múltiplos) — progresso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.progress.deleteMultiple' } },\n // Table messages - success\n { name: safeName('table.messages.actions.success.delete'), label: 'Excluir — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.delete' } },\n { name: safeName('table.messages.actions.success.save'), label: 'Salvar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.save' } },\n { name: safeName('table.messages.actions.success.export'), label: 'Exportar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.export' } },\n { name: safeName('table.messages.actions.success.import'), label: 'Importar — sucesso', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.success.import' } },\n // Table messages - errors\n { name: safeName('table.messages.actions.errors.delete'), label: 'Excluir — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.delete' } },\n { name: safeName('table.messages.actions.errors.save'), label: 'Salvar — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.save' } },\n { name: safeName('table.messages.actions.errors.export'), label: 'Exportar — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.export' } },\n { name: safeName('table.messages.actions.errors.network'), label: 'Rede — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.network' } },\n { name: safeName('table.messages.actions.errors.permission'), label: 'Permissão — erro', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'table.messages.actions.errors.permission' } },\n\n // Dialog — Defaults by type\n {\n name: safeName('dialog.defaults.confirm.ariaRole'),\n label: 'Dialog Defaults: confirm — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.confirm.ariaRole' },\n },\n { name: safeName('dialog.defaults.confirm.title'), label: 'Dialog Defaults: confirm — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.title' } },\n { name: safeName('dialog.defaults.confirm.icon'), label: 'Dialog Defaults: confirm — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.icon' } },\n { name: safeName('dialog.defaults.confirm.message'), label: 'Dialog Defaults: confirm — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.message' } },\n { name: safeName('dialog.defaults.confirm.themeColor'), label: 'Dialog Defaults: confirm — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.confirm.themeColor' } },\n {\n name: safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n label: 'Dialog Defaults: confirm — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.confirm.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.confirm.disableClose'), label: 'Dialog Defaults: confirm — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.disableClose' } },\n { name: safeName('dialog.defaults.confirm.hasBackdrop'), label: 'Dialog Defaults: confirm — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.confirm.hasBackdrop' } },\n { name: safeName('dialog.defaults.confirm.panelClass'), label: 'Dialog Defaults: confirm — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.confirm.panelClass' } },\n { name: safeName('dialog.defaults.confirm.styles'), label: 'Dialog Defaults: confirm — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.confirm.animation'), label: 'Dialog Defaults: confirm — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.confirm.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.alert.ariaRole'),\n label: 'Dialog Defaults: alert — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.alert.ariaRole' },\n },\n { name: safeName('dialog.defaults.alert.title'), label: 'Dialog Defaults: alert — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.title' } },\n { name: safeName('dialog.defaults.alert.icon'), label: 'Dialog Defaults: alert — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.icon' } },\n { name: safeName('dialog.defaults.alert.message'), label: 'Dialog Defaults: alert — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.message' } },\n { name: safeName('dialog.defaults.alert.themeColor'), label: 'Dialog Defaults: alert — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.alert.themeColor' } },\n {\n name: safeName('dialog.defaults.alert.closeOnBackdropClick'),\n label: 'Dialog Defaults: alert — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.alert.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.alert.disableClose'), label: 'Dialog Defaults: alert — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.disableClose' } },\n { name: safeName('dialog.defaults.alert.hasBackdrop'), label: 'Dialog Defaults: alert — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.alert.hasBackdrop' } },\n { name: safeName('dialog.defaults.alert.panelClass'), label: 'Dialog Defaults: alert — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.alert.panelClass' } },\n { name: safeName('dialog.defaults.alert.styles'), label: 'Dialog Defaults: alert — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.alert.animation'), label: 'Dialog Defaults: alert — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.alert.animation', monospace: true } },\n {\n name: safeName('dialog.defaults.prompt.ariaRole'),\n label: 'Dialog Defaults: prompt — ariaRole',\n controlType: FieldControlType.SELECT,\n selectOptions: [\n { text: 'dialog', value: 'dialog' },\n { text: 'alertdialog', value: 'alertdialog' },\n ],\n dataAttributes: { globalPath: 'dialog.defaults.prompt.ariaRole' },\n },\n { name: safeName('dialog.defaults.prompt.title'), label: 'Dialog Defaults: prompt — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.title' } },\n { name: safeName('dialog.defaults.prompt.icon'), label: 'Dialog Defaults: prompt — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.icon' } },\n { name: safeName('dialog.defaults.prompt.message'), label: 'Dialog Defaults: prompt — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.message' } },\n { name: safeName('dialog.defaults.prompt.themeColor'), label: 'Dialog Defaults: prompt — themeColor', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'light', value: 'light' }, { text: 'primary', value: 'primary' }, { text: 'dark', value: 'dark' }], dataAttributes: { globalPath: 'dialog.defaults.prompt.themeColor' } },\n {\n name: safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n label: 'Dialog Defaults: prompt — fechar ao clicar no backdrop',\n controlType: FieldControlType.TOGGLE,\n dataAttributes: { globalPath: 'dialog.defaults.prompt.closeOnBackdropClick' },\n },\n { name: safeName('dialog.defaults.prompt.disableClose'), label: 'Dialog Defaults: prompt — disableClose', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.disableClose' } },\n { name: safeName('dialog.defaults.prompt.hasBackdrop'), label: 'Dialog Defaults: prompt — hasBackdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.defaults.prompt.hasBackdrop' } },\n { name: safeName('dialog.defaults.prompt.panelClass'), label: 'Dialog Defaults: prompt — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.defaults.prompt.panelClass' } },\n { name: safeName('dialog.defaults.prompt.styles'), label: 'Dialog Defaults: prompt — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\"}' },\n { name: safeName('dialog.defaults.prompt.animation'), label: 'Dialog Defaults: prompt — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.defaults.prompt.animation', monospace: true } },\n\n // Dialog — Variants per profile (danger, info, success, question, error)\n // Each variant exposes commonly customized fields + JSON editors for actions/styles\n // danger\n { name: safeName('dialog.variants.danger.title'), label: 'Variant danger — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.title' } },\n { name: safeName('dialog.variants.danger.icon'), label: 'Variant danger — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.icon' } },\n { name: safeName('dialog.variants.danger.message'), label: 'Variant danger — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.message' } },\n { name: safeName('dialog.variants.danger.ariaRole'), label: 'Variant danger — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.danger.ariaRole' } },\n { name: safeName('dialog.variants.danger.closeOnBackdropClick'), label: 'Variant danger — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.danger.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.danger.panelClass'), label: 'Variant danger — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.danger.panelClass' } },\n { name: safeName('dialog.variants.danger.actions'), label: 'Variant danger — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.actions', monospace: true }, hint: 'Ex.: [{\"id\":\"cancel\",\"text\":\"Cancelar\",\"role\":\"secondary\",\"close\":true,\"cssClass\":\"btn\"},{\"id\":\"confirm\",\"text\":\"Excluir\",\"role\":\"primary\",\"close\":true,\"cssClass\":\"btn btn-danger\",\"icon\":\"delete\"}]' },\n { name: safeName('dialog.variants.danger.styles'), label: 'Variant danger — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.danger.animation'), label: 'Variant danger — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.danger.animation', monospace: true } },\n // info\n { name: safeName('dialog.variants.info.title'), label: 'Variant info — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.title' } },\n { name: safeName('dialog.variants.info.icon'), label: 'Variant info — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.icon' } },\n { name: safeName('dialog.variants.info.message'), label: 'Variant info — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.message' } },\n { name: safeName('dialog.variants.info.ariaRole'), label: 'Variant info — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.info.ariaRole' } },\n { name: safeName('dialog.variants.info.closeOnBackdropClick'), label: 'Variant info — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.info.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.info.panelClass'), label: 'Variant info — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.info.panelClass' } },\n { name: safeName('dialog.variants.info.actions'), label: 'Variant info — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.actions', monospace: true } },\n { name: safeName('dialog.variants.info.styles'), label: 'Variant info — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.info.animation'), label: 'Variant info — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.info.animation', monospace: true } },\n // success\n { name: safeName('dialog.variants.success.title'), label: 'Variant success — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.title' } },\n { name: safeName('dialog.variants.success.icon'), label: 'Variant success — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.icon' } },\n { name: safeName('dialog.variants.success.message'), label: 'Variant success — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.message' } },\n { name: safeName('dialog.variants.success.ariaRole'), label: 'Variant success — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.success.ariaRole' } },\n { name: safeName('dialog.variants.success.closeOnBackdropClick'), label: 'Variant success — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.success.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.success.panelClass'), label: 'Variant success — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.success.panelClass' } },\n { name: safeName('dialog.variants.success.actions'), label: 'Variant success — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.actions', monospace: true } },\n { name: safeName('dialog.variants.success.styles'), label: 'Variant success — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.success.animation'), label: 'Variant success — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.success.animation', monospace: true } },\n // question\n { name: safeName('dialog.variants.question.title'), label: 'Variant question — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.title' } },\n { name: safeName('dialog.variants.question.icon'), label: 'Variant question — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.icon' } },\n { name: safeName('dialog.variants.question.message'), label: 'Variant question — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.message' } },\n { name: safeName('dialog.variants.question.ariaRole'), label: 'Variant question — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.question.ariaRole' } },\n { name: safeName('dialog.variants.question.closeOnBackdropClick'), label: 'Variant question — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.question.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.question.panelClass'), label: 'Variant question — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.question.panelClass' } },\n { name: safeName('dialog.variants.question.actions'), label: 'Variant question — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.actions', monospace: true } },\n { name: safeName('dialog.variants.question.styles'), label: 'Variant question — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.question.animation'), label: 'Variant question — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.question.animation', monospace: true } },\n // error\n { name: safeName('dialog.variants.error.title'), label: 'Variant error — título', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.title' } },\n { name: safeName('dialog.variants.error.icon'), label: 'Variant error — ícone', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.icon' } },\n { name: safeName('dialog.variants.error.message'), label: 'Variant error — mensagem', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.message' } },\n { name: safeName('dialog.variants.error.ariaRole'), label: 'Variant error — ariaRole', controlType: FieldControlType.SELECT, selectOptions: [{ text: 'dialog', value: 'dialog' }, { text: 'alertdialog', value: 'alertdialog' }], dataAttributes: { globalPath: 'dialog.variants.error.ariaRole' } },\n { name: safeName('dialog.variants.error.closeOnBackdropClick'), label: 'Variant error — fechar ao clicar no backdrop', controlType: FieldControlType.TOGGLE, dataAttributes: { globalPath: 'dialog.variants.error.closeOnBackdropClick' } },\n { name: safeName('dialog.variants.error.panelClass'), label: 'Variant error — panelClass', controlType: FieldControlType.INPUT, dataAttributes: { globalPath: 'dialog.variants.error.panelClass' } },\n { name: safeName('dialog.variants.error.actions'), label: 'Variant error — actions (JSON array)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.actions', monospace: true } },\n { name: safeName('dialog.variants.error.styles'), label: 'Variant error — styles (JSON)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.styles', monospace: true }, hint: 'Ex.: {\"containerColor\":\"var(--md-sys-color-surface)\",\"containerBorderColor\":\"var(--md-sys-color-outline-variant)\",\"backdropColor\":\"var(--md-sys-color-scrim)\",\"actionButtonRadius\":\"8px\"}' },\n { name: safeName('dialog.variants.error.animation'), label: 'Variant error — animation (JSON/boolean)', controlType: FieldControlType.TEXTAREA, dataAttributes: { globalPath: 'dialog.variants.error.animation', monospace: true } },\n ];\n\n const cfg: FormConfig = {\n sections: [\n {\n id: 'crud',\n title: 'CRUD',\n rows: [\n {\n id: 'crud-row-1',\n columns: [\n { id: 'crud-col-1', fields: [\n safeName('crud.defaults.openMode'),\n safeName('crud.defaults.back.strategy'),\n safeName('crud.defaults.back.confirmOnDirty'),\n ] },\n { id: 'crud-col-2', fields: [\n safeName('crud.defaults.header.showBack'),\n safeName('crud.defaults.header.variant'),\n safeName('crud.defaults.header.sticky'),\n safeName('crud.defaults.header.divider'),\n ] },\n { id: 'crud-col-3', fields: [\n safeName('crud.defaults.modal.width'),\n safeName('crud.defaults.modal.maxWidth'),\n safeName('crud.defaults.modal.backdropStyle'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dynamic-fields',\n title: 'Dynamic Fields',\n rows: [\n {\n id: 'df-row-1',\n columns: [\n { id: 'df-col-1', fields: [\n safeName('dynamicFields.asyncSelect.loadOn'),\n safeName('dynamicFields.asyncSelect.pageSize'),\n safeName('dynamicFields.asyncSelect.useCursor'),\n ] },\n { id: 'df-col-2', fields: [\n safeName('dynamicFields.cascade.enable'),\n safeName('dynamicFields.cascade.loadOnChange'),\n safeName('dynamicFields.cascade.debounceMs'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'ai-credentials',\n title: 'Credenciais', // Internal title, UI might override\n rows: [\n {\n id: 'ai-cred-row-1',\n columns: [\n { id: 'ai-cred-col-1', fields: [safeName('ai.provider')] },\n { id: 'ai-cred-col-2', fields: [safeName('ai.apiKey')] },\n ],\n },\n ],\n },\n {\n id: 'ai-model',\n title: 'Modelo & Comportamento',\n rows: [\n {\n id: 'ai-mod-row-1',\n columns: [\n { id: 'ai-mod-col-1', fields: [safeName('ai.model'), safeName('ai.temperature'), safeName('ai.maxTokens')] },\n { id: 'ai-mod-col-2', fields: [safeName('ai.riskPolicy')] },\n ],\n },\n ],\n },\n {\n id: 'ai-embedding',\n title: 'Embeddings',\n rows: [\n {\n id: 'ai-embed-row-1',\n columns: [\n { id: 'ai-embed-col-1', fields: [safeName('ai.embedding.useSameAsLlm')] },\n { id: 'ai-embed-col-2', fields: [safeName('ai.embedding.provider'), safeName('ai.embedding.apiKey')] },\n { id: 'ai-embed-col-3', fields: [safeName('ai.embedding.model'), safeName('ai.embedding.dimensions')] },\n ],\n },\n ],\n },\n {\n id: 'cache',\n title: 'Cache & Persistência',\n rows: [\n {\n id: 'cache-row-1',\n columns: [\n { id: 'cache-col-1', fields: [safeName('cache.disableSchemaCache')] },\n ],\n },\n ],\n },\n {\n id: 'table',\n title: 'Tabela',\n rows: [\n {\n id: 'tbl-row-1',\n columns: [\n { id: 'tbl-col-1', fields: [\n safeName('table.toolbar.visible'),\n safeName('table.appearance.density'),\n safeName('table.appearance.spacing.cellPadding'),\n safeName('table.appearance.spacing.headerPadding'),\n safeName('table.appearance.typography.fontSize'),\n safeName('table.appearance.typography.headerFontSize'),\n safeName('table.filteringUi.advancedOpenMode'),\n safeName('table.filteringUi.overlayVariant'),\n safeName('table.filteringUi.overlayBackdrop'),\n ] },\n { id: 'tbl-col-2', fields: [\n safeName('table.behavior.pagination.enabled'),\n safeName('table.behavior.pagination.pageSize'),\n safeName('table.behavior.pagination.showFirstLastButtons'),\n safeName('table.behavior.pagination.strategy'),\n ] },\n { id: 'tbl-col-3', fields: [\n safeName('table.behavior.filtering.debounceTime'),\n safeName('table.behavior.sorting.enabled'),\n safeName('table.behavior.sorting.strategy'),\n safeName('table.behavior.selection.enabled'),\n ] },\n ],\n },\n {\n id: 'tbl-row-messages',\n columns: [\n { id: 'tbl-msg-col-1', fields: [\n safeName('table.messages.actions.confirmations.delete'),\n safeName('table.messages.actions.confirmations.deleteMultiple'),\n safeName('table.messages.actions.confirmations.save'),\n safeName('table.messages.actions.confirmations.cancel'),\n safeName('table.messages.actions.confirmations.export'),\n ] },\n { id: 'tbl-msg-col-2', fields: [\n safeName('table.messages.actions.progress.delete'),\n safeName('table.messages.actions.progress.deleteMultiple'),\n safeName('table.messages.actions.success.delete'),\n safeName('table.messages.actions.success.save'),\n safeName('table.messages.actions.success.export'),\n safeName('table.messages.actions.success.import'),\n ] },\n { id: 'tbl-msg-col-3', fields: [\n safeName('table.messages.actions.errors.delete'),\n safeName('table.messages.actions.errors.save'),\n safeName('table.messages.actions.errors.export'),\n safeName('table.messages.actions.errors.network'),\n safeName('table.messages.actions.errors.permission'),\n ] },\n ],\n },\n ],\n },\n {\n id: 'dialog',\n title: 'Dialog',\n rows: [\n {\n id: 'dlg-row-defaults',\n columns: [\n { id: 'dlg-def-col-1', fields: [\n safeName('dialog.defaults.confirm.ariaRole'),\n safeName('dialog.defaults.confirm.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-2', fields: [\n safeName('dialog.defaults.alert.ariaRole'),\n safeName('dialog.defaults.alert.closeOnBackdropClick'),\n ] },\n { id: 'dlg-def-col-3', fields: [\n safeName('dialog.defaults.prompt.ariaRole'),\n safeName('dialog.defaults.prompt.closeOnBackdropClick'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-danger',\n columns: [\n { id: 'dlg-var-danger-col-1', fields: [\n safeName('dialog.variants.danger.title'),\n safeName('dialog.variants.danger.icon'),\n safeName('dialog.variants.danger.message'),\n ] },\n { id: 'dlg-var-danger-col-2', fields: [\n safeName('dialog.variants.danger.ariaRole'),\n safeName('dialog.variants.danger.closeOnBackdropClick'),\n safeName('dialog.variants.danger.panelClass'),\n ] },\n { id: 'dlg-var-danger-col-3', fields: [\n safeName('dialog.variants.danger.actions'),\n safeName('dialog.variants.danger.styles'),\n safeName('dialog.variants.danger.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-info',\n columns: [\n { id: 'dlg-var-info-col-1', fields: [\n safeName('dialog.variants.info.title'),\n safeName('dialog.variants.info.icon'),\n safeName('dialog.variants.info.message'),\n ] },\n { id: 'dlg-var-info-col-2', fields: [\n safeName('dialog.variants.info.ariaRole'),\n safeName('dialog.variants.info.closeOnBackdropClick'),\n safeName('dialog.variants.info.panelClass'),\n ] },\n { id: 'dlg-var-info-col-3', fields: [\n safeName('dialog.variants.info.actions'),\n safeName('dialog.variants.info.styles'),\n safeName('dialog.variants.info.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-success',\n columns: [\n { id: 'dlg-var-success-col-1', fields: [\n safeName('dialog.variants.success.title'),\n safeName('dialog.variants.success.icon'),\n safeName('dialog.variants.success.message'),\n ] },\n { id: 'dlg-var-success-col-2', fields: [\n safeName('dialog.variants.success.ariaRole'),\n safeName('dialog.variants.success.closeOnBackdropClick'),\n safeName('dialog.variants.success.panelClass'),\n ] },\n { id: 'dlg-var-success-col-3', fields: [\n safeName('dialog.variants.success.actions'),\n safeName('dialog.variants.success.styles'),\n safeName('dialog.variants.success.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-question',\n columns: [\n { id: 'dlg-var-question-col-1', fields: [\n safeName('dialog.variants.question.title'),\n safeName('dialog.variants.question.icon'),\n safeName('dialog.variants.question.message'),\n ] },\n { id: 'dlg-var-question-col-2', fields: [\n safeName('dialog.variants.question.ariaRole'),\n safeName('dialog.variants.question.closeOnBackdropClick'),\n safeName('dialog.variants.question.panelClass'),\n ] },\n { id: 'dlg-var-question-col-3', fields: [\n safeName('dialog.variants.question.actions'),\n safeName('dialog.variants.question.styles'),\n safeName('dialog.variants.question.animation'),\n ] },\n ],\n },\n {\n id: 'dlg-row-variants-error',\n columns: [\n { id: 'dlg-var-error-col-1', fields: [\n safeName('dialog.variants.error.title'),\n safeName('dialog.variants.error.icon'),\n safeName('dialog.variants.error.message'),\n ] },\n { id: 'dlg-var-error-col-2', fields: [\n safeName('dialog.variants.error.ariaRole'),\n safeName('dialog.variants.error.closeOnBackdropClick'),\n safeName('dialog.variants.error.panelClass'),\n ] },\n { id: 'dlg-var-error-col-3', fields: [\n safeName('dialog.variants.error.actions'),\n safeName('dialog.variants.error.styles'),\n safeName('dialog.variants.error.animation'),\n ] },\n ],\n },\n ],\n },\n ],\n actions: {\n placement: 'afterSections',\n // Hide internal form actions; Settings Panel footer handles Apply/Save\n submit: { visible: false, label: 'Salvar' },\n cancel: { visible: false, label: 'Cancelar' },\n reset: { visible: false, label: 'Redefinir', type: 'reset' as any },\n },\n fieldMetadata: fields as any,\n };\n\n return cfg;\n}\n","import { InjectionToken, Type } from '@angular/core';\n\n/**\n * Optional token used by GlobalConfigEditorComponent to render forms.\n * Provide the PraxisDynamicForm component (or a compatible dynamic form)\n * to avoid creating a hard dependency from @praxisui/settings-panel to\n * @praxisui/dynamic-form.\n */\nexport const GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT = new InjectionToken<Type<any> | null>(\n 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT',\n {\n factory: () => null,\n },\n);\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, OnInit, ViewChild, ViewContainerRef, DestroyRef, inject, AfterViewInit, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, Subject, firstValueFrom } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport type {\n FormConfig,\n FormValueChangeEvent,\n LoggerContext,\n LoggerLogOptions,\n} from '@praxisui/core';\nimport { GlobalConfigAdminService } from './global-config-admin.service';\nimport { buildGlobalConfigFormConfig } from './global-config-editor.schema';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatChipsModule } from '@angular/material/chips'; // Added MatChipsModule\nimport { IconPickerService, LoggerService, PraxisIconDirective } from '@praxisui/core';\nimport { AiBackendApiService, AiModel, AiProviderCatalogItem } from '@praxisui/ai';\nimport { GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT } from './global-config-editor.tokens';\n\nconst TABLE_COMPACT_SPACING_PATHS = new Set([\n 'table.appearance.spacing.cellPadding',\n 'table.appearance.spacing.headerPadding',\n]);\nconst TABLE_COMPACT_FONT_SIZE_PATHS = new Set([\n 'table.appearance.typography.fontSize',\n 'table.appearance.typography.headerFontSize',\n]);\nconst TABLE_COMPACT_FIELD_LABELS: Record<string, string> = {\n 'table.appearance.spacing.cellPadding': 'padding das células',\n 'table.appearance.spacing.headerPadding': 'padding do cabeçalho',\n 'table.appearance.typography.fontSize': 'fonte das células',\n 'table.appearance.typography.headerFontSize': 'fonte do cabeçalho',\n};\nconst TABLE_COMPACT_LENGTH_TOKEN =\n '(?:0|(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:px|rem|em|%|vh|vw|svh|svw|lvh|lvw|dvh|dvw|ch|ex))';\nconst TABLE_COMPACT_SPACING_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN}(?:\\\\s+${TABLE_COMPACT_LENGTH_TOKEN}){0,3})$`,\n 'i',\n);\nconst TABLE_COMPACT_FONT_SIZE_REGEX = new RegExp(\n `^(?:var\\\\(.+\\\\)|calc\\\\(.+\\\\)|${TABLE_COMPACT_LENGTH_TOKEN})$`,\n 'i',\n);\n\n@Component({\n selector: 'praxis-global-config-editor',\n standalone: true,\n imports: [CommonModule, MatSnackBarModule, MatExpansionModule, MatIconModule, MatButtonModule, MatTooltipModule, MatProgressSpinnerModule, MatChipsModule, PraxisIconDirective],\n template: `\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">construction</mat-icon>\n CRUD\n </mat-panel-title>\n <mat-panel-description>Políticas globais de abertura, back e header</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCrud></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">dynamic_form</mat-icon>\n Dynamic Fields\n </mat-panel-title>\n <mat-panel-description>Async Select, cascata e paginação</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostFields></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">cached</mat-icon>\n Cache & Persistência\n </mat-panel-title>\n <mat-panel-description>Estratégia de cache de schema (local vs server)</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostCache></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">psychology</mat-icon>\n Inteligência Artificial\n </mat-panel-title>\n <mat-panel-description>Integração com LLM</mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"ai-config-container\">\n <div class=\"ai-config-source\">\n <div class=\"ai-config-source__meta\">\n <mat-icon>settings_suggest</mat-icon>\n <span>{{ configSourceLabel }}</span>\n </div>\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn ai-action-btn--clear\"\n *ngIf=\"hasStoredGlobalConfig\"\n [attr.aria-busy]=\"isClearingGlobalConfig ? 'true' : null\"\n [disabled]=\"isClearingGlobalConfig\"\n (click)=\"clearStoredConfig()\"\n matTooltip=\"Apaga o config salvo e volta aos defaults do servidor\"\n >\n <ng-container *ngIf=\"isClearingGlobalConfig; else clearContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">Limpando...</span>\n </ng-container>\n <ng-template #clearContent>\n <mat-icon>delete_sweep</mat-icon>\n <span class=\"ai-action-label\">Limpar config salvo</span>\n </ng-template>\n </button>\n </div>\n <!-- Group 1: Credentials -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>vpn_key</mat-icon> Credenciais\n </div>\n <button mat-stroked-button \n type=\"button\"\n class=\"ai-action-btn\"\n [class.is-success]=\"aiTestResult?.success\"\n [attr.aria-busy]=\"isTestingAi ? 'true' : null\"\n (click)=\"testAiConnection()\" \n [disabled]=\"isTestingAi || !hasApiKey\"\n matTooltip=\"Testar conexão com a chave informada\">\n <ng-container *ngIf=\"isTestingAi; else btnContent\">\n <mat-spinner diameter=\"16\" class=\"btn-spinner\"></mat-spinner>\n <span class=\"ai-action-label\">Conectando...</span>\n </ng-container>\n <ng-template #btnContent>\n <mat-icon>{{ aiTestResult?.success ? 'check' : 'bolt' }}</mat-icon>\n <span class=\"ai-action-label\">\n {{ aiTestResult?.success ? 'Conectado' : 'Testar conexão' }}\n </span>\n </ng-template>\n </button>\n </div>\n <div class=\"ai-provider-summary\" *ngIf=\"selectedProvider\">\n <span class=\"ai-provider-icon\" aria-hidden=\"true\">\n <ng-container [ngSwitch]=\"selectedProvider.iconKey\">\n <svg *ngSwitchCase=\"'gemini'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <path d=\"M12 3l2.6 5.4L20 11l-5.4 2.6L12 19l-2.6-5.4L4 11l5.4-2.6L12 3z\" />\n </svg>\n <svg *ngSwitchCase=\"'openai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <polygon points=\"12,2 20,7 20,17 12,22 4,17 4,7\" />\n </svg>\n <svg *ngSwitchCase=\"'xai'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n <line x1=\"5\" y1=\"5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\" />\n </svg>\n <svg *ngSwitchCase=\"'mock'\" viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <rect x=\"4.5\" y=\"4.5\" width=\"15\" height=\"15\" rx=\"2\" ry=\"2\" stroke-dasharray=\"2 2\" />\n </svg>\n <svg *ngSwitchDefault viewBox=\"0 0 24 24\" class=\"provider-svg\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\">\n <circle cx=\"12\" cy=\"12\" r=\"7.5\" />\n </svg>\n </ng-container>\n </span>\n <div class=\"ai-provider-meta\">\n <div class=\"ai-provider-name\">{{ selectedProvider.label }}</div>\n <div class=\"ai-provider-desc\">{{ selectedProvider.description }}</div>\n </div>\n <div\n class=\"ai-provider-key\"\n *ngIf=\"selectedProvider?.requiresApiKey !== false\"\n [class.is-present]=\"hasCurrentApiKey\"\n [class.is-saved]=\"!hasCurrentApiKey && (apiKeyLast4 || hasStoredApiKey)\"\n [class.is-missing]=\"!hasCurrentApiKey && !apiKeyLast4 && !hasStoredApiKey\"\n >\n <mat-icon>vpn_key</mat-icon>\n <span>{{ apiKeyStatusLabel }}</span>\n </div>\n <div class=\"ai-provider-key is-unlocked\" *ngIf=\"selectedProvider?.requiresApiKey === false\">\n <mat-icon>check_circle</mat-icon>\n <span>Sem chave necessária</span>\n </div>\n </div>\n <div class=\"ai-credentials-row\">\n <div class=\"ai-form-inline\">\n <ng-template #hostAiCredentials></ng-template>\n </div>\n </div>\n \n <!-- Feedback / Error Message -->\n <div class=\"ai-feedback\" *ngIf=\"aiTestResult && !aiTestResult.success\">\n <mat-icon color=\"warn\">error</mat-icon>\n <span class=\"error-text\">{{ aiTestResult.message }}</span>\n </div>\n </div>\n\n <!-- Group 2: Model & Behavior (Only visible if Key is present) -->\n <div class=\"ai-group\" [class.disabled-group]=\"!hasApiKey\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>smart_toy</mat-icon> Modelo & Comportamento\n </div>\n <div class=\"ai-header-actions\">\n <span class=\"ai-subtext\" *ngIf=\"hasApiKey\">Escolha o modelo após validar a chave.</span>\n <mat-chip-option *ngIf=\"!hasApiKey\" disabled>Requer chave API validada</mat-chip-option>\n <button mat-icon-button (click)=\"refreshModels(true)\" [disabled]=\"isTestingAi || !hasApiKey\" matTooltip=\"Atualizar lista de modelos\" aria-label=\"Atualizar lista de modelos\">\n <mat-icon [class.spin]=\"isRefetchingModels\">sync</mat-icon>\n </button>\n </div>\n </div>\n \n <div class=\"ai-model-content\" *ngIf=\"hasApiKey\">\n <div class=\"ai-model-controls\">\n <ng-template #hostAiModel></ng-template>\n </div>\n\n <!-- Model Details (Placeholder for future metadata) -->\n <div class=\"ai-model-details\" *ngIf=\"selectedModelDetails\">\n <mat-icon inline>info</mat-icon> {{ selectedModelDetails }}\n </div>\n </div>\n \n <div class=\"ai-placeholder\" *ngIf=\"!hasApiKey\">\n <mat-icon>lock</mat-icon>\n <span>Configure e teste sua chave de API para desbloquear a seleção de modelos.</span>\n </div>\n </div>\n\n <!-- Group 3: Embeddings (RAG) -->\n <div class=\"ai-group\">\n <div class=\"ai-group-header\">\n <div class=\"ai-group-title\">\n <mat-icon>scatter_plot</mat-icon> Embeddings (RAG)\n </div>\n <div class=\"ai-header-actions\">\n <button\n mat-stroked-button\n type=\"button\"\n class=\"ai-action-btn\"\n (click)=\"useLlmForEmbeddings()\"\n [disabled]=\"!canUseLlmForEmbeddings\"\n matTooltip=\"Aplicar provedor e chave do LLM aos embeddings\"\n >\n <mat-icon>merge_type</mat-icon>\n <span class=\"ai-action-label\">Usar mesmo LLM</span>\n </button>\n <mat-chip-option *ngIf=\"!canUseLlmForEmbeddings\" disabled>Provedor sem embeddings</mat-chip-option>\n </div>\n </div>\n <div class=\"ai-subtext\">\n Configure o provedor de embeddings para buscas vetoriais (templates e schemas).\n </div>\n <div class=\"ai-subtext\" *ngIf=\"embeddingUseSameAsLlm\">\n Sincronizado com o LLM. Os campos abaixo acompanham a credencial principal.\n </div>\n <div class=\"ai-embedding-row\">\n <ng-template #hostAiEmbedding></ng-template>\n </div>\n <div class=\"ai-feedback ai-feedback--warn\" *ngIf=\"embeddingDimensionMismatch\">\n <mat-icon>warning</mat-icon>\n <span class=\"error-text\">\n Dimensão de embeddings diferente do banco (768). Ajuste para 768 ou refaça a migração.\n </span>\n </div>\n </div>\n </div>\n\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">table_chart</mat-icon>\n Tabela\n </mat-panel-title>\n <mat-panel-description>Toolbar, aparência e filtro avançado</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostTable></ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"panel-icon\">forum</mat-icon>\n Dialog\n </mat-panel-title>\n <mat-panel-description>Defaults e variants (danger, info, success, question, error)</mat-panel-description>\n </mat-expansion-panel-header>\n <ng-template #hostDialog></ng-template>\n <!-- Icon UX helpers for Dialog variants -->\n <div class=\"dlg-icon-helpers\">\n <div class=\"dlg-icon-helpers__head\">Ícones por perfil (atalhos)</div>\n <div class=\"dlg-icon-helpers__row\" *ngFor=\"let k of dialogVariantKeys\">\n <div class=\"dlg-icon-helpers__label\">{{ k }}</div>\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"getVariantIcon(k) || 'mi:help_outline'\" class=\"dlg-icon-helpers__preview\"></mat-icon>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"pickVariantIcon(k)\" matTooltip=\"Escolher ícone para {{k}}\">\n <mat-icon>search</mat-icon>\n Escolher ícone\n </button>\n <button mat-icon-button type=\"button\" *ngIf=\"getVariantIcon(k)\" (click)=\"clearVariantIcon(k)\" matTooltip=\"Limpar ícone de {{k}}\" aria-label=\"Limpar ícone\">\n <mat-icon>backspace</mat-icon>\n </button>\n <span class=\"dlg-icon-helpers__value\" *ngIf=\"getVariantIcon(k)\">{{ getVariantIcon(k) }}</span>\n </div>\n <div class=\"dlg-icon-helpers__hint\">Dica: O campo de texto acima permanece editável. Estes botões apenas facilitam a escolha/limpeza com preview.</div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n `,\n styles: [`\n .dlg-icon-helpers{margin:12px 16px 4px 16px; padding:12px; border:1px dashed var(--md-sys-color-outline-variant); border-radius:var(--md-sys-shape-corner-small, 8px);}\n .dlg-icon-helpers__head{font-weight:600; margin-bottom:8px; opacity:.8}\n .dlg-icon-helpers__row{display:flex; align-items:center; gap:12px; padding:6px 0}\n .dlg-icon-helpers__label{text-transform:capitalize; width:96px; opacity:.8}\n .dlg-icon-helpers__preview{width:24px; height:24px;}\n .dlg-icon-helpers__value{font-family:monospace; font-size:12px; opacity:.8}\n .dlg-icon-helpers__hint{margin-top:8px; font-size:12px; opacity:.7}\n \n .panel-icon { margin-right: 12px; color: var(--md-sys-color-primary); }\n\n /* AI Section Styles */\n .ai-config-container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .ai-config-source {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 10px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n border: 1px dashed var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-low);\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n flex-wrap: wrap;\n }\n\n .ai-config-source__meta {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n\n .ai-action-btn--clear {\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-container-color: var(--md-sys-color-error-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-error-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-error);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-error-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-error-container);\n }\n\n .ai-action-btn--clear:hover {\n background: var(--md-sys-color-error-container);\n }\n\n .ai-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n font-size: 14px;\n color: var(--md-sys-color-primary);\n margin-bottom: 12px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n padding-bottom: 4px;\n }\n\n .ai-group-title mat-icon {\n font-size: 20px;\n width: 20px;\n height: 20px;\n }\n\n /* Ocultar botões de envio padrão do dynamic-form nas seções de IA */\n .ai-group ::ng-deep .form-actions,\n .ai-group ::ng-deep button[type=\"submit\"] {\n display: none !important;\n }\n\n /* Credentials Row */\n .ai-credentials-row {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n flex-wrap: wrap;\n }\n\n .ai-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n }\n\n .ai-provider-summary {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border-radius: var(--md-sys-shape-corner-medium, 10px);\n background: var(--md-sys-color-surface-variant);\n border: 1px solid var(--md-sys-color-outline-variant);\n margin: 8px 0 4px 0;\n flex-wrap: wrap;\n }\n\n .ai-provider-icon {\n width: 32px;\n height: 32px;\n border-radius: var(--md-sys-shape-corner-small, 8px);\n border: 1px solid var(--md-sys-color-outline-variant);\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--md-sys-color-surface);\n color: var(--md-sys-color-primary);\n flex: 0 0 auto;\n }\n\n .provider-svg {\n width: 18px;\n height: 18px;\n }\n\n .ai-provider-meta {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 200px;\n flex: 1 1 auto;\n }\n\n .ai-provider-name {\n font-weight: 600;\n font-size: 13px;\n }\n\n .ai-provider-desc {\n font-size: 12px;\n opacity: 0.75;\n }\n\n .ai-provider-key {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 999px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-lowest);\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.2px;\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n }\n\n .ai-provider-key mat-icon {\n width: 16px;\n height: 16px;\n font-size: 16px;\n }\n\n .ai-provider-key.is-present {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n border-color: var(--md-sys-color-primary);\n }\n\n .ai-provider-key.is-saved {\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-secondary);\n }\n\n .ai-provider-key.is-missing {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-style: dashed;\n opacity: 0.9;\n }\n\n .ai-provider-key.is-unlocked {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n }\n\n .ai-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n height: 40px;\n padding: 0 14px;\n min-width: 168px;\n border-radius: var(--md-sys-shape-corner-medium, 12px);\n white-space: nowrap;\n background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: var(--md-sys-elevation-level1, 0 1px 2px rgba(0,0,0,0.2));\n transition: background-color 0.15s ease, box-shadow 0.15s ease, transform 0.06s ease;\n\n --mdc-outlined-button-container-color: var(--md-sys-color-secondary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-secondary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-outline-variant);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-secondary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-secondary-container);\n }\n\n .ai-action-btn .mat-button-wrapper,\n .ai-action-btn .mdc-button__label {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n height: 100%;\n }\n\n .ai-action-btn .mat-icon {\n width: 18px;\n height: 18px;\n font-size: 18px;\n line-height: 18px;\n }\n\n .ai-action-btn .ai-action-label {\n display: inline-flex;\n align-items: center;\n line-height: 1;\n }\n\n .ai-action-btn .mat-progress-spinner,\n .ai-action-btn .btn-spinner {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n .ai-action-btn:hover {\n background: var(--md-sys-color-secondary-container);\n box-shadow: var(--md-sys-elevation-level2, 0 2px 6px rgba(0,0,0,0.25));\n }\n\n .ai-action-btn:active {\n transform: translateY(1px);\n }\n\n .ai-action-btn:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n\n .ai-action-btn.is-success {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n border-color: var(--md-sys-color-tertiary);\n\n --mdc-outlined-button-container-color: var(--md-sys-color-tertiary-container);\n --mdc-outlined-button-label-text-color: var(--md-sys-color-on-tertiary-container);\n --mdc-outlined-button-outline-color: var(--md-sys-color-tertiary);\n --mat-mdc-button-persistent-ripple-color: var(--md-sys-color-on-tertiary-container);\n --mat-mdc-button-ripple-color: var(--md-sys-color-on-tertiary-container);\n }\n\n .ai-action-btn.is-success:hover {\n background: var(--md-sys-color-tertiary-container);\n }\n\n .ai-action-btn:disabled {\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n border-color: var(--md-sys-color-outline-variant);\n box-shadow: none;\n opacity: 0.7;\n }\n\n .ai-form-inline {\n flex: 1;\n min-width: 300px;\n }\n\n .ai-credentials-row button {\n margin-top: 4px; /* Align with input */\n height: 40px;\n }\n\n .btn-spinner {\n margin-right: 8px;\n }\n\n /* Feedback */\n .ai-feedback {\n margin-top: 8px;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border-radius: var(--md-sys-shape-corner-extra-small, 4px);\n font-size: 13px;\n }\n\n .ai-feedback--warn {\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n }\n\n /* Model Section */\n .disabled-group {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .ai-model-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .ai-model-controls {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n .ai-model-controls ::ng-deep praxis-dynamic-form {\n flex: 1;\n }\n\n .ai-model-details {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n margin-left: 4px;\n }\n\n .ai-subtext {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .ai-header-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .ai-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: var(--md-sys-color-surface-container-low);\n border-radius: var(--md-sys-shape-corner-small, 8px);\n color: var(--md-sys-color-outline);\n gap: 8px;\n text-align: center;\n font-size: 13px;\n }\n\n .spin {\n animation: spin 1s linear infinite;\n }\n @keyframes spin { \n 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } \n }\n `],\n})\nexport class GlobalConfigEditorComponent implements OnInit, AfterViewInit {\n formConfig!: FormConfig;\n private initialValues: Record<string, any> = {};\n private currentValues: Record<string, any> = {};\n private pathMap: Record<string, string> = {};\n private bootstrappedSections = new Set<string>();\n private readonly allSections = ['crud', 'dynamic-fields', 'cache', 'table', 'dialog', 'ai-credentials', 'ai-model', 'ai-embedding'] as const;\n\n // SettingsPanel integration signals\n readonly isDirty$ = new BehaviorSubject<boolean>(false);\n readonly isValid$ = new BehaviorSubject<boolean>(true);\n readonly isBusy$ = new BehaviorSubject<boolean>(false);\n\n @ViewChild('hostCrud', { read: ViewContainerRef, static: true }) hostCrud!: ViewContainerRef;\n @ViewChild('hostFields', { read: ViewContainerRef, static: true }) hostFields!: ViewContainerRef;\n @ViewChild('hostCache', { read: ViewContainerRef, static: true }) hostCache!: ViewContainerRef;\n @ViewChild('hostTable', { read: ViewContainerRef, static: true }) hostTable!: ViewContainerRef;\n @ViewChild('hostDialog', { read: ViewContainerRef, static: true }) hostDialog!: ViewContainerRef;\n @ViewChild('hostAiCredentials', { read: ViewContainerRef, static: true }) hostAiCredentials!: ViewContainerRef;\n @ViewChild('hostAiModel', { read: ViewContainerRef, static: false }) hostAiModel!: ViewContainerRef;\n @ViewChild('hostAiEmbedding', { read: ViewContainerRef, static: true }) hostAiEmbedding!: ViewContainerRef;\n private readonly destroyRef = inject(DestroyRef);\n private readonly iconPicker = inject(IconPickerService);\n private readonly aiApi = inject(AiBackendApiService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly logger = inject(LoggerService);\n private readonly logContext: LoggerContext = {\n lib: 'praxis-settings-panel',\n component: 'GlobalConfigEditorComponent',\n };\n private readonly providedDynamicFormCtor = inject<Type<any> | null>(GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT, { optional: true });\n private dynamicFormCtor: Type<any> | null = this.providedDynamicFormCtor ?? null;\n private loggedMissingDynamicForm = false;\n\n // Guardar instância do form da seção 'dialog' para atualizar controles diretamente\n private dialogFormInst: any | null = null;\n private aiModelFormRef: any | null = null;\n private aiEmbeddingFormRef: any | null = null;\n private pendingModelOptions: Array<{ text: string; value: string }> = [];\n private readonly embeddingModelOptions = [\n { text: 'text-embedding-3-large', value: 'text-embedding-3-large' },\n { text: 'text-embedding-3-small', value: 'text-embedding-3-small' },\n { text: 'text-embedding-ada-002 (legacy)', value: 'text-embedding-ada-002' },\n ];\n\n\n private componentRefs = new Map<string, any>();\n readonly dialogVariantKeys = ['danger', 'info', 'success', 'question', 'error'] as const;\n\n isTestingAi = false;\n isRefetchingModels = false;\n isClearingGlobalConfig = false;\n aiTestResult: { success: boolean; message: string } | null = null;\n private availableModels: AiModel[] = [];\n providers: AiProviderCatalogItem[] = [];\n selectedProvider: AiProviderCatalogItem | null = null;\n apiKeyLast4: string | null = null;\n hasStoredApiKey = false;\n hasStoredGlobalConfig = false;\n configSourceLabel = 'Padrões do servidor (env vars)';\n\n // UX: API Key monitoring\n private apiKeyChanged$ = new Subject<{ apiKey: string; provider: string }>();\n hasApiKey = false;\n selectedModelDetails: string = '';\n get hasCurrentApiKey(): boolean {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n return !!apiKey;\n }\n get apiKeyStatusLabel(): string {\n const apiKey = (this.currentValues as any)?.[this.safeName('ai.apiKey')] || '';\n if (apiKey) return 'Chave informada';\n if (this.apiKeyLast4) return `Chave salva (****${this.apiKeyLast4})`;\n if (this.hasStoredApiKey) return 'Chave salva';\n return 'Sem chave salva';\n }\n\n constructor(private admin: GlobalConfigAdminService, private snack: MatSnackBar) { }\n\n async ngOnInit(): Promise<void> {\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.formConfig = buildGlobalConfigFormConfig();\n this.applyConfigSnapshot(flat, { resetForms: false });\n\n await this.loadProviderCatalog();\n this.applyProviderOptions();\n this.applyEmbeddingProviderOptions();\n\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n\n await this.refreshStoredConfigState();\n\n // Monitor API Key changes to auto-fetch\n this.apiKeyChanged$.pipe(\n debounceTime(1500), // Wait for typing to stop\n distinctUntilChanged((prev, curr) => prev.apiKey === curr.apiKey && prev.provider === curr.provider),\n filter(({ apiKey, provider }) => this.canAutoRefreshModels(provider, apiKey)),\n ).subscribe(() => {\n this.refreshModels();\n });\n\n\n\n if (this.hasApiKey && this.selectedProvider?.supportsModels !== false) {\n // Auto-fetch models on load if we have a key (silent)\n this.refreshModels(false, true);\n }\n\n this.bootstrapDynamicForms();\n }\n\n\n\n ngAfterViewInit(): void {\n this.ensureAiModelForm();\n }\n\n onValueChange(sectionId: string, ev: FormValueChangeEvent): void {\n this.isValid$.next(!!ev.isValid);\n // Mesclar valores por seção (cada form emite somente seu grupo)\n this.currentValues = { ...this.currentValues, ...ev.formData };\n\n if (sectionId === 'ai-credentials') {\n const apiKeySafe = this.safeName('ai.apiKey');\n const providerSafe = this.safeName('ai.provider');\n const apiKey = ev.formData[apiKeySafe];\n const provider = ev.formData[providerSafe] || (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n const providerChanged = provider !== this.selectedProvider?.id;\n if (providerChanged) {\n this.updateSelectedProvider(provider);\n this.aiTestResult = null;\n this.availableModels = [];\n this.pendingModelOptions = [];\n this.selectedModelDetails = '';\n this.clearModelSelection(this.selectedProvider?.defaultModel);\n this.applyEmbeddingProviderOptions();\n }\n this.updateApiKeyState(provider, apiKey);\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n\n if (apiKey !== this.initialValues[apiKeySafe] || providerChanged) {\n this.apiKeyChanged$.next({ apiKey: apiKey || '', provider });\n // Reset test result when key changes\n if (this.aiTestResult) {\n this.aiTestResult = null;\n }\n }\n if (this.hasApiKey) {\n setTimeout(() => this.ensureAiModelForm(), 0);\n } else {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.availableModels = [];\n this.pendingModelOptions = [];\n }\n }\n\n if (sectionId === 'ai-model') {\n const modelSafe = this.safeName('ai.model');\n const model = ev.formData[modelSafe];\n this.updateModelDetails(model);\n }\n\n if (sectionId === 'ai-embedding') {\n this.syncEmbeddingDefaults();\n this.ensureEmbeddingModelDefaults();\n this.ensureEmbeddingDimensionsDefaults();\n }\n\n const firstTime = !this.bootstrappedSections.has(sectionId);\n if (firstTime) {\n this.initialValues = { ...this.initialValues, ...ev.formData };\n this.bootstrappedSections.add(sectionId);\n }\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n private buildSectionConfig(sectionId: string): any {\n const sec = (this.formConfig.sections || []).find((s: any) => s.id === sectionId);\n if (!sec) return { sections: [], fieldMetadata: [] } as any;\n const names = new Set<string>();\n for (const row of sec.rows || []) {\n for (const col of row.columns || []) {\n for (const fname of col.fields || []) names.add(fname);\n }\n }\n const fms = (this.formConfig.fieldMetadata || []).filter((f: any) => names.has(f.name));\n return { sections: [sec], fieldMetadata: fms } as any;\n }\n\n private bootstrapDynamicForms(): void {\n if (!this.dynamicFormCtor) {\n if (!this.loggedMissingDynamicForm) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Dynamic form component was not provided. Set GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT to enable form rendering.',\n this.buildLogOptions(\n { token: 'GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT' },\n { dedupeKey: 'global-config-editor:missing-dynamic-form' },\n ),\n );\n this.loggedMissingDynamicForm = true;\n }\n return;\n }\n\n const groups: Array<{ id: string; host: ViewContainerRef; cfg: any }> = [\n { id: 'crud', host: this.hostCrud, cfg: this.buildSectionConfig('crud') },\n { id: 'dynamic-fields', host: this.hostFields, cfg: this.buildSectionConfig('dynamic-fields') },\n { id: 'cache', host: this.hostCache, cfg: this.buildSectionConfig('cache') },\n { id: 'table', host: this.hostTable, cfg: this.buildSectionConfig('table') },\n { id: 'dialog', host: this.hostDialog, cfg: this.buildSectionConfig('dialog') },\n { id: 'ai-credentials', host: this.hostAiCredentials, cfg: this.buildSectionConfig('ai-credentials') },\n { id: 'ai-embedding', host: this.hostAiEmbedding, cfg: this.buildSectionConfig('ai-embedding') },\n ];\n\n for (const g of groups) {\n try {\n if (!g.host) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Missing host for section',\n this.buildLogOptions(\n { sectionId: g.id },\n {\n dedupeKey: `global-config-editor:missing-host:${g.id}`,\n context: { actionId: `section.${g.id}` },\n },\n ),\n );\n continue;\n }\n this.logger.debug(\n '[GlobalConfigEditor] Creating form section',\n this.buildLogOptions(\n { sectionId: g.id, config: g.cfg },\n {\n context: { actionId: `section.${g.id}` },\n throttleKey: 'global-config-editor:create-form-section',\n },\n ),\n );\n const ref = g.host.createComponent(this.dynamicFormCtor);\n ref.setInput('config', g.cfg);\n ref.setInput('mode', 'edit');\n // Não habilitar o modo de edição de layout (canvas) — queremos apenas edição de valores\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n\n // FORÇAR estado de sucesso para renderizar o formulário sem resourcePath\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n {\n context: { actionId: `section.${g.id}.build-form` },\n dedupeKey: `global-config-editor:build-form-failed:${g.id}`,\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange(g.id, ev));\n }\n this.componentRefs.set(g.id, ref);\n if (g.id === 'dialog') {\n // Guardar referência para facilitar setValue em campos de ícone\n this.dialogFormInst = inst;\n }\n if (g.id === 'ai-embedding') {\n this.aiEmbeddingFormRef = ref;\n }\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create form section',\n this.buildLogOptions(\n { sectionId: g.id, error: err },\n { context: { actionId: `section.${g.id}.create` } },\n ),\n );\n }\n }\n // Criar a seção de modelo somente quando a chave estiver disponível e o host existir\n this.ensureAiModelForm();\n }\n\n private ensureAiModelForm(): void {\n if (!this.hasApiKey) return;\n if (!this.aiModelFormRef) {\n this.createAiModelForm();\n }\n }\n\n private async loadProviderCatalog(): Promise<void> {\n try {\n const response: any = await firstValueFrom(this.aiApi.listProviderCatalog() as any);\n const providers = Array.isArray(response?.providers) ? response.providers : [];\n this.providers = providers.filter((p: any) => p && p.id);\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] Failed to load provider catalog, using fallback.',\n this.buildLogOptions(\n { error: err },\n {\n context: { actionId: 'providers.load-catalog' },\n dedupeKey: 'global-config-editor:provider-catalog-fallback',\n },\n ),\n );\n this.providers = this.buildFallbackProviders();\n }\n }\n\n private buildFallbackProviders(): AiProviderCatalogItem[] {\n return [\n {\n id: 'gemini',\n label: 'Google Gemini',\n description: 'Modelos rápidos e multimodais do Google.',\n defaultModel: 'gemini-2.0-flash',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'gemini',\n },\n {\n id: 'openai',\n label: 'OpenAI',\n description: 'Modelos GPT para texto e chat.',\n defaultModel: 'gpt-4o-mini',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'openai',\n },\n {\n id: 'xai',\n label: 'xAI (Grok)',\n description: 'Modelos Grok focados em raciocínio.',\n defaultModel: 'grok-2-latest',\n requiresApiKey: true,\n supportsModels: true,\n supportsEmbeddings: false,\n iconKey: 'xai',\n },\n {\n id: 'mock',\n label: 'Mock (dev)',\n description: 'Modo local para testes sem chave.',\n defaultModel: 'mock-default',\n requiresApiKey: false,\n supportsModels: true,\n supportsEmbeddings: true,\n iconKey: 'mock',\n },\n ];\n }\n\n private applyProviderOptions(): void {\n const options = this.providers.map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setProviderFieldOptions(options);\n }\n\n private applyEmbeddingProviderOptions(): void {\n const options = this.providers\n .filter((provider) =>\n provider?.supportsEmbeddings !== false || provider?.id === 'openai',\n )\n .map((provider) => ({\n text: provider.label || provider.id,\n value: provider.id,\n }));\n this.setEmbeddingProviderFieldOptions(options);\n }\n\n private setProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private setEmbeddingProviderFieldOptions(providerOptions: Array<{ text: string; value: string }>): void {\n const safeProviderName = this.safeName('ai.embedding.provider');\n const providerField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeProviderName);\n if (providerField) {\n (providerField as any).selectOptions = providerOptions;\n }\n }\n\n private resolveDefaultProvider(): string {\n const preferred = this.providers.find((provider) => provider.id === 'gemini') || this.providers[0];\n return preferred?.id || 'gemini';\n }\n\n private setFieldDefaultValue(safeName: string, value: any): void {\n const field = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeName);\n if (field) {\n (field as any).defaultValue = value;\n }\n }\n\n private updateSelectedProvider(providerId: string): void {\n this.selectedProvider = this.findProvider(providerId) || null;\n }\n\n private updateApiKeyState(providerId: string, apiKey?: string): void {\n const meta = this.findProvider(providerId);\n const requiresKey = meta?.requiresApiKey !== false;\n this.hasApiKey = !requiresKey || !!apiKey || this.hasStoredApiKey;\n }\n\n get embeddingUseSameAsLlm(): boolean {\n return !!(this.currentValues as any)?.[this.safeName('ai.embedding.useSameAsLlm')];\n }\n\n get embeddingDimensionMismatch(): boolean {\n const raw = (this.currentValues as any)?.[this.safeName('ai.embedding.dimensions')];\n if (raw === undefined || raw === null || raw === '') return false;\n const parsed = Number(raw);\n if (!Number.isFinite(parsed)) return false;\n return parsed !== 768;\n }\n\n get canUseLlmForEmbeddings(): boolean {\n return !!this.selectedProvider?.supportsEmbeddings;\n }\n\n private canAutoRefreshModels(providerId: string, apiKey: string): boolean {\n const meta = this.findProvider(providerId);\n if (meta?.supportsModels === false) return false;\n if (meta?.requiresApiKey === false) return true;\n if (apiKey && apiKey.length > 10) return true;\n return this.hasStoredApiKey;\n }\n\n private ensureDefaultModelSelection(): void {\n const modelSafe = this.safeName('ai.model');\n const current = (this.currentValues as any)[modelSafe];\n if (current) return;\n const fallback = this.selectedProvider?.defaultModel;\n if (!fallback) return;\n this.setFieldDefaultValue(modelSafe, fallback);\n (this.currentValues as any)[modelSafe] = fallback;\n this.updateModelDetails(fallback);\n }\n\n private clearModelSelection(defaultModel?: string): void {\n const modelSafe = this.safeName('ai.model');\n const nextValue = defaultModel || '';\n (this.currentValues as any)[modelSafe] = nextValue;\n this.setFieldDefaultValue(modelSafe, nextValue);\n this.updateModelDetails(nextValue);\n const inst: any = this.aiModelFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(modelSafe);\n if (ctrl) {\n ctrl.setValue(nextValue);\n }\n }\n\n private findProvider(providerId: string): AiProviderCatalogItem | undefined {\n return this.providers.find((provider) => provider.id === providerId);\n }\n\n private setModelFieldOptions(modelOptions: Array<{ text: string; value: string }>): void {\n const safeModelName = this.safeName('ai.model');\n const aiModelField = (this.formConfig.fieldMetadata || []).find((f: any) => f.name === safeModelName);\n if (aiModelField) {\n (aiModelField as any).selectOptions = modelOptions;\n }\n }\n\n private applyConfigSnapshot(flat: Record<string, any>, opts: { resetForms: boolean }): void {\n this.pathMap = {};\n for (const fm of this.formConfig.fieldMetadata || []) {\n const da: any = (fm as any).dataAttributes || {};\n const path = da.globalPath || fm.name;\n this.pathMap[fm.name] = path;\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) (fm as any).defaultValue = v;\n }\n this.initialValues = {};\n for (const safe of Object.keys(this.pathMap)) {\n const path = this.pathMap[safe];\n const v = this.normalizeFieldValue(path, flat[path]);\n if (v !== undefined) this.initialValues[safe] = v;\n }\n this.currentValues = { ...this.initialValues };\n this.apiKeyLast4 = flat['ai.apiKeyLast4'] || null;\n this.hasStoredApiKey = !!flat['ai.hasApiKey'] || !!this.apiKeyLast4;\n\n if (opts.resetForms) {\n const resetValues: Record<string, any> = {};\n for (const safe of Object.keys(this.pathMap)) {\n if (safe in this.initialValues) {\n resetValues[safe] = this.initialValues[safe];\n } else {\n resetValues[safe] = null;\n }\n }\n this.patchFormsWithValues(resetValues);\n this.bootstrappedSections = new Set(this.allSections);\n this.isDirty$.next(false);\n }\n }\n\n private patchFormsWithValues(values: Record<string, any>): void {\n for (const ref of this.componentRefs.values()) {\n const inst: any = ref?.instance as any;\n const form = inst?.form;\n if (form?.patchValue) {\n try {\n form.patchValue(values, { emitEvent: false });\n } catch { }\n }\n }\n }\n\n private refreshAiStateAfterConfig(): void {\n const providerSafe = this.safeName('ai.provider');\n const apiKeySafe = this.safeName('ai.apiKey');\n const selectedProvider = (this.currentValues as any)[providerSafe] || this.resolveDefaultProvider();\n if (selectedProvider && !(this.currentValues as any)[providerSafe]) {\n (this.currentValues as any)[providerSafe] = selectedProvider;\n if (!(this.initialValues as any)[providerSafe]) {\n (this.initialValues as any)[providerSafe] = selectedProvider;\n }\n this.setFieldDefaultValue(providerSafe, selectedProvider);\n }\n\n this.updateSelectedProvider(selectedProvider);\n this.updateApiKeyState(selectedProvider, (this.currentValues as any)[apiKeySafe]);\n this.syncEmbeddingDefaults(false);\n this.ensureEmbeddingModelDefaults(false);\n this.ensureEmbeddingDimensionsDefaults(false);\n this.updateModelDetails((this.currentValues as any)[this.safeName('ai.model')] || '');\n }\n\n private async refreshStoredConfigState(): Promise<void> {\n try {\n this.hasStoredGlobalConfig = await this.admin.hasStoredConfig();\n } catch {\n this.hasStoredGlobalConfig = false;\n }\n this.configSourceLabel = this.hasStoredGlobalConfig\n ? 'Configuração salva (UI) — sobrescreve os defaults do servidor'\n : 'Padrões do servidor (env vars)';\n }\n\n async clearStoredConfig(): Promise<void> {\n if (this.isClearingGlobalConfig) return;\n this.isClearingGlobalConfig = true;\n try {\n await this.admin.clearStoredConfig();\n const cfg = this.admin.getEffectiveConfig();\n const flat = this.flatten(cfg);\n this.applyConfigSnapshot(flat, { resetForms: true });\n this.aiTestResult = null;\n this.refreshAiStateAfterConfig();\n await this.refreshStoredConfigState();\n try { this.snack.open('Configuração global limpa. Usando defaults do servidor.', undefined, { duration: 2500 }); } catch { }\n } catch (err) {\n try { this.snack.open('Falha ao limpar a configuração global.', undefined, { duration: 4000 }); } catch { }\n } finally {\n this.isClearingGlobalConfig = false;\n this.cdr.detectChanges();\n }\n }\n\n private syncEmbeddingDefaults(markDirty = true): void {\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n const embeddingProviderSafe = this.safeName('ai.embedding.provider');\n const embeddingApiKeySafe = this.safeName('ai.embedding.apiKey');\n const useSame = !!(this.currentValues as any)[useSameSafe];\n if (!useSame) return;\n if (!this.canUseLlmForEmbeddings) {\n this.setEmbeddingValue(useSameSafe, false, markDirty);\n return;\n }\n const llmProvider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const llmApiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n this.setEmbeddingValue(embeddingProviderSafe, llmProvider, markDirty);\n this.setEmbeddingValue(embeddingApiKeySafe, llmApiKey, markDirty);\n }\n\n private ensureEmbeddingModelDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const modelSafe = this.safeName('ai.embedding.model');\n const provider = (this.currentValues as any)[providerSafe];\n const model = (this.currentValues as any)[modelSafe];\n if (provider === 'openai' && !model) {\n this.setEmbeddingValue(\n modelSafe,\n this.embeddingModelOptions[0]?.value || 'text-embedding-3-large',\n markDirty,\n );\n }\n }\n\n private ensureEmbeddingDimensionsDefaults(markDirty = true): void {\n const providerSafe = this.safeName('ai.embedding.provider');\n const dimensionsSafe = this.safeName('ai.embedding.dimensions');\n const provider = (this.currentValues as any)[providerSafe];\n const dimensions = (this.currentValues as any)[dimensionsSafe];\n if (provider === 'openai' && (dimensions === undefined || dimensions === null || dimensions === '')) {\n this.setEmbeddingValue(dimensionsSafe, 768, markDirty);\n }\n }\n\n useLlmForEmbeddings(): void {\n if (!this.canUseLlmForEmbeddings) return;\n const useSameSafe = this.safeName('ai.embedding.useSameAsLlm');\n this.setEmbeddingValue(useSameSafe, true);\n this.syncEmbeddingDefaults();\n }\n\n private createAiModelForm(): void {\n if (!this.dynamicFormCtor || !this.hostAiModel) return;\n const cfg = this.buildSectionConfig('ai-model');\n if (!cfg.sections?.length) return;\n try {\n // Apply pending options to metadata before creating\n if (this.pendingModelOptions.length) {\n this.setModelFieldOptions(this.pendingModelOptions);\n }\n const ref = this.hostAiModel.createComponent(this.dynamicFormCtor);\n ref.setInput('config', cfg);\n ref.setInput('mode', 'edit');\n ref.setInput('enableCustomization', false);\n const inst: any = ref.instance as any;\n inst.initializationStatus = 'success';\n inst.isLoading = false;\n try {\n if (typeof inst.buildFormFromConfig === 'function') inst.buildFormFromConfig();\n } catch (err) {\n this.logger.warnOnce(\n '[GlobalConfigEditor] buildFormFromConfig failed',\n this.buildLogOptions(\n { sectionId: 'ai-model', error: err },\n {\n context: { actionId: 'section.ai-model.build-form' },\n dedupeKey: 'global-config-editor:build-form-failed:ai-model',\n },\n ),\n );\n }\n try { inst.onSubmit = () => { }; } catch { }\n try { ref.changeDetectorRef.detectChanges(); } catch { }\n if (inst?.valueChange?.subscribe) {\n inst.valueChange.subscribe((ev: FormValueChangeEvent) => this.onValueChange('ai-model', ev));\n }\n this.componentRefs.set('ai-model', ref);\n this.aiModelFormRef = ref;\n this.updateModelDetails(this.currentValues[this.safeName('ai.model')] || '');\n this.destroyRef.onDestroy(() => { try { ref.destroy(); } catch { } });\n } catch (err) {\n this.logger.error(\n '[GlobalConfigEditor] Failed to create AI model form',\n this.buildLogOptions(\n { error: err },\n { context: { actionId: 'section.ai-model.create' } },\n ),\n );\n }\n }\n\n private setEmbeddingValue(safeName: string, value: any, markDirty = true): void {\n (this.currentValues as any)[safeName] = value;\n const inst: any = this.aiEmbeddingFormRef?.instance as any;\n const ctrl = inst?.form?.get?.(safeName);\n if (ctrl) {\n ctrl.setValue(value);\n }\n if (markDirty) {\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n }\n\n private recreateAiModelForm(): void {\n if (this.aiModelFormRef) {\n try { this.aiModelFormRef.destroy(); } catch { }\n this.componentRefs.delete('ai-model');\n this.aiModelFormRef = null;\n }\n this.createAiModelForm();\n }\n\n private updateModelDetails(modelName: string) {\n const model = this.availableModels.find(m => m.name.endsWith(modelName));\n if (model) {\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : 'N/A';\n this.selectedModelDetails = `Modelo: ${model.displayName || modelName} | Tokens (in/out): ${formatLimit(model.inputTokenLimit)}/${formatLimit(model.outputTokenLimit)} | Métodos: ${model.supportedGenerationMethods?.join(', ') || 'N/A'}`;\n } else {\n this.selectedModelDetails = 'Detalhes do modelo não disponíveis.';\n }\n }\n\n // SettingsPanel expects these methods\n reset(): void {\n const flat: Record<string, any> = {};\n for (const safe of Object.keys(this.initialValues)) flat[safe] = this.initialValues[safe];\n for (const fm of this.formConfig.fieldMetadata || []) {\n const v = flat[fm.name];\n (fm as any).defaultValue = v;\n }\n this.currentValues = { ...this.initialValues };\n this.isDirty$.next(false);\n }\n\n getSettingsValue(): any {\n const flat = this.buildChangedValues();\n return this.toNested(flat);\n }\n\nasync onSave(): Promise<any> {\n const partial = this.getSettingsValue();\n const validationMessage = this.validateCompactTableAppearancePayload(partial);\n if (validationMessage) {\n try { this.snack.open(validationMessage, undefined, { duration: 5000 }); } catch { }\n return undefined;\n }\n this.isBusy$.next(true);\n try {\n await this.admin.save(partial);\n // Update baseline after save\n this.initialValues = { ...this.currentValues };\n this.isDirty$.next(false);\n try { this.snack.open('Configurações salvas', undefined, { duration: 2000 }); } catch { }\n return partial;\n } catch (err) {\n const message = this.resolveSaveErrorMessage(err);\n try { this.snack.open(message, undefined, { duration: 4000 }); } catch { }\n return undefined;\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n async refreshModels(force = false, silent = false): Promise<void> {\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n if (meta?.supportsModels === false) {\n if (!silent) {\n this.aiTestResult = { success: false, message: 'Este provedor não oferece catálogo de modelos.' };\n this.cdr.detectChanges();\n }\n return;\n }\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: 'Insira uma chave de API para buscar modelos.' };\n this.cdr.detectChanges();\n return;\n }\n\n if (!silent) {\n this.isRefetchingModels = true;\n this.cdr.detectChanges();\n }\n\n let modelOptions: Array<{ text: string; value: string }> = [];\n\n try {\n const request: any = { provider };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(this.aiApi.listModels(request) as any);\n if (!response?.success) {\n const msg = response?.message || 'Erro ao buscar modelos.';\n throw new Error(msg);\n }\n const models: AiModel[] = response.models || [];\n this.availableModels = models; // Store available models\n\n const formatLimit = (n?: number) => n ? (n >= 1000 ? (n / 1000).toFixed(0) + 'k' : n) : '?';\n\n modelOptions = (models || [])\n .filter((m) => m.name)\n .map((m) => {\n const shortName = m.name.split('/').pop() || m.name;\n const details = `${formatLimit(m.inputTokenLimit)} in / ${formatLimit(m.outputTokenLimit)} out`;\n return {\n text: `${m.displayName || shortName} (${details})`,\n value: shortName\n };\n });\n\n if (modelOptions.length || force) {\n this.applyModelOptions(modelOptions, silent);\n }\n } catch (error: any) {\n this.logger.error(\n '[GlobalConfigEditor] Error fetching models',\n this.buildLogOptions(\n { error, provider },\n { context: { actionId: 'models.fetch' } },\n ),\n );\n this.aiTestResult = { success: false, message: error.message || 'Erro ao buscar modelos.' };\n if (!silent) {\n this.snack.open('Erro ao buscar modelos. Verifique a chave de API.', 'Fechar', { duration: 5000 });\n }\n } finally {\n this.logger.debug(\n '[GlobalConfigEditor] refreshModels complete.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions?.length ?? 0, hasAiModelFormRef: !!this.aiModelFormRef },\n {\n context: { actionId: 'models.refresh' },\n throttleKey: 'global-config-editor:refresh-models-complete',\n },\n ),\n );\n this.isRefetchingModels = false;\n this.cdr.detectChanges();\n }\n }\n\n // New method to apply model options to the form\n private applyModelOptions(modelOptions: Array<{ text: string; value: string }>, silent = false): void {\n // Store if form ref not ready yet\n if (!this.aiModelFormRef) {\n this.pendingModelOptions = modelOptions; // Store for later application\n this.logger.warnOnce(\n '[GlobalConfigEditor] aiModelFormRef not ready. Storing model options.',\n this.buildLogOptions(\n { modelOptionsCount: modelOptions.length },\n {\n context: { actionId: 'models.apply-options' },\n dedupeKey: 'global-config-editor:ai-model-form-ref-not-ready',\n },\n ),\n );\n this.ensureAiModelForm();\n return;\n }\n\n this.pendingModelOptions = modelOptions;\n this.setModelFieldOptions(modelOptions);\n this.ensureDefaultModelSelection();\n this.recreateAiModelForm();\n\n if (!silent) {\n try { this.snack.open(`Lista de modelos atualizada (${modelOptions.length} modelos)`, undefined, { duration: 3000 }); } catch { }\n }\n this.pendingModelOptions = [];\n }\n\n async testAiConnection(): Promise<void> {\n this.isTestingAi = true;\n this.aiTestResult = null;\n this.cdr.detectChanges(); // Force update to show spinner\n\n // Get current value from form (even if not saved)\n const apiKey = (this.currentValues as any)[this.safeName('ai.apiKey')] || '';\n const provider = (this.currentValues as any)[this.safeName('ai.provider')] || this.resolveDefaultProvider();\n const meta = this.findProvider(provider);\n const selectedModel = (this.currentValues as any)[this.safeName('ai.model')] || meta?.defaultModel || 'gemini-2.0-flash';\n\n const requiresKey = meta?.requiresApiKey !== false;\n const hasKey = !!apiKey || this.hasStoredApiKey || !requiresKey;\n if (requiresKey && !hasKey) {\n this.aiTestResult = { success: false, message: 'Insira uma chave de API para testar.' };\n this.isTestingAi = false;\n this.cdr.detectChanges();\n return;\n }\n\n try {\n const request: any = { provider, model: selectedModel };\n if (apiKey) request.apiKey = apiKey;\n const response: any = await firstValueFrom(\n this.aiApi.testProvider(request) as any,\n );\n if (!response?.success) {\n throw new Error(response?.message || 'Falha ao testar conexao.');\n }\n this.aiTestResult = { success: true, message: response.message || 'Conexao estabelecida com sucesso!' };\n this.hasApiKey = true; // Garantir desbloqueio da seção de modelo após sucesso\n // Após validar a chave, já buscar a lista de modelos para preencher o select\n await this.refreshModels(true);\n } catch (err: any) {\n this.logger.error(\n '[GlobalConfigEditor] AI Connection Test Error',\n this.buildLogOptions(\n { error: err, provider, model: selectedModel },\n { context: { actionId: 'provider.test-connection' } },\n ),\n );\n const msg = err?.message || 'Erro desconhecido';\n this.aiTestResult = { success: false, message: msg };\n } finally {\n this.isTestingAi = false;\n this.cdr.detectChanges(); // Force update to hide spinner\n }\n }\n\n private buildLogOptions(\n data?: unknown,\n options: Partial<LoggerLogOptions> = {},\n ): LoggerLogOptions {\n return {\n ...options,\n context: {\n ...this.logContext,\n ...(options.context ?? {}),\n },\n data,\n };\n }\n\n // ===== Helpers de UX para ícones de Dialog (variants) =====\n private safeName(path: string): string {\n return path.replace(/[^a-zA-Z0-9_]/g, '_');\n }\n\nprivate buildChangedValues(): Record<string, any> {\n const out: Record<string, any> = {};\n for (const [safe, value] of Object.entries(this.currentValues)) {\n const path = this.pathMap[safe] || safe;\n const normalizedValue = this.normalizeFieldValue(path, value);\n const normalizedInitial = this.normalizeFieldValue(path, this.initialValues[safe]);\n if (!this.shouldIncludeField(normalizedInitial, normalizedValue)) continue;\n out[path] = normalizedValue;\n }\n return out;\n}\n\n private shouldIncludeField(initial: any, current: any): boolean {\n if (initial === undefined) {\n if (current === null || current === undefined) return false;\n if (typeof current === 'string' && current.trim() === '') return false;\n if (Array.isArray(current) && current.length === 0) return false;\n }\n return initial !== current;\n }\n\n private resolveSaveErrorMessage(err: any): string {\n const apiMessage = typeof err?.error?.message === 'string' ? err.error.message : null;\n const details = err?.error?.details;\n if (apiMessage && apiMessage.trim()) {\n return apiMessage;\n }\n if (details && typeof details === 'object') {\n const first = Object.values(details).find((v) => typeof v === 'string' && v.trim());\n if (typeof first === 'string') {\n return first;\n }\n }\n if (typeof err?.message === 'string' && err.message.trim()) {\n return err.message;\n }\n return 'Falha ao salvar configurações.';\n }\n private normalizeFieldValue(path: string, value: any): any {\n if (typeof value !== 'string') return value;\n if (!TABLE_COMPACT_SPACING_PATHS.has(path) && !TABLE_COMPACT_FONT_SIZE_PATHS.has(path)) {\n return value;\n }\n return value.trim().replace(/\\s+/g, ' ');\n }\n\n private validateCompactTableAppearancePayload(partial: any): string | null {\n const appearance = partial?.table?.appearance;\n if (!appearance || typeof appearance !== 'object') return null;\n\n const checks: Array<{ path: string; value: unknown; regex: RegExp; example: string }> = [\n {\n path: 'table.appearance.spacing.cellPadding',\n value: appearance?.spacing?.cellPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '6px 12px',\n },\n {\n path: 'table.appearance.spacing.headerPadding',\n value: appearance?.spacing?.headerPadding,\n regex: TABLE_COMPACT_SPACING_REGEX,\n example: '8px 12px',\n },\n {\n path: 'table.appearance.typography.fontSize',\n value: appearance?.typography?.fontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n {\n path: 'table.appearance.typography.headerFontSize',\n value: appearance?.typography?.headerFontSize,\n regex: TABLE_COMPACT_FONT_SIZE_REGEX,\n example: '13px',\n },\n ];\n\n for (const check of checks) {\n if (typeof check.value !== 'string') continue;\n const normalized = this.normalizeFieldValue(check.path, check.value);\n if (!normalized) continue;\n if (!check.regex.test(normalized)) {\n return `Valor inválido em ${TABLE_COMPACT_FIELD_LABELS[check.path]}. Use uma string CSS simples, como ${check.example}.`;\n }\n }\n\n return null;\n }\n\n getVariantIcon(key: string): string | undefined {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n return (this.currentValues as any)[safe];\n }\n async pickVariantIcon(key: string): Promise<void> {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n const current = (this.currentValues as any)[safe] || '';\n // Melhor UX: usar MatDialog (modal) em vez do Settings Panel para o picker\n const res = await this.iconPicker.openDialog({ value: current });\n if (res === undefined) return; // cancel\n this.setDialogControlValue(safe, res);\n }\n clearVariantIcon(key: string): void {\n const safe = this.safeName(`dialog.variants.${key}.icon`);\n this.setDialogControlValue(safe, '');\n }\n private setDialogControlValue(safeControlName: string, val: string): void {\n const inst: any = this.dialogFormInst as any;\n try {\n const ctrl = inst?.form?.get?.(safeControlName);\n if (ctrl) {\n ctrl.setValue(val);\n return;\n }\n } catch { }\n // Fallback: atualiza cache local e marca como sujo\n (this.currentValues as any)[safeControlName] = val;\n this.isDirty$.next(!this.shallowEqual(this.currentValues, this.initialValues));\n }\n\n\n\n private withDefaults(config: FormConfig, values: Record<string, any>): FormConfig {\n const next = JSON.parse(JSON.stringify(config)) as FormConfig;\n for (const section of next.sections || []) {\n for (const row of section.rows || []) {\n for (const col of row.columns || []) {\n for (const field of col.fields || []) {\n const key = (field as any).name as string;\n if (!key) continue;\n const v = values[key];\n if (v !== undefined) {\n (field as any).defaultValue = v;\n }\n }\n }\n }\n }\n return next;\n }\n\n private setByPath(target: any, dotPath: string, value: any): void {\n const parts = dotPath.split('.');\n let ref = target;\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i];\n if (typeof ref[p] !== 'object' || ref[p] == null) ref[p] = {};\n ref = ref[p];\n }\n ref[parts[parts.length - 1]] = value;\n }\n\n private flatten(obj: any, prefix = ''): Record<string, any> {\n const out: Record<string, any> = {};\n if (!obj || typeof obj !== 'object') return out;\n for (const key of Object.keys(obj)) {\n const val = (obj as any)[key];\n const path = prefix ? `${prefix}.${key}` : key;\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n Object.assign(out, this.flatten(val, path));\n } else {\n out[path] = val;\n }\n }\n return out;\n }\n\n private toNested(flat: Record<string, any>): any {\n const out: any = {};\n for (const k of Object.keys(flat)) {\n const v = flat[k];\n if (v === undefined) continue;\n this.setByPath(out, k, v);\n }\n return out;\n }\n\n private shallowEqual(a: Record<string, any>, b: Record<string, any>): boolean {\n const ak = Object.keys(a);\n const bk = Object.keys(b);\n if (ak.length !== bk.length) return false;\n for (const k of ak) {\n if (a[k] !== b[k]) return false;\n }\n return true;\n }\n}\n","import { SettingsPanelService } from '../settings-panel.service';\nimport { GlobalConfigEditorComponent } from './global-config-editor.component';\n\nexport type OpenGlobalConfigOptions = {\n id?: string;\n title?: string;\n titleIcon?: string;\n};\n\n/**\n * Helper to open the Global Config Editor in a host application.\n * Usage:\n * openGlobalConfigEditor(settings);\n */\nexport function openGlobalConfigEditor(\n settings: SettingsPanelService,\n opts?: OpenGlobalConfigOptions,\n): void {\n settings.open({\n id: opts?.id ?? 'global-config',\n title: opts?.title ?? 'Configurações Globais',\n titleIcon: opts?.titleIcon ?? 'tune',\n content: { component: GlobalConfigEditorComponent, inputs: {} },\n });\n}\n\n","/**\n * Capabilities catalog for SettingsPanelConfig.\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n content: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nexport const SETTINGS_PANEL_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: {},\n targets: ['praxis-global-config-editor', 'praxis-settings-panel'],\n notes: [\n 'SettingsPanelConfig descreve o painel e o componente embutido (content.component).',\n 'content.component deve ser uma referencia de classe Angular fornecida pelo host.',\n ],\n capabilities: [\n { path: 'id', category: 'identity', valueKind: 'string', description: 'ID do painel.' },\n { path: 'title', category: 'identity', valueKind: 'string', description: 'Titulo do painel.' },\n { path: 'titleIcon', category: 'identity', valueKind: 'string', description: 'Icone do titulo (Material icon name).' },\n { path: 'expanded', category: 'behavior', valueKind: 'boolean', description: 'Estado inicial expandido.' },\n { path: 'content', category: 'content', valueKind: 'object', description: 'Conteudo do painel.' },\n {\n path: 'content.component',\n category: 'content',\n valueKind: 'object',\n description: 'Referencia do componente Angular a ser renderizado.',\n critical: true,\n safetyNotes: 'Nao gerar dinamicamente; o host deve fornecer a referencia.',\n },\n {\n path: 'content.inputs',\n category: 'content',\n valueKind: 'object',\n description: 'Inputs passados para o componente de conteudo.',\n },\n ],\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","CORE_SETTINGS_PANEL_DATA","i1","TABLE_COMPACT_LENGTH_TOKEN","i1.GlobalConfigAdminService","i5","i6","i7","i8"],"mappings":"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"}
|