@praxisui/dynamic-form 3.0.0-beta.8 → 3.0.0-beta.9

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 +0,0 @@
1
- {"version":3,"file":"praxisui-dynamic-form.mjs","sources":["../../../projects/praxis-dynamic-form/src/lib/utils/normalize-date-arrays.ts","../../../projects/praxis-dynamic-form/src/lib/utils/section-header.utils.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/canvas-toolbar/canvas-toolbar.component.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/canvas-toolbar/canvas-toolbar.component.html","../../../projects/praxis-dynamic-form/src/lib/components/praxis-form-actions/praxis-form-actions.component.ts","../../../projects/praxis-dynamic-form/src/lib/components/praxis-form-actions/praxis-form-actions.component.html","../../../projects/praxis-dynamic-form/src/lib/utils/metadata-mappers.ts","../../../projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts","../../../projects/praxis-dynamic-form/src/lib/ai/form-ai-catalog.ts","../../../projects/praxis-dynamic-form/src/lib/ai/form-ai.adapter.ts","../../../projects/praxis-dynamic-form/src/lib/utils/normalize-form-config.ts","../../../projects/praxis-dynamic-form/src/lib/dynamic-form-editor-capability.ts","../../../projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.i18n.ts","../../../projects/praxis-dynamic-form/src/lib/services/form-layout.service.ts","../../../projects/praxis-dynamic-form/src/lib/services/form-context.service.ts","../../../projects/praxis-dynamic-form/src/lib/utils/rule-property.utils.ts","../../../projects/praxis-dynamic-form/src/lib/services/form-rules.service.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/services/canvas-state.service.ts","../../../projects/praxis-dynamic-form/src/lib/services/dynamic-form-layout.service.ts","../../../projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.ts","../../../projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.html","../../../projects/praxis-dynamic-form/src/lib/services/form-config.service.ts","../../../projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/field-configurator.component.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/row-configurator.component.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/row-configurator.component.html","../../../projects/praxis-dynamic-form/src/lib/layout-editor/section-presets.registry.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/section-presets.defaults.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/section-preset-picker.component.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/apply-section-preset.util.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/section-configurator.component.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/section-configurator.component.html","../../../projects/praxis-dynamic-form/src/lib/layout-editor/layout-prefs.service.ts","../../../projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/behavior-editor/behavior-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/actions-editor/actions-editor.i18n.ts","../../../projects/praxis-dynamic-form/src/lib/action-authoring/global-action-authoring.util.ts","../../../projects/praxis-dynamic-form/src/lib/actions-editor/actions-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/messages-editor/messages-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/hooks-editor/hooks-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/utils/rule-converters.ts","../../../projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts","../../../projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.html","../../../projects/praxis-dynamic-form/src/lib/filter-form/praxis-filter-form.ts","../../../projects/praxis-dynamic-form/src/lib/filter-form/praxis-filter-form.html","../../../projects/praxis-dynamic-form/src/lib/filter-form/praxis-filter-form.metadata.ts","../../../projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.metadata.ts","../../../projects/praxis-dynamic-form/src/lib/utils/form-rule.utils.ts","../../../projects/praxis-dynamic-form/src/lib/settings-panel.providers.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/section-editor/section-editor.i18n.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/section-editor/section-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/row-editor/row-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/column-editor/column-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/field-editor/field-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/canvas/components/actions-editor/actions-editor.component.ts","../../../projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts","../../../projects/praxis-dynamic-form/src/public-api.ts","../../../projects/praxis-dynamic-form/src/praxisui-dynamic-form.ts"],"sourcesContent":["/**\n * Recursively converts arrays representing dates into ISO-8601 strings.\n * Arrays are expected in the form `[year, month, day, hour?, minute?, second?, millisecond?]`.\n * Non-date arrays and other values are returned untouched.\n */\nexport function normalizeDateArrays(data: any): any {\n if (Array.isArray(data)) {\n if (isDateArray(data)) {\n return formatDateArray(data);\n }\n return data.map((v) => normalizeDateArrays(v));\n }\n if (data && typeof data === 'object') {\n const result: Record<string, any> = {};\n for (const [key, value] of Object.entries(data)) {\n result[key] = normalizeDateArrays(value);\n }\n return result;\n }\n return data;\n}\n\nfunction isDateArray(arr: any[]): boolean {\n if (arr.length < 3 || arr.length > 7) return false;\n return (\n arr.every((n) => typeof n === 'number') && arr[0] >= 1000 && arr[0] <= 9999\n );\n}\n\nfunction pad(value: number, size: number): string {\n return String(value).padStart(size, '0');\n}\n\nfunction formatDateArray(arr: number[]): string {\n const [y, m, d, h = 0, min = 0, s = 0, ms = 0] = arr;\n const datePart = `${y}-${pad(m, 2)}-${pad(d, 2)}`;\n if (arr.length > 3) {\n const timePart = `${pad(h, 2)}:${pad(min, 2)}:${pad(s, 2)}`;\n return arr.length > 6\n ? `${datePart}T${timePart}.${pad(ms, 3)}`\n : `${datePart}T${timePart}`;\n }\n return datePart;\n}\n","import { FormSectionHeaderConfig } from '@praxisui/core';\n\nexport const SECTION_HEADER_INITIALS_MIN = 1;\nexport const SECTION_HEADER_INITIALS_MAX = 4;\nexport const SECTION_HEADER_INITIALS_DEFAULT = 2;\nexport const SECTION_HEADER_SIZE_DEFAULT: NonNullable<FormSectionHeaderConfig['size']> = 'md';\n\nexport function normalizeSectionHeaderMode(\n value: unknown,\n): FormSectionHeaderConfig['mode'] | undefined {\n return value === 'icon'\n || value === 'avatar-image'\n || value === 'avatar-initials'\n || value === 'auto'\n ? value\n : undefined;\n}\n\nexport function normalizeSectionHeaderEmptyState(\n value: unknown,\n): FormSectionHeaderConfig['emptyState'] | undefined {\n return value === 'fallback-icon'\n || value === 'placeholder-avatar'\n || value === 'none'\n ? value\n : undefined;\n}\n\nexport function normalizeSectionHeaderSize(\n value: unknown,\n): FormSectionHeaderConfig['size'] | undefined {\n return value === 'sm'\n || value === 'md'\n || value === 'lg'\n ? value\n : undefined;\n}\n\nexport function clampSectionHeaderInitialsMaxLength(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') return undefined;\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return undefined;\n return Math.max(\n SECTION_HEADER_INITIALS_MIN,\n Math.min(SECTION_HEADER_INITIALS_MAX, Math.trunc(numeric)),\n );\n}\n\nexport function deriveSectionHeaderInitials(\n value: unknown,\n maxLength?: number,\n): string | null {\n if (value == null) return null;\n const normalized = String(value).trim();\n if (!normalized) return null;\n const limit =\n clampSectionHeaderInitialsMaxLength(maxLength)\n ?? SECTION_HEADER_INITIALS_DEFAULT;\n const tokens = normalized.match(/[\\p{L}\\p{N}]+/gu) || [];\n if (!tokens.length) return null;\n if (tokens.length === 1) {\n return tokens[0].slice(0, limit).toUpperCase();\n }\n const initials = [tokens[0], tokens[tokens.length - 1]]\n .filter((token): token is string => typeof token === 'string' && token.length > 0)\n .map((token) => token.charAt(0).toUpperCase())\n .join('');\n return initials.slice(0, limit) || null;\n}\n\nexport function getSectionHeaderTextFieldCandidates(\n header?: FormSectionHeaderConfig,\n): string[] {\n return [\n header?.initialsSourceField,\n header?.altField,\n ].filter((value, index, self): value is string =>\n typeof value === 'string'\n && value.trim().length > 0\n && self.indexOf(value) === index,\n );\n}\n\nexport function sanitizeSectionHeaderConfig(\n raw: unknown,\n): Partial<FormSectionHeaderConfig> {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return {};\n }\n const input = raw as Record<string, unknown>;\n const normalized: Partial<FormSectionHeaderConfig> = {};\n const mode = normalizeSectionHeaderMode(input.mode);\n const emptyState = normalizeSectionHeaderEmptyState(input.emptyState);\n const size = normalizeSectionHeaderSize(input.size);\n const sourceField = normalizeOptionalString(input.sourceField);\n const initialsSourceField = normalizeOptionalString(input.initialsSourceField);\n const altField = normalizeOptionalString(input.altField);\n const fallbackIcon = normalizeOptionalString(input.fallbackIcon);\n const initialsMaxLength = clampSectionHeaderInitialsMaxLength(\n input.initialsMaxLength,\n );\n\n if (mode) normalized.mode = mode;\n if (sourceField) normalized.sourceField = sourceField;\n if (initialsSourceField) normalized.initialsSourceField = initialsSourceField;\n if (altField) normalized.altField = altField;\n if (fallbackIcon) normalized.fallbackIcon = fallbackIcon;\n if (emptyState) normalized.emptyState = emptyState;\n if (size && size !== SECTION_HEADER_SIZE_DEFAULT) normalized.size = size;\n if (\n initialsMaxLength !== undefined\n && initialsMaxLength !== SECTION_HEADER_INITIALS_DEFAULT\n ) {\n normalized.initialsMaxLength = initialsMaxLength;\n }\n\n return normalized;\n}\n\nexport function normalizeSectionHeaderConfig(\n raw: unknown,\n): FormSectionHeaderConfig | undefined {\n const sanitized = sanitizeSectionHeaderConfig(raw);\n const mode = sanitized.mode ?? 'icon';\n const hasAvatarConfig =\n mode !== 'icon'\n || !!sanitized.sourceField\n || !!sanitized.initialsSourceField\n || !!sanitized.altField\n || !!sanitized.fallbackIcon\n || !!sanitized.emptyState\n || sanitized.size !== undefined\n || sanitized.initialsMaxLength !== undefined;\n\n if (!hasAvatarConfig) return undefined;\n\n return {\n mode,\n ...(sanitized.sourceField ? { sourceField: sanitized.sourceField } : {}),\n ...(sanitized.initialsSourceField\n ? { initialsSourceField: sanitized.initialsSourceField }\n : {}),\n ...(sanitized.altField ? { altField: sanitized.altField } : {}),\n ...(sanitized.fallbackIcon ? { fallbackIcon: sanitized.fallbackIcon } : {}),\n ...(sanitized.emptyState ? { emptyState: sanitized.emptyState } : {}),\n ...(sanitized.size ? { size: sanitized.size } : {}),\n ...(sanitized.initialsMaxLength !== undefined\n ? { initialsMaxLength: sanitized.initialsMaxLength }\n : {}),\n };\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.trim();\n return normalized || undefined;\n}\n","import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CanvasElement, CanvasPathPart } from '../../models/canvas.models';\n\n@Component({\n selector: 'praxis-canvas-toolbar',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule],\n templateUrl: './canvas-toolbar.component.html',\n styleUrls: ['./canvas-toolbar.component.scss'],\n})\nexport class CanvasToolbarComponent {\n @Input() selectedElement: CanvasElement | null = null;\n @Output() editMetadata = new EventEmitter<void>();\n @Output() delete = new EventEmitter<void>();\n @Output() moveUp = new EventEmitter<void>();\n @Output() moveDown = new EventEmitter<void>();\n @Output() selectPath = new EventEmitter<CanvasPathPart>();\n /** Emite quando o usuário solicita fechar a toolbar (ESC). */\n @Output() requestClose = new EventEmitter<void>();\n\n /** Estado interno para animar o fechamento. */\n closing = false;\n private readonly closeAnimMs = 140; // manter em sincronia com o SCSS\n\n // Quick actions for field-level metadata\n @Output() toggleReadonly = new EventEmitter<void>();\n @Output() toggleRequired = new EventEmitter<void>();\n @Output() toggleHidden = new EventEmitter<void>();\n @Output() toggleDisabled = new EventEmitter<void>();\n\n // Derived state to simplify template logic and avoid strict template errors\n get selectedLastType(): CanvasPathPart['type'] | null {\n const path = this.selectedElement?.path;\n return path && path.length ? path[path.length - 1].type : null;\n }\n\n get isField(): boolean {\n return this.selectedLastType === 'field';\n }\n\n get isSection(): boolean {\n return this.selectedLastType === 'section';\n }\n\n get isColumn(): boolean {\n return this.selectedLastType === 'column';\n }\n\n // Contextual tooltip/aria-label for the config button\n get configTooltip(): string {\n switch (this.selectedLastType) {\n case 'section':\n return 'Configurar seção';\n case 'row':\n return 'Configurar linha';\n case 'column':\n return 'Configurar coluna';\n case 'field':\n return 'Configurar campo';\n default:\n return 'Configurar';\n }\n }\n\n // Icon getters for field quick actions\n get readonlyIcon(): string {\n const d = (this.selectedElement?.data as any) || {};\n return d.readonly || d.readOnly ? 'lock' : 'lock_open';\n }\n\n get requiredIcon(): string {\n const d = (this.selectedElement?.data as any) || {};\n return d.required ? 'star' : 'star_border';\n }\n\n get visibilityIcon(): string {\n const d = (this.selectedElement?.data as any) || {};\n // Show slashed eye when hidden\n return d.hidden ? 'visibility_off' : 'visibility';\n }\n\n get disabledIcon(): string {\n const d = (this.selectedElement?.data as any) || {};\n return d.disabled ? 'toggle_on' : 'toggle_off';\n }\n\n /** Fecha a toolbar com a tecla ESC quando o componente está visível (com animação). */\n @HostListener('document:keydown', ['$event'])\n onGlobalKeydown(ev: KeyboardEvent): void {\n if (ev.key === 'Escape' || ev.key === 'Esc') {\n this.triggerClose();\n }\n }\n\n /** Inicia animação de saída e emite o evento ao final. */\n triggerClose(): void {\n if (this.closing) return;\n this.closing = true;\n setTimeout(() => {\n this.requestClose.emit();\n }, this.closeAnimMs);\n }\n}\n","<div class=\"canvas-toolbar-container\" [class.closing]=\"closing\" role=\"toolbar\" aria-label=\"Toolbar de configuração do canvas\">\n <!-- Botão discreto para fechar a toolbar -->\n <button\n type=\"button\"\n class=\"toolbar-close\"\n mat-icon-button\n (click)=\"triggerClose()\"\n matTooltip=\"Fechar\"\n [matTooltipShowDelay]=\"300\"\n aria-label=\"Fechar toolbar\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <div class=\"toolbar-surface\">\n <!-- Breadcrumb em linha superior, discreto -->\n <div class=\"breadcrumb-row\">\n <div class=\"pfx-breadcrumb\" role=\"navigation\" aria-label=\"Caminho do formulário\">\n @for (part of selectedElement?.path; track part.type + part.name; let i = $index; let isLast = $last) {\n @if (!isLast) {\n <button\n type=\"button\"\n class=\"pfx-bc is-link breadcrumb-link\"\n (click)=\"selectPath.emit(part)\"\n [style.zIndex]=\"(selectedElement?.path?.length ?? 0) - i\"\n [attr.aria-current]=\"null\"\n >\n {{ part.name }}\n </button>\n } @else {\n <span\n class=\"pfx-bc is-active breadcrumb-current\"\n [style.zIndex]=\"(selectedElement?.path?.length ?? 0) - i\"\n aria-current=\"page\"\n >\n {{ part.name }}\n </span>\n }\n }\n </div>\n </div>\n\n <!-- Barra de ações separada em grupos lógicos -->\n <div class=\"actions-row\">\n @if (isSection) {\n <div class=\"action-group group-move\" aria-label=\"Mover\">\n <button type=\"button\" mat-icon-button (click)=\"moveUp.emit()\" matTooltip=\"Mover para cima\" [matTooltipShowDelay]=\"300\" aria-label=\"Mover para cima\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"moveDown.emit()\" matTooltip=\"Mover para baixo\" [matTooltipShowDelay]=\"300\" aria-label=\"Mover para baixo\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n }\n\n <!-- Configuração para qualquer elemento selecionado (seção/linha/coluna/campo) -->\n @if (selectedLastType && selectedLastType !== 'actions') {\n <div class=\"action-group group-config\" aria-label=\"Configuração\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"editMetadata.emit()\"\n [matTooltip]=\"configTooltip\"\n [matTooltipShowDelay]=\"300\"\n [attr.aria-label]=\"configTooltip\"\n >\n <mat-icon>tune</mat-icon>\n </button>\n </div>\n }\n\n @if (isField) {\n <!-- Visibilidade e estados -->\n <div class=\"action-group group-visibility\" aria-label=\"Visibilidade e estados\">\n <button type=\"button\" mat-icon-button (click)=\"toggleReadonly.emit()\" matTooltip=\"Alternar somente leitura\" [matTooltipShowDelay]=\"300\" aria-label=\"Alternar somente leitura\">\n <mat-icon>{{ readonlyIcon }}</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"toggleHidden.emit()\" matTooltip=\"Alternar visibilidade\" [matTooltipShowDelay]=\"300\" aria-label=\"Alternar visibilidade\">\n <mat-icon>{{ visibilityIcon }}</mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"toggleDisabled.emit()\" matTooltip=\"Alternar desabilitado\" [matTooltipShowDelay]=\"300\" aria-label=\"Alternar desabilitado\">\n <mat-icon>{{ disabledIcon }}</mat-icon>\n </button>\n </div>\n\n <!-- Validação / Obrigatório -->\n <div class=\"action-group group-validation\" aria-label=\"Validação\">\n <button type=\"button\" mat-icon-button (click)=\"toggleRequired.emit()\" matTooltip=\"Alternar obrigatório\" [matTooltipShowDelay]=\"300\" aria-label=\"Alternar obrigatório\">\n <mat-icon>{{ requiredIcon }}</mat-icon>\n </button>\n </div>\n }\n\n <!-- Ação destrutiva isolada -->\n <div class=\"action-group group-danger\" aria-label=\"Ações perigosas\">\n <button type=\"button\" mat-icon-button color=\"warn\" (click)=\"delete.emit()\" matTooltip=\"Remover\" [matTooltipShowDelay]=\"300\" aria-label=\"Remover\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormActionButton, FormConfig } from '@praxisui/core';\nimport { KeyboardShortcutService } from '@praxisui/dynamic-fields';\n\n/**\n * Payload emitted when a form action button is activated.\n */\nexport interface PraxisFormActionEvent {\n /** Identifier of the triggered action */\n actionId: string;\n /** Full button configuration for the triggered action */\n button: FormActionButton;\n /** Original DOM event that triggered the action */\n originalEvent: Event;\n}\n\n@Component({\n selector: 'praxis-form-actions',\n standalone: true,\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatMenuModule,\n PraxisIconDirective,\n ],\n templateUrl: './praxis-form-actions.component.html',\n styleUrls: ['./praxis-form-actions.component.scss'],\n})\nexport class PraxisFormActionsComponent implements OnChanges, OnDestroy {\n /** Configuration object describing form action buttons */\n @Input() actions?: FormConfig['actions'];\n /** Whether the actions are rendered inside an editorial visual context */\n @Input() editorialVisualContext = false;\n /** Whether the host form is currently submitting */\n @Input() isSubmitting = false;\n /** Whether the host form is currently valid */\n @Input() formIsValid = true;\n /** Optional error message displayed above the actions */\n @Input() submitError?: string | null;\n /** Identifier used when registering keyboard shortcuts */\n @Input() formId?: string;\n /** Overrides coming from runtime rules */\n @Input() actionOverrides?: Record<string, Record<string, any>>;\n\n /** Emitted whenever a form action button is triggered */\n @Output() action = new EventEmitter<PraxisFormActionEvent>();\n\n private shortcutDisposers: Array<() => void> = [];\n\n constructor(private shortcuts: KeyboardShortcutService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['actions'] || changes['formId']) {\n this.registerActionShortcuts();\n }\n }\n\n ngOnDestroy(): void {\n this.shortcutDisposers.forEach((d) => d());\n this.shortcutDisposers = [];\n }\n\n get formActionsClasses(): { [key: string]: boolean } {\n return {\n ['position-' + (this.actions?.position || 'right')]: true,\n ['orientation-' + (this.actions?.orientation || 'horizontal')]: true,\n ['spacing-' + (this.actions?.spacing || 'normal')]: true,\n 'mobile-menu-active': this.actions?.mobile?.collapseToMenu ?? false,\n sticky: !!this.actions?.sticky,\n 'with-divider': this.actions?.divider !== false,\n };\n }\n\n // Map for ngClass including optional container class\n get viewClassMap(): { [key: string]: boolean } {\n const base = this.formActionsClasses;\n const extra = (this.actions as any)?.containerClassName as string | undefined;\n return {\n ...base,\n 'editorial-visual-context': this.editorialVisualContext,\n ...(extra ? { [extra]: true } : {}),\n };\n }\n\n // Map configured color to Angular Material supported values\n getMatColor(btn: FormActionButton | undefined): 'primary' | 'accent' | 'warn' | undefined {\n if (!btn) return undefined;\n const c = String(btn.color || '').toLowerCase();\n switch (c) {\n case 'primary':\n return 'primary';\n case 'accent':\n case 'secondary':\n return 'accent';\n case 'warn':\n case 'danger':\n case 'error':\n return 'warn';\n case '':\n case 'basic':\n case 'none':\n default:\n return undefined;\n }\n }\n\n getActionButtons(): FormActionButton[] {\n const actions = this.actions;\n if (!actions) {\n return [\n {\n id: 'submit',\n label: 'ENVIAR',\n visible: true,\n type: 'submit' as const,\n color: 'primary' as const,\n },\n ].map((btn) => this.applyOverrides(btn));\n }\n\n const buttons: FormActionButton[] = [];\n\n const submitBtn: FormActionButton = {\n id: 'submit',\n type: 'submit' as const,\n color: 'primary' as const,\n ...actions.submit,\n visible: actions.submit?.visible ?? actions.showSaveButton !== false,\n label: actions.submitButtonLabel || actions.submit?.label || 'ENVIAR',\n };\n buttons.push(submitBtn);\n\n const cancelBtn: FormActionButton = {\n id: 'cancel',\n type: 'button' as const,\n color: 'basic' as const,\n ...actions.cancel,\n visible: actions.cancel?.visible ?? actions.showCancelButton !== false,\n label: actions.cancelButtonLabel || actions.cancel?.label || 'Cancel',\n };\n buttons.push(cancelBtn);\n\n const resetBtn: FormActionButton = {\n id: 'reset',\n type: 'reset' as const,\n color: 'basic' as const,\n ...actions.reset,\n visible: actions.reset?.visible ?? actions.showResetButton !== false,\n label: actions.resetButtonLabel || actions.reset?.label || 'Reset',\n };\n buttons.push(resetBtn);\n\n if (actions.custom) {\n buttons.push(...actions.custom);\n }\n\n return buttons.map((btn) => this.applyOverrides(btn));\n }\n\n getVisibleButtons(): FormActionButton[] {\n return this.getActionButtons()\n .filter((btn) => btn.visible !== false)\n .slice(0, 1);\n }\n\n getCollapsedButtons(): FormActionButton[] {\n return this.getActionButtons()\n .filter((btn) => btn.visible !== false)\n .slice(1);\n }\n\n isSplitLayout(): boolean {\n return (this.actions?.position || 'right') === 'split';\n }\n\n getPrimaryButtons(): FormActionButton[] {\n return this.getActionButtons().filter((button) =>\n button.visible !== false\n && !this.isSecondaryButton(button),\n );\n }\n\n getSecondaryButtons(): FormActionButton[] {\n return this.getActionButtons().filter((button) =>\n button.visible !== false\n && this.isSecondaryButton(button),\n );\n }\n\n onActionButtonClick(button: FormActionButton, event: Event): void {\n if (this.isSubmitting) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n const actionId = button.id || button.action;\n if (!actionId) return;\n\n if (button.type === 'submit') {\n event.preventDefault();\n event.stopPropagation();\n }\n\n this.action.emit({ actionId, button, originalEvent: event });\n }\n\n getButtonNgClass(button: FormActionButton): { [key: string]: boolean } {\n const className = (button as any).className as string | undefined;\n const variant = button.variant || 'raised';\n const tone = String(button.color || 'basic').toLowerCase();\n return {\n ...(className ? { [className]: true } : {}),\n ...(button.size ? { [`size-${button.size}`]: true } : {}),\n [`variant-${variant}`]: true,\n [`tone-${tone}`]: true,\n };\n }\n\n getButtonStyles(button: FormActionButton): Record<string, any> | null {\n const styles = (button as any).style as Record<string, any> | undefined;\n return styles && Object.keys(styles).length ? styles : null;\n }\n\n isActionButtonDisabled(button: FormActionButton): boolean {\n const submitGuard = button.type === 'submit' && !this.formIsValid;\n return this.isSubmitting || !!button.disabled || !!button.loading || submitGuard;\n }\n\n private applyOverrides(button: FormActionButton): FormActionButton {\n const actionId = button.id || button.action;\n const override: any = actionId ? this.actionOverrides?.[actionId] : undefined;\n if (!override) return button;\n const merged: FormActionButton = {\n ...button,\n ...(override.label !== undefined ? { label: override.label } : {}),\n ...(override.icon !== undefined ? { icon: override.icon } : {}),\n ...(override.visible !== undefined ? { visible: override.visible } : {}),\n ...(override.disabled !== undefined ? { disabled: override.disabled } : {}),\n ...(override.loading !== undefined ? { loading: override.loading } : {}),\n ...(override.tooltip !== undefined ? { tooltip: override.tooltip } : {}),\n ...(override.color !== undefined ? { color: override.color } : {}),\n ...(override.variant !== undefined ? { variant: override.variant } : {}),\n ...(override.size !== undefined ? { size: override.size } : {}),\n ...(override.className !== undefined ? { className: override.className } : {}),\n ...(override.style !== undefined ? { style: override.style } : {}),\n };\n return merged;\n }\n\n private registerActionShortcuts(): void {\n this.shortcutDisposers.forEach((d) => d());\n this.shortcutDisposers = [];\n const buttons = this.getActionButtons();\n buttons.forEach((btn) => {\n const shortcut =\n btn.shortcut ||\n (btn.id === 'submit'\n ? 'ctrl+s'\n : btn.id === 'cancel'\n ? 'esc'\n : btn.id === 'reset'\n ? 'ctrl+shift+r'\n : undefined);\n if (!shortcut) return;\n const dispose = this.shortcuts.registerShortcut(shortcut, {\n callback: () => {\n const actionId = btn.id || btn.action;\n if (!actionId) return;\n this.action.emit({\n actionId,\n button: btn,\n originalEvent: new KeyboardEvent('shortcut') as any,\n });\n },\n componentId: this.formId || 'dynamic-form',\n priority: 10,\n });\n this.shortcutDisposers.push(dispose);\n });\n }\n\n private isSecondaryButton(button: FormActionButton): boolean {\n const actionId = (button.id || button.action || '').toLowerCase();\n return actionId === 'cancel' || actionId === 'reset';\n }\n}\n","<div\n class=\"form-actions\"\n [ngClass]=\"viewClassMap\"\n [ngStyle]=\"actions?.containerStyles\"\n>\n @if (submitError) {\n <div class=\"alert alert--error\" role=\"alert\" aria-live=\"polite\">\n <mat-icon class=\"alert__icon\" aria-hidden=\"true\">error_outline</mat-icon>\n <div>\n <h4 class=\"alert__title\">Erro ao salvar</h4>\n <p class=\"alert__text\">{{ submitError }}</p>\n </div>\n </div>\n }\n <div class=\"desktop-actions\">\n @if (isSplitLayout()) {\n <div class=\"desktop-actions-group secondary-group\">\n @for (button of getSecondaryButtons(); track button.id) {\n @if (button.visible) {\n @switch (button.variant || 'raised') {\n @case ('stroked') {\n <button mat-stroked-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('flat') {\n <button mat-flat-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('fab') {\n <button mat-fab\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @default {\n <button mat-raised-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n }\n }\n }\n </div>\n <div class=\"desktop-actions-group primary-group\">\n @for (button of getPrimaryButtons(); track button.id) {\n @if (button.visible) {\n @switch (button.variant || 'raised') {\n @case ('stroked') {\n <button mat-stroked-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('flat') {\n <button mat-flat-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('fab') {\n <button mat-fab\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @default {\n <button mat-raised-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n }\n }\n }\n </div>\n } @else {\n @for (button of getActionButtons(); track button.id) {\n @if (button.visible) {\n @switch (button.variant || 'raised') {\n @case ('stroked') {\n <button mat-stroked-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('flat') {\n <button mat-flat-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('fab') {\n <button mat-fab\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @default {\n <button mat-raised-button\n [type]=\"button.type || 'button'\"\n [color]=\"getMatColor(button)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [attr.aria-busy]=\"button.loading ? 'true' : null\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n }\n }\n }\n }\n </div>\n @if (actions?.mobile?.collapseToMenu) {\n <div class=\"mobile-actions\">\n @for (button of getVisibleButtons(); track button.id) {\n @switch (button.variant || 'raised') {\n @case ('stroked') {\n <button mat-stroked-button [type]=\"button.type || 'button'\" [color]=\"getMatColor(button)\" [disabled]=\"isActionButtonDisabled(button)\" [attr.aria-busy]=\"button.loading ? 'true' : null\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\" [ngClass]=\"getButtonNgClass(button)\" [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('flat') {\n <button mat-flat-button [type]=\"button.type || 'button'\" [color]=\"getMatColor(button)\" [disabled]=\"isActionButtonDisabled(button)\" [attr.aria-busy]=\"button.loading ? 'true' : null\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\" [ngClass]=\"getButtonNgClass(button)\" [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon [praxisIcon]=\"button.icon\" aria-hidden=\"true\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @case ('fab') {\n <button mat-fab [type]=\"button.type || 'button'\" [color]=\"getMatColor(button)\" [disabled]=\"isActionButtonDisabled(button)\" [attr.aria-busy]=\"button.loading ? 'true' : null\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\" [ngClass]=\"getButtonNgClass(button)\" [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon aria-hidden=\"true\">{{ button.icon }}</mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n @default {\n <button mat-raised-button [type]=\"button.type || 'button'\" [color]=\"getMatColor(button)\" [disabled]=\"isActionButtonDisabled(button)\" [attr.aria-busy]=\"button.loading ? 'true' : null\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\" [ngClass]=\"getButtonNgClass(button)\" [ngStyle]=\"getButtonStyles(button)\">\n @if (button.loading) { <mat-icon class=\"loading-icon\" aria-hidden=\"true\">autorenew</mat-icon> }\n @if (button.icon && !button.loading) { <mat-icon aria-hidden=\"true\">{{ button.icon }}</mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n }\n }\n @if (getCollapsedButtons().length > 0) {\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"actionsMenu\"\n aria-label=\"More actions\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #actionsMenu=\"matMenu\">\n @for (button of getCollapsedButtons(); track button.id) {\n <button\n mat-menu-item\n (click)=\"onActionButtonClick(button, $event)\"\n [disabled]=\"isActionButtonDisabled(button)\"\n [ngClass]=\"getButtonNgClass(button)\"\n [ngStyle]=\"getButtonStyles(button)\"\n >\n @if (button.icon) { <mat-icon [praxisIcon]=\"button.icon\"></mat-icon> }\n <span>{{ button.label }}</span>\n </button>\n }\n </mat-menu>\n }\n </div>\n }\n</div>\n","// Dedicated metadata mappers for specific control types\n// Focused on robust, type-safe coercions and minimal side effects\n\nexport function withRatingMetadata(base: any, patch: any): any {\n const fm: any = { ...(base || {}) };\n const p = patch || {};\n try { (console.log || console.debug)('[PDF] mapRatingMetadata: input', { keys: Object.keys(p || {}), values: { allowHalf: p.allowHalf, precision: p.precision, ratingColor: p.ratingColor, outlineColor: p.outlineColor } }); } catch {}\n const toNum = (v: any) =>\n v === '' || v === null || v === undefined\n ? undefined\n : typeof v === 'number'\n ? v\n : Number(v);\n\n // Quantidade de itens\n if (p.max !== undefined) fm.max = toNum(p.max);\n\n // allowHalf → precision sync\n if (p.allowHalf !== undefined) {\n fm.allowHalf = !!p.allowHalf;\n fm.precision = fm.allowHalf ? 0.5 : 1;\n }\n if (p.precision !== undefined) fm.precision = toNum(p.precision);\n\n // Seleção e tamanho\n if (p.selection !== undefined) fm.selection = p.selection;\n if (p.size !== undefined) fm.size = p.size;\n\n // Ícones\n if (p.icon !== undefined) fm.icon = p.icon;\n if (p.emptyIcon !== undefined) fm.emptyIcon = p.emptyIcon;\n if (p.svgIcon !== undefined) fm.svgIcon = p.svgIcon;\n if (p.svgIconOutline !== undefined) fm.svgIconOutline = p.svgIconOutline;\n\n // Cores (aceita tema ou CSS/hex)\n if (p.ratingColor !== undefined) fm.ratingColor = p.ratingColor;\n if (p.outlineColor !== undefined) fm.outlineColor = p.outlineColor;\n\n // Flags/A11y\n if (p.readonly !== undefined) fm.readonly = !!p.readonly;\n if (p.disabled !== undefined) fm.disabled = !!p.disabled;\n if (p.tabIndex !== undefined) fm.tabIndex = toNum(p.tabIndex);\n if (p.ariaLabel !== undefined) fm.ariaLabel = p.ariaLabel;\n\n try { (console.log || console.debug)('[PDF] mapRatingMetadata: output', { values: { allowHalf: fm.allowHalf, precision: fm.precision, ratingColor: fm.ratingColor, outlineColor: fm.outlineColor } }); } catch {}\n return fm;\n}\n","/**\n * Catálogo de capacidades do PraxisDynamicForm para uso da IA.\n * Paths seguem o schema do FormConfig (layout + metadados de campos).\n */\n\nimport { RULE_PROPERTY_SCHEMA, RulePropertyDefinition } from '@praxisui/core';\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n fields: true;\n rules: true;\n api: true;\n messages: true;\n metadata: true;\n hooks: true;\n actions: true;\n editorial: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\n\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nenum ColumnAlign { Start = 'start', Center = 'center', End = 'end', Stretch = 'stretch' }\nenum FormActionsLayoutPosition { Left = 'left', Center = 'center', Right = 'right', Justified = 'justified', Split = 'split' }\nenum FormActionsLayoutMobilePosition { Left = 'left', Center = 'center', Right = 'right', Justified = 'justified' }\nenum FormActionsLayoutOrientation { Horizontal = 'horizontal', Vertical = 'vertical' }\nenum FormActionsLayoutSpacing { Compact = 'compact', Normal = 'normal', Spacious = 'spacious' }\nenum FormActionsLayoutPlacement { InsideLastSection = 'insideLastSection', AfterSections = 'afterSections', Top = 'top' }\nenum FormActionButtonColor { Primary = 'primary', Accent = 'accent', Warn = 'warn', Basic = 'basic' }\nenum FormActionButtonSize { Small = 'small', Medium = 'medium', Large = 'large' }\nenum FormActionButtonVariant { Raised = 'raised', Stroked = 'stroked', Flat = 'flat', Fab = 'fab' }\nenum FormActionButtonType { Button = 'button', Submit = 'submit', Reset = 'reset' }\nenum FormRuleTargetType { Field = 'field', Section = 'section', Action = 'action', Row = 'row', Column = 'column' }\nenum FormRuleContext { Visibility = 'visibility', ReadOnly = 'readOnly', Style = 'style', Validation = 'validation', Notification = 'notification' }\nenum FieldAppearance { Fill = 'fill', Outline = 'outline' }\nenum FieldFloatLabel { Auto = 'auto', Always = 'always', Never = 'never' }\nenum FieldHintPosition { Start = 'start', End = 'end' }\nenum SectionTitleStyle { TitleLarge = 'titleLarge', TitleMedium = 'titleMedium', TitleSmall = 'titleSmall', HeadlineSmall = 'headlineSmall' }\nenum SectionDescriptionStyle { BodyLarge = 'bodyLarge', BodyMedium = 'bodyMedium', BodySmall = 'bodySmall' }\n\nconst ENUMS = {\n iconPosition: ['start', 'end'],\n iconSize: ['small', 'medium', 'large'],\n validationMode: ['immediate', 'blur', 'submit'],\n dependencyMergeStrategy: ['replace', 'merge'],\n dependencyLoadOnChange: ['respectLoadOn', 'immediate', 'manual'],\n textTransformApply: ['displayOnly', 'saveOnly', 'both'],\n visibleIn: ['form', 'filter', 'table', 'dialog'],\n columnAlign: Object.values(ColumnAlign),\n formActionsLayoutPosition: Object.values(FormActionsLayoutPosition),\n formActionsLayoutMobilePosition: Object.values(FormActionsLayoutMobilePosition),\n formActionsLayoutOrientation: Object.values(FormActionsLayoutOrientation),\n formActionsLayoutSpacing: Object.values(FormActionsLayoutSpacing),\n formActionsLayoutPlacement: Object.values(FormActionsLayoutPlacement),\n formActionButtonColor: Object.values(FormActionButtonColor),\n formActionButtonSize: Object.values(FormActionButtonSize),\n formActionButtonVariant: Object.values(FormActionButtonVariant),\n formActionButtonType: Object.values(FormActionButtonType),\n formRuleTargetType: Object.values(FormRuleTargetType),\n formRuleContext: Object.values(FormRuleContext),\n fieldAppearance: Object.values(FieldAppearance),\n fieldFloatLabel: Object.values(FieldFloatLabel),\n fieldHintPosition: Object.values(FieldHintPosition),\n sectionTitleStyle: Object.values(SectionTitleStyle),\n sectionDescriptionStyle: Object.values(SectionDescriptionStyle),\n editorialContentFormat: ['plain', 'markdown'],\n};\n\n// Helper to generate capabilities for FormLayoutRule properties\nfunction generateRulePropertyCapabilities(\n targetType: FormRuleTargetType,\n properties: RulePropertyDefinition[],\n): Capability[] {\n const result: Capability[] = [];\n properties.forEach((prop) => {\n const capability: Capability = {\n path: `formRules[].effect.properties.${prop.name}`,\n category: 'rules',\n valueKind: prop.type === 'object' ? 'object' : prop.type === 'enum' ? 'enum' : prop.type === 'boolean' ? 'boolean' : prop.type === 'number' ? 'number' : 'string',\n description: `Propriedade '${prop.label}' aplicada ao ${targetType}.`,\n example: prop.type === 'boolean' ? 'true' : prop.type === 'number' ? '123' : prop.type === 'enum' ? (prop.enumValues?.[0]?.value || 'valor') : 'valor',\n safetyNotes: prop.type === 'object' ? 'O objeto deve seguir o schema esperado pelo componente alvo.' : undefined,\n };\n if (prop.enumValues) {\n capability.allowedValues = prop.enumValues.map(ev => ev.value);\n }\n result.push(capability);\n });\n\n return result;\n}\n\n// Generate capabilities for propertiesWhenFalse as well\nfunction generateRulePropertyWhenFalseCapabilities(\n targetType: FormRuleTargetType,\n properties: RulePropertyDefinition[],\n): Capability[] {\n const result: Capability[] = [];\n properties.forEach((prop) => {\n const capability: Capability = {\n path: `formRules[].effect.propertiesWhenFalse.${prop.name}`,\n category: 'rules',\n valueKind: prop.type === 'object' ? 'object' : prop.type === 'enum' ? 'enum' : prop.type === 'boolean' ? 'boolean' : prop.type === 'number' ? 'number' : 'string',\n description: `Propriedade '${prop.label}' aplicada ao ${targetType} quando a condição é falsa.`,\n example: prop.type === 'boolean' ? 'false' : prop.type === 'number' ? '0' : prop.type === 'enum' ? (prop.enumValues?.[0]?.value || 'valor') : 'valor',\n safetyNotes: prop.type === 'object' ? 'O objeto deve seguir o schema esperado pelo componente alvo.' : undefined,\n };\n if (prop.enumValues) {\n capability.allowedValues = prop.enumValues.map(ev => ev.value);\n }\n result.push(capability);\n });\n\n return result;\n}\n\nexport const FORM_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.9', // Adds section header actions and richer section authoring affordances.\n enums: ENUMS,\n targets: [\n 'praxis-dynamic-form',\n 'praxis-filter-form',\n 'praxis-filter-form-dialog-host',\n 'praxis-dynamic-form-dialog-host',\n 'praxis-dynamic-form-config-editor',\n 'praxis-layout-editor',\n 'praxis-section-configurator',\n 'praxis-row-configurator',\n 'praxis-field-configurator',\n 'praxis-behavior-editor',\n 'praxis-rules-editor',\n 'praxis-section-preset-picker'\n ],\n notes: [\n 'Este catálogo foca em configurações de alto nível (macro) do formulário e regras.',\n 'Detalhes de propriedades internas de campos individuais devem ser tratados em catálogos de microcomponentes.',\n 'Referencie campos pelo name em fieldMetadata[].name.',\n 'Para hierarquia do layout use sections[].rows[].columns[].fields (campos por coluna).',\n 'POLICY: Ao alterar arrays de layout (sections, rows, columns), o patch deve ser tratado como merge/append, não replace total.',\n 'Campos function, Specifications complexas ou handlers (ex: hooks, conditionalRequired, transformValueFunction) NÃO são serializáveis e exigem revisão de segurança ou devem ser fornecidos pelo host.',\n 'Expressões string (e.g., em rules.condition) são perigosas e devem ser parseadas com segurança. Não utilize JS puro. Prefira um DSL simples e validado.',\n 'Paths marcados como \"critical\" exigem confirmação explícita antes de alteração.',\n 'A surface editorial do FormConfig usa formBlocksBefore, formBlocksBeforeActions e formBlocksAfter com WidgetDefinition e não participa do formData.',\n 'formBlocksBeforeActions representa um slot semântico após as seções e antes da área principal de ações, preservando compatibilidade de formBlocksAfter.',\n ],\n capabilities: [\n // =============================================================================\n // FORM CONFIG - META\n // =============================================================================\n {\n path: 'metadata.version',\n category: 'metadata',\n valueKind: 'string',\n description: 'Versão da configuração do formulário para controle de migração.',\n intentExamples: ['atualizar versão do form'],\n },\n {\n path: 'metadata.source',\n category: 'metadata',\n valueKind: 'enum',\n allowedValues: ['local', 'server', 'default'],\n description: 'Origem da configuração do formulário.',\n },\n {\n path: 'metadata.lastUpdated',\n category: 'metadata',\n valueKind: 'string',\n description: 'Timestamp da última atualização da configuração (ISO-8601).',\n example: '2024-01-31T10:15:00Z',\n safetyNotes: 'Valor gerado pelo host/servidor. Evite alterar manualmente.',\n },\n {\n path: 'metadata.schemaId',\n category: 'metadata',\n valueKind: 'string',\n description: 'ID do schema de origem para reconciliação no servidor.',\n safetyNotes: 'Não deve ser manipulado diretamente pela IA sem contexto do backend.',\n },\n {\n path: 'metadata.schemaContext',\n category: 'metadata',\n valueKind: 'object',\n description: 'Contexto do schema usado para compor o formulário.',\n safetyNotes: 'Preenchido pelo backend. Não alterar sem coordenação com o servidor.',\n },\n {\n path: 'metadata.schemaContext.path',\n category: 'metadata',\n valueKind: 'string',\n description: 'Path do schema de origem.',\n },\n {\n path: 'metadata.schemaContext.operation',\n category: 'metadata',\n valueKind: 'string',\n description: 'Operação do schema (ex.: \"get\", \"post\").',\n },\n {\n path: 'metadata.schemaContext.schemaType',\n category: 'metadata',\n valueKind: 'enum',\n allowedValues: ['response', 'request'],\n description: 'Tipo do schema (response/request).',\n },\n {\n path: 'metadata.schemaContext.internal',\n category: 'metadata',\n valueKind: 'boolean',\n description: 'Indica se o schema é interno.',\n },\n {\n path: 'metadata.schemaContext.tenant',\n category: 'metadata',\n valueKind: 'string',\n description: 'Tenant do schema (se aplicável).',\n },\n {\n path: 'metadata.schemaContext.locale',\n category: 'metadata',\n valueKind: 'string',\n description: 'Locale do schema (se aplicável).',\n },\n {\n path: 'metadata.serverHash',\n category: 'metadata',\n valueKind: 'string',\n description: 'Hash dos dados do servidor para detecção de mudanças.',\n safetyNotes: 'Valor gerado internamente, não deve ser alterado manualmente.',\n },\n {\n path: 'metadata.customizations',\n category: 'metadata',\n valueKind: 'array',\n description: 'Log de customizações manuais aplicadas ao formulário.',\n safetyNotes: 'Usado para auditoria, não deve ser gerado pela IA.',\n },\n\n // =============================================================================\n // FORM CONFIG - FIELD METADATA (Referência)\n // =============================================================================\n {\n path: 'fieldMetadata',\n category: 'fields',\n valueKind: 'array',\n description: 'Array de metadados dos campos. Usado para referenciar a configuração de campos.',\n critical: true,\n safetyNotes: 'Consuma FieldMetadata via catálogo base (field-metadata-ai-capabilities); use controlType para escolher overlay de microcomponente. Não altere props internas aqui sem consultar o catálogo base.',\n intentExamples: ['adicionar novo campo ao formulário', 'remover campo de endereço'],\n },\n {\n path: 'fieldMetadata[]',\n category: 'fields',\n valueKind: 'object',\n description: 'Item de metadados do campo (FieldMetadata).',\n critical: true,\n safetyNotes: 'Consuma FieldMetadata via catálogo base (field-metadata-ai-capabilities); use controlType para escolher overlay de microcomponente. Não altere props internas aqui sem consultar o catálogo base.',\n },\n\n // =============================================================================\n // FORM CONFIG - EDITORIAL HOSTING\n // =============================================================================\n {\n path: 'editorialContext',\n category: 'editorial',\n valueKind: 'object',\n description: 'Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.',\n safetyNotes: 'Trate como objeto imutavel; hosts devem trocar a referencia ao atualizar valores.',\n },\n {\n path: 'editorialContext.[token]',\n category: 'editorial',\n valueKind: 'string',\n description: 'Valor simples exposto no contexto editorial.',\n safetyNotes: 'Use strings/valores serializaveis. Evite objetos profundos sem contrato claro no host.',\n },\n {\n path: 'formBlocksBefore',\n category: 'editorial',\n valueKind: 'array',\n description: 'Lista de WidgetDefinition renderizados antes do formulario.',\n safetyNotes: 'Blocos editoriais nao entram em formData.',\n },\n {\n path: 'formBlocksBefore[]',\n category: 'editorial',\n valueKind: 'object',\n description: 'WidgetDefinition editorial hospedado antes do formulario.',\n },\n {\n path: 'formBlocksBefore[].id',\n category: 'editorial',\n valueKind: 'string',\n description: 'ID do widget registrado no ComponentMetadataRegistry.',\n safetyNotes: 'No ciclo fundacional, placeholders atuais do wizard podem ser usados enquanto os widgets definitivos nao existem.',\n },\n {\n path: 'formBlocksBefore[].inputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Inputs serializaveis do widget editorial.',\n },\n {\n path: 'formBlocksBefore[].outputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Mapeamento de outputs do widget editorial.',\n safetyNotes: 'Use string \"emit\" para reencaminhar saida via widgetEvent quando aplicavel.',\n },\n {\n path: 'formBlocksBefore[].bindingOrder',\n category: 'editorial',\n valueKind: 'array',\n description: 'Ordem explicita de binding dos inputs do widget editorial.',\n },\n {\n path: 'formBlocksBeforeActions',\n category: 'editorial',\n valueKind: 'array',\n description: 'Lista de WidgetDefinition renderizados depois das seções e antes da área principal de ações.',\n safetyNotes: 'Ideal para blocos contextuais próximos ao preenchimento, sem contaminar formData.',\n },\n {\n path: 'formBlocksBeforeActions[]',\n category: 'editorial',\n valueKind: 'object',\n description: 'WidgetDefinition editorial hospedado antes da área principal de ações.',\n },\n {\n path: 'formBlocksBeforeActions[].id',\n category: 'editorial',\n valueKind: 'string',\n description: 'ID do widget registrado no ComponentMetadataRegistry.',\n },\n {\n path: 'formBlocksBeforeActions[].inputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Inputs serializaveis do widget editorial.',\n },\n {\n path: 'formBlocksBeforeActions[].outputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Mapeamento de outputs do widget editorial.',\n safetyNotes: 'Use string \"emit\" para reencaminhar saida via widgetEvent quando aplicavel.',\n },\n {\n path: 'formBlocksBeforeActions[].bindingOrder',\n category: 'editorial',\n valueKind: 'array',\n description: 'Ordem explicita de binding dos inputs do widget editorial.',\n },\n {\n path: 'formBlocksAfter',\n category: 'editorial',\n valueKind: 'array',\n description: 'Lista de WidgetDefinition renderizados depois do formulario inteiro, incluindo a área principal de ações.',\n safetyNotes: 'Blocos editoriais nao entram em formData e este slot é mais adequado para conteúdo de fechamento.',\n },\n {\n path: 'formBlocksAfter[]',\n category: 'editorial',\n valueKind: 'object',\n description: 'WidgetDefinition editorial hospedado depois do formulario.',\n },\n {\n path: 'formBlocksAfter[].id',\n category: 'editorial',\n valueKind: 'string',\n description: 'ID do widget registrado no ComponentMetadataRegistry.',\n safetyNotes: 'No ciclo fundacional, placeholders atuais do wizard podem ser usados enquanto os widgets definitivos nao existem.',\n },\n {\n path: 'formBlocksAfter[].inputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Inputs serializaveis do widget editorial.',\n },\n {\n path: 'formBlocksAfter[].outputs',\n category: 'editorial',\n valueKind: 'object',\n description: 'Mapeamento de outputs do widget editorial.',\n safetyNotes: 'Use string \"emit\" para reencaminhar saida via widgetEvent quando aplicavel.',\n },\n {\n path: 'formBlocksAfter[].bindingOrder',\n category: 'editorial',\n valueKind: 'array',\n description: 'Ordem explicita de binding dos inputs do widget editorial.',\n },\n\n // =============================================================================\n // FORM CONFIG - SECTIONS & LAYOUT\n // =============================================================================\n {\n path: 'sections[].id',\n category: 'layout',\n valueKind: 'string',\n description: 'ID único da seção.',\n critical: true,\n safetyNotes: 'Alterar o ID pode quebrar referências de regras ou layout.',\n },\n {\n path: 'sections[].title',\n category: 'layout',\n valueKind: 'string',\n description: 'Título exibido para cada seção do formulário.',\n intentExamples: ['renomear seção de endereços', 'colocar título em maiúsculas'],\n },\n {\n path: 'sections[].description',\n category: 'layout',\n valueKind: 'string',\n description: 'Descrição auxiliar exibida abaixo do título da seção.',\n intentExamples: ['adicionar descrição da seção', 'explicar uso da seção'],\n },\n {\n path: 'sections[].icon',\n category: 'layout',\n valueKind: 'string',\n description: 'Nome do ícone (Material Icons) para o cabeçalho da seção.',\n intentExamples: ['colocar ícone de casa na seção de endereço'],\n },\n {\n path: 'sections[].sectionHeader',\n category: 'layout',\n valueKind: 'object',\n description: 'Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.',\n safetyNotes: 'Prefira definir `sourceField` para imagem, `initialsSourceField` para iniciais e `emptyState` neutro em fluxos create.',\n },\n {\n path: 'sections[].sectionHeader.mode',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ['icon', 'avatar-image', 'avatar-initials', 'auto'],\n description: 'Estratégia visual do header da seção.',\n },\n {\n path: 'sections[].sectionHeader.sourceField',\n category: 'layout',\n valueKind: 'string',\n description: 'Campo do formulário usado como origem da imagem do avatar.',\n },\n {\n path: 'sections[].sectionHeader.initialsSourceField',\n category: 'layout',\n valueKind: 'string',\n description: 'Campo textual usado para derivar iniciais do avatar.',\n },\n {\n path: 'sections[].sectionHeader.altField',\n category: 'layout',\n valueKind: 'string',\n description: 'Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.',\n },\n {\n path: 'sections[].sectionHeader.fallbackIcon',\n category: 'layout',\n valueKind: 'string',\n description: 'Ícone opcional usado quando o avatar dinâmico estiver vazio ou inválido.',\n },\n {\n path: 'sections[].sectionHeader.emptyState',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ['fallback-icon', 'placeholder-avatar', 'none'],\n description: 'Comportamento do header quando os campos de origem ainda não possuem valor.',\n },\n {\n path: 'sections[].sectionHeader.size',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ['sm', 'md', 'lg'],\n description: 'Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.',\n },\n {\n path: 'sections[].sectionHeader.initialsMaxLength',\n category: 'layout',\n valueKind: 'number',\n description: 'Máximo de letras exibidas no avatar textual.',\n },\n {\n path: 'sections[].collapsible',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Define se a seção pode ser colapsada/expandida pelo usuário.',\n intentExamples: ['permitir fechar a seção de anexos', 'tornar seção fixa'],\n },\n {\n path: 'sections[].collapsed',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.',\n dependsOn: 'sections[].collapsible',\n intentExamples: ['recolher seção de endereços por padrão', 'expandir dados básicos ao carregar'],\n },\n {\n path: 'sections[].gapBottom',\n category: 'layout',\n valueKind: 'number',\n description: 'Espaçamento vertical (em px) após a seção.',\n intentExamples: ['aumentar espaço depois da seção'],\n },\n {\n path: 'sections[].titleGapBottom',\n category: 'layout',\n valueKind: 'number',\n description: 'Espaçamento vertical (em px) abaixo do título da seção.',\n },\n {\n path: 'sections[].descriptionGapBottom',\n category: 'layout',\n valueKind: 'number',\n description: 'Espaçamento vertical (em px) abaixo da descrição da seção.',\n },\n {\n path: 'sections[].appearance',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ['card', 'plain', 'step'],\n description: 'Preset visual do container/cabeçalho da seção.',\n intentExamples: ['deixar a seção como step', 'remover card da seção'],\n },\n {\n path: 'sections[].stepLabel',\n category: 'content',\n valueKind: 'string',\n description: 'Rótulo curto do passo exibido antes do título da seção.',\n intentExamples: ['mostrar etapa 2', 'exibir badge numérico na seção'],\n },\n {\n path: 'sections[].titleStyle',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.sectionTitleStyle,\n description: 'Preset de tipografia para o título da seção.',\n intentExamples: ['título da seção maior'],\n },\n {\n path: 'sections[].descriptionStyle',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.sectionDescriptionStyle,\n description: 'Preset de tipografia para a descrição da seção.',\n intentExamples: ['descrição da seção em texto menor'],\n },\n {\n path: 'sections[].titleColor',\n category: 'appearance',\n valueKind: 'string',\n description: 'Cor do título da seção (CSS color ou token).',\n },\n {\n path: 'sections[].descriptionColor',\n category: 'appearance',\n valueKind: 'string',\n description: 'Cor da descrição da seção (CSS color ou token).',\n },\n {\n path: 'sections[].headerAlign',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ['start', 'center'],\n description: 'Alinhamento horizontal do conteúdo do cabeçalho da seção.',\n },\n {\n path: 'sections[].headerTooltip',\n category: 'layout',\n valueKind: 'string',\n description: 'Texto de tooltip para o cabeçalho da seção.',\n },\n {\n path: 'sections[].headerActions',\n category: 'layout',\n valueKind: 'array',\n description: 'Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.',\n safetyNotes: 'Prefira IDs estáveis porque essas ações podem ser alvo de regras e integrações do host.',\n },\n {\n path: 'sections[].headerActions[].id',\n category: 'layout',\n valueKind: 'string',\n description: 'ID estável da ação de cabeçalho da seção.',\n },\n {\n path: 'sections[].headerActions[].label',\n category: 'layout',\n valueKind: 'string',\n description: 'Label acessível usada em tooltip e aria-label da ação.',\n },\n {\n path: 'sections[].headerActions[].icon',\n category: 'layout',\n valueKind: 'string',\n description: 'Ícone renderizado na ação do cabeçalho da seção.',\n },\n {\n path: 'sections[].headerActions[].action',\n category: 'layout',\n valueKind: 'string',\n description: 'Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.',\n },\n {\n path: 'sections[].headerActions[].tooltip',\n category: 'layout',\n valueKind: 'string',\n description: 'Tooltip opcional da ação; se ausente, o runtime usa a label.',\n },\n {\n path: 'sections[].headerActions[].color',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ['primary', 'accent', 'warn', 'basic'],\n description: 'Tom visual da ação do cabeçalho da seção.',\n },\n {\n path: 'sections[].headerActions[].visible',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Controla a visibilidade da ação do cabeçalho da seção.',\n },\n {\n path: 'sections[].headerActions[].disabled',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Controla o estado desabilitado da ação do cabeçalho da seção.',\n },\n {\n path: 'sections[].className',\n category: 'appearance',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao container da seção.',\n },\n {\n path: 'sections[].styles',\n category: 'appearance',\n valueKind: 'object',\n description: 'Estilos inline aplicados ao container da seção.',\n },\n\n {\n path: 'sections[].rows[].id',\n category: 'layout',\n valueKind: 'string',\n description: 'ID único da linha dentro de uma seção.',\n critical: true,\n safetyNotes: 'Alterar o ID pode quebrar referências de regras ou layout.',\n },\n {\n path: 'sections[].rows[].title',\n category: 'layout',\n valueKind: 'string',\n description: 'Título interno da linha (usado em editores e labels).',\n },\n {\n path: 'sections[].rows[].gap',\n category: 'layout',\n valueKind: 'number',\n description: 'Espaçamento horizontal (em px) entre colunas nesta linha.',\n intentExamples: ['aumentar espaço entre campos da linha'],\n },\n {\n path: 'sections[].rows[].rowGap',\n category: 'layout',\n valueKind: 'number',\n description: 'Espaçamento vertical (em px) após esta linha.',\n intentExamples: ['adicionar mais espaço depois desta linha de campos'],\n },\n\n {\n path: 'sections[].rows[].columns[].id',\n category: 'layout',\n valueKind: 'string',\n description: 'ID único da coluna dentro de uma linha.',\n critical: true,\n safetyNotes: 'Alterar o ID pode quebrar referências de regras ou layout.',\n },\n {\n path: 'sections[].rows[].columns[].title',\n category: 'layout',\n valueKind: 'string',\n description: 'Título interno da coluna (usado em editores e labels).',\n },\n {\n path: 'sections[].rows[].columns[].testId',\n category: 'layout',\n valueKind: 'string',\n description: 'Atributo data-testid aplicado ao container da coluna.',\n },\n {\n path: 'sections[].rows[].columns[].fields',\n category: 'layout',\n valueKind: 'array',\n description: 'Lista ordenada de nomes de campos (strings) dentro da coluna.',\n critical: true,\n intentExamples: ['mover campo para a primeira coluna', 'reordenar campos na coluna'],\n safetyNotes: 'Apenas nomes de campos (strings). Garanta que o nome do campo referenciado exista em fieldMetadata[].',\n },\n {\n path: 'sections[].rows[].columns[].fields[]',\n category: 'layout',\n valueKind: 'string',\n description: 'Nome do campo dentro da coluna.',\n critical: true,\n safetyNotes: 'Apenas nomes de campos (strings). Garanta que o nome do campo referenciado exista em fieldMetadata[].',\n },\n {\n path: 'sections[].rows[].columns[].span.xs',\n category: 'layout',\n valueKind: 'number',\n description: 'Largura da coluna para telas extra pequenas (xs) no grid system (1-12).',\n intentExamples: ['coluna com 100% de largura no celular'],\n },\n {\n path: 'sections[].rows[].columns[].span.sm',\n category: 'layout',\n valueKind: 'number',\n description: 'Largura da coluna para telas pequenas (sm) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].span.md',\n category: 'layout',\n valueKind: 'number',\n description: 'Largura da coluna para telas médias (md) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].span.lg',\n category: 'layout',\n valueKind: 'number',\n description: 'Largura da coluna para telas grandes (lg) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].span.xl',\n category: 'layout',\n valueKind: 'number',\n description: 'Largura da coluna para telas extra grandes (xl) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].offset.xs',\n category: 'layout',\n valueKind: 'number',\n description: 'Offset da coluna para telas extra pequenas (xs) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].offset.sm',\n category: 'layout',\n valueKind: 'number',\n description: 'Offset da coluna para telas pequenas (sm) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].offset.md',\n category: 'layout',\n valueKind: 'number',\n description: 'Offset da coluna para telas médias (md) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].offset.lg',\n category: 'layout',\n valueKind: 'number',\n description: 'Offset da coluna para telas grandes (lg) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].offset.xl',\n category: 'layout',\n valueKind: 'number',\n description: 'Offset da coluna para telas extra grandes (xl) no grid system (1-12).',\n },\n {\n path: 'sections[].rows[].columns[].order.xs',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem visual da coluna para telas extra pequenas (xs).',\n },\n {\n path: 'sections[].rows[].columns[].order.sm',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem visual da coluna para telas pequenas (sm).',\n },\n {\n path: 'sections[].rows[].columns[].order.md',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem visual da coluna para telas médias (md).',\n },\n {\n path: 'sections[].rows[].columns[].order.lg',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem visual da coluna para telas grandes (lg).',\n },\n {\n path: 'sections[].rows[].columns[].order.xl',\n category: 'layout',\n valueKind: 'number',\n description: 'Ordem visual da coluna para telas extra grandes (xl).',\n },\n {\n path: 'sections[].rows[].columns[].hidden.xs',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Oculta a coluna para telas extra pequenas (xs).',\n },\n {\n path: 'sections[].rows[].columns[].hidden.sm',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Oculta a coluna para telas pequenas (sm).',\n },\n {\n path: 'sections[].rows[].columns[].hidden.md',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Oculta a coluna para telas médias (md).',\n },\n {\n path: 'sections[].rows[].columns[].hidden.lg',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Oculta a coluna para telas grandes (lg).',\n },\n {\n path: 'sections[].rows[].columns[].hidden.xl',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Oculta a coluna para telas extra grandes (xl).',\n },\n {\n path: 'sections[].rows[].columns[].align',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.columnAlign,\n description: 'Alinhamento vertical do conteúdo da coluna.',\n },\n {\n path: 'sections[].rows[].columns[].padding',\n category: 'layout',\n valueKind: 'number',\n description: 'Padding (em px) interno da coluna.',\n },\n {\n path: 'sections[].rows[].columns[].className',\n category: 'appearance',\n valueKind: 'string',\n description: 'Classe CSS aplicada à coluna.',\n },\n\n // =============================================================================\n // FORM CONFIG - ACTIONS\n // =============================================================================\n {\n path: 'actions.submit.id',\n category: 'actions',\n valueKind: 'string',\n description: 'ID do botão de submissão.',\n safetyNotes: 'Alterar o ID impacta regras e overrides por ação.',\n },\n {\n path: 'actions.submit.visible',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Visibilidade do botão de submissão.',\n intentExamples: ['esconder botão de salvar', 'mostrar botão de enviar'],\n },\n {\n path: 'actions.submit.label',\n category: 'actions',\n valueKind: 'string',\n description: 'Rótulo do botão de submissão.',\n intentExamples: ['mudar texto do botão de salvar para \"Finalizar\"'],\n },\n {\n path: 'actions.submit.icon',\n category: 'actions',\n valueKind: 'string',\n description: 'Ícone (Material Icons) para o botão de submissão.',\n },\n {\n path: 'actions.submit.color',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonColor,\n description: 'Cor do botão de submissão.',\n },\n {\n path: 'actions.submit.variant',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonVariant,\n description: 'Variante visual do botão de submissão.',\n },\n {\n path: 'actions.submit.size',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonSize,\n description: 'Tamanho do botão de submissão.',\n },\n {\n path: 'actions.submit.className',\n category: 'actions',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao botão de submissão.',\n },\n {\n path: 'actions.submit.style',\n category: 'actions',\n valueKind: 'object',\n description: 'Estilos inline aplicados ao botão de submissão.',\n },\n {\n path: 'actions.submit.disabled',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Desabilita o botão de submissão.',\n },\n {\n path: 'actions.submit.type',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonType,\n description: 'Tipo do botão de submissão.',\n },\n {\n path: 'actions.submit.action',\n category: 'actions',\n valueKind: 'string',\n description: 'Evento customizado disparado ao clicar.',\n safetyNotes: 'Use apenas quando houver handler registrado no host.',\n },\n {\n path: 'actions.submit.tooltip',\n category: 'actions',\n valueKind: 'string',\n description: 'Tooltip exibido no botão de submissão.',\n },\n {\n path: 'actions.submit.loading',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Exibe estado de carregamento no botão de submissão.',\n },\n {\n path: 'actions.submit.shortcut',\n category: 'actions',\n valueKind: 'string',\n description: 'Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.',\n },\n {\n path: 'actions.cancel.id',\n category: 'actions',\n valueKind: 'string',\n description: 'ID do botão de cancelar.',\n safetyNotes: 'Alterar o ID impacta regras e overrides por ação.',\n },\n {\n path: 'actions.cancel.visible',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Visibilidade do botão de cancelar.',\n intentExamples: ['esconder botão de cancelar'],\n },\n {\n path: 'actions.cancel.label',\n category: 'actions',\n valueKind: 'string',\n description: 'Rótulo do botão de cancelar.',\n },\n {\n path: 'actions.cancel.icon',\n category: 'actions',\n valueKind: 'string',\n description: 'Ícone (Material Icons) para o botão de cancelar.',\n },\n {\n path: 'actions.cancel.color',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonColor,\n description: 'Cor do botão de cancelar.',\n },\n {\n path: 'actions.cancel.variant',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonVariant,\n description: 'Variante visual do botão de cancelar.',\n },\n {\n path: 'actions.cancel.size',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonSize,\n description: 'Tamanho do botão de cancelar.',\n },\n {\n path: 'actions.cancel.className',\n category: 'actions',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao botão de cancelar.',\n },\n {\n path: 'actions.cancel.style',\n category: 'actions',\n valueKind: 'object',\n description: 'Estilos inline aplicados ao botão de cancelar.',\n },\n {\n path: 'actions.cancel.disabled',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Desabilita o botão de cancelar.',\n },\n {\n path: 'actions.cancel.type',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonType,\n description: 'Tipo do botão de cancelar.',\n },\n {\n path: 'actions.cancel.action',\n category: 'actions',\n valueKind: 'string',\n description: 'Evento customizado disparado ao clicar.',\n safetyNotes: 'Use apenas quando houver handler registrado no host.',\n },\n {\n path: 'actions.cancel.tooltip',\n category: 'actions',\n valueKind: 'string',\n description: 'Tooltip exibido no botão de cancelar.',\n },\n {\n path: 'actions.cancel.loading',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Exibe estado de carregamento no botão de cancelar.',\n },\n {\n path: 'actions.cancel.shortcut',\n category: 'actions',\n valueKind: 'string',\n description: 'Atalho de teclado (ex.: \"esc\") para o botão de cancelar.',\n },\n {\n path: 'actions.reset.id',\n category: 'actions',\n valueKind: 'string',\n description: 'ID do botão de reset.',\n safetyNotes: 'Alterar o ID impacta regras e overrides por ação.',\n },\n {\n path: 'actions.reset.visible',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Visibilidade do botão de reset.',\n },\n {\n path: 'actions.reset.label',\n category: 'actions',\n valueKind: 'string',\n description: 'Rótulo do botão de reset.',\n },\n {\n path: 'actions.reset.icon',\n category: 'actions',\n valueKind: 'string',\n description: 'Ícone (Material Icons) para o botão de reset.',\n },\n {\n path: 'actions.reset.color',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonColor,\n description: 'Cor do botão de reset.',\n },\n {\n path: 'actions.reset.variant',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonVariant,\n description: 'Variante visual do botão de reset.',\n },\n {\n path: 'actions.reset.size',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonSize,\n description: 'Tamanho do botão de reset.',\n },\n {\n path: 'actions.reset.className',\n category: 'actions',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao botão de reset.',\n },\n {\n path: 'actions.reset.style',\n category: 'actions',\n valueKind: 'object',\n description: 'Estilos inline aplicados ao botão de reset.',\n },\n {\n path: 'actions.reset.disabled',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Desabilita o botão de reset.',\n },\n {\n path: 'actions.reset.type',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonType,\n description: 'Tipo do botão de reset.',\n },\n {\n path: 'actions.reset.action',\n category: 'actions',\n valueKind: 'string',\n description: 'Evento customizado disparado ao clicar.',\n safetyNotes: 'Use apenas quando houver handler registrado no host.',\n },\n {\n path: 'actions.reset.tooltip',\n category: 'actions',\n valueKind: 'string',\n description: 'Tooltip exibido no botão de reset.',\n },\n {\n path: 'actions.reset.loading',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Exibe estado de carregamento no botão de reset.',\n },\n {\n path: 'actions.reset.shortcut',\n category: 'actions',\n valueKind: 'string',\n description: 'Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.',\n },\n {\n path: 'actions.custom',\n category: 'actions',\n valueKind: 'array',\n description: 'Lista de botões de ação customizados.',\n safetyNotes: 'Cada ação customizada deve ter `id` ou `action` válidos.',\n },\n {\n path: 'actions.custom[]',\n category: 'actions',\n valueKind: 'object',\n description: 'Configuração de um botão de ação customizado.',\n safetyNotes: 'Ações customizadas requerem `id` ou `action` e um handler registrado para funcionar.',\n example: '{ id: \"myAction\", label: \"Ação Customizada\", icon: \"star\", action: \"myCustomEvent\" }',\n },\n {\n path: 'actions.custom[].id',\n category: 'actions',\n valueKind: 'string',\n description: 'ID da ação customizada.',\n safetyNotes: 'Usado para overrides e mensagens por ação.',\n },\n {\n path: 'actions.custom[].visible',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Visibilidade da ação customizada.',\n },\n {\n path: 'actions.custom[].label',\n category: 'actions',\n valueKind: 'string',\n description: 'Rótulo da ação customizada.',\n },\n {\n path: 'actions.custom[].icon',\n category: 'actions',\n valueKind: 'string',\n description: 'Ícone (Material Icons) para a ação customizada.',\n },\n {\n path: 'actions.custom[].color',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonColor,\n description: 'Cor da ação customizada.',\n },\n {\n path: 'actions.custom[].variant',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonVariant,\n description: 'Variante visual da ação customizada.',\n },\n {\n path: 'actions.custom[].size',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonSize,\n description: 'Tamanho da ação customizada.',\n },\n {\n path: 'actions.custom[].className',\n category: 'actions',\n valueKind: 'string',\n description: 'Classe CSS aplicada à ação customizada.',\n },\n {\n path: 'actions.custom[].style',\n category: 'actions',\n valueKind: 'object',\n description: 'Estilos inline aplicados à ação customizada.',\n },\n {\n path: 'actions.custom[].disabled',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Desabilita a ação customizada.',\n },\n {\n path: 'actions.custom[].type',\n category: 'actions',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionButtonType,\n description: 'Tipo do botão da ação customizada.',\n },\n {\n path: 'actions.custom[].action',\n category: 'actions',\n valueKind: 'string',\n description: 'Evento customizado disparado ao clicar.',\n safetyNotes: 'Deve existir um handler registrado no host.',\n },\n {\n path: 'actions.custom[].tooltip',\n category: 'actions',\n valueKind: 'string',\n description: 'Tooltip exibido na ação customizada.',\n },\n {\n path: 'actions.custom[].loading',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Exibe estado de carregamento na ação customizada.',\n },\n {\n path: 'actions.custom[].shortcut',\n category: 'actions',\n valueKind: 'string',\n description: 'Atalho de teclado para a ação customizada.',\n },\n {\n path: 'actions.position',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutPosition,\n description: 'Posicionamento horizontal da barra de ações.',\n },\n {\n path: 'actions.orientation',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutOrientation,\n description: 'Orientação dos botões dentro da barra de ações (horizontal/vertical).',\n },\n {\n path: 'actions.spacing',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutSpacing,\n description: 'Espaçamento entre os botões na barra de ações.',\n },\n {\n path: 'actions.sticky',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Define se a barra de ações deve permanecer visível ao rolar a página.',\n },\n {\n path: 'actions.divider',\n category: 'layout',\n valueKind: 'boolean',\n description: 'Exibe um divisor superior acima da barra de ações.',\n },\n {\n path: 'actions.placement',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutPlacement,\n description: 'Localização estrutural da barra de ações no layout.',\n },\n {\n path: 'actions.mobile.position',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutMobilePosition,\n description: 'Posicionamento da barra de ações em dispositivos móveis.',\n },\n {\n path: 'actions.mobile.orientation',\n category: 'layout',\n valueKind: 'enum',\n allowedValues: ENUMS.formActionsLayoutOrientation,\n description: 'Orientação dos botões em dispositivos móveis.',\n },\n {\n path: 'actions.mobile.collapseToMenu',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Em mobile, agrupa ações em um menu (se houver muitas).',\n },\n {\n path: 'actions.containerClassName',\n category: 'appearance',\n valueKind: 'string',\n description: 'Classe CSS aplicada ao container da barra de ações.',\n },\n {\n path: 'actions.containerStyles',\n category: 'appearance',\n valueKind: 'object',\n description: 'Estilos inline aplicados ao container da barra de ações.',\n },\n {\n path: 'actions.showSaveButton',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Legacy: controla visibilidade do botão de submit.',\n safetyNotes: 'Preferir actions.submit.visible.',\n },\n {\n path: 'actions.submitButtonLabel',\n category: 'actions',\n valueKind: 'string',\n description: 'Legacy: rótulo do botão de submit.',\n safetyNotes: 'Preferir actions.submit.label.',\n },\n {\n path: 'actions.showCancelButton',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Legacy: controla visibilidade do botão de cancel.',\n safetyNotes: 'Preferir actions.cancel.visible.',\n },\n {\n path: 'actions.cancelButtonLabel',\n category: 'actions',\n valueKind: 'string',\n description: 'Legacy: rótulo do botão de cancel.',\n safetyNotes: 'Preferir actions.cancel.label.',\n },\n {\n path: 'actions.showResetButton',\n category: 'actions',\n valueKind: 'boolean',\n description: 'Legacy: controla visibilidade do botão de reset.',\n safetyNotes: 'Preferir actions.reset.visible.',\n },\n {\n path: 'actions.resetButtonLabel',\n category: 'actions',\n valueKind: 'string',\n description: 'Legacy: rótulo do botão de reset.',\n safetyNotes: 'Preferir actions.reset.label.',\n },\n\n // =============================================================================\n // FORM CONFIG - BEHAVIOR\n // =============================================================================\n {\n path: 'behavior.confirmOnUnsavedChanges',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Exibe um alerta se o usuário tentar sair com mudanças não salvas.',\n intentExamples: ['ativar aviso de saída sem salvar'],\n },\n {\n path: 'behavior.trackHistory',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Habilita rastreamento de histórico para desfazer/refazer (se suportado).',\n },\n {\n path: 'behavior.focusFirstError',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Ao submeter, foca automaticamente no primeiro campo com erro.',\n },\n {\n path: 'behavior.scrollToErrors',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Ao submeter, rola a página para exibir o primeiro erro.',\n },\n {\n path: 'behavior.clearAfterSave',\n category: 'behavior',\n valueKind: 'boolean',\n description: 'Limpa o formulário após uma submissão bem-sucedida.',\n intentExamples: ['limpar form depois de salvar'],\n },\n {\n path: 'behavior.redirectAfterSave',\n category: 'behavior',\n valueKind: 'string',\n description: 'URL para redirecionar após uma submissão bem-sucedida.',\n intentExamples: ['redirecionar para lista após salvar'],\n },\n {\n path: 'behavior.reactiveValidation',\n category: 'validation',\n valueKind: 'boolean',\n description: 'Ativa validação reativa (em tempo real) em `valueChanges`.',\n },\n {\n path: 'behavior.reactiveValidationDebounceMs',\n category: 'validation',\n valueKind: 'number',\n description: 'Debounce (em ms) para a validação reativa.',\n dependsOn: 'behavior.reactiveValidation',\n example: '300',\n },\n\n // =============================================================================\n // FORM CONFIG - API\n // =============================================================================\n {\n path: 'api.saveEndpoint',\n category: 'api',\n valueKind: 'string',\n description: 'URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).',\n intentExamples: ['configurar endpoint de salvar'],\n },\n {\n path: 'api.loadEndpoint',\n category: 'api',\n valueKind: 'string',\n description: 'URL para buscar dados para popular o formulário (GET).',\n intentExamples: ['configurar endpoint de carregar'],\n },\n {\n path: 'api.saveMethod',\n category: 'api',\n valueKind: 'enum',\n allowedValues: ['POST', 'PUT', 'PATCH'],\n description: 'Método HTTP para a requisição de salvar.',\n },\n {\n path: 'api.timeout',\n category: 'api',\n valueKind: 'number',\n description: 'Tempo limite (em ms) para as requisições API.',\n example: '5000',\n },\n {\n path: 'api.headers',\n category: 'api',\n valueKind: 'object',\n description: 'Cabeçalhos HTTP personalizados para as requisições API.',\n example: '{ \"Authorization\": \"Bearer token\" }',\n },\n {\n path: 'api.idField',\n category: 'api',\n valueKind: 'string',\n description: 'Nome do campo que representa o ID do registro no payload (para PUT/PATCH).',\n },\n {\n path: 'api.beforeSave',\n category: 'hooks',\n valueKind: 'expression',\n description: 'Hook para pré-processamento de dados antes de enviar para a API.',\n safetyNotes: 'Não serializável. Deve ser uma função JS fornecida pelo host.',\n },\n {\n path: 'api.afterLoad',\n category: 'hooks',\n valueKind: 'expression',\n description: 'Hook para pós-processamento de dados após carregar da API.',\n safetyNotes: 'Não serializável. Deve ser uma função JS fornecida pelo host.',\n },\n\n // =============================================================================\n // FORM CONFIG - MESSAGES\n // =============================================================================\n {\n path: 'messages.updateRegistrySuccess',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de sucesso após atualização de registro.',\n },\n {\n path: 'messages.createRegistrySuccess',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de sucesso após criação de registro.',\n },\n {\n path: 'messages.updateRegistryError',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de erro após atualização de registro.',\n },\n {\n path: 'messages.createRegistryError',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de erro após criação de registro.',\n },\n {\n path: 'messages.confirmations.submit',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de confirmação antes de submeter o formulário.',\n },\n {\n path: 'messages.confirmations.cancel',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de confirmação antes de cancelar.',\n },\n {\n path: 'messages.confirmations.reset',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de confirmação antes de resetar o formulário.',\n },\n {\n path: 'messages.confirmations.[actionId]',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.',\n safetyNotes: 'Use IDs de ações existentes em `actions.custom[]`.',\n },\n {\n path: 'messages.customActions.[actionId]',\n category: 'messages',\n valueKind: 'object',\n description: 'Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.',\n safetyNotes: 'Use IDs de ações existentes em `actions.custom[]`.',\n },\n {\n path: 'messages.customActions.[actionId].success',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de sucesso para a ação customizada.',\n },\n {\n path: 'messages.customActions.[actionId].error',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de erro para a ação customizada.',\n },\n {\n path: 'messages.customActions.[actionId].confirmation',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem de confirmação para a ação customizada.',\n },\n {\n path: 'messages.loading.submit',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem exibida durante o envio do formulário.',\n },\n {\n path: 'messages.loading.cancel',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem exibida durante o cancelamento.',\n },\n {\n path: 'messages.loading.reset',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem exibida durante o reset do formulário.',\n },\n {\n path: 'messages.loading.[actionId]',\n category: 'messages',\n valueKind: 'string',\n description: 'Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.',\n },\n\n // =============================================================================\n // FORM CONFIG - FORM RULES\n // =============================================================================\n {\n path: 'formRules[].id',\n category: 'rules',\n valueKind: 'string',\n description: 'ID único da regra de layout.',\n critical: true,\n safetyNotes: 'Alterar o ID pode quebrar a regra.',\n intentExamples: ['id da regra', 'identificador único da regra'],\n },\n {\n path: 'formRules[].name',\n category: 'rules',\n valueKind: 'string',\n description: 'Nome amigável da regra de layout.',\n intentExamples: ['nomear regra', 'dar nome à condição', 'título da regra'],\n },\n {\n path: 'formRules[].description',\n category: 'rules',\n valueKind: 'string',\n description: 'Descrição da regra de layout para documentação.',\n intentExamples: ['descrever o que a regra faz', 'documentar lógica da regra'],\n },\n {\n path: 'formRules[].targetType',\n category: 'rules',\n valueKind: 'enum',\n allowedValues: ENUMS.formRuleTargetType,\n description: 'Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna).',\n critical: true,\n intentExamples: ['aplicar regra a um campo', 'regra para uma seção', 'condição em uma linha'],\n },\n {\n path: 'formRules[].context',\n category: 'rules',\n valueKind: 'enum',\n allowedValues: ENUMS.formRuleContext,\n description: 'Contexto legado da regra (quando properties não forem informadas).',\n safetyNotes: 'Preferir effect.properties/propertiesWhenFalse quando possível.',\n },\n {\n path: 'formRules[].targets',\n category: 'rules',\n valueKind: 'array',\n description: 'Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.',\n critical: true,\n safetyNotes: 'Verifique se os IDs dos alvos existem no formulário.',\n intentExamples: ['tornar campo \"email\" visível', 'esconder seção \"dados-pessoais\"', 'aplicar no campo X'],\n },\n {\n path: 'formRules[].targets[]',\n category: 'rules',\n valueKind: 'string',\n description: 'ID do alvo da regra.',\n critical: true,\n safetyNotes: 'Verifique se o ID existe no formulário.',\n },\n {\n path: 'formRules[].targetFields',\n category: 'rules',\n valueKind: 'array',\n description: 'Alias legado para alvos de campo.',\n safetyNotes: 'Use targets + targetType=\"field\" em regras novas.',\n },\n {\n path: 'formRules[].targetFields[]',\n category: 'rules',\n valueKind: 'string',\n description: 'ID do campo alvo (alias legado).',\n },\n {\n path: 'formRules[].effect.condition',\n category: 'rules',\n valueKind: 'expression',\n description: 'Expressão (Specification) que define a condição da regra. Ex: \"valorCampo > 10\".',\n critical: true,\n safetyNotes: 'NÃO utilize código JS puro. Utilize DSL segura ou Specification serializável.',\n example: 'status == \"active\" && amount > 100',\n intentExamples: ['se valor for maior que 10', 'quando status for ativo', 'condição da regra'],\n },\n ...generateRulePropertyCapabilities(FormRuleTargetType.Field, RULE_PROPERTY_SCHEMA.field),\n ...generateRulePropertyCapabilities(FormRuleTargetType.Section, RULE_PROPERTY_SCHEMA.section),\n ...generateRulePropertyCapabilities(FormRuleTargetType.Action, RULE_PROPERTY_SCHEMA.action),\n ...generateRulePropertyCapabilities(FormRuleTargetType.Row, RULE_PROPERTY_SCHEMA.row),\n ...generateRulePropertyCapabilities(FormRuleTargetType.Column, RULE_PROPERTY_SCHEMA.column),\n ...generateRulePropertyWhenFalseCapabilities(FormRuleTargetType.Field, RULE_PROPERTY_SCHEMA.field),\n ...generateRulePropertyWhenFalseCapabilities(FormRuleTargetType.Section, RULE_PROPERTY_SCHEMA.section),\n ...generateRulePropertyWhenFalseCapabilities(FormRuleTargetType.Action, RULE_PROPERTY_SCHEMA.action),\n ...generateRulePropertyWhenFalseCapabilities(FormRuleTargetType.Row, RULE_PROPERTY_SCHEMA.row),\n ...generateRulePropertyWhenFalseCapabilities(FormRuleTargetType.Column, RULE_PROPERTY_SCHEMA.column),\n\n {\n path: 'formRulesState',\n category: 'rules',\n valueKind: 'object',\n description: 'Estado interno do builder de regras (metadados visuais).',\n safetyNotes: 'Gerado por round-trip do builder. Não deve ser editado manualmente ou pela IA.',\n },\n\n // =============================================================================\n // FORM CONFIG - HOOKS\n // =============================================================================\n {\n path: 'hooks',\n category: 'hooks',\n valueKind: 'object',\n description: 'Declarações de hooks por estágio do ciclo de vida do formulário.',\n safetyNotes: 'Hooks são resolvidos por ID no host. Não são funções serializáveis.',\n example: '{ beforeInit: [{ id: \"load-options\", priority: 100 }] }',\n intentExamples: ['adicionar hook de inicialização', 'executar ação antes do submit'],\n },\n {\n path: 'hooks.beforeInit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para beforeInit.',\n },\n {\n path: 'hooks.beforeInit[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.beforeInit[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.beforeInit[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.beforeInit[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.afterInit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para afterInit.',\n },\n {\n path: 'hooks.afterInit[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.afterInit[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.afterInit[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.afterInit[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.beforeValidate[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para beforeValidate.',\n },\n {\n path: 'hooks.beforeValidate[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.beforeValidate[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.beforeValidate[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.beforeValidate[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.afterValidate[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para afterValidate.',\n },\n {\n path: 'hooks.afterValidate[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.afterValidate[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.afterValidate[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.afterValidate[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.beforeSubmit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para beforeSubmit.',\n },\n {\n path: 'hooks.beforeSubmit[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.beforeSubmit[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.beforeSubmit[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.beforeSubmit[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.afterSubmit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para afterSubmit.',\n },\n {\n path: 'hooks.afterSubmit[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.afterSubmit[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.afterSubmit[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.afterSubmit[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n {\n path: 'hooks.onError[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Declarações de hooks para onError.',\n },\n {\n path: 'hooks.onError[].id',\n category: 'hooks',\n valueKind: 'string',\n description: 'ID do hook (registrado no host).',\n },\n {\n path: 'hooks.onError[].priority',\n category: 'hooks',\n valueKind: 'number',\n description: 'Prioridade do hook (maior executa primeiro).',\n },\n {\n path: 'hooks.onError[].timeoutMs',\n category: 'hooks',\n valueKind: 'number',\n description: 'Timeout em ms para a execucao do hook.',\n },\n {\n path: 'hooks.onError[].args',\n category: 'hooks',\n valueKind: 'object',\n description: 'Argumentos adicionais passados ao hook.',\n },\n\n // =============================================================================\n // FORM CONFIG - HINTS\n // =============================================================================\n {\n path: 'hints.dataModes.create',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de criação de dados.',\n },\n {\n path: 'hints.dataModes.edit',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de edição de dados.',\n },\n {\n path: 'hints.dataModes.view',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de visualização de dados.',\n },\n {\n path: 'hints.uiModes.presentation',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de apresentação da UI.',\n },\n {\n path: 'hints.uiModes.readonly',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de somente leitura da UI.',\n },\n {\n path: 'hints.uiModes.disabled',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo desabilitado da UI.',\n },\n {\n path: 'hints.uiModes.visible',\n category: 'form_config',\n valueKind: 'string',\n description: 'Dica para o modo de visibilidade da UI.',\n },\n\n ],\n};\n\nexport const TASK_PRESETS: Record<string, string[]> = {\n 'form-layout': [\n 'sections[].title',\n 'sections[].description',\n 'sections[].icon',\n 'sections[].sectionHeader',\n 'sections[].sectionHeader.mode',\n 'sections[].sectionHeader.sourceField',\n 'sections[].sectionHeader.initialsSourceField',\n 'sections[].sectionHeader.altField',\n 'sections[].sectionHeader.fallbackIcon',\n 'sections[].sectionHeader.emptyState',\n 'sections[].sectionHeader.size',\n 'sections[].sectionHeader.initialsMaxLength',\n 'sections[].collapsible',\n 'sections[].collapsed',\n 'sections[].gapBottom',\n 'sections[].titleGapBottom',\n 'sections[].descriptionGapBottom',\n 'sections[].appearance',\n 'sections[].stepLabel',\n 'sections[].titleStyle',\n 'sections[].descriptionStyle',\n 'sections[].titleColor',\n 'sections[].descriptionColor',\n 'sections[].headerAlign',\n 'sections[].headerTooltip',\n 'sections[].headerActions',\n 'sections[].headerActions[].id',\n 'sections[].headerActions[].label',\n 'sections[].headerActions[].icon',\n 'sections[].headerActions[].action',\n 'sections[].headerActions[].tooltip',\n 'sections[].headerActions[].color',\n 'sections[].headerActions[].visible',\n 'sections[].headerActions[].disabled',\n 'sections[].rows[].gap',\n 'sections[].rows[].rowGap',\n 'sections[].rows[].columns[].fields[]',\n 'sections[].rows[].columns[].span.*',\n 'sections[].rows[].columns[].offset.*',\n 'sections[].rows[].columns[].order.*',\n 'sections[].rows[].columns[].hidden.*',\n 'sections[].rows[].columns[].align',\n 'sections[].rows[].columns[].padding',\n 'sections[].rows[].columns[].className',\n ],\n 'form-actions': [\n 'actions.submit.id',\n 'actions.submit.visible',\n 'actions.submit.label',\n 'actions.submit.icon',\n 'actions.submit.color',\n 'actions.submit.variant',\n 'actions.submit.size',\n 'actions.submit.className',\n 'actions.submit.style',\n 'actions.submit.disabled',\n 'actions.submit.type',\n 'actions.submit.action',\n 'actions.submit.tooltip',\n 'actions.submit.loading',\n 'actions.submit.shortcut',\n 'actions.cancel.id',\n 'actions.cancel.visible',\n 'actions.cancel.label',\n 'actions.cancel.icon',\n 'actions.cancel.color',\n 'actions.cancel.variant',\n 'actions.cancel.size',\n 'actions.cancel.className',\n 'actions.cancel.style',\n 'actions.cancel.disabled',\n 'actions.cancel.type',\n 'actions.cancel.action',\n 'actions.cancel.tooltip',\n 'actions.cancel.loading',\n 'actions.cancel.shortcut',\n 'actions.reset.id',\n 'actions.reset.visible',\n 'actions.reset.label',\n 'actions.reset.icon',\n 'actions.reset.color',\n 'actions.reset.variant',\n 'actions.reset.size',\n 'actions.reset.className',\n 'actions.reset.style',\n 'actions.reset.disabled',\n 'actions.reset.type',\n 'actions.reset.action',\n 'actions.reset.tooltip',\n 'actions.reset.loading',\n 'actions.reset.shortcut',\n 'actions.custom',\n 'actions.custom[]',\n 'actions.custom[].id',\n 'actions.custom[].visible',\n 'actions.custom[].label',\n 'actions.custom[].icon',\n 'actions.custom[].color',\n 'actions.custom[].variant',\n 'actions.custom[].size',\n 'actions.custom[].className',\n 'actions.custom[].style',\n 'actions.custom[].disabled',\n 'actions.custom[].type',\n 'actions.custom[].action',\n 'actions.custom[].tooltip',\n 'actions.custom[].loading',\n 'actions.custom[].shortcut',\n 'actions.position',\n 'actions.orientation',\n 'actions.spacing',\n 'actions.sticky',\n 'actions.divider',\n 'actions.placement',\n 'actions.mobile.*',\n 'actions.containerClassName',\n 'actions.containerStyles',\n 'actions.showSaveButton',\n 'actions.submitButtonLabel',\n 'actions.showCancelButton',\n 'actions.cancelButtonLabel',\n 'actions.showResetButton',\n 'actions.resetButtonLabel',\n ],\n 'form-behavior': [\n 'behavior.confirmOnUnsavedChanges',\n 'behavior.trackHistory',\n 'behavior.focusFirstError',\n 'behavior.scrollToErrors',\n 'behavior.clearAfterSave',\n 'behavior.redirectAfterSave',\n 'behavior.reactiveValidation',\n 'behavior.reactiveValidationDebounceMs',\n ],\n 'form-api': [\n 'api.saveEndpoint',\n 'api.loadEndpoint',\n 'api.saveMethod',\n 'api.timeout',\n 'api.headers',\n 'api.idField',\n 'api.beforeSave',\n 'api.afterLoad',\n ],\n 'form-messages': [\n 'messages.updateRegistrySuccess',\n 'messages.createRegistrySuccess',\n 'messages.updateRegistryError',\n 'messages.createRegistryError',\n 'messages.confirmations.*',\n 'messages.customActions.*',\n 'messages.loading.*',\n ],\n 'form-rules': [\n 'formRules[].name',\n 'formRules[].description',\n 'formRules[].targetType',\n 'formRules[].context',\n 'formRules[].targets',\n 'formRules[].targets[]',\n 'formRules[].targetFields',\n 'formRules[].targetFields[]',\n 'formRules[].effect.condition',\n 'formRules[].effect.properties.*',\n 'formRules[].effect.propertiesWhenFalse.*',\n ],\n 'form-metadata-hints': [\n 'metadata.version',\n 'metadata.source',\n 'metadata.schemaId',\n 'metadata.lastUpdated',\n 'metadata.schemaContext.*',\n 'metadata.serverHash',\n 'hints.dataModes.*',\n 'hints.uiModes.*',\n ],\n};\n\nexport function getFormCapabilities(): Capability[] {\n return FORM_AI_CAPABILITIES.capabilities as unknown as Capability[];\n}\n\nexport function getFormEnum(name: keyof typeof ENUMS): string[] {\n return ENUMS[name] as unknown as string[];\n}\n","import type {\n AiCapability,\n AiCapabilityCatalog,\n FormConfig,\n FieldMetadata,\n} from '@praxisui/core';\nimport { FIELD_METADATA_CAPABILITIES } from '@praxisui/core';\nimport { getControlTypeCatalog } from '@praxisui/dynamic-fields';\nimport { FORM_AI_CAPABILITIES } from './form-ai-capabilities';\n\ninterface CacheEntry {\n key: string;\n catalog: AiCapabilityCatalog;\n timestamp: number;\n}\n\n// Simple in-memory cache\nlet catalogCache: CacheEntry | null = null;\nconst CACHE_TTL_MS = 60000; // 1 minute TTL, though we mainly rely on key matching\n\n/**\n * Aggregates the macro form capabilities with the specific micro capabilities\n * of the fields present in the form configuration.\n */\nexport function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog {\n const usedControlTypes = getUniqueControlTypes(formConfig);\n const cacheKey = generateCacheKey(usedControlTypes);\n\n if (catalogCache && catalogCache.key === cacheKey && (Date.now() - catalogCache.timestamp < CACHE_TTL_MS)) {\n return catalogCache.catalog;\n }\n\n // 1. Initialize with Macro Capabilities\n const result: AiCapabilityCatalog = {\n version: FORM_AI_CAPABILITIES.version,\n capabilities: [], // We will rebuild this to ensure order and dedupe\n notes: [...(FORM_AI_CAPABILITIES.notes || [])],\n enums: { ...FORM_AI_CAPABILITIES.enums },\n targets: [...(FORM_AI_CAPABILITIES.targets || [])],\n };\n\n const capabilityMap = new Map<string, AiCapability>();\n\n // Helper to process and add capabilities\n const processAndAdd = (catalog: AiCapabilityCatalog, prefixIfNeeded: boolean) => {\n if (!catalog.capabilities) return;\n\n catalog.capabilities.forEach((cap) => {\n // Hardening: Basic validation\n if (!cap.path || !cap.category || !cap.valueKind) {\n console.warn('[FormAiCatalog] Invalid capability dropped:', cap);\n return;\n }\n\n // 1. Normalize Path (Prefix Micro capabilities)\n let finalPath = cap.path;\n if (prefixIfNeeded && !finalPath.startsWith('fieldMetadata[].') && !finalPath.startsWith('sections')) {\n finalPath = `fieldMetadata[].${finalPath}`;\n }\n\n // 2. Deduplication Key\n const key = `${cap.category}::${finalPath}`;\n\n // 3. Add to Map (Last one wins, or we could implement specific merge logic)\n // For now, specialized catalogs (added later) overwrite generic ones if exact match.\n capabilityMap.set(key, { ...cap, path: finalPath });\n });\n\n // Merge Enums\n if (catalog.enums) {\n Object.entries(catalog.enums).forEach(([key, values]) => {\n if (!result.enums[key]) {\n result.enums[key] = values;\n } else {\n // Optional: Merge unique values if enum already exists\n const existing = new Set(result.enums[key]);\n values.forEach(v => existing.add(v));\n result.enums[key] = Array.from(existing);\n }\n });\n }\n\n // Merge Notes\n if (catalog.notes) {\n catalog.notes.forEach((note) => {\n if (!result.notes.includes(note)) {\n result.notes.push(note);\n }\n });\n }\n\n // Merge Targets (Safe cast for micro catalogs that might use generic CapabilityCatalog)\n const targets = (catalog as AiCapabilityCatalog).targets;\n if (targets) {\n if (!result.targets) result.targets = [];\n targets.forEach((target) => {\n if (!result.targets!.includes(target)) {\n result.targets!.push(target);\n }\n });\n }\n };\n\n // 2. Add Macro Capabilities (No prefixing needed, they are already absolute)\n processAndAdd(FORM_AI_CAPABILITIES as unknown as AiCapabilityCatalog, false);\n\n // 3. Add Base Field Metadata Capabilities (Prefix needed)\n processAndAdd(FIELD_METADATA_CAPABILITIES, true);\n\n // 4. Add Specific Control Type Capabilities (Prefix needed)\n usedControlTypes.forEach((controlType) => {\n const microCatalog = getControlTypeCatalog(controlType);\n if (microCatalog) {\n processAndAdd(microCatalog, true);\n }\n });\n\n // 5. Finalize Capabilities (Sort for determinism)\n result.capabilities = Array.from(capabilityMap.values()).sort((a, b) => {\n const catCompare = a.category.localeCompare(b.category);\n if (catCompare !== 0) return catCompare;\n return a.path.localeCompare(b.path);\n });\n\n // Update Cache\n catalogCache = {\n key: cacheKey,\n catalog: result,\n timestamp: Date.now(),\n };\n\n return result;\n}\n\nfunction getUniqueControlTypes(formConfig?: FormConfig): Set<string> {\n const types = new Set<string>();\n if (formConfig && formConfig.fieldMetadata) {\n formConfig.fieldMetadata.forEach((field: FieldMetadata) => {\n if (field.controlType) {\n types.add(field.controlType);\n }\n });\n }\n return types;\n}\n\nfunction generateCacheKey(types: Set<string>): string {\n const sortedTypes = Array.from(types).sort().join(',');\n return `v1:${sortedTypes}`;\n}\n","import { AbstractControl } from '@angular/forms';\nimport { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { FormConfig, deepMerge } from '@praxisui/core';\nimport { TASK_PRESETS } from './form-ai-capabilities';\nimport { getFormAiCatalog } from './form-ai-catalog';\nimport { FormAiHost } from './form-ai.host';\n\nexport class FormAiAdapter extends BaseAiAdapter<FormConfig> {\n componentName = 'Dynamic Form';\n componentId = 'praxis-dynamic-form';\n componentType = 'form';\n\n constructor(private host: FormAiHost) {\n super();\n }\n\n getCurrentConfig(): FormConfig {\n return this.cloneConfig(this.host.config);\n }\n\n getCapabilities(): Capability[] {\n return getFormAiCatalog(this.host.config).capabilities;\n }\n\n override getTaskPresets(): Record<string, string[]> {\n return TASK_PRESETS;\n }\n\n override getRuntimeState(): Record<string, any> {\n const formGroup = this.host.form;\n const controls = formGroup?.controls\n ? Object.values(formGroup.controls)\n : [];\n\n const filledCount = controls.reduce((count, control) => {\n return count + (this.isFilled(control) ? 1 : 0);\n }, 0);\n\n return {\n valid: formGroup?.valid ?? false,\n dirty: formGroup?.dirty ?? false,\n touched: formGroup?.touched ?? false,\n totalFields: controls.length,\n filledFields: filledCount,\n };\n }\n\n createSnapshot(): FormConfig {\n return this.cloneConfig(this.host.config);\n }\n\n async restoreSnapshot(snapshot: FormConfig): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(this.cloneConfig(snapshot));\n }\n\n async applyPatch(\n patch: Partial<FormConfig>,\n intent?: string,\n ): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const nextConfig = this.smartMergeFormConfig(current, patch);\n console.debug('[FormAiAdapter] Applying patch', { intent, patch });\n this.applyConfig(nextConfig);\n\n return { success: true };\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error applying patch';\n console.error('[FormAiAdapter] Failed to apply patch', message);\n return { success: false, error: message };\n }\n }\n\n getContextDescription(): string {\n const sections = this.host.config?.sections || [];\n const fields = this.host.config?.fieldMetadata || [];\n const fieldMap = new Map<string, { label?: string }>(\n fields.map((f) => [f.name, { label: f.label }]),\n );\n\n const summaries = sections.map((section) => {\n const names: string[] = [];\n (section.rows || []).forEach((row) => {\n (row.columns || []).forEach((col) => {\n (col.fields || []).forEach((fieldName) => names.push(fieldName));\n });\n });\n\n const labeled = names.slice(0, 6).map((name) => {\n const label = fieldMap.get(name)?.label;\n return label ? `${name} (${label})` : name;\n });\n const extra =\n names.length > labeled.length\n ? ` +${names.length - labeled.length} campos`\n : '';\n const heading = section.title || section.id || 'Seção';\n\n return `${heading}: ${labeled.join(', ')}${extra}`;\n });\n\n const sectionPart =\n summaries.length > 0\n ? summaries.join(' | ')\n : 'Sem seções configuradas';\n const fieldPart = `Metadados: ${fields.length} campos`;\n\n return `${sectionPart} — ${fieldPart}`;\n }\n\n private applyConfig(nextConfig: FormConfig): void {\n this.host.applyConfigFromAdapter(nextConfig);\n }\n\n private smartMergeFormConfig(base: FormConfig, patch: Partial<FormConfig>): FormConfig {\n const result = deepMerge(base, patch);\n\n if (patch.fieldMetadata && Array.isArray(patch.fieldMetadata)) {\n const originalFields = base.fieldMetadata || [];\n const patchFields = patch.fieldMetadata.filter(\n (field) => field && typeof field.name === 'string' && field.name.trim().length > 0,\n );\n\n const mergedFields = originalFields.map((orig) => {\n const match = patchFields.find((candidate) => candidate.name === orig.name);\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n\n patchFields.forEach((incoming) => {\n if (!originalFields.find((orig) => orig.name === incoming.name)) {\n mergedFields.push(incoming as any);\n }\n });\n\n result.fieldMetadata = mergedFields;\n }\n\n return result;\n }\n\n private cloneConfig(config: FormConfig): FormConfig {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n\n private isFilled(control: AbstractControl | null | undefined): boolean {\n if (!control) return false;\n const value = control.value;\n if (value === null || value === undefined) return false;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === 'string') return value.trim().length > 0;\n if (typeof value === 'object') return Object.keys(value).length > 0;\n return true;\n }\n}\n","import { FormConfig, createDefaultFormConfig, ensureIds, normalizeFormConfig as coreNormalizeFormConfig } from '@praxisui/core';\n\n/**\n * Deep clone and normalize a form configuration ensuring required collections\n * are always present to avoid unintended mutations.\n */\nexport function normalizeFormConfig(config?: FormConfig): FormConfig {\n const cloned = config ? structuredClone(config) : createDefaultFormConfig();\n // Apply canonical normalization from @praxisui/core first (aliases → canônico)\n const canonical = coreNormalizeFormConfig(cloned);\n const withCollections = ensureIds({\n ...createDefaultFormConfig(),\n ...canonical,\n sections: canonical.sections ?? [],\n fieldMetadata: canonical.fieldMetadata ?? [],\n formBlocksBefore: canonical.formBlocksBefore ?? [],\n formBlocksBeforeActions: canonical.formBlocksBeforeActions ?? [],\n formBlocksBeforeActionsPlacement: canonical.formBlocksBeforeActionsPlacement ?? 'afterSections',\n formBlocksAfter: canonical.formBlocksAfter ?? [],\n });\n return applyDefaultSpans(withCollections);\n}\n\n/**\n * Apply default grid spans when not provided by the config.\n * Rule: for each row, if none of its columns declares span.md,\n * distribute equally across 12 columns on md+; keep xs/sm stacked (12).\n */\nfunction applyDefaultSpans(config: FormConfig): FormConfig {\n const next = structuredClone(config) as FormConfig;\n for (const section of next.sections || []) {\n for (const row of section.rows || []) {\n const cols = row.columns || [];\n if (!cols.length) continue;\n const hasAnyMdSpan = cols.some((c) => (c as any).span?.md != null);\n if (hasAnyMdSpan) continue;\n const per = Math.max(1, Math.floor(12 / cols.length));\n for (const col of cols) {\n const span = (col as any).span || {};\n span.xs = 12;\n span.sm = 12;\n span.md = per;\n span.lg = span.lg ?? per;\n span.xl = span.xl ?? per;\n (col as any).span = span;\n }\n }\n }\n return next;\n}\n","import { FormConfig } from '@praxisui/core';\nimport type { BackConfig } from '@praxisui/core';\nimport { normalizeFormConfig } from './utils/normalize-form-config';\nimport {\n DynamicFormApplyPlan,\n DynamicFormAuthoringDocument,\n DynamicFormBindings,\n DynamicFormContextSnapshot,\n DynamicFormMode,\n DynamicFormPresentationSnapshot,\n DynamicFormProjectionContext,\n DynamicFormRuntimeContext,\n DynamicFormSchemaPrefsSnapshot,\n DynamicFormValidationContext,\n EditorDiagnostic,\n} from './dynamic-form-editor-document.model';\n\nconst DOCUMENT_KIND = 'praxis.dynamic-form.editor';\nconst DOCUMENT_VERSION = 1;\nconst VALID_MODES: DynamicFormMode[] = ['create', 'edit', 'view'];\nconst VALID_NOTIFY_VALUES = ['inline', 'snackbar', 'both', 'none'];\nconst VALID_LABEL_POSITIONS = ['above', 'left'];\nconst VALID_DENSITIES = ['comfortable', 'cozy', 'compact'];\nconst VALID_ALIGNMENTS = ['start', 'center', 'end'];\n\nexport function createDynamicFormAuthoringDocument(source: {\n config?: unknown;\n bindings?: unknown;\n contextSnapshot?: unknown;\n}): DynamicFormAuthoringDocument {\n return normalizeDynamicFormAuthoringDocument({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: asFormConfig(source?.config),\n bindings: source?.bindings as DynamicFormBindings | undefined,\n contextSnapshot:\n source?.contextSnapshot as DynamicFormContextSnapshot | undefined,\n });\n}\n\nexport function parseLegacyOrDynamicFormDocument(\n raw: unknown,\n): DynamicFormAuthoringDocument {\n const obj = asRecord(raw);\n\n if (obj.kind === DOCUMENT_KIND && obj.version === DOCUMENT_VERSION) {\n return normalizeDynamicFormAuthoringDocument({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: asFormConfig(obj.config),\n bindings: obj.bindings as DynamicFormBindings | undefined,\n contextSnapshot:\n obj.contextSnapshot as DynamicFormContextSnapshot | undefined,\n });\n }\n\n if (looksLikeLegacyEditorPayload(obj)) {\n return createDynamicFormAuthoringDocument({\n config: extractLegacyFormConfig(obj),\n bindings: {\n mode: normalizeMode(obj.inputsPatch?.mode),\n },\n contextSnapshot: {\n backConfig: normalizeBackConfig(obj.backConfig),\n presentation: normalizePresentation(obj.presentation),\n schemaPrefs: normalizeSchemaPrefs(obj.schemaPrefs),\n },\n });\n }\n\n return createDynamicFormAuthoringDocument({\n config: raw,\n });\n}\n\nexport function normalizeDynamicFormAuthoringDocument(\n doc: DynamicFormAuthoringDocument,\n): DynamicFormAuthoringDocument {\n const normalizedConfig = normalizeDynamicFormConfig(doc?.config);\n\n return {\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: normalizedConfig,\n bindings: normalizeBindings(doc?.bindings),\n contextSnapshot: normalizeContextSnapshot(doc?.contextSnapshot),\n };\n}\n\nexport function validateDynamicFormAuthoringDocument(\n doc: DynamicFormAuthoringDocument,\n context?: DynamicFormValidationContext,\n): EditorDiagnostic[] {\n return validateDynamicFormAuthoringInput(doc, context);\n}\n\nexport function validateDynamicFormAuthoringInput(\n raw: unknown,\n context?: DynamicFormValidationContext,\n): EditorDiagnostic[] {\n const diagnostics: EditorDiagnostic[] = [];\n const obj = asRecord(raw);\n const rawConfig = asRecord(obj.config);\n const rawBindings = asRecord(obj.bindings);\n const rawContextSnapshot = asRecord(obj.contextSnapshot);\n\n if (\n Object.prototype.hasOwnProperty.call(obj, 'kind') &&\n obj.kind !== DOCUMENT_KIND\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.document.kind.invalid',\n `kind must be ${DOCUMENT_KIND}`,\n 'kind',\n ),\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(obj, 'version') &&\n obj.version !== DOCUMENT_VERSION\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.document.version.invalid',\n `version must be ${DOCUMENT_VERSION}`,\n 'version',\n ),\n );\n }\n\n if (!Array.isArray(rawConfig.sections)) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.config.sections.invalid',\n 'config.sections must be an array',\n 'config.sections',\n ),\n );\n }\n\n if (!Array.isArray(rawConfig.fieldMetadata)) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.config.fieldMetadata.invalid',\n 'config.fieldMetadata must be an array',\n 'config.fieldMetadata',\n ),\n );\n }\n\n if (\n Object.prototype.hasOwnProperty.call(rawBindings, 'mode') &&\n rawBindings.mode != null &&\n !VALID_MODES.includes(rawBindings.mode)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.bindings.mode.invalid',\n 'bindings.mode must be create, edit or view',\n 'bindings.mode',\n ),\n );\n }\n\n const rawSchemaPrefs = asRecord(rawContextSnapshot.schemaPrefs);\n if (\n Object.prototype.hasOwnProperty.call(rawSchemaPrefs, 'notifyIfOutdated') &&\n rawSchemaPrefs.notifyIfOutdated != null &&\n !VALID_NOTIFY_VALUES.includes(rawSchemaPrefs.notifyIfOutdated)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.contextSnapshot.schemaPrefs.notifyIfOutdated.invalid',\n 'schemaPrefs.notifyIfOutdated must be inline, snackbar, both or none',\n 'contextSnapshot.schemaPrefs.notifyIfOutdated',\n ),\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(rawSchemaPrefs, 'snoozeMs') &&\n rawSchemaPrefs.snoozeMs != null &&\n (!Number.isFinite(rawSchemaPrefs.snoozeMs) || rawSchemaPrefs.snoozeMs < 0)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.contextSnapshot.schemaPrefs.snoozeMs.invalid',\n 'schemaPrefs.snoozeMs must be a non-negative number',\n 'contextSnapshot.schemaPrefs.snoozeMs',\n ),\n );\n }\n\n const rawPresentation = asRecord(rawContextSnapshot.presentation);\n if (\n Object.prototype.hasOwnProperty.call(rawPresentation, 'labelPosition') &&\n rawPresentation.labelPosition != null &&\n !VALID_LABEL_POSITIONS.includes(rawPresentation.labelPosition)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.contextSnapshot.presentation.labelPosition.invalid',\n 'presentation.labelPosition must be above or left',\n 'contextSnapshot.presentation.labelPosition',\n ),\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(rawPresentation, 'density') &&\n rawPresentation.density != null &&\n !VALID_DENSITIES.includes(rawPresentation.density)\n ) {\n diagnostics.push(\n errorDiagnostic(\n 'dynamicForm.contextSnapshot.presentation.density.invalid',\n 'presentation.density must be comfortable, cozy or compact',\n 'contextSnapshot.presentation.density',\n ),\n );\n }\n (['labelAlign', 'valueAlign'] as const).forEach((key) => {\n const value = rawPresentation[key];\n if (\n Object.prototype.hasOwnProperty.call(rawPresentation, key) &&\n value != null &&\n !VALID_ALIGNMENTS.includes(value)\n ) {\n diagnostics.push(\n errorDiagnostic(\n `dynamicForm.contextSnapshot.presentation.${key}.invalid`,\n `presentation.${key} must be start, center or end`,\n `contextSnapshot.presentation.${key}`,\n ),\n );\n }\n });\n ([\n 'labelFontSize',\n 'valueFontSize',\n 'labelWidth',\n ] as const).forEach((key) => {\n const value = rawPresentation[key];\n if (\n Object.prototype.hasOwnProperty.call(rawPresentation, key) &&\n value != null &&\n (!Number.isFinite(value) || value < 0)\n ) {\n diagnostics.push(\n errorDiagnostic(\n `dynamicForm.contextSnapshot.presentation.${key}.invalid`,\n `presentation.${key} must be a non-negative number or null`,\n `contextSnapshot.presentation.${key}`,\n ),\n );\n }\n });\n\n const normalized = normalizeDynamicFormAuthoringDocument(\n parseLegacyOrDynamicFormDocument(raw),\n );\n validateNormalizedDynamicFormAuthoringDocument(\n normalized,\n diagnostics,\n context,\n );\n return dedupeDiagnostics(diagnostics);\n}\n\nfunction validateNormalizedDynamicFormAuthoringDocument(\n normalized: DynamicFormAuthoringDocument,\n diagnostics: EditorDiagnostic[],\n context?: DynamicFormValidationContext,\n): void {\n if (context?.server?.schemaHash) {\n const configHash = trimString((normalized.config as any)?.metadata?.serverHash);\n if (!configHash) {\n diagnostics.push(\n infoDiagnostic(\n 'dynamicForm.config.metadata.serverHash.snapshot-missing',\n 'No persisted schema snapshot is available for reconciliation with the current server schema hash',\n 'config.metadata.serverHash',\n ),\n );\n } else if (configHash !== context.server.schemaHash) {\n diagnostics.push(\n warnDiagnostic(\n 'dynamicForm.config.metadata.serverHash.diverges-from-server',\n 'config.metadata.serverHash snapshot diverges from current server schema hash',\n 'config.metadata.serverHash',\n ),\n );\n }\n }\n}\n\nexport function toCanonicalDynamicFormConfig(\n doc: DynamicFormAuthoringDocument,\n _context?: DynamicFormProjectionContext,\n): FormConfig {\n const normalized = normalizeDynamicFormAuthoringDocument(doc);\n const canonical = cloneJson(normalized.config) as FormConfig;\n\n delete (canonical as any).presentation;\n\n return stripUndefinedDeep(canonical) as FormConfig;\n}\n\nexport function buildDynamicFormApplyPlan(\n doc: DynamicFormAuthoringDocument,\n runtime?: DynamicFormRuntimeContext,\n options?: {\n saveConfig?: boolean;\n saveBindings?: boolean;\n saveContextSnapshot?: boolean;\n attachSchemaSnapshot?: boolean;\n replaceContext?: boolean;\n },\n): DynamicFormApplyPlan {\n const normalized = normalizeDynamicFormAuthoringDocument(doc);\n const diagnostics = validateDynamicFormAuthoringInput(doc, {\n server: {\n schemaHash: runtime?.server?.schemaHash,\n },\n });\n const bindingsPatch = normalizeBindings(normalized.bindings);\n const contextSnapshot = normalizeContextSnapshot(normalized.contextSnapshot);\n const diff = {\n modeChanged:\n normalizeMode(runtime?.currentBindings?.mode) !==\n normalizeMode(bindingsPatch?.mode),\n presentationChanged: !deepEqual(\n runtime?.currentContextSnapshot?.presentation,\n contextSnapshot?.presentation,\n ),\n schemaPrefsChanged: !deepEqual(\n runtime?.currentContextSnapshot?.schemaPrefs,\n contextSnapshot?.schemaPrefs,\n ),\n backConfigChanged: !deepEqual(\n runtime?.currentContextSnapshot?.backConfig,\n contextSnapshot?.backConfig,\n ),\n };\n\n return {\n canonicalConfig: toCanonicalDynamicFormConfig(normalized, {\n mode: bindingsPatch?.mode,\n }),\n bindingsPatch,\n contextSnapshot,\n persistence: {\n saveConfig: options?.saveConfig === true,\n saveBindings: options?.saveBindings === true,\n saveContextSnapshot: options?.saveContextSnapshot === true,\n },\n runtime: {\n rebindMode:\n diff.modeChanged ||\n (options?.replaceContext === true &&\n !bindingsPatch?.mode &&\n !!runtime?.currentBindings?.mode),\n clearMode:\n options?.replaceContext === true &&\n !bindingsPatch?.mode &&\n !!runtime?.currentBindings?.mode,\n rebuildForm: true,\n refreshPresentation: !!contextSnapshot?.presentation,\n clearPresentation:\n options?.replaceContext === true &&\n !contextSnapshot?.presentation &&\n !!runtime?.currentContextSnapshot?.presentation,\n refreshSchemaState: !!contextSnapshot?.schemaPrefs,\n clearSchemaState:\n options?.replaceContext === true &&\n !contextSnapshot?.schemaPrefs &&\n !!runtime?.currentContextSnapshot?.schemaPrefs,\n refreshBackNavigation: !!contextSnapshot?.backConfig,\n clearBackNavigation:\n options?.replaceContext === true &&\n !contextSnapshot?.backConfig &&\n !!runtime?.currentContextSnapshot?.backConfig,\n },\n metadata: {\n attachSchemaSnapshot: options?.attachSchemaSnapshot === true,\n },\n diff,\n diagnostics,\n };\n}\n\nfunction dedupeDiagnostics(diagnostics: EditorDiagnostic[]): EditorDiagnostic[] {\n const seen = new Set<string>();\n return diagnostics.filter((diagnostic) => {\n const key = `${diagnostic.level}|${diagnostic.code}|${diagnostic.path || ''}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\n\nexport function serializeDynamicFormAuthoringDocument(\n doc: DynamicFormAuthoringDocument,\n): unknown {\n const normalized = normalizeDynamicFormAuthoringDocument(doc);\n return stripUndefinedDeep({\n kind: DOCUMENT_KIND,\n version: DOCUMENT_VERSION,\n config: normalized.config,\n bindings: normalized.bindings,\n contextSnapshot: normalized.contextSnapshot,\n });\n}\n\nfunction normalizeDynamicFormConfig(config: FormConfig | undefined): FormConfig {\n const normalized = normalizeFormConfig(asFormConfig(config));\n const next = cloneJson(normalized) as FormConfig;\n (next as any).fieldMetadata = stripLegacyFieldMetadata(\n (next as any).fieldMetadata,\n );\n delete (next as any).presentation;\n if (\n Array.isArray((next as any).formRules) &&\n (next as any).formRules.length === 0\n ) {\n delete (next as any).formRules;\n }\n if (isEmptyRuleBuilderState((next as any).formRulesState)) {\n delete (next as any).formRulesState;\n }\n return next;\n}\n\nfunction normalizeBindings(\n bindings: DynamicFormBindings | undefined,\n): DynamicFormBindings | undefined {\n if (!bindings || typeof bindings !== 'object') return undefined;\n\n return stripUndefinedShallow({\n mode: normalizeMode(bindings.mode),\n });\n}\n\nfunction normalizeContextSnapshot(\n snapshot: DynamicFormContextSnapshot | undefined,\n): DynamicFormContextSnapshot | undefined {\n if (!snapshot || typeof snapshot !== 'object') return undefined;\n\n return stripUndefinedShallow({\n backConfig: normalizeBackConfig(snapshot.backConfig),\n presentation: normalizePresentation(snapshot.presentation),\n schemaPrefs: normalizeSchemaPrefs(snapshot.schemaPrefs),\n });\n}\n\nfunction normalizeBackConfig(\n value: BackConfig | undefined,\n): BackConfig | undefined {\n if (!value || typeof value !== 'object') return undefined;\n return stripUndefinedDeep(cloneJson(value)) as BackConfig;\n}\n\nfunction normalizePresentation(\n value: DynamicFormPresentationSnapshot | undefined,\n): DynamicFormPresentationSnapshot | undefined {\n if (!value || typeof value !== 'object') return undefined;\n\n return stripUndefinedShallow({\n labelPosition:\n value.labelPosition === 'left' ? 'left' : value.labelPosition === 'above' ? 'above' : undefined,\n labelFontSize: normalizeNullableNumber(value.labelFontSize),\n valueFontSize: normalizeNullableNumber(value.valueFontSize),\n compact: normalizeBoolean(value.compact),\n density:\n value.density === 'comfortable' ||\n value.density === 'cozy' ||\n value.density === 'compact'\n ? value.density\n : undefined,\n labelWidth: normalizeNullableNumber(value.labelWidth),\n labelAlign: normalizeAlignment(value.labelAlign),\n valueAlign: normalizeAlignment(value.valueAlign),\n });\n}\n\nfunction normalizeSchemaPrefs(\n value: DynamicFormSchemaPrefsSnapshot | undefined,\n): DynamicFormSchemaPrefsSnapshot | undefined {\n if (!value || typeof value !== 'object') return undefined;\n\n return stripUndefinedShallow({\n notifyIfOutdated:\n value.notifyIfOutdated === 'inline' ||\n value.notifyIfOutdated === 'snackbar' ||\n value.notifyIfOutdated === 'both' ||\n value.notifyIfOutdated === 'none'\n ? value.notifyIfOutdated\n : undefined,\n snoozeMs: normalizeNonNegativeNumber(value.snoozeMs),\n autoOpenSettingsOnOutdated: normalizeBoolean(\n value.autoOpenSettingsOnOutdated,\n ),\n });\n}\n\nfunction looksLikeLegacyEditorPayload(obj: Record<string, any>): boolean {\n return (\n Object.prototype.hasOwnProperty.call(obj, 'formConfig') ||\n Object.prototype.hasOwnProperty.call(obj, 'inputsPatch') ||\n Object.prototype.hasOwnProperty.call(obj, 'backConfig') ||\n Object.prototype.hasOwnProperty.call(obj, 'presentation') ||\n Object.prototype.hasOwnProperty.call(obj, 'schemaPrefs')\n );\n}\n\nfunction extractLegacyFormConfig(obj: Record<string, any>): FormConfig {\n if (obj.formConfig && typeof obj.formConfig === 'object') {\n return asFormConfig(obj.formConfig);\n }\n\n if (obj.config && typeof obj.config === 'object') {\n return asFormConfig(obj.config);\n }\n\n return asFormConfig(obj);\n}\n\nfunction asFormConfig(raw: unknown): FormConfig {\n if (!raw || typeof raw !== 'object') {\n return { sections: [], fieldMetadata: [] } as FormConfig;\n }\n return raw as FormConfig;\n}\n\nfunction asRecord(value: unknown): Record<string, any> {\n return value && typeof value === 'object'\n ? (value as Record<string, any>)\n : {};\n}\n\nfunction normalizeMode(value: unknown): DynamicFormMode | undefined {\n return value === 'create' || value === 'edit' || value === 'view'\n ? value\n : undefined;\n}\n\nfunction normalizeNullableNumber(value: unknown): number | null | undefined {\n if (value === null) return null;\n if (value === '') return null;\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction normalizeNonNegativeNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0\n ? value\n : undefined;\n}\n\nfunction normalizeBoolean(value: unknown): boolean | undefined {\n return typeof value === 'boolean' ? value : undefined;\n}\n\nfunction normalizeAlignment(\n value: unknown,\n): 'start' | 'center' | 'end' | undefined {\n return value === 'start' || value === 'center' || value === 'end'\n ? value\n : undefined;\n}\n\nfunction stripLegacyFieldMetadata(arr: any[] | undefined): any[] | undefined {\n if (!Array.isArray(arr)) return arr;\n return arr.map((item) => {\n const copy = { ...(item || {}) };\n delete copy.endpoint;\n return copy;\n });\n}\n\nfunction isEmptyRuleBuilderState(state: any): boolean {\n try {\n const nodesEmpty = !state?.nodes || Object.keys(state.nodes).length === 0;\n const rootsEmpty = !state?.rootNodes || state.rootNodes.length === 0;\n return nodesEmpty && rootsEmpty;\n } catch {\n return false;\n }\n}\n\nfunction errorDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'error', code, message, path };\n}\n\nfunction warnDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'warning', code, message, path };\n}\n\nfunction infoDiagnostic(\n code: string,\n message: string,\n path?: string,\n): EditorDiagnostic {\n return { level: 'info', code, message, path };\n}\n\nfunction cloneJson<T>(value: T): T {\n return value == null ? value : JSON.parse(JSON.stringify(value));\n}\n\nfunction trimString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction stripUndefinedShallow<T extends Record<string, any>>(\n value: T,\n): T | undefined {\n const entries = Object.entries(value).filter(([, item]) => item !== undefined);\n if (!entries.length) return undefined;\n return Object.fromEntries(entries) as T;\n}\n\nfunction stripUndefinedDeep<T>(value: T): T {\n if (Array.isArray(value)) {\n return value\n .map((item) => stripUndefinedDeep(item))\n .filter((item) => item !== undefined) as T;\n }\n\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n const result: Record<string, unknown> = {};\n Object.entries(value as Record<string, unknown>).forEach(([key, item]) => {\n const normalized = stripUndefinedDeep(item);\n if (normalized !== undefined) {\n result[key] = normalized;\n }\n });\n return result as T;\n}\n\nfunction deepEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(stripUndefinedDeep(cloneJson(left))) ===\n JSON.stringify(stripUndefinedDeep(cloneJson(right)));\n}\n","import type { PraxisI18nConfig } from '@praxisui/core';\n\nexport const PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE = 'praxisDynamicForm';\n\nexport const PRAXIS_DYNAMIC_FORM_I18N_CONFIG: Partial<PraxisI18nConfig> = {\n namespaces: {\n [PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE]: {\n 'pt-BR': {\n 'settings.title': 'Configuração do Formulário',\n },\n 'en-US': {\n 'settings.title': 'Form Configuration',\n },\n },\n },\n};\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport {\n FormLayout,\n ASYNC_CONFIG_STORAGE,\n type AsyncConfigStorage,\n} from '@praxisui/core';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class FormLayoutService {\n constructor(\n @Optional() @Inject(ASYNC_CONFIG_STORAGE) private storage?: AsyncConfigStorage,\n ) {}\n\n async loadLayout(componentId: string): Promise<FormLayout | null> {\n if (!this.storage) return null;\n try {\n const v = await firstValueFrom(\n this.storage.loadConfig<FormLayout>(`praxis-layout-${componentId}`),\n );\n return v ?? null;\n } catch {\n return null;\n }\n }\n\n saveLayout(componentId: string, layout: FormLayout): void {\n this.storage\n ?.saveConfig(`praxis-layout-${componentId}`, layout)\n .subscribe();\n }\n\n clearLayout(componentId: string): void {\n this.storage?.clearConfig(`praxis-layout-${componentId}`).subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { FieldMetadata } from '@praxisui/core';\nimport { FormLayoutRule, FormRuleTargetType } from '@praxisui/core';\n\n@Injectable({ providedIn: 'root' })\nexport class FormContextService {\n private fieldsByContext = new Map<string, BehaviorSubject<FieldMetadata[]>>();\n private componentsByContext = new Map<string, Map<string, any>>();\n private formRulesByContext = new Map<string, FormLayoutRule[]>();\n private currentContext = new BehaviorSubject<string>('default');\n\n getCurrentContext(): string {\n return this.currentContext.value;\n }\n\n setContext(context: string): void {\n this.currentContext.next(context);\n if (!this.fieldsByContext.has(context)) {\n this.fieldsByContext.set(context, new BehaviorSubject<FieldMetadata[]>([]));\n }\n if (!this.componentsByContext.has(context)) {\n this.componentsByContext.set(context, new Map<string, any>());\n }\n if (!this.formRulesByContext.has(context)) {\n this.formRulesByContext.set(context, []);\n }\n }\n\n getAvailableFields$(): Observable<FieldMetadata[]> {\n const ctx = this.currentContext.value;\n if (!this.fieldsByContext.has(ctx)) {\n this.fieldsByContext.set(ctx, new BehaviorSubject<FieldMetadata[]>([]));\n }\n return this.fieldsByContext.get(ctx)!.asObservable();\n }\n\n setAvailableFields(fields: FieldMetadata[]): void {\n const ctx = this.currentContext.value;\n if (!this.fieldsByContext.has(ctx)) {\n this.fieldsByContext.set(ctx, new BehaviorSubject<FieldMetadata[]>([]));\n }\n this.fieldsByContext.get(ctx)!.next(fields);\n }\n\n registerFieldComponent(fieldName: string, component: any): void {\n const ctx = this.currentContext.value;\n if (!this.componentsByContext.has(ctx)) {\n this.componentsByContext.set(ctx, new Map<string, any>());\n }\n this.componentsByContext.get(ctx)!.set(fieldName, component);\n }\n\n getFieldComponent(fieldName: string): any | null {\n const ctx = this.currentContext.value;\n return this.componentsByContext.get(ctx)?.get(fieldName) ?? null;\n }\n\n unregisterFieldComponent(fieldName: string): void {\n const ctx = this.currentContext.value;\n this.componentsByContext.get(ctx)?.delete(fieldName);\n }\n\n setFormRules(rules: FormLayoutRule[]): void {\n this.formRulesByContext.set(this.currentContext.value, rules);\n }\n\n getFormRuleById(ruleId: string): FormLayoutRule | undefined {\n const rules = this.formRulesByContext.get(this.currentContext.value) || [];\n return rules.find(r => r.id === ruleId);\n }\n\n getFormRulesByTargetType(targetType: FormRuleTargetType): FormLayoutRule[] {\n const rules = this.formRulesByContext.get(this.currentContext.value) || [];\n return rules.filter((r) => r.targetType === targetType);\n }\n}\n","import { FormLayoutRule, RULE_PROPERTY_SCHEMA, RulePropertyDefinition, migrateFormLayoutRule } from '@praxisui/core';\nimport {\n clampSectionHeaderInitialsMaxLength,\n sanitizeSectionHeaderConfig,\n} from './section-header.utils';\n\ntype TargetType = FormLayoutRule['targetType'];\n\ndeclare const ngDevMode: boolean | undefined;\n\nexport function filterRuleProperties(\n targetType: TargetType,\n props: Record<string, any> | undefined,\n): Record<string, any> {\n if (!props || typeof props !== 'object') return {};\n const tt = (targetType || 'field') as NonNullable<FormLayoutRule['targetType']>;\n const defs = RULE_PROPERTY_SCHEMA[tt] || [];\n const defMap = new Map<string, RulePropertyDefinition>();\n defs.forEach((d: RulePropertyDefinition) => defMap.set(d.name, d));\n\n const isDev = typeof ngDevMode !== 'undefined' && !!ngDevMode;\n\n return Object.entries(props).reduce<Record<string, any>>((acc, [name, value]) => {\n const def = defMap.get(name);\n if (!def) {\n if (isDev) {\n console.warn(`[rules] Propriedade rejeitada (não whitelisted): ${name}`);\n }\n return acc;\n }\n const coerced = coerceValue(def, value);\n if (coerced.ok) {\n acc[name] = coerced.value;\n } else if (isDev) {\n console.warn(`[rules] Valor inválido para propriedade \"${name}\"`, { value });\n }\n return acc;\n }, {});\n}\n\nexport function sanitizeRuleEffect(\n rule: FormLayoutRule,\n): FormLayoutRule {\n const migrated = migrateFormLayoutRule(rule);\n const { targetType, targets } = normalizeTargets(migrated);\n const properties = filterRuleProperties(targetType, migrated.effect?.properties);\n const propertiesWhenFalse = filterRuleProperties(\n targetType,\n migrated.effect?.propertiesWhenFalse,\n );\n return {\n ...migrated,\n targetType,\n targets,\n effect: {\n ...migrated.effect,\n properties,\n propertiesWhenFalse,\n },\n };\n}\n\nfunction normalizeTargets(\n rule: FormLayoutRule,\n): { targetType: NonNullable<FormLayoutRule['targetType']>; targets: string[] } {\n const rawTargets =\n (rule.targets && rule.targets.length ? rule.targets : (rule as any).targetFields) || [];\n\n const detectedType =\n rawTargets.some((t: string) => isScopedSectionHeaderActionTarget(t) || isUnscopedSectionHeaderActionTarget(t))\n ? 'action'\n : rawTargets.some((t: string) => t?.startsWith('section:')) ? 'section'\n : rawTargets.some((t: string) => t?.startsWith('action:')) ? 'action'\n : rawTargets.some((t: string) => t?.startsWith('row:')) ? 'row'\n : rawTargets.some((t: string) => t?.startsWith('column:')) ? 'column'\n : rule.targetType || 'field';\n\n const targets = rawTargets.map((t: string) => stripPrefix(t));\n const allowed: Array<NonNullable<FormLayoutRule['targetType']>> = ['field', 'section', 'action', 'row', 'column'];\n const explicit = allowed.includes(rule.targetType as any)\n ? (rule.targetType as NonNullable<FormLayoutRule['targetType']>)\n : undefined;\n\n return {\n targetType: explicit || detectedType || 'field',\n targets,\n };\n}\n\nfunction stripPrefix(value: string): string {\n if (isScopedSectionHeaderActionTarget(value) || isUnscopedSectionHeaderActionTarget(value)) {\n return value;\n }\n if (value?.startsWith('section:')) return value.substring('section:'.length);\n if (value?.startsWith('action:')) return value.substring('action:'.length);\n if (value?.startsWith('row:')) return value.substring('row:'.length);\n if (value?.startsWith('column:')) return value.substring('column:'.length);\n return value;\n}\n\nfunction isScopedSectionHeaderActionTarget(value: string | undefined): boolean {\n return !!value && value.startsWith('section:') && value.includes(':header-action:');\n}\n\nfunction isUnscopedSectionHeaderActionTarget(value: string | undefined): boolean {\n return !!value && value.startsWith('header-action:');\n}\n\nfunction coerceValue(\n def: RulePropertyDefinition,\n value: any,\n): { ok: boolean; value?: any } {\n // null is treated as an explicit \"remove override\"\n if (value === null) {\n return { ok: true, value: null };\n }\n\n switch (def.type) {\n case 'boolean':\n if (typeof value === 'boolean') return { ok: true, value };\n if (value === 'true') return { ok: true, value: true };\n if (value === 'false') return { ok: true, value: false };\n return { ok: false };\n case 'number':\n if (typeof value === 'number' && !Number.isNaN(value)) {\n if (def.name === 'sectionHeader.initialsMaxLength') {\n return { ok: true, value: clampSectionHeaderInitialsMaxLength(value) };\n }\n return { ok: true, value };\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n if (!Number.isNaN(parsed)) {\n if (def.name === 'sectionHeader.initialsMaxLength') {\n return { ok: true, value: clampSectionHeaderInitialsMaxLength(parsed) };\n }\n return { ok: true, value: parsed };\n }\n }\n return { ok: false };\n case 'enum': {\n const accepted = def.enumValues?.map((e) => e.value) || [];\n return accepted.includes(value) ? { ok: true, value } : { ok: false };\n }\n case 'string':\n return typeof value === 'string' ? { ok: true, value } : { ok: false };\n case 'object':\n if (def.name === 'options' && Array.isArray(value)) {\n return { ok: true, value: sanitizeStructured(def.name, value) };\n }\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n return { ok: true, value: sanitizeStructured(def.name, value) };\n }\n return { ok: false };\n default:\n return { ok: false };\n }\n}\n\nfunction sanitizeStructured(\n name: string,\n value: Record<string, any> | any[],\n): any {\n if (name === 'options') {\n if (Array.isArray(value)) {\n const items = value\n .map((opt) => {\n if (!opt || typeof opt !== 'object') return null;\n const label = (opt as any).label ?? (opt as any).text;\n const val = (opt as any).value;\n if (label === undefined || val === undefined) return null;\n const sanitized: any = { label, value: val };\n if ((opt as any).disabled !== undefined) sanitized.disabled = !!(opt as any).disabled;\n return sanitized;\n })\n .filter(Boolean) as any;\n return { items };\n }\n if (value && typeof value === 'object' && Array.isArray((value as any).items)) {\n return sanitizeStructured('options', (value as any).items);\n }\n return {};\n }\n if (name === 'validators') {\n const allowed: Record<string, any> = {};\n Object.entries(value || {}).forEach(([k, v]) => {\n if (\n typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n v === null\n ) {\n allowed[k] = v;\n }\n });\n return allowed;\n }\n if (name === 'style') {\n const allowed: Record<string, any> = {};\n Object.entries(value || {}).forEach(([k, v]) => {\n if (typeof v === 'string' || typeof v === 'number') {\n allowed[k] = v;\n }\n });\n return allowed;\n }\n if (name === 'sectionHeader') {\n return sanitizeSectionHeaderConfig(value);\n }\n return value;\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormLayoutRule } from '@praxisui/core';\nimport { DslParser } from '@praxisui/specification';\nimport { sanitizeRuleEffect } from '../utils/rule-property.utils';\n\n/**\n * Structured properties resulting from rule evaluation.\n */\nexport interface RuleApplicationResult {\n fieldProps: Record<string, Record<string, any>>;\n sectionProps: Record<string, Record<string, any>>;\n actionProps: Record<string, Record<string, any>>;\n rowProps: Record<string, Record<string, any>>;\n columnProps: Record<string, Record<string, any>>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormRulesService {\n private normalizeLegacyConditionSyntax(condition: string): string {\n return condition\n .replace(/!==/g, ' ne ')\n .replace(/!=/g, ' ne ')\n .replace(/===/g, ' eq ')\n .replace(/==/g, ' eq ');\n }\n\n /**\n * Evaluates a set of form rules against the current value of a FormGroup.\n *\n * @param formGroup The Angular FormGroup to evaluate against.\n * @param formRules The array of rules to process.\n * @returns A RuleEvaluationResult object containing the visibility and required states for the fields.\n */\n public applyRules(formGroup: FormGroup, formRules: FormLayoutRule[]): RuleApplicationResult {\n const result: RuleApplicationResult = {\n fieldProps: {},\n sectionProps: {},\n actionProps: {},\n rowProps: {},\n columnProps: {},\n };\n\n if (!formRules || formRules.length === 0) {\n return result;\n }\n\n const formData = formGroup.value;\n const parser = new DslParser<any>();\n\n for (const originalRule of formRules) {\n const rule = sanitizeRuleEffect(originalRule);\n if (!rule || !rule.targets?.length || !rule.targetType) {\n continue;\n }\n\n const effect = rule.effect;\n if (!effect) {\n continue;\n }\n\n try {\n const condition = effect.condition;\n let isSatisfied = true;\n if (condition === null || condition === undefined) {\n isSatisfied = true;\n } else if (typeof condition === 'string') {\n const normalizedCondition = this.normalizeLegacyConditionSyntax(condition);\n const spec = parser.parse(normalizedCondition);\n isSatisfied = spec.isSatisfiedBy(formData);\n } else if (typeof condition === 'object' && typeof (condition as any).isSatisfiedBy === 'function') {\n isSatisfied = (condition as any).isSatisfiedBy(formData);\n } else {\n continue;\n }\n\n const targetMap =\n rule.targetType === 'field'\n ? result.fieldProps\n : rule.targetType === 'section'\n ? result.sectionProps\n : rule.targetType === 'action'\n ? result.actionProps\n : rule.targetType === 'row'\n ? result.rowProps\n : rule.targetType === 'column'\n ? result.columnProps\n : null;\n\n if (!targetMap) {\n continue;\n }\n\n const properties = isSatisfied ? effect.properties : effect.propertiesWhenFalse;\n if (!properties) {\n continue;\n }\n\n for (const targetId of rule.targets) {\n if (!targetId) continue;\n const current = targetMap[targetId] || {};\n const next = { ...current };\n Object.entries(properties || {}).forEach(([k, v]) => {\n if (v === null) {\n this.deletePath(next, k);\n } else {\n this.setPath(next, k, v);\n }\n });\n targetMap[targetId] = next;\n }\n } catch (error) {\n console.error(\n `[FormRulesService] Error evaluating rule \"${rule.name || rule.id}\":`,\n error,\n );\n }\n }\n\n return result;\n }\n\n private setPath(target: Record<string, any>, path: string, value: any): void {\n if (!path.includes('.')) {\n target[path] = value;\n return;\n }\n const segments = path.split('.').map((segment) => segment.trim()).filter(Boolean);\n if (!segments.length) return;\n let cursor: Record<string, any> = target;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const current = cursor[segment];\n if (!current || typeof current !== 'object' || Array.isArray(current)) {\n cursor[segment] = {};\n } else {\n cursor[segment] = { ...current };\n }\n cursor = cursor[segment];\n }\n cursor[segments[segments.length - 1]] = value;\n }\n\n private deletePath(target: Record<string, any>, path: string): void {\n if (!path.includes('.')) {\n delete target[path];\n return;\n }\n const segments = path.split('.').map((segment) => segment.trim()).filter(Boolean);\n if (!segments.length) return;\n let cursor: Record<string, any> | undefined = target;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const next: unknown = cursor?.[segment];\n if (!next || typeof next !== 'object' || Array.isArray(next)) return;\n cursor = next as Record<string, any>;\n }\n if (!cursor) return;\n delete cursor[segments[segments.length - 1]];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CanvasElement } from '../models/canvas.models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CanvasStateService {\n private readonly _hoveredElement$ = new BehaviorSubject<CanvasElement | null>(null);\n public readonly hoveredElement$ = this._hoveredElement$.asObservable();\n\n private readonly _selectedElement$ = new BehaviorSubject<CanvasElement | null>(null);\n public readonly selectedElement$ = this._selectedElement$.asObservable();\n\n setHoveredElement(element: CanvasElement | null): void {\n this._hoveredElement$.next(element);\n }\n\n setSelectedElement(element: CanvasElement | null): void {\n // Don't clear selection if the same element is clicked again\n if (element && this._selectedElement$.value?.domElement === element.domElement) {\n return;\n }\n this._selectedElement$.next(element);\n }\n\n get selectedElement(): CanvasElement | null {\n return this._selectedElement$.value;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { produce } from 'immer';\nimport {\n FieldMetadata,\n FormColumn,\n FormConfig,\n FormRow,\n FormSection,\n ensureIds,\n} from '@praxisui/core';\nimport { CanvasPathPart } from '../canvas/models/canvas.models';\n\n/** Service providing immutable operations over form layout configuration. */\n\nexport type RemovePolicy = 'keepEmptyContainers' | 'pruneEmptyContainers';\n\nexport interface Operation {\n type: string;\n correlationId?: string;\n origin?: string;\n from?: {\n sectionId?: string;\n rowId?: string;\n columnId?: string;\n fieldName?: string;\n sectionIndex?: number;\n rowIndex?: number;\n colIndex?: number;\n fieldIndex?: number;\n };\n to?: {\n sectionId?: string;\n rowId?: string;\n columnId?: string;\n fieldName?: string;\n sectionIndex?: number;\n rowIndex?: number;\n colIndex?: number;\n fieldIndex?: number;\n toIndex?: number;\n toFieldIndex?: number;\n };\n policy?: RemovePolicy;\n meta?: any;\n [key: string]: any;\n}\n\nexport interface LayoutResult {\n config: FormConfig;\n op: Operation;\n}\n\nexport interface LayoutChange {\n timestamp: number;\n op: Operation;\n config: FormConfig;\n}\n\nexport interface Path {\n sectionIndex: number;\n rowIndex?: number;\n colIndex?: number;\n}\n\nexport interface PathWithIndex extends Path {\n toIndex: number;\n}\n\nexport interface FieldPath extends Path {\n colIndex: number;\n fieldIndex: number;\n}\n\nexport interface FieldPathWithIndex extends Path {\n colIndex: number;\n toFieldIndex: number;\n}\n\nexport interface FieldPathContainer extends Path {\n colIndex: number;\n}\n\nexport interface IdPath {\n sectionId: string;\n rowId?: string;\n columnId?: string;\n fieldName?: string;\n}\n\nexport interface ValidationReport {\n valid: boolean;\n errors: string[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DynamicFormLayoutService {\n private readonly changesSubject = new Subject<LayoutChange>();\n readonly changes$ = this.changesSubject.asObservable();\n\n private emit(op: Operation, config: FormConfig): void {\n this.changesSubject.next({ timestamp: Date.now(), op, config });\n }\n\n normalizeConfig(config: FormConfig): FormConfig {\n return produce(config, (draft) => {\n draft.sections = draft.sections || [];\n draft.sections.forEach((section) => {\n section.rows = section.rows || [];\n section.rows.forEach((row) => {\n row.columns = row.columns || [];\n row.columns.forEach((col) => {\n col.fields = (col.fields || []).map((f: any) =>\n typeof f === 'string' ? { name: f } : f,\n ) as any;\n });\n });\n });\n });\n }\n\n validateConfig(config: FormConfig): ValidationReport {\n const errors: string[] = [];\n config.sections?.forEach((section, sIdx) => {\n if (!section.rows) {\n errors.push(`section[${sIdx}] missing rows`);\n return;\n }\n section.rows.forEach((row, rIdx) => {\n if (!row.columns) {\n errors.push(`section[${sIdx}].row[${rIdx}] missing columns`);\n return;\n }\n row.columns.forEach((col, cIdx) => {\n if (!col.fields) {\n errors.push(\n `section[${sIdx}].row[${rIdx}].column[${cIdx}] missing fields`,\n );\n return;\n }\n col.fields.forEach((field: any, fIdx: number) => {\n const name = typeof field === 'string' ? field : field?.name;\n if (!name) {\n errors.push(\n `field at section[${sIdx}].row[${rIdx}].column[${cIdx}].field[${fIdx}] missing name`,\n );\n }\n });\n });\n });\n });\n return { valid: errors.length === 0, errors };\n }\n\n generateFormConfigFromMetadata(\n fields: FieldMetadata[],\n options?: { fieldsPerRow?: number; defaultSectionTitle?: string },\n ): FormConfig {\n // Padrão explícito: 2 campos por linha\n const fieldsPerRow = options?.fieldsPerRow ?? 2;\n const defaultSectionTitle = options?.defaultSectionTitle ?? 'Informações';\n\n const groupedFields = new Map<string, FieldMetadata[]>();\n for (const field of fields) {\n const groupName = field.group || 'default';\n if (!groupedFields.has(groupName)) {\n groupedFields.set(groupName, []);\n }\n groupedFields.get(groupName)!.push(field);\n }\n\n groupedFields.forEach((list) => {\n list.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n });\n\n const sections: FormSection[] = [];\n groupedFields.forEach((groupFields, groupName) => {\n const sectionTitle =\n groupName === 'default'\n ? defaultSectionTitle\n : this.capitalizeFirstLetter(groupName);\n sections.push({\n id: groupName,\n title: sectionTitle,\n rows: this.createRowsFromFields(groupFields, fieldsPerRow),\n });\n });\n\n return ensureIds({\n sections,\n fieldMetadata: fields,\n metadata: {\n version: '1.0.0',\n lastUpdated: new Date(),\n source: 'default',\n },\n });\n }\n\n getElementPath(config: FormConfig, element: HTMLElement): CanvasPathPart[] {\n const pathParts: CanvasPathPart[] = [];\n let current: HTMLElement | null = element;\n\n while (current && current.matches('.canvas-element')) {\n let part: CanvasPathPart | null = null;\n\n if (current.hasAttribute('data-field-name')) {\n const fieldName = current.getAttribute('data-field-name')!;\n const field = config.fieldMetadata?.find((f) => f.name === fieldName);\n if (field) {\n part = {\n type: 'field',\n name: field.label || field.name,\n data: field,\n domElement: current,\n };\n }\n } else if (current.classList.contains('form-column')) {\n const sectionId = current.getAttribute('data-section-id')!;\n const rowId = current.getAttribute('data-row-id')!;\n const colId = current.getAttribute('data-column-id')!;\n const section = config.sections.find((s) => s.id === sectionId);\n const rowIndex = section?.rows.findIndex((r) => r.id === rowId) ?? -1;\n const row = rowIndex >= 0 ? section!.rows[rowIndex] : undefined;\n const colIndex = row?.columns.findIndex((c) => c.id === colId) ?? -1;\n const column = colIndex >= 0 ? row!.columns[colIndex] : undefined;\n if (column) {\n part = {\n type: 'column',\n name: `Coluna ${colIndex + 1}`,\n data: column,\n domElement: current,\n };\n }\n } else if (current.classList.contains('form-row')) {\n const sectionId = current.getAttribute('data-section-id')!;\n const rowId = current.getAttribute('data-row-id')!;\n const section = config.sections.find((s) => s.id === sectionId);\n const rowIndex = section?.rows.findIndex((r) => r.id === rowId) ?? -1;\n const row = rowIndex >= 0 ? section!.rows[rowIndex] : undefined;\n if (row) {\n part = {\n type: 'row',\n name: `Linha ${rowIndex + 1}`,\n data: row,\n domElement: current,\n };\n }\n } else if (current.classList.contains('form-section')) {\n const sectionId = current.getAttribute('data-section-id')!;\n const section = config.sections.find((s) => s.id === sectionId);\n if (section) {\n part = {\n type: 'section',\n name: section.title || `Seção '${section.id}'`,\n data: section,\n domElement: current,\n };\n }\n } else if (current.classList.contains('form-actions')) {\n part = {\n type: 'actions',\n name: 'Ações',\n data: config.actions,\n domElement: current,\n };\n }\n\n if (part) {\n pathParts.unshift(part);\n }\n\n current = current.parentElement?.closest('.canvas-element') || null;\n }\n\n return pathParts;\n }\n\n updateElement(\n config: FormConfig,\n path: CanvasPathPart[],\n updatedData: any,\n options: { correlationId?: string; origin?: string } = {},\n ): LayoutResult {\n const op: Operation = {\n type: 'updateElement',\n path,\n updatedData,\n correlationId: options.correlationId,\n origin: options.origin,\n };\n const resolved = this.resolvePath(config, path);\n return this.mutate(config, op, (draft) => {\n let context: any = draft;\n let final: any = null;\n for (const step of resolved) {\n switch (step.type) {\n case 'section':\n context = context.sections[step.index];\n final = context;\n break;\n case 'row':\n context = context.rows[step.index];\n final = context;\n break;\n case 'column':\n context = context.columns[step.index];\n final = context;\n break;\n case 'field':\n final = draft.fieldMetadata?.find((f) => f.name === step.name);\n context = final;\n break;\n case 'actions':\n final = draft.actions;\n context = final;\n break;\n }\n }\n if (final) {\n Object.assign(final, updatedData);\n } else {\n console.warn(\n '[DynamicFormLayoutService] Could not find element to update in draft config.',\n );\n }\n });\n }\n\n private resolvePath(config: FormConfig, path: CanvasPathPart[]): any[] {\n const steps: any[] = [];\n let ctx: any = config;\n for (const part of path) {\n switch (part.type) {\n case 'section':\n const sIdx = ctx.sections.findIndex(\n (s: FormSection) => s.id === (part.data as FormSection).id,\n );\n steps.push({ type: 'section', index: sIdx });\n ctx = ctx.sections[sIdx];\n break;\n case 'row':\n const rowData = part.data as FormRow;\n let rIdx = -1;\n if (rowData?.id) {\n rIdx = ctx.rows.findIndex((r: FormRow) => r.id === rowData.id);\n }\n if (rIdx < 0) {\n rIdx = ctx.rows.findIndex((r: FormRow) => r === rowData);\n }\n steps.push({ type: 'row', index: rIdx });\n ctx = ctx.rows[rIdx];\n break;\n case 'column':\n const colData = part.data as FormColumn;\n let cIdx = -1;\n if (colData?.id) {\n cIdx = ctx.columns.findIndex(\n (c: FormColumn) => c.id === colData.id,\n );\n }\n if (cIdx < 0) {\n cIdx = ctx.columns.findIndex((c: FormColumn) => c === colData);\n }\n steps.push({ type: 'column', index: cIdx });\n ctx = ctx.columns[cIdx];\n break;\n case 'field':\n steps.push({\n type: 'field',\n name: (part.data as FieldMetadata).name,\n });\n break;\n case 'actions':\n steps.push({ type: 'actions' });\n break;\n }\n }\n return steps;\n }\n\n resolvePathByIds(config: FormConfig, ids: IdPath): FieldPath {\n const cfg = ensureIds(config);\n const report = this.validateConfig(cfg);\n if (!report.valid) {\n throw new Error(`invalid config: ${report.errors.join('; ')}`);\n }\n const sectionIndex = cfg.sections.findIndex((s) => s.id === ids.sectionId);\n if (sectionIndex < 0) {\n throw new Error(`sectionId not found: ${ids.sectionId}`);\n }\n let rowIndex: number | undefined;\n if (ids.rowId) {\n rowIndex = cfg.sections[sectionIndex].rows.findIndex(\n (r) => r.id === ids.rowId,\n );\n if (rowIndex < 0) {\n throw new Error(`rowId not found: ${ids.rowId}`);\n }\n }\n let colIndex: number | undefined;\n if (ids.columnId) {\n if (rowIndex === undefined) {\n throw new Error('rowId required when columnId is provided');\n }\n colIndex = cfg.sections[sectionIndex].rows[rowIndex].columns.findIndex(\n (c) => c.id === ids.columnId,\n );\n if (colIndex < 0) {\n throw new Error(`columnId not found: ${ids.columnId}`);\n }\n }\n let fieldIndex: number | undefined;\n if (ids.fieldName) {\n if (colIndex === undefined || rowIndex === undefined) {\n throw new Error(\n 'columnId and rowId required when fieldName is provided',\n );\n }\n const fields = cfg.sections[sectionIndex].rows[rowIndex].columns[colIndex]\n .fields as any[];\n fieldIndex = fields.findIndex(\n (f) => (typeof f === 'string' ? f : f.name) === ids.fieldName,\n );\n if (fieldIndex < 0) {\n throw new Error(`fieldName not found: ${ids.fieldName}`);\n }\n }\n return { sectionIndex, rowIndex, colIndex, fieldIndex } as FieldPath;\n }\n\n private createRowsFromFields(\n fields: FieldMetadata[],\n fieldsPerRow: number,\n ): FormRow[] {\n const rows: FormRow[] = [];\n for (let i = 0; i < fields.length; i += fieldsPerRow) {\n const rowFields = fields.slice(i, i + fieldsPerRow);\n // Calcular span padrão por coluna para preencher 12 colunas do grid\n // Objetivo: 2 campos por linha em telas md+ (6/12 cada) e 1 por linha em xs/sm (12/12)\n const perRow = Math.max(1, fieldsPerRow || 2);\n const base = Math.max(1, Math.floor(12 / perRow));\n const columns: FormColumn[] = rowFields.map((field) => ({\n id: this.genId('col'),\n fields: [field.name],\n span: { xs: 12, sm: 12, md: base, lg: base, xl: base },\n }));\n rows.push({ id: this.genId('row'), columns });\n }\n return rows;\n }\n\n private genId(prefix: string): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n }\n\n private capitalizeFirstLetter(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n private assertIndex(\n index: number,\n length: number,\n label: string,\n inclusive = false,\n ): void {\n const max = inclusive ? length : length - 1;\n if (index < 0 || index > max) {\n throw new Error(`${label} out of bounds (0-${max}): ${index}`);\n }\n }\n\n private mutate(\n config: FormConfig,\n op: Operation,\n producer: (draft: FormConfig) => void,\n ): LayoutResult {\n const next = ensureIds(produce(config, producer));\n const report = this.validateConfig(next);\n if (!report.valid) {\n throw new Error(`invalid config: ${report.errors.join('; ')}`);\n }\n this.emit(op, next);\n return { config: next, op };\n }\n\n moveSection(\n config: FormConfig,\n fromIndex: number,\n toIndex: number,\n ): LayoutResult {\n const op = { type: 'moveSection', fromIndex, toIndex };\n if (fromIndex === toIndex) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(fromIndex, sections.length, 'fromIndex');\n this.assertIndex(toIndex, sections.length, 'toIndex');\n return this.mutate(config, op, (draft) => {\n const [section] = draft.sections.splice(fromIndex, 1);\n draft.sections.splice(toIndex, 0, section);\n });\n }\n\n insertSection(\n config: FormConfig,\n section: any,\n atIndex = config.sections.length,\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(atIndex, sections.length, 'atIndex', true);\n const op = { type: 'insertSection', section, atIndex };\n return this.mutate(config, op, (draft) => {\n draft.sections.splice(atIndex, 0, section);\n });\n }\n\n removeSection(\n config: FormConfig,\n index: number,\n _policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(index, sections.length, 'index');\n const op = { type: 'removeSection', index };\n return this.mutate(config, op, (draft) => {\n draft.sections.splice(index, 1);\n });\n }\n\n moveRow(config: FormConfig, from: Path, to: PathWithIndex): LayoutResult {\n const op = { type: 'moveRow', from, to };\n if (from.sectionIndex === to.sectionIndex && from.rowIndex === to.toIndex) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(from.sectionIndex, sections.length, 'from.sectionIndex');\n this.assertIndex(to.sectionIndex, sections.length, 'to.sectionIndex');\n const srcSection = sections[from.sectionIndex];\n this.assertIndex(from.rowIndex!, srcSection.rows.length, 'from.rowIndex');\n const dstSection = sections[to.sectionIndex];\n this.assertIndex(to.toIndex, dstSection.rows.length, 'to.toIndex', true);\n return this.mutate(config, op, (draft) => {\n const source = draft.sections[from.sectionIndex];\n const [row] = source.rows.splice(from.rowIndex!, 1);\n const dest = draft.sections[to.sectionIndex];\n dest.rows.splice(to.toIndex, 0, row);\n });\n }\n\n insertRow(\n config: FormConfig,\n sectionIndex: number,\n row: any,\n atIndex = config.sections[sectionIndex].rows.length,\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(sectionIndex, sections.length, 'sectionIndex');\n const rows = sections[sectionIndex].rows;\n this.assertIndex(atIndex, rows.length, 'atIndex', true);\n const op = { type: 'insertRow', sectionIndex, row, atIndex };\n return this.mutate(config, op, (draft) => {\n draft.sections[sectionIndex].rows.splice(atIndex, 0, row);\n });\n }\n\n removeRow(\n config: FormConfig,\n sectionIndex: number,\n rowIndex: number,\n policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(sectionIndex, sections.length, 'sectionIndex');\n const rows = sections[sectionIndex].rows;\n this.assertIndex(rowIndex, rows.length, 'rowIndex');\n const op = { type: 'removeRow', sectionIndex, rowIndex, policy };\n return this.mutate(config, op, (draft) => {\n const section = draft.sections[sectionIndex];\n section.rows.splice(rowIndex, 1);\n if (policy === 'pruneEmptyContainers' && section.rows.length === 0) {\n draft.sections.splice(sectionIndex, 1);\n }\n });\n }\n\n moveColumn(config: FormConfig, from: Path, to: PathWithIndex): LayoutResult {\n const op = { type: 'moveColumn', from, to };\n if (\n from.sectionIndex === to.sectionIndex &&\n from.rowIndex === to.rowIndex &&\n from.colIndex === to.toIndex\n ) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(from.sectionIndex, sections.length, 'from.sectionIndex');\n this.assertIndex(to.sectionIndex, sections.length, 'to.sectionIndex');\n const srcRows = sections[from.sectionIndex].rows;\n this.assertIndex(from.rowIndex!, srcRows.length, 'from.rowIndex');\n const dstRows = sections[to.sectionIndex].rows;\n this.assertIndex(to.rowIndex!, dstRows.length, 'to.rowIndex');\n const srcRow = srcRows[from.rowIndex!];\n const dstRow = dstRows[to.rowIndex!];\n this.assertIndex(from.colIndex!, srcRow.columns.length, 'from.colIndex');\n this.assertIndex(to.toIndex, dstRow.columns.length, 'to.toIndex', true);\n return this.mutate(config, op, (draft) => {\n const sRow = draft.sections[from.sectionIndex].rows[from.rowIndex!];\n const [col] = sRow.columns.splice(from.colIndex!, 1);\n const dRow = draft.sections[to.sectionIndex].rows[to.rowIndex!];\n dRow.columns.splice(to.toIndex, 0, col);\n });\n }\n\n insertColumn(\n config: FormConfig,\n secIdx: number,\n rowIdx: number,\n col: any,\n atIndex = config.sections[secIdx].rows[rowIdx].columns.length,\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(secIdx, sections.length, 'secIdx');\n const rows = sections[secIdx].rows;\n this.assertIndex(rowIdx, rows.length, 'rowIdx');\n const cols = rows[rowIdx].columns;\n this.assertIndex(atIndex, cols.length, 'atIndex', true);\n const op = { type: 'insertColumn', secIdx, rowIdx, col, atIndex };\n return this.mutate(config, op, (draft) => {\n draft.sections[secIdx].rows[rowIdx].columns.splice(atIndex, 0, col);\n });\n }\n\n removeColumn(\n config: FormConfig,\n secIdx: number,\n rowIdx: number,\n colIdx: number,\n policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(secIdx, sections.length, 'secIdx');\n const rows = sections[secIdx].rows;\n this.assertIndex(rowIdx, rows.length, 'rowIdx');\n const cols = rows[rowIdx].columns;\n this.assertIndex(colIdx, cols.length, 'colIdx');\n const op = { type: 'removeColumn', secIdx, rowIdx, colIdx, policy };\n return this.mutate(config, op, (draft) => {\n const row = draft.sections[secIdx].rows[rowIdx];\n row.columns.splice(colIdx, 1);\n if (policy === 'pruneEmptyContainers' && row.columns.length === 0) {\n draft.sections[secIdx].rows.splice(rowIdx, 1);\n if (draft.sections[secIdx].rows.length === 0) {\n draft.sections.splice(secIdx, 1);\n }\n }\n });\n }\n\n moveField(\n config: FormConfig,\n from: FieldPath,\n to: FieldPathWithIndex,\n options: {\n policy?: RemovePolicy;\n correlationId?: string;\n origin?: string;\n } = {},\n ): LayoutResult {\n const policy = options.policy ?? 'keepEmptyContainers';\n const op: Operation = {\n type: 'moveField',\n correlationId: options.correlationId,\n origin: options.origin,\n from: {\n sectionIndex: from.sectionIndex,\n rowIndex: from.rowIndex,\n colIndex: from.colIndex,\n fieldIndex: from.fieldIndex,\n },\n to: {\n sectionIndex: to.sectionIndex,\n rowIndex: to.rowIndex,\n colIndex: to.colIndex,\n toFieldIndex: to.toFieldIndex,\n },\n policy,\n };\n if (\n from.sectionIndex === to.sectionIndex &&\n from.rowIndex === to.rowIndex &&\n from.colIndex === to.colIndex &&\n from.fieldIndex === to.toFieldIndex\n ) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(from.sectionIndex, sections.length, 'from.sectionIndex');\n this.assertIndex(to.sectionIndex, sections.length, 'to.sectionIndex');\n const srcRows = sections[from.sectionIndex].rows;\n this.assertIndex(from.rowIndex!, srcRows.length, 'from.rowIndex');\n const dstRows = sections[to.sectionIndex].rows;\n this.assertIndex(to.rowIndex!, dstRows.length, 'to.rowIndex');\n const srcCols = srcRows[from.rowIndex!].columns;\n this.assertIndex(from.colIndex, srcCols.length, 'from.colIndex');\n const dstCols = dstRows[to.rowIndex!].columns;\n this.assertIndex(to.colIndex, dstCols.length, 'to.colIndex');\n const srcFields = srcCols[from.colIndex].fields as any[];\n this.assertIndex(from.fieldIndex, srcFields.length, 'from.fieldIndex');\n const dstFields = dstCols[to.colIndex].fields as any[];\n this.assertIndex(\n to.toFieldIndex,\n dstFields.length,\n 'to.toFieldIndex',\n true,\n );\n const pruned: string[] = [];\n const srcColumn = srcCols[from.colIndex];\n op.from = {\n ...(op.from || {}),\n sectionId: sections[from.sectionIndex].id,\n rowId: srcRows[from.rowIndex!].id,\n columnId: srcColumn.id,\n fieldName:\n typeof srcFields[from.fieldIndex] === 'string'\n ? (srcFields[from.fieldIndex] as string)\n : (srcFields[from.fieldIndex] as any).name,\n };\n op.to = {\n ...(op.to || {}),\n sectionId: sections[to.sectionIndex].id,\n rowId: dstRows[to.rowIndex!].id,\n columnId: dstCols[to.colIndex].id,\n };\n\n return this.mutate(config, op, (draft) => {\n const src = draft.sections[from.sectionIndex].rows[from.rowIndex!]\n .columns[from.colIndex].fields as any[];\n const [moved] = src.splice(from.fieldIndex, 1);\n const dst = draft.sections[to.sectionIndex].rows[to.rowIndex!].columns[\n to.colIndex\n ].fields as any[];\n dst.splice(to.toFieldIndex, 0, moved);\n\n if (policy === 'pruneEmptyContainers' && src.length === 0) {\n draft.sections[from.sectionIndex].rows[from.rowIndex!].columns.splice(\n from.colIndex,\n 1,\n );\n pruned.push('column');\n const draftRow = draft.sections[from.sectionIndex].rows[from.rowIndex!];\n if (draftRow.columns.length === 0) {\n draft.sections[from.sectionIndex].rows.splice(from.rowIndex!, 1);\n pruned.push('row');\n if (draft.sections[from.sectionIndex].rows.length === 0) {\n draft.sections.splice(from.sectionIndex, 1);\n pruned.push('section');\n }\n }\n }\n\n if (pruned.length) {\n op.meta = { ...(op.meta || {}), pruned };\n }\n });\n }\n\n insertField(\n config: FormConfig,\n target: FieldPathContainer,\n field: any,\n atIdx = (\n config.sections[target.sectionIndex].rows[target.rowIndex!].columns[\n target.colIndex\n ].fields as any[]\n ).length,\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(target.sectionIndex, sections.length, 'sectionIndex');\n const rows = sections[target.sectionIndex].rows;\n this.assertIndex(target.rowIndex!, rows.length, 'rowIndex');\n const cols = rows[target.rowIndex!].columns;\n this.assertIndex(target.colIndex, cols.length, 'colIndex');\n const fields = cols[target.colIndex].fields as any[];\n this.assertIndex(atIdx, fields.length, 'atIdx', true);\n const op = { type: 'insertField', target, field, atIdx };\n return this.mutate(config, op, (draft) => {\n const draftFields = draft.sections[target.sectionIndex].rows[\n target.rowIndex!\n ].columns[target.colIndex].fields as any[];\n draftFields.splice(atIdx, 0, field);\n });\n }\n\n removeField(\n config: FormConfig,\n secIdx: number,\n rowIdx: number,\n colIdx: number,\n fieldIndex: number,\n options: {\n policy?: RemovePolicy;\n correlationId?: string;\n origin?: string;\n } = {},\n ): LayoutResult {\n const sections = config.sections || [];\n this.assertIndex(secIdx, sections.length, 'secIdx');\n const rows = sections[secIdx].rows;\n this.assertIndex(rowIdx, rows.length, 'rowIdx');\n const cols = rows[rowIdx].columns;\n this.assertIndex(colIdx, cols.length, 'colIdx');\n const fields = cols[colIdx].fields as any[];\n this.assertIndex(fieldIndex, fields.length, 'fieldIndex');\n\n const policy = options.policy ?? 'keepEmptyContainers';\n const column = cols[colIdx];\n const fieldName =\n typeof fields[fieldIndex] === 'string'\n ? (fields[fieldIndex] as string)\n : (fields[fieldIndex] as any).name;\n\n const op: Operation = {\n type: 'removeField',\n correlationId: options.correlationId,\n origin: options.origin,\n from: {\n sectionId: sections[secIdx].id,\n rowId: rows[rowIdx].id,\n columnId: column.id,\n fieldName,\n sectionIndex: secIdx,\n rowIndex: rowIdx,\n colIndex: colIdx,\n fieldIndex,\n },\n policy,\n };\n\n const pruned: string[] = [];\n\n return this.mutate(config, op, (draft) => {\n const draftFields = draft.sections[secIdx].rows[rowIdx].columns[colIdx]\n .fields as any[];\n draftFields.splice(fieldIndex, 1);\n\n if (policy === 'pruneEmptyContainers' && draftFields.length === 0) {\n draft.sections[secIdx].rows[rowIdx].columns.splice(colIdx, 1);\n pruned.push('column');\n if (draft.sections[secIdx].rows[rowIdx].columns.length === 0) {\n draft.sections[secIdx].rows.splice(rowIdx, 1);\n pruned.push('row');\n if (draft.sections[secIdx].rows.length === 0) {\n draft.sections.splice(secIdx, 1);\n pruned.push('section');\n }\n }\n }\n\n if (pruned.length) {\n op.meta = { ...(op.meta || {}), pruned };\n }\n });\n }\n\n moveSectionById(\n config: FormConfig,\n sectionId: string,\n toIndex: number,\n options: { correlationId?: string; origin?: string } = {},\n ): LayoutResult {\n const { sectionIndex } = this.resolvePathByIds(config, { sectionId });\n const op: Operation = {\n type: 'moveSection',\n sectionId,\n toIndex,\n correlationId: options.correlationId,\n origin: options.origin,\n };\n if (sectionIndex === toIndex) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(toIndex, sections.length, 'toIndex');\n return this.mutate(config, op, (draft) => {\n const [section] = draft.sections.splice(sectionIndex, 1);\n draft.sections.splice(toIndex, 0, section);\n });\n }\n\n removeSectionById(\n config: FormConfig,\n sectionId: string,\n policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const { sectionIndex } = this.resolvePathByIds(config, { sectionId });\n const op = { type: 'removeSection', sectionId, policy };\n return this.mutate(config, op, (draft) => {\n draft.sections.splice(sectionIndex, 1);\n });\n }\n\n moveRowById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n toSectionId: string,\n toIndex: number,\n options: { correlationId?: string; origin?: string } = {},\n ): LayoutResult {\n const from = this.resolvePathByIds(config, { sectionId, rowId });\n const toSection = this.resolvePathByIds(config, { sectionId: toSectionId });\n const op: Operation = {\n type: 'moveRow',\n from: { sectionId, rowId },\n to: { sectionId: toSectionId, toIndex },\n correlationId: options.correlationId,\n origin: options.origin,\n };\n if (sectionId === toSectionId && from.rowIndex === toIndex) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(from.sectionIndex, sections.length, 'from.sectionIndex');\n this.assertIndex(\n toSection.sectionIndex,\n sections.length,\n 'to.sectionIndex',\n );\n const srcSection = sections[from.sectionIndex];\n this.assertIndex(from.rowIndex!, srcSection.rows.length, 'from.rowIndex');\n const dstSection = sections[toSection.sectionIndex];\n this.assertIndex(toIndex, dstSection.rows.length, 'to.toIndex', true);\n return this.mutate(config, op, (draft) => {\n const source = draft.sections[from.sectionIndex];\n const [row] = source.rows.splice(from.rowIndex!, 1);\n const dest = draft.sections[toSection.sectionIndex];\n dest.rows.splice(toIndex, 0, row);\n });\n }\n\n insertRowById(\n config: FormConfig,\n sectionId: string,\n row: FormRow,\n atIndex?: number,\n ): LayoutResult {\n const { sectionIndex } = this.resolvePathByIds(config, { sectionId });\n const rows = config.sections[sectionIndex].rows;\n const index = atIndex ?? rows.length;\n this.assertIndex(index, rows.length, 'atIndex', true);\n const op = { type: 'insertRow', sectionId, row, atIndex: index };\n return this.mutate(config, op, (draft) => {\n draft.sections[sectionIndex].rows.splice(index, 0, row);\n });\n }\n\n removeRowById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const { sectionIndex, rowIndex } = this.resolvePathByIds(config, {\n sectionId,\n rowId,\n });\n const op = { type: 'removeRow', sectionId, rowId, policy };\n return this.mutate(config, op, (draft) => {\n const section = draft.sections[sectionIndex];\n section.rows.splice(rowIndex!, 1);\n if (policy === 'pruneEmptyContainers' && section.rows.length === 0) {\n draft.sections.splice(sectionIndex, 1);\n }\n });\n }\n\n moveColumnById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n columnId: string,\n toSectionId: string,\n toRowId: string,\n toIndex: number,\n options: { correlationId?: string; origin?: string } = {},\n ): LayoutResult {\n const from = this.resolvePathByIds(config, { sectionId, rowId, columnId });\n const to = this.resolvePathByIds(config, {\n sectionId: toSectionId,\n rowId: toRowId,\n });\n const op: Operation = {\n type: 'moveColumn',\n from: { sectionId, rowId, columnId },\n to: { sectionId: toSectionId, rowId: toRowId, toIndex },\n correlationId: options.correlationId,\n origin: options.origin,\n };\n if (\n sectionId === toSectionId &&\n rowId === toRowId &&\n from.colIndex === toIndex\n ) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(from.sectionIndex, sections.length, 'from.sectionIndex');\n this.assertIndex(to.sectionIndex, sections.length, 'to.sectionIndex');\n const srcRow = sections[from.sectionIndex].rows[from.rowIndex!];\n this.assertIndex(from.colIndex!, srcRow.columns.length, 'from.colIndex');\n const dstRow = sections[to.sectionIndex].rows[to.rowIndex!];\n this.assertIndex(toIndex, dstRow.columns.length, 'to.toIndex', true);\n return this.mutate(config, op, (draft) => {\n const sRow = draft.sections[from.sectionIndex].rows[from.rowIndex!];\n const [col] = sRow.columns.splice(from.colIndex!, 1);\n const dRow = draft.sections[to.sectionIndex].rows[to.rowIndex!];\n dRow.columns.splice(toIndex, 0, col);\n });\n }\n\n insertColumnById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n column: FormColumn,\n atIndex?: number,\n ): LayoutResult {\n const { sectionIndex, rowIndex } = this.resolvePathByIds(config, {\n sectionId,\n rowId,\n });\n const cols = config.sections[sectionIndex].rows[rowIndex!].columns;\n const index = atIndex ?? cols.length;\n this.assertIndex(index, cols.length, 'atIndex', true);\n const op = {\n type: 'insertColumn',\n sectionId,\n rowId,\n column,\n atIndex: index,\n };\n return this.mutate(config, op, (draft) => {\n draft.sections[sectionIndex].rows[rowIndex!].columns.splice(\n index,\n 0,\n column,\n );\n });\n }\n\n removeColumnById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n columnId: string,\n policy: RemovePolicy = 'keepEmptyContainers',\n ): LayoutResult {\n const { sectionIndex, rowIndex, colIndex } = this.resolvePathByIds(config, {\n sectionId,\n rowId,\n columnId,\n });\n const op = { type: 'removeColumn', sectionId, rowId, columnId, policy };\n return this.mutate(config, op, (draft) => {\n const row = draft.sections[sectionIndex].rows[rowIndex!];\n row.columns.splice(colIndex!, 1);\n if (policy === 'pruneEmptyContainers' && row.columns.length === 0) {\n draft.sections[sectionIndex].rows.splice(rowIndex!, 1);\n if (draft.sections[sectionIndex].rows.length === 0) {\n draft.sections.splice(sectionIndex, 1);\n }\n }\n });\n }\n\n moveFieldById(\n config: FormConfig,\n from: {\n sectionId: string;\n rowId: string;\n columnId: string;\n fieldName: string;\n },\n to: { sectionId: string; rowId: string; columnId: string; toIndex: number },\n options: {\n policy?: RemovePolicy;\n correlationId?: string;\n origin?: string;\n } = {},\n ): LayoutResult {\n const fromPath = this.resolvePathByIds(config, from);\n const toPath = this.resolvePathByIds(config, to);\n const policy = options.policy ?? 'keepEmptyContainers';\n const op: Operation = {\n type: 'moveField',\n correlationId: options.correlationId,\n origin: options.origin,\n from: {\n ...from,\n sectionIndex: fromPath.sectionIndex,\n rowIndex: fromPath.rowIndex,\n colIndex: fromPath.colIndex,\n fieldIndex: fromPath.fieldIndex,\n },\n to: {\n ...to,\n sectionIndex: toPath.sectionIndex,\n rowIndex: toPath.rowIndex,\n colIndex: toPath.colIndex,\n toFieldIndex: to.toIndex,\n },\n policy,\n };\n if (\n from.sectionId === to.sectionId &&\n from.rowId === to.rowId &&\n from.columnId === to.columnId &&\n fromPath.fieldIndex === to.toIndex\n ) {\n return { config, op };\n }\n const sections = config.sections || [];\n this.assertIndex(\n fromPath.sectionIndex,\n sections.length,\n 'from.sectionIndex',\n );\n this.assertIndex(toPath.sectionIndex, sections.length, 'to.sectionIndex');\n const srcFields = sections[fromPath.sectionIndex].rows[fromPath.rowIndex!]\n .columns[fromPath.colIndex!].fields as any[];\n this.assertIndex(fromPath.fieldIndex!, srcFields.length, 'from.fieldIndex');\n const dstFields = sections[toPath.sectionIndex].rows[toPath.rowIndex!]\n .columns[toPath.colIndex!].fields as any[];\n this.assertIndex(to.toIndex, dstFields.length, 'to.toIndex', true);\n const pruned: string[] = [];\n return this.mutate(config, op, (draft) => {\n const src = draft.sections[fromPath.sectionIndex].rows[fromPath.rowIndex!]\n .columns[fromPath.colIndex!].fields as any[];\n const [moved] = src.splice(fromPath.fieldIndex!, 1);\n const dst = draft.sections[toPath.sectionIndex].rows[toPath.rowIndex!]\n .columns[toPath.colIndex!].fields as any[];\n dst.splice(to.toIndex, 0, moved);\n\n if (policy === 'pruneEmptyContainers' && src.length === 0) {\n draft.sections[fromPath.sectionIndex].rows[\n fromPath.rowIndex!\n ].columns.splice(fromPath.colIndex!, 1);\n pruned.push('column');\n const draftRow =\n draft.sections[fromPath.sectionIndex].rows[fromPath.rowIndex!];\n if (draftRow.columns.length === 0) {\n draft.sections[fromPath.sectionIndex].rows.splice(\n fromPath.rowIndex!,\n 1,\n );\n pruned.push('row');\n if (draft.sections[fromPath.sectionIndex].rows.length === 0) {\n draft.sections.splice(fromPath.sectionIndex, 1);\n pruned.push('section');\n }\n }\n }\n\n if (pruned.length) {\n op.meta = { ...(op.meta || {}), pruned };\n }\n });\n }\n\n insertFieldById(\n config: FormConfig,\n target: { sectionId: string; rowId: string; columnId: string },\n field: any,\n atIndex?: number,\n ): LayoutResult {\n const path = this.resolvePathByIds(config, target);\n const fields = config.sections[path.sectionIndex].rows[path.rowIndex!]\n .columns[path.colIndex!].fields as any[];\n const index = atIndex ?? fields.length;\n this.assertIndex(index, fields.length, 'atIndex', true);\n const op = { type: 'insertField', target, field, atIndex: index };\n return this.mutate(config, op, (draft) => {\n const draftFields = draft.sections[path.sectionIndex].rows[path.rowIndex!]\n .columns[path.colIndex!].fields as any[];\n draftFields.splice(index, 0, field);\n });\n }\n\n removeFieldById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n columnId: string,\n fieldName: string,\n options: {\n policy?: RemovePolicy;\n correlationId?: string;\n origin?: string;\n } = {},\n ): LayoutResult {\n const path = this.resolvePathByIds(config, {\n sectionId,\n rowId,\n columnId,\n fieldName,\n });\n const policy = options.policy ?? 'keepEmptyContainers';\n const op: Operation = {\n type: 'removeField',\n correlationId: options.correlationId,\n origin: options.origin,\n from: {\n sectionId,\n rowId,\n columnId,\n fieldName,\n sectionIndex: path.sectionIndex,\n rowIndex: path.rowIndex,\n colIndex: path.colIndex,\n fieldIndex: path.fieldIndex,\n },\n policy,\n };\n const pruned: string[] = [];\n return this.mutate(config, op, (draft) => {\n const fields = draft.sections[path.sectionIndex].rows[path.rowIndex!]\n .columns[path.colIndex!].fields as any[];\n fields.splice(path.fieldIndex!, 1);\n if (policy === 'pruneEmptyContainers' && fields.length === 0) {\n draft.sections[path.sectionIndex].rows[path.rowIndex!].columns.splice(\n path.colIndex!,\n 1,\n );\n pruned.push('column');\n const row = draft.sections[path.sectionIndex].rows[path.rowIndex!];\n if (row.columns.length === 0) {\n draft.sections[path.sectionIndex].rows.splice(path.rowIndex!, 1);\n pruned.push('row');\n if (draft.sections[path.sectionIndex].rows.length === 0) {\n draft.sections.splice(path.sectionIndex, 1);\n pruned.push('section');\n }\n }\n }\n if (pruned.length) {\n op.meta = { ...(op.meta || {}), pruned };\n }\n });\n }\n\n /**\n * Removes empty columns, rows and sections from the provided configuration.\n * Useful when persisting a layout with `removeEmptyContainersOnSave` enabled.\n */\n pruneEmptyContainers(config: FormConfig): LayoutResult {\n const op: Operation = { type: 'pruneEmptyContainers' };\n\n const pruned = this.mutate(config, op, (draft) => {\n draft.sections = (draft.sections || []).filter((section) => {\n section.rows = (section.rows || []).filter((row) => {\n row.columns = (row.columns || []).filter(\n (col) => (col.fields as any[])?.length > 0,\n );\n return row.columns.length > 0;\n });\n return section.rows.length > 0;\n });\n });\n\n return pruned;\n }\n\n addRowToSectionById(\n config: FormConfig,\n sectionId: string,\n ): LayoutResult & { addedRowId: string } {\n const op: Operation = { type: 'addRowToSectionById', sectionId };\n\n const res = this.mutate(config, op, (draft) => {\n const sIdx = draft.sections.findIndex((s) => s.id === sectionId);\n this.assertIndex(sIdx, draft.sections.length, 'sectionIndex');\n\n const newRow: FormRow = {\n id: '',\n columns: [{ id: '', fields: [] as any[] }],\n };\n draft.sections[sIdx].rows.push(newRow);\n });\n\n // após ensureIds, o último row é o recém-criado\n const sIdx = res.config.sections.findIndex((s) => s.id === sectionId);\n const addedRowId = res.config.sections[sIdx].rows.at(-1)!.id;\n\n return Object.assign(res, { addedRowId });\n }\n\n addColumnToRowById(\n config: FormConfig,\n sectionId: string,\n rowId: string,\n ): LayoutResult & { addedColumnId: string } {\n const op: Operation = { type: 'addColumnToRowById', sectionId, rowId };\n\n const res = this.mutate(config, op, (draft) => {\n const sIdx = draft.sections.findIndex((s) => s.id === sectionId);\n this.assertIndex(sIdx, draft.sections.length, 'sectionIndex');\n\n const rIdx = draft.sections[sIdx].rows.findIndex((r) => r.id === rowId);\n this.assertIndex(rIdx, draft.sections[sIdx].rows.length, 'rowIndex');\n\n const newCol: FormColumn = { id: '', fields: [] as any[] };\n draft.sections[sIdx].rows[rIdx].columns.push(newCol);\n });\n\n // após ensureIds, a última column é a recém-criada\n const sIdx = res.config.sections.findIndex((s) => s.id === sectionId);\n const rIdx = res.config.sections[sIdx].rows.findIndex(\n (r) => r.id === rowId,\n );\n const row = res.config.sections[sIdx].rows[rIdx];\n const addedColumnId = row.columns.at(-1)!.id;\n\n return Object.assign(res, { addedColumnId });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ChangeDetectorRef,\n ElementRef,\n ViewChild,\n ViewChildren,\n Inject,\n QueryList,\n Optional,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpContext } from '@angular/common/http';\nimport {\n AbstractControl,\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport type {\n CdkDragDrop,\n CdkDragStart,\n CdkDragMove,\n CdkDragEnd,\n} from '@angular/cdk/drag-drop';\n\nimport { Subject, firstValueFrom } from 'rxjs';\nimport { debounceTime, takeUntil, finalize, take } from 'rxjs/operators';\nimport {\n GenericCrudService,\n ConsoleLoggerSink,\n FieldMetadata,\n ResolvedComponentMetadataEditorialMeta,\n mapFieldDefinitionsToMetadata,\n EndpointConfig,\n DynamicFormService,\n ErrorMessageService,\n getTextTransformer,\n normalizeControlTypeKey,\n resolveControlTypeAlias,\n LoadingContext,\n LoadingOrchestrator,\n LoadingState,\n LoggerContext,\n LoggerLogOptions,\n LoggerService,\n PRAXIS_LOADING_CTX,\n PRAXIS_LOADING_RENDERER,\n PraxisLoadingRenderer,\n createCorporateLoggerConfig,\n DynamicWidgetLoaderDirective,\n WidgetDefinition,\n WidgetEventEnvelope,\n PraxisI18nService,\n providePraxisI18nConfig,\n} from '@praxisui/core';\nimport { FormHooksRegistry } from '@praxisui/core';\nimport { FORM_HOOKS_PRESETS } from '@praxisui/core';\nimport type { FormHookPreset } from '@praxisui/core';\nimport type { FormHookStage, RunHooksResult } from '@praxisui/core';\nimport { normalizeFormConfig } from '@praxisui/core';\nimport { SchemaMetadataClient, LocalStorageCacheAdapter, MemoryCacheAdapter, buildSchemaId, SchemaIdParams, SchemaNormalizerService, GlobalConfigService } from '@praxisui/core';\nimport type { FormHooksLayout } from '@praxisui/core';\nimport { fetchWithETag } from '@praxisui/core';\nimport type { BackConfig } from '@praxisui/core';\nimport { DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';\nimport {\n FormConfig,\n FormSectionHeaderConfig,\n FormSectionHeaderEmptyState,\n syncWithServerMetadata,\n SyncResult,\n FormLayout,\n FormSubmitEvent,\n FormReadyEvent,\n FormValueChangeEvent,\n FormInitializationError,\n FormSection,\n FormSectionHeaderAction,\n FormRow,\n FormColumn,\n FormActionButton,\n FormCustomActionEvent,\n FormActionConfirmationEvent,\n resolveSpan,\n resolveOffset,\n resolveOrder,\n resolveHidden,\n} from '@praxisui/core';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n} from '@praxisui/dynamic-fields';\nimport { FormLayoutService } from './services/form-layout.service';\nimport { FormContextService } from './services/form-context.service';\nimport { FormRulesService } from './services/form-rules.service';\nimport { DynamicFormLayoutService } from './services/dynamic-form-layout.service';\nimport { CONNECTION_STORAGE, ConnectionStorage, ASYNC_CONFIG_STORAGE, AsyncConfigStorage, ComponentKeyService } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { EmptyStateCardComponent, ResourceQuickConnectComponent, PraxisIconDirective } from '@praxisui/core';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { normalizeDateArrays } from './utils/normalize-date-arrays';\nimport {\n clampSectionHeaderInitialsMaxLength,\n deriveSectionHeaderInitials,\n getSectionHeaderTextFieldCandidates,\n SECTION_HEADER_SIZE_DEFAULT,\n} from './utils/section-header.utils';\n\ntype FormRebuildReason =\n | 'initialization'\n | 'external-config-hydration'\n | 'layout-edit'\n | 'loader-refresh'\n | 'editor-plan';\n\ninterface FormRuntimeStateContext {\n resourcePath: string | null;\n mode: 'create' | 'edit' | 'view';\n entityId: string | number | null;\n}\n\ninterface FormRuntimeStateSnapshot {\n rawValue: Record<string, any>;\n dirtyFields: string[];\n touchedFields: string[];\n context: FormRuntimeStateContext;\n}\n\ninterface FormBuildOptions {\n reason: FormRebuildReason;\n preserveRuntimeState?: boolean;\n preserveInteractionState?: boolean;\n fallbackToLoadedEntity?: boolean;\n}\n\n// Canvas-related imports\nimport { CanvasStateService } from './canvas/services/canvas-state.service';\nimport {\n CanvasElement,\n CanvasElementType,\n CanvasPathPart,\n} from './canvas/models/canvas.models';\nimport { CanvasToolbarComponent } from './canvas/components/canvas-toolbar/canvas-toolbar.component';\nimport { PraxisFormActionEvent } from './components/praxis-form-actions/praxis-form-actions.component';\nimport { PraxisFormActionsComponent } from './components/praxis-form-actions/praxis-form-actions.component';\nimport { produce } from 'immer';\nimport { withRatingMetadata } from './utils/metadata-mappers';\nimport { FormAiAdapter } from './ai/form-ai.adapter';\nimport {\n buildDynamicFormApplyPlan,\n createDynamicFormAuthoringDocument,\n parseLegacyOrDynamicFormDocument,\n} from './dynamic-form-editor-capability';\nimport {\n PRAXIS_DYNAMIC_FORM_I18N_CONFIG,\n PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE,\n} from './praxis-dynamic-form.i18n';\nimport {\n DynamicFormApplyPlan,\n DynamicFormAuthoringDocument,\n DynamicFormContextSnapshot,\n DynamicFormPresentationSnapshot,\n DynamicFormRuntimeContext,\n DynamicFormSchemaPrefsSnapshot,\n} from './dynamic-form-editor-document.model';\n\nexport interface DynamicFieldRenderErrorEvent {\n phase: 'executeRendering' | 'detectChanges';\n fieldName: string;\n error: unknown;\n fatal: boolean;\n}\n\ntype ResolvedSectionHeaderVisual =\n | { kind: 'none' }\n | { kind: 'icon'; icon: string }\n | { kind: 'image'; src: string; alt: string }\n | { kind: 'initials'; text: string; ariaLabel: string }\n | { kind: 'placeholder'; icon?: string; text?: string; ariaLabel: string };\n\ntype PraxisDynamicFormLogMeta = {\n actionId?: string;\n correlationId?: string;\n dedupeKey?: string;\n throttleKey?: string;\n skipThrottle?: boolean;\n context?: LoggerContext;\n};\n\nconst PRAXIS_DYNAMIC_FORM_FALLBACK_LOGGER = new LoggerService(\n createCorporateLoggerConfig('dev'),\n [new ConsoleLoggerSink()],\n);\n\n@Component({\n selector: 'praxis-dynamic-form',\n standalone: true,\n providers: [providePraxisI18nConfig(PRAXIS_DYNAMIC_FORM_I18N_CONFIG)],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DynamicFieldLoaderDirective,\n DynamicWidgetLoaderDirective,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatDialogModule,\n MatSnackBarModule,\n MatBadgeModule,\n PraxisIconDirective,\n CanvasToolbarComponent,\n PraxisFormActionsComponent,\n EmptyStateCardComponent,\n PraxisAiAssistantComponent,\n ],\n templateUrl: './praxis-dynamic-form.html',\n styleUrls: ['./praxis-dynamic-form.scss'],\n})\nexport class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {\n private readonly i18n = inject(PraxisI18nService);\n private readonly DEBUG =\n typeof window !== 'undefined' &&\n Boolean((window as any)['__PRAXIS_DEBUG__']);\n @Input() resourcePath?: string;\n @Input() resourceId?: string | number;\n /**\n * Shared editorial context for widgets hosted around the form.\n * Treat this input as immutable: in-place mutations do not invalidate the cached\n * widget context snapshot used to avoid re-binding on every change detection pass.\n */\n @Input() editorialContext: Record<string, unknown> | null = null;\n @Input() mode: 'create' | 'edit' | 'view' = 'create';\n @Input() config: FormConfig = { sections: [] };\n /**\n * Fonte de schema para construir o formulário.\n * 'resource' (padrão) usa o schema do recurso (/{resource}/schemas -> .../all response)\n * 'filter' usa o schema do DTO de filtro (via /schemas/filtered no POST /filter request)\n */\n @Input() schemaSource: 'resource' | 'filter' = 'resource';\n /**\n * CUSTOMIZAÇÃO DE LAYOUT - NÃO confundir com edição de dados do formulário\n *\n * Este flag controla se o usuário pode customizar a ESTRUTURA do formulário:\n * - Mover sections, rows, columns\n * - Configurar layout e aparência\n * - Acessar editor de configuração\n *\n * É INDEPENDENTE do mode (view/edit/create) que controla os DADOS do registro\n *\n * @example\n * // Formulário em modo VIEW de dados + customização HABILITADA\n * <praxis-dynamic-form mode=\"view\" [enableCustomization]=\"true\">\n *\n * // Formulário em modo EDIT de dados + customização DESABILITADA\n * <praxis-dynamic-form mode=\"edit\" [enableCustomization]=\"false\">\n */\n @Input() enableCustomization = false;\n /** Identifier for persisting layouts */\n @Input() formId?: string;\n @Input() componentInstanceId?: string;\n /** Optional layout to use instead of generated one */\n @Input() layout?: FormLayout;\n /** Optional navigation back config (from CRUD host) */\n @Input() backConfig?: BackConfig;\n /** Optional direct hooks declaration for testing/demo (overrides config.hooks) */\n @Input() hooks?: FormHooksLayout;\n /** Remove empty sections/rows/columns when saving configuration */\n @Input() removeEmptyContainersOnSave = false;\n /** Enable reactive afterValidate on valueChanges (overrides config.behavior) */\n @Input() reactiveValidation: boolean | null = null;\n /** Debounce for reactive afterValidate in ms (overrides config.behavior) */\n @Input() reactiveValidationDebounceMs: number | null = null;\n /** Controls outdated schema notifications visibility and channel (only effective when customization is enabled) */\n @Input() notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none' = 'both';\n /** Snooze duration for schema outdated notifications (ms), only when customization is enabled */\n @Input() snoozeMs = 24 * 60 * 60 * 1000; // 24h\n /** Auto open settings when schema is detected as outdated (only when customization is enabled) */\n @Input() autoOpenSettingsOnOutdated = false;\n\n // Global field states propagated to DynamicFieldLoader (optional)\n @Input() readonlyModeGlobal: boolean | null = null;\n @Input() disabledModeGlobal: boolean | null = null;\n @Input() presentationModeGlobal: boolean | null = null;\n @Input() visibleGlobal: boolean | null = null;\n\n // Derived UI flags (single source of truth for template bindings)\n // Policy: presentation is only effective when mode === 'view'.\n // Hosts may keep presentationModeGlobal=true; in edit/create modes we ignore it.\n get effectivePresentation(): boolean {\n return this.mode === 'view' && this.presentationModeGlobal === true;\n }\n\n get effectiveReadonly(): boolean {\n return this.readonlyModeGlobal === true;\n }\n\n /** Value propagated to DynamicFieldLoader; null allows per-field metadata */\n get presentationForLoader(): boolean | null {\n return this.mode === 'view'\n ? (this.presentationModeGlobal === null\n ? null\n : this.presentationModeGlobal === true)\n : false;\n }\n\n /** Custom endpoints for CRUD operations */\n private _customEndpoints: EndpointConfig = {};\n @Input()\n get customEndpoints(): EndpointConfig {\n return this._customEndpoints;\n }\n set customEndpoints(value: EndpointConfig) {\n this._customEndpoints = value;\n if (value && Object.keys(value).length > 0) {\n this.crud.configureEndpoints(value);\n }\n }\n\n @Output() formSubmit = new EventEmitter<FormSubmitEvent>();\n @Output() formCancel = new EventEmitter<void>();\n @Output() formReset = new EventEmitter<void>();\n @Output() configChange = new EventEmitter<FormConfig>();\n @Output() formReady = new EventEmitter<FormReadyEvent>();\n @Output() valueChange = new EventEmitter<FormValueChangeEvent>();\n @Output() syncCompleted = new EventEmitter<SyncResult>();\n @Output() initializationError = new EventEmitter<FormInitializationError>();\n @Output() loadingStateChange = new EventEmitter<LoadingState>();\n @Output() enableCustomizationChange = new EventEmitter<boolean>();\n @Output() customAction = new EventEmitter<FormCustomActionEvent>();\n @Output() actionConfirmation =\n new EventEmitter<FormActionConfirmationEvent>();\n /** Emits whenever schema outdated state changes (can be used by host) */\n @Output() schemaStatusChange = new EventEmitter<{ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string }>();\n /** Forwarded from DynamicFieldLoader to allow host-side observability. */\n @Output() fieldRenderError = new EventEmitter<DynamicFieldRenderErrorEvent>();\n /** Re-emits events from editorial widgets hosted before, before actions, or after the form. */\n @Output() widgetEvent = new EventEmitter<WidgetEventEnvelope & {\n placement: 'before' | 'beforeActions' | 'after';\n }>();\n\n // Estado interno para UX\n isLoading = false;\n submitting = false;\n submitError: string | null = null;\n initializationStatus: 'idle' | 'loading' | 'success' | 'error' = 'idle';\n currentErrorMessage = '';\n currentErrorDetails: any = null;\n isRecoverable = false;\n private isInitialized = false;\n\n form!: FormGroup;\n aiAdapter!: FormAiAdapter;\n fieldVisibility: { [fieldName: string]: boolean } = {};\n private fieldRuleProps: Record<string, Record<string, any>> = {};\n private sectionRuleProps: Record<string, Record<string, any>> = {};\n actionRuleProps: Record<string, Record<string, any>> = {};\n private rowRuleProps: Record<string, Record<string, any>> = {};\n private columnRuleProps: Record<string, Record<string, any>> = {};\n private pendingEntityId: string | number | null = null;\n private loadedEntityId: string | number | null = null;\n private hydratedEntityId: string | number | null = null;\n private loadedEntityData: Record<string, any> | null = null;\n private schemaCache: any = null;\n private lastSchemaMeta?: { schemaId: string; serverHash?: string; context: SchemaIdParams };\n private schemaRootHooks?: FormHooksLayout;\n private destroy$ = new Subject<void>();\n private readonly sectionHeaderBlobUrlCache = new WeakMap<Blob, string>();\n private readonly sectionHeaderObjectUrls = new Set<string>();\n private lastCorrelationId?: string;\n private currentDnD?: { id: string; snapshot: FormConfig };\n // Cache to provide referential stability for [fields] binding (avoids re-renders)\n private columnFieldsCache = new Map<string, { signature: string; value: FieldMetadata[] }>();\n // De-duplication guard for field metadata patches (avoid repeated apply/save/bridge)\n private lastFieldPatchSig = new Map<string, string>();\n private lastFieldPatchAt = new Map<string, number>();\n // Outdated schema state\n schemaOutdated = false;\n // Resolved preferences (inputs > widget > page > global > defaults)\n private resolvedPrefs: { notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none'; snoozeMs: number; autoOpenSettingsOnOutdated: boolean } = {\n notifyIfOutdated: 'both',\n snoozeMs: 24 * 60 * 60 * 1000,\n autoOpenSettingsOnOutdated: false,\n };\n private editorialWidgetContextCache: Record<string, unknown> | null = null;\n private editorialWidgetContextDeps: {\n configEditorialContext: Record<string, unknown> | null;\n hostEditorialContext: Record<string, unknown> | null;\n formId?: string;\n componentInstanceId?: string;\n resourcePath?: string;\n resourceId?: string | number;\n mode: 'create' | 'edit' | 'view';\n enableCustomization: boolean;\n } | null = null;\n\n get formBlocksBefore(): WidgetDefinition[] {\n return Array.isArray(this.config?.formBlocksBefore) ? this.config.formBlocksBefore : [];\n }\n\n get formBlocksAfter(): WidgetDefinition[] {\n return Array.isArray(this.config?.formBlocksAfter) ? this.config.formBlocksAfter : [];\n }\n\n get formBlocksBeforeActions(): WidgetDefinition[] {\n return Array.isArray(this.config?.formBlocksBeforeActions) ? this.config.formBlocksBeforeActions : [];\n }\n\n get beforeActionsPlacement(): 'insideLastSection' | 'afterSections' {\n return (this.config?.formBlocksBeforeActionsPlacement || 'afterSections') as 'insideLastSection' | 'afterSections';\n }\n\n get actionPlacement(): 'insideLastSection' | 'afterSections' | 'top' {\n return (this.config.actions?.placement || 'afterSections') as 'insideLastSection' | 'afterSections' | 'top';\n }\n\n /**\n * Precedence for editorial widget interpolation:\n * 1. form runtime context\n * 2. config.editorialContext\n * 3. host editorialContext input\n * Later layers override earlier ones.\n * Widget explicit inputs still win after interpolation because they are bound directly.\n *\n * Invariant: config.editorialContext and editorialContext must be replaced immutably.\n * In-place mutations do not invalidate the cached merged context snapshot.\n */\n getEditorialWidgetContext(): Record<string, unknown> {\n const configEditorialContext = (this.config?.editorialContext ?? null) as Record<string, unknown> | null;\n const hostEditorialContext = (this.editorialContext ?? null) as Record<string, unknown> | null;\n const deps = {\n configEditorialContext,\n hostEditorialContext,\n formId: this.formId,\n componentInstanceId: this.componentInstanceId,\n resourcePath: this.resourcePath,\n resourceId: this.resourceId,\n mode: this.mode,\n enableCustomization: this.enableCustomization,\n } as const;\n\n const sameDeps =\n this.editorialWidgetContextDeps &&\n this.editorialWidgetContextDeps.configEditorialContext === deps.configEditorialContext &&\n this.editorialWidgetContextDeps.hostEditorialContext === deps.hostEditorialContext &&\n this.editorialWidgetContextDeps.formId === deps.formId &&\n this.editorialWidgetContextDeps.componentInstanceId === deps.componentInstanceId &&\n this.editorialWidgetContextDeps.resourcePath === deps.resourcePath &&\n this.editorialWidgetContextDeps.resourceId === deps.resourceId &&\n this.editorialWidgetContextDeps.mode === deps.mode &&\n this.editorialWidgetContextDeps.enableCustomization === deps.enableCustomization;\n\n if (sameDeps && this.editorialWidgetContextCache) {\n return this.editorialWidgetContextCache;\n }\n\n this.editorialWidgetContextDeps = { ...deps };\n const runtimeFormContext = {\n formId: this.formId ?? null,\n componentInstanceId: this.componentInstanceId ?? null,\n resourcePath: this.resourcePath ?? null,\n resourceId: this.resourceId ?? null,\n mode: this.mode,\n enableCustomization: this.enableCustomization,\n };\n const configFormContext =\n configEditorialContext && typeof configEditorialContext['form'] === 'object'\n ? (configEditorialContext['form'] as Record<string, unknown>)\n : null;\n const hostFormContext =\n hostEditorialContext && typeof hostEditorialContext['form'] === 'object'\n ? (hostEditorialContext['form'] as Record<string, unknown>)\n : null;\n this.editorialWidgetContextCache = {\n ...(this.config?.editorialContext ?? {}),\n ...(this.editorialContext ?? {}),\n form: {\n ...(configFormContext ?? {}),\n ...(hostFormContext ?? {}),\n ...runtimeFormContext,\n },\n };\n return this.editorialWidgetContextCache;\n }\n\n onEditorialWidgetEvent(\n placement: 'before' | 'beforeActions' | 'after',\n event: WidgetEventEnvelope,\n ): void {\n this.widgetEvent.emit({ placement, ...event });\n }\n private reactiveValidate$?: Subject<void>;\n private warnedMissingId = false;\n\n private schemaState = {\n ignored: false,\n snoozeUntil: 0,\n notified: false,\n meta: null as any\n };\n\n private getLogger(): LoggerService {\n return this.logger ?? PRAXIS_DYNAMIC_FORM_FALLBACK_LOGGER;\n }\n\n private buildLogOptions(\n data?: unknown,\n meta?: PraxisDynamicFormLogMeta,\n ): LoggerLogOptions {\n const context: LoggerContext = {\n lib: 'praxis-dynamic-form',\n component: 'PraxisDynamicForm',\n ...(meta?.actionId ? { actionId: meta.actionId } : {}),\n ...(meta?.correlationId ? { correlationId: meta.correlationId } : {}),\n ...(meta?.context ?? {}),\n };\n return {\n context,\n ...(data !== undefined ? { data } : {}),\n ...(meta?.dedupeKey ? { dedupeKey: meta.dedupeKey } : {}),\n ...(meta?.throttleKey ? { throttleKey: meta.throttleKey } : {}),\n ...(meta?.skipThrottle ? { skipThrottle: meta.skipThrottle } : {}),\n };\n }\n\n private debugLog(message: string, ...args: any[]): void {\n if (!this.DEBUG) return;\n const data = args.length <= 1 ? args[0] : args;\n this.getLogger().debug(message, this.buildLogOptions(data));\n }\n\n private warnLog(\n message: string,\n data?: unknown,\n meta?: PraxisDynamicFormLogMeta,\n ): void {\n this.getLogger().warn(message, this.buildLogOptions(data, meta));\n }\n\n private warnOnceLog(\n message: string,\n data: unknown,\n meta: PraxisDynamicFormLogMeta,\n ): void {\n this.getLogger().warnOnce(message, this.buildLogOptions(data, meta));\n }\n\n private errorLog(\n message: string,\n data?: unknown,\n meta?: PraxisDynamicFormLogMeta,\n ): void {\n this.getLogger().error(message, this.buildLogOptions(data, meta));\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message || '';\n if (typeof error === 'string') return error;\n try {\n return JSON.stringify(error);\n } catch {\n return String(error ?? '');\n }\n }\n\n private isDynamicFieldRenderErrorEvent(event: unknown): event is DynamicFieldRenderErrorEvent {\n if (!event || typeof event !== 'object') return false;\n const candidate = event as Partial<DynamicFieldRenderErrorEvent>;\n const phase = candidate.phase;\n return (\n (phase === 'executeRendering' || phase === 'detectChanges') &&\n typeof candidate.fieldName === 'string' &&\n typeof candidate.fatal === 'boolean' &&\n 'error' in (candidate as any)\n );\n }\n\n onFieldRenderError(event: DynamicFieldRenderErrorEvent | Event): void {\n const normalized: DynamicFieldRenderErrorEvent = this.isDynamicFieldRenderErrorEvent(event)\n ? event\n : {\n phase: 'executeRendering',\n fieldName: 'unknown',\n error: event,\n fatal: false,\n };\n this.fieldRenderError.emit(normalized);\n const logPayload = {\n phase: normalized.phase,\n fieldName: normalized.fieldName,\n fatal: normalized.fatal,\n error: this.toErrorMessage(normalized.error),\n };\n if (normalized.fatal) {\n this.warnLog(\n '[PDF] field render fatal error',\n logPayload,\n { actionId: 'field.render', throttleKey: 'praxis-dynamic-form:field-render:fatal' },\n );\n return;\n }\n this.debugLog('[PDF] field render error', logPayload);\n }\n\n private componentKeyId(): string | null {\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-dynamic-form',\n componentId: this.formId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n this.warnOnceLog(\n '[PraxisDynamicForm] formId is required for config persistence.',\n { formId: this.formId, componentInstanceId: this.componentInstanceId },\n { dedupeKey: 'praxis-dynamic-form:missing-form-id' },\n );\n }\n\n openQuickConnect(): void {\n const ref = this.settingsPanel.open({\n id: `form-quick-connect:${this.formId || 'default'}`,\n title: 'Conectar à fonte de dados',\n content: {\n component: ResourceQuickConnectComponent,\n inputs: { resourcePath: this.resourcePath },\n },\n });\n const apply = (v: any) => {\n const path = (v?.resourcePath as string || '').trim();\n if (!path) return;\n this.resourcePath = path;\n this.saveConnection('quick-connect');\n // Trigger schema load via existing code path\n this.ngOnChanges({\n resourcePath: {\n currentValue: path,\n previousValue: this.resourcePath,\n firstChange: false,\n isFirstChange: () => false,\n },\n } as any);\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n private get debugDnD(): boolean {\n return (\n this.DEBUG ||\n (typeof window !== 'undefined' &&\n Boolean((window as any)['__PRAXIS_DEBUG_DND__']))\n );\n }\n\n // Drop lists are connected explicitly rather than relying solely on\n // `CdkDropListGroup` so that each hierarchy level (sections, rows and columns)\n // stays isolated from one another.\n get sectionDropListIds(): string[] {\n return (this.config.sections || []).map((s) => s.id);\n }\n\n get rowDropListIds(): string[] {\n const ids: string[] = [];\n for (const section of this.config.sections || []) {\n for (const row of section.rows || []) {\n ids.push(row.id);\n }\n }\n return ids;\n }\n\n get columnDropListIds(): string[] {\n const ids: string[] = [];\n for (const section of this.config.sections || []) {\n for (const row of section.rows || []) {\n for (const col of row.columns || []) {\n ids.push(col.id);\n }\n }\n }\n return ids;\n }\n @ViewChild('formHost', { static: false })\n private formHost?: ElementRef<HTMLFormElement>;\n // There is one DynamicFieldLoaderDirective per column. Use ViewChildren to\n // locate the loader that contains a given field for targeted refreshes.\n @ViewChildren(DynamicFieldLoaderDirective)\n private fieldLoaders?: QueryList<DynamicFieldLoaderDirective>;\n private _activeSnack?:\n | import('@angular/material/snack-bar').MatSnackBarRef<any>\n | null = null;\n // Apresentação (preferências por formulário)\n presentationVars: {\n labelPosition: 'above' | 'left';\n labelSize: string;\n valueSize: string;\n compact: boolean;\n density: 'comfortable' | 'cozy' | 'compact';\n labelWidth: string;\n labelAlign: 'start' | 'center' | 'end';\n valueAlign: 'start' | 'center' | 'end';\n } = {\n labelPosition: 'above',\n labelSize: '0.78rem',\n valueSize: '1rem',\n compact: false,\n density: 'comfortable',\n labelWidth: '140px',\n labelAlign: 'start',\n valueAlign: 'start',\n };\n\n // Canvas State\n hoveredElement: CanvasElement | null = null;\n selectedElement: CanvasElement | null = null;\n toolbarTransform = '';\n private inputsLoaded = false;\n // Global CSS var for default section gap (px)\n private hasMountedAnimation = false;\n private mountAnimationTimer: ReturnType<typeof setTimeout> | null = null;\n protected isMounting = false;\n // Avoids duplicate standalone bootstrap when the form was already mounted\n // programmatically before the first ngOnInit/detectChanges cycle.\n private hasBuiltFormFromConfig = false;\n\n constructor(\n private crud: GenericCrudService<any>,\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef,\n private layoutService: FormLayoutService,\n private contextService: FormContextService,\n private rulesService: FormRulesService,\n private settingsPanel: SettingsPanelService,\n private dialog: MatDialog,\n @Inject(ASYNC_CONFIG_STORAGE) private asyncConfigStorage: AsyncConfigStorage,\n @Inject(CONNECTION_STORAGE) private connectionStorage: ConnectionStorage,\n private dynamicForm: DynamicFormService,\n private snackBar: MatSnackBar,\n private canvasState: CanvasStateService,\n private dynamicLayout: DynamicFormLayoutService,\n private errorMessages: ErrorMessageService,\n private schemaNormalizer: SchemaNormalizerService,\n private componentMetaRegistry: ComponentMetadataRegistry,\n private global: GlobalConfigService,\n private componentKeys: ComponentKeyService,\n private loadingOrchestrator: LoadingOrchestrator,\n @Optional() @Inject(PRAXIS_LOADING_RENDERER) private loadingRenderer?: PraxisLoadingRenderer,\n @Optional() private router?: Router,\n @Optional() private route?: ActivatedRoute,\n @Optional() private hooksRegistry?: FormHooksRegistry,\n @Optional() @Inject(FORM_HOOKS_PRESETS) private hookPresets?: FormHookPreset[] | null,\n @Optional() private logger?: LoggerService,\n ) {\n this.form = this.fb.group({});\n this.aiAdapter = new FormAiAdapter(this);\n this.debugLog('[PDF] ctor inputs', {\n formId: this.formId,\n resourcePath: this.resourcePath,\n mode: this.mode,\n });\n }\n\n private emitLoadingState(\n phase: LoadingState['phase'],\n status: LoadingState['status'],\n message?: string,\n error?: unknown,\n ): void {\n this.loadingStateChange.emit({\n phase,\n status,\n message,\n error,\n context: {\n componentType: 'praxis-dynamic-form',\n componentId: this.formId,\n resourcePath: this.resourcePath,\n },\n timestamp: new Date().toISOString(),\n });\n }\n\n private buildLoadingContext(\n phase: LoadingContext['phase'],\n label?: string,\n blocking?: boolean,\n ): LoadingContext {\n const componentId = this.formId || this.componentInstanceId || 'form';\n return {\n scope: {\n componentType: 'praxis-dynamic-form',\n componentId,\n },\n phase,\n label,\n blocking,\n };\n }\n\n private beginLoading(ctx: LoadingContext): void {\n this.loadingOrchestrator.begin(ctx);\n this.loadingRenderer?.show?.(ctx);\n }\n\n private endLoading(ctx: LoadingContext): void {\n this.loadingOrchestrator.end(ctx);\n this.loadingRenderer?.hide?.(ctx);\n }\n\n private async runHooks(stage: FormHookStage, extras?: any): Promise<RunHooksResult | undefined> {\n try {\n if (!this.hooksRegistry) return undefined;\n const decls = this.resolveStageDeclarations(stage);\n if (!decls || decls.length === 0) return undefined;\n const op: 'create' | 'update' | undefined =\n stage === 'beforeSubmit' || stage === 'afterSubmit' || stage === 'beforeValidate' || stage === 'afterValidate'\n ? (this.resourceId != null ? 'update' : 'create')\n : undefined;\n return await this.hooksRegistry.run(\n stage,\n {\n formGroup: this.form,\n formConfig: this.config,\n operation: op,\n entityId: this.resourceId ?? undefined,\n resourcePath: this.resourcePath,\n extras,\n },\n decls as any,\n { stopOn: stage.startsWith('before') ? 'cancel' : undefined },\n );\n } catch {\n return undefined;\n }\n }\n\n private resolveStageDeclarations(stage: FormHookStage): any[] | undefined {\n const direct = ((this.hooks as any)?.[stage] as any[] | undefined) ?? ((this.config?.hooks as any)?.[stage] as any[] | undefined);\n const preset = this.resolvePresetDeclarations(stage);\n const filt = (arr?: any[]) => (arr || []).filter((d) => (d?.enabled !== false));\n const d = filt(direct);\n const p = filt(preset);\n if (!p || p.length === 0) return d && d.length ? d : undefined;\n if (!d || d.length === 0) return p && p.length ? p : undefined;\n // Merge, preserving order: presets first, then direct, dedupe by (id + JSON(args)) best-effort\n const out: any[] = [];\n const seen = new Set<string>();\n const keyOf = (d: any) => `${d?.id ?? ''}|${JSON.stringify(d?.args ?? {})}`;\n for (const it of p) { const k = keyOf(it); if (!seen.has(k)) { out.push(it); seen.add(k); } }\n for (const it of d) { const k = keyOf(it); if (!seen.has(k)) { out.push(it); seen.add(k); } }\n return out;\n }\n\n private resolvePresetDeclarations(stage: FormHookStage): any[] | undefined {\n const presets = this.hookPresets || [];\n if (!presets.length) return undefined;\n const rp = this.resourcePath || '';\n const fid = this.formId || '';\n const matches = presets.filter((p) => {\n const m = p.match || {};\n let ok = true;\n if (m.resourceContains) ok = ok && rp.includes(m.resourceContains);\n if (m.formId instanceof RegExp) ok = ok && m.formId.test(fid);\n else if (typeof m.formId === 'string') ok = ok && fid === m.formId;\n return ok;\n });\n if (!matches.length) return undefined;\n // Merge all matching presets for this stage\n const decls: any[] = [];\n for (const p of matches) {\n const arr = (p.hooks as any)?.[stage] as any[] | undefined;\n if (arr && arr.length) decls.push(...arr);\n }\n return decls.length ? decls : undefined;\n }\n\n // Getter para determinar se deve mostrar os controles de configuração\n get shouldShowConfigControls(): boolean {\n // Sempre mostrar em contexto corporativo (quando tem formId)\n // enableCustomization é independente do mode do formulário\n return !!this.formId;\n }\n\n private genCorrelationId(): string {\n return (globalThis.crypto?.randomUUID?.() ||\n Math.random().toString(36).slice(2, 11)) as string;\n }\n\n private resolveModeKey(value?: string): 'create' | 'edit' | 'view' {\n if (value === 'edit' || value === 'view' || value === 'create') return value;\n return 'create';\n }\n\n private formConfigKey(mode?: string): string | null {\n const id = this.componentKeyId();\n if (!id) return null;\n return `praxis-form-config-${id}:${this.resolveModeKey(mode ?? this.mode)}`;\n }\n\n private formPresKey(mode?: string): string | null {\n const id = this.componentKeyId();\n if (!id) return null;\n return `form-pres:${id}:${this.resolveModeKey(mode ?? this.mode)}`;\n }\n\n private formInputsKey(): string | null {\n const id = this.componentKeyId();\n if (!id) return null;\n return `form-inputs:${id}`;\n }\n\n private crudBackKey(): string | null {\n const id = this.componentKeyId();\n if (!id) return null;\n return `crud-back:${id}`;\n }\n\n private tryInitializeForm(): void {\n if (!this.inputsLoaded) return;\n if (\n this.formId &&\n this.resourcePath &&\n !this.isInitialized &&\n !this.isLoading\n ) {\n void this.initializeForm();\n }\n }\n\n private hasRenderableConfig(config: FormConfig | null | undefined = this.config): boolean {\n return (\n (config?.sections?.length ?? 0) > 0 ||\n (config?.fieldMetadata?.length ?? 0) > 0 ||\n (config?.formBlocksBefore?.length ?? 0) > 0 ||\n (config?.formBlocksBeforeActions?.length ?? 0) > 0 ||\n (config?.formBlocksAfter?.length ?? 0) > 0\n );\n }\n\n private initializeStandaloneConfig(): void {\n if (this.isLoading || this.isInitialized || !this.hasRenderableConfig()) return;\n const currentConfig = this.config;\n const normalizedConfig = normalizeFormConfig(currentConfig as FormConfig);\n const canReuseExistingBuild =\n this.hasBuiltFormFromConfig &&\n this.isEquivalentFormConfig(currentConfig, normalizedConfig);\n this.config = normalizedConfig;\n if (canReuseExistingBuild) {\n this.evaluateAndApplyRules();\n } else {\n this.buildFormFromConfig({ reason: 'initialization' });\n }\n this.isInitialized = true;\n this.initializationStatus = 'success';\n this.applyPresentationVars();\n this.cdr.detectChanges();\n }\n\n private reloadForModeChange(): void {\n if (!this.inputsLoaded || !this.formId || !this.resourcePath) return;\n if (this.isLoading) return;\n this.isInitialized = false;\n this.initializationStatus = 'idle';\n this.tryInitializeForm();\n }\n\n ngOnInit(): void {\n this.debugLog('[PDF] ngOnInit gating', {\n formId: this.formId,\n resourcePath: this.resourcePath,\n });\n this.inputsLoaded = !this.formId;\n if (!this.formId && !this.resourcePath && this.hasRenderableConfig()) {\n this.initializeStandaloneConfig();\n }\n\n // Load persisted connection if not provided via input\n const connKey = this.connectionKey();\n if (!this.resourcePath && connKey) {\n (this.connectionStorage.loadConnection(connKey) as any).pipe(take(1)).subscribe((saved: any) => {\n if (saved?.resourcePath) {\n this.resourcePath = saved.resourcePath;\n // Trigger re-check if needed or just let ngOnChanges handle it if it was called\n // But since we are in ngOnInit, ngOnChanges might have already run.\n // We might need to manually trigger configure if resourcePath changed here.\n if (this.resourcePath) {\n this.crud.configure(this.resourcePath);\n this.tryInitializeForm();\n }\n }\n });\n }\n\n // Load persisted input preferences (e.g., mode) by formId\n try {\n const inputsKey = this.formInputsKey();\n if (inputsKey) {\n this.asyncConfigStorage.loadConfig<any>(inputsKey).pipe(take(1)).subscribe({\n next: (inputsPref) => {\n if (inputsPref && typeof inputsPref === 'object') {\n if (inputsPref.mode === 'create' || inputsPref.mode === 'edit' || inputsPref.mode === 'view') {\n this.mode = inputsPref.mode;\n this.debugLog('🔧 Applied persisted input mode', { mode: this.mode });\n }\n }\n },\n error: () => {\n this.inputsLoaded = true;\n this.tryInitializeForm();\n },\n complete: () => {\n this.inputsLoaded = true;\n this.tryInitializeForm();\n },\n });\n } else {\n this.inputsLoaded = true;\n this.tryInitializeForm();\n }\n } catch {\n this.inputsLoaded = true;\n this.tryInitializeForm();\n }\n\n // Load schema verification preferences (widget-level); resolve precedence\n try {\n this.resolveSchemaPrefs();\n } catch { }\n\n // Subscribe to canvas state changes\n this.canvasState.hoveredElement$\n .pipe(takeUntil(this.destroy$))\n .subscribe((el) => {\n this.hoveredElement = el;\n this.cdr.detectChanges();\n });\n this.canvasState.selectedElement$\n .pipe(takeUntil(this.destroy$))\n .subscribe((el) => {\n this.selectedElement = el;\n if (el && this.formHost) {\n const formRect = this.formHost.nativeElement.getBoundingClientRect();\n const elRect = el.domElement.getBoundingClientRect();\n const left = elRect.left - formRect.left;\n const top = elRect.top - formRect.top;\n this.toolbarTransform = `translate(${left}px, ${top}px)`;\n }\n this.cdr.detectChanges();\n });\n\n this.dynamicLayout.changes$\n .pipe(takeUntil(this.destroy$))\n .subscribe((change) => {\n if (\n change.op.correlationId &&\n change.op.correlationId === this.lastCorrelationId\n ) {\n return;\n }\n this.config = change.config;\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n });\n\n // Initialize form based on the new flow\n if (\n this.formId &&\n this.resourcePath &&\n !this.isInitialized &&\n !this.isLoading\n ) {\n this.tryInitializeForm();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Assert invalid combos: presentationModeGlobal=true is only effective in view mode\n if (\n (changes['mode'] || changes['presentationModeGlobal']) &&\n this.mode !== 'view' &&\n this.presentationModeGlobal === true\n ) {\n try {\n this.warnLog(\n '[PraxisDynamicForm] presentationModeGlobal=true is ignored when mode != \"view\". Rendering in input mode.',\n { mode: this.mode },\n );\n } catch { }\n }\n if (changes['enableCustomization'] && changes['enableCustomization'].previousValue === true && changes['enableCustomization'].currentValue === false) {\n // When customization is disabled, clear any hover/selection so the toolbar closes\n this.canvasState.setHoveredElement(null);\n this.canvasState.setSelectedElement(null);\n this.cdr.detectChanges();\n }\n if (changes['resourcePath'] && this.resourcePath) {\n this.debugLog(\n '[PDF] ngOnChanges resourcePath=',\n this.resourcePath,\n ' -> configure()',\n );\n this.saveConnection('input');\n this.crud.configure(this.resourcePath);\n // this.loadSchema(); // se houver\n if (!this.isInitialized && !this.isLoading && this.formId) {\n this.tryInitializeForm();\n } else if (this.formId) {\n // When base exists, kick a lightweight verification without blocking\n if ((this.config?.sections?.length ?? 0) > 0) {\n this.verifyServerSchemaVersion().catch(() => { });\n }\n }\n }\n if (changes['mode'] && !changes['mode'].firstChange) {\n this.reloadForModeChange();\n }\n\n if (changes['resourceId']) {\n this.debugLog('[PDF] ngOnChanges resourceId=', this.resourceId);\n this.pendingEntityId = this.resourceId ?? null;\n if (this.config.fieldMetadata?.length && this.pendingEntityId != null) {\n this.loadEntity();\n }\n }\n\n if (changes['config'] || changes['presentationModeGlobal']) {\n let shouldRebuildFromExternalConfig = false;\n let externalConfigChanged = false;\n if (changes['config']?.currentValue) {\n const normalizedIncomingConfig = normalizeFormConfig(\n changes['config'].currentValue,\n );\n externalConfigChanged =\n changes['config'].firstChange ||\n !this.isEquivalentFormConfig(\n this.config,\n normalizedIncomingConfig,\n );\n\n if (externalConfigChanged) {\n this.config = normalizedIncomingConfig;\n this.logRowGapsSnapshot('config@input');\n const hasRenderableConfig =\n (this.config?.sections?.length ?? 0) > 0\n || (this.config?.fieldMetadata?.length ?? 0) > 0;\n\n if (hasRenderableConfig) {\n // External config updates must rebuild even when a resourcePath exists.\n shouldRebuildFromExternalConfig = !this.isLoading;\n }\n } else {\n this.debugLog('[PDF] ngOnChanges config skipped (no effective change)');\n }\n }\n this.applyPresentationVars();\n if (shouldRebuildFromExternalConfig) {\n this.buildFormFromConfig({\n reason: 'external-config-hydration',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.isInitialized = true;\n this.initializationStatus = 'success';\n }\n // On external config changes, if we have base and resourcePath configured, verify in background\n if (\n this.resourcePath &&\n (this.config?.sections?.length ?? 0) > 0 &&\n this.formId &&\n (externalConfigChanged || !!changes['presentationModeGlobal'])\n ) {\n this.verifyServerSchemaVersion().catch(() => { });\n }\n }\n\n // Update resolved schema prefs when related @Inputs change\n if (changes['notifyIfOutdated'] || changes['snoozeMs'] || changes['autoOpenSettingsOnOutdated']) {\n try { this.resolveSchemaPrefs(); } catch { }\n }\n\n // Quando os estados globais mudam, remover foco dos inputs para aplicar\n // imediatamente overlays/ocultação sem precisar de interação do usuário\n if (\n changes['readonlyModeGlobal'] ||\n changes['disabledModeGlobal'] ||\n changes['presentationModeGlobal']\n ) {\n this.blurAllInputs();\n }\n }\n\n private blurAllInputs(): void {\n try {\n const host: HTMLElement | null =\n (this.formHost?.nativeElement as any) ||\n document.querySelector('.praxis-dynamic-form');\n if (!host) return;\n // Blur elemento ativo se estiver dentro do formulário\n const active = document.activeElement as HTMLElement | null;\n if (\n active &&\n host.contains(active) &&\n typeof (active as any).blur === 'function'\n ) {\n (active as any).blur();\n }\n // Blur inputs interativos dentro do formulário\n const elems = host.querySelectorAll(\n 'input, textarea, select, [contenteditable=\"true\"], .mat-input-element, .k-input',\n );\n elems.forEach((el: any) => {\n try {\n el.blur?.();\n } catch { }\n });\n // Garantir atualização visual\n this.cdr.detectChanges();\n } catch { }\n }\n\n private async initializeForm(): Promise<void> {\n this.debugLog('[PDF] initializeForm:start', {\n isInitialized: this.isInitialized,\n isLoading: this.isLoading,\n });\n // Prevent duplicate initialization\n if (this.isInitialized || this.isLoading) {\n this.debugLog('⚠️ Skipping duplicate initialization', {\n isInitialized: this.isInitialized,\n isLoading: this.isLoading,\n });\n return;\n }\n\n // Validação obrigatória para cenários corporativos\n if (!this.resourcePath || !this.formId) {\n const error = new Error(\n `Form initialization failed: ${!this.formId ? 'formId' : 'resourcePath'} is required for corporate form management`,\n );\n this.handleInitializationError('config-load', error, {\n formId: this.formId,\n resourcePath: this.resourcePath,\n hasLocalConfig: false,\n });\n return;\n }\n\n this.isLoading = true;\n this.initializationStatus = 'loading';\n this.emitLoadingState('config', 'loading', 'Carregando configuração do formulário...');\n // Hooks: beforeInit\n await this.runHooks('beforeInit');\n\n try {\n // Step 1: Check for saved config\n const configKey = this.formConfigKey();\n if (!configKey) {\n this.warnMissingId();\n return;\n }\n let localConfig = await firstValueFrom(\n this.asyncConfigStorage.loadConfig<FormConfig>(configKey),\n ).catch(() => null);\n this.debugLog(\n '[PDF] initializeForm:flow',\n localConfig ? 'LOCAL_CONFIG' : 'SERVER_DEFAULT',\n );\n\n if (localConfig) {\n // Flow 1: Has local config - load it and verify-only with server (ETag)\n this.debugLog('🔄 Loading saved form configuration');\n this.config = localConfig;\n this.emitLoadingState('config', 'success', 'Configuração carregada.');\n // Verify server schema version in background (do not apply body here)\n this.verifyServerSchemaVersion().catch(() => { });\n } else {\n // Flow 2: No local config - create default from server\n this.debugLog('🆕 Creating new form configuration from server');\n await this.createDefaultConfig();\n }\n\n // Ensure config has stable IDs before any drag-and-drop operations\n this.config = normalizeFormConfig(this.config as FormConfig);\n\n this.debugLog('[PDF] initializeForm:buildForm');\n // Build the form\n this.buildFormFromConfig({ reason: 'initialization' });\n\n // Load entity data if needed\n if (this.pendingEntityId != null) {\n this.loadEntity();\n }\n\n this.debugLog('[PDF] initializeForm:success');\n // Hooks: afterInit\n await this.runHooks('afterInit');\n this.initializationStatus = 'success';\n this.emitLoadingState('idle', 'success', 'Formulário pronto.');\n this.isInitialized = true;\n this.applyPresentationVars();\n this.cdr.detectChanges();\n } catch (error) {\n this.errorLog('[PDF] initializeForm:error', error);\n const key = this.formConfigKey();\n const hasLocalConfig = key\n ? (await firstValueFrom(this.asyncConfigStorage.loadConfig(key)).catch(() => null)) !== null\n : false;\n this.handleInitializationError('form-build', error as Error, {\n formId: this.formId,\n resourcePath: this.resourcePath,\n hasLocalConfig,\n });\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n private handleInitializationError(\n stage: FormInitializationError['stage'],\n error: Error,\n context?: FormInitializationError['context'],\n ): void {\n this.initializationStatus = 'error';\n this.isLoading = false;\n this.cdr.detectChanges();\n\n const formError: FormInitializationError = {\n stage,\n error,\n context,\n recoverable: stage !== 'config-load',\n userMessage: this.getErrorMessage(stage, error),\n };\n\n // Update UX state\n this.currentErrorMessage = formError.userMessage;\n this.currentErrorDetails = { stage, error: error.message, context };\n this.isRecoverable = formError.recoverable;\n\n this.errorLog(\n `[PraxisDynamicForm] Initialization error at ${stage}:`,\n error,\n );\n this.initializationError.emit(formError);\n const phase =\n stage === 'schema-fetch'\n ? 'schema'\n : stage === 'form-build'\n ? 'render'\n : 'config';\n this.emitLoadingState(phase, 'error', formError.userMessage, error);\n try { (async () => await this.runHooks('onError', { stage, error, context }))(); } catch { }\n }\n\n private getErrorMessage(\n stage: FormInitializationError['stage'],\n error: Error,\n ): string {\n const messages = {\n 'config-load': !this.formId\n ? 'Erro: é necessário um formId para persistir configurações do formulário.'\n : !this.resourcePath\n ? 'Erro: informe a rota do recurso (API) para carregar os campos do formulário.'\n : 'Erro na configuração do formulário. Verifique se formId e a rota do recurso estão definidos.',\n 'schema-fetch':\n 'Erro ao carregar campos do servidor. Verifique sua conexão e tente novamente.',\n sync: 'Erro na sincronização com o servidor. O formulário será carregado com dados locais.',\n 'form-build':\n 'Erro ao construir o formulário. Entre em contato com o suporte técnico.',\n } as const;\n\n return (\n (messages as any)[stage] ||\n 'Erro desconhecido na inicialização do formulário.'\n );\n }\n\n private persistFormConfig(key: string | null, cfg: FormConfig): void {\n if (!key) {\n this.warnMissingId();\n return;\n }\n const toSave = this.removeEmptyContainersOnSave\n ? this.dynamicLayout.pruneEmptyContainers(cfg).config\n : cfg;\n try {\n const sections = Array.isArray((toSave as any).sections) ? (toSave as any).sections.length : 0;\n const fields = Array.isArray((toSave as any).fieldMetadata) ? (toSave as any).fieldMetadata.length : 0;\n const fieldNames = Array.isArray((toSave as any).fieldMetadata)\n ? (toSave as any).fieldMetadata.map((f: any) => f?.name).filter((n: any) => typeof n === 'string')\n : [];\n this.debugLog('[PDF] persistFormConfig: begin', { key, sections, fields, fieldNames });\n\n } catch { }\n this.asyncConfigStorage.saveConfig(key, toSave).subscribe();\n try { this.debugLog('[PDF] persistFormConfig: done', { key }); } catch { }\n }\n\n private async createDefaultConfig(): Promise<void> {\n try {\n const serverDefs = await this.getSchemaWithCache();\n const fieldMetadata = mapFieldDefinitionsToMetadata(serverDefs);\n\n if (!fieldMetadata || fieldMetadata.length === 0) {\n throw new Error('No field metadata received from server');\n }\n\n // Generate default layout from metadata (padrão: 2 campos por linha)\n this.config = this.dynamicLayout.generateFormConfigFromMetadata(\n fieldMetadata,\n { fieldsPerRow: 2 },\n );\n // Attach form-level hooks from server schema (if any)\n if (this.schemaRootHooks) {\n (this.config as any).hooks = this.schemaRootHooks;\n }\n\n // Save the generated config and populate schema metadata\n const configKey = this.formConfigKey();\n if (!this.config.metadata) this.config.metadata = {} as any;\n if (this.lastSchemaMeta) {\n this.config.metadata!.schemaId = this.lastSchemaMeta.schemaId;\n this.config.metadata!.serverHash = this.lastSchemaMeta.serverHash;\n (this.config.metadata as any).schemaContext = this.lastSchemaMeta.context;\n }\n this.persistFormConfig(configKey, this.config);\n // Invalidate fields cache since config changed\n this.columnFieldsCache.clear();\n } catch (error) {\n this.handleInitializationError('schema-fetch', error as Error, {\n formId: this.formId,\n resourcePath: this.resourcePath,\n hasLocalConfig: false,\n });\n throw error; // Re-throw to stop initialization\n }\n }\n\n private async syncWithServer(): Promise<void> {\n // Deprecated by verify-only flow; keeping for manual reconcile paths\n try {\n const serverDefs = await this.getSchemaWithCache();\n const serverMetadata = mapFieldDefinitionsToMetadata(serverDefs);\n\n const syncResult = syncWithServerMetadata(this.config, serverMetadata);\n\n this.config = syncResult.config;\n\n // Update meta with last schema info\n if (!this.config.metadata) this.config.metadata = {} as any;\n if (this.lastSchemaMeta) {\n this.config.metadata!.schemaId = this.lastSchemaMeta.schemaId;\n this.config.metadata!.serverHash = this.lastSchemaMeta.serverHash;\n (this.config.metadata as any).schemaContext = this.lastSchemaMeta.context;\n }\n\n if (syncResult.syncResult.hasChanges) {\n this.debugLog('📋 Form sync detected changes:', syncResult.syncResult);\n // Save updated config after sync\n const configKey = this.formConfigKey();\n this.persistFormConfig(configKey, this.config);\n this.syncCompleted.emit(syncResult.syncResult);\n // Invalidate fields cache since config changed\n this.columnFieldsCache.clear();\n }\n } catch (error) {\n // Sync errors are not critical - we can continue with local config\n this.handleInitializationError('sync', error as Error, {\n formId: this.formId,\n resourcePath: this.resourcePath,\n hasLocalConfig: true,\n });\n // Don't re-throw - continue with local config\n }\n }\n\n private loadEntity(): void {\n this.debugLog('[PDF] loadEntity:start', { id: this.pendingEntityId });\n if (this.pendingEntityId == null) {\n return;\n }\n\n // Avoid duplicate network requests but allow re-patching after form build\n if (this.loadedEntityId === this.pendingEntityId) {\n if (this.loadedEntityData && Object.keys(this.form.controls).length) {\n this.form.patchValue(this.loadedEntityData);\n this.hydratedEntityId = this.pendingEntityId;\n this.debugLog('[PDF] loadEntity:repatch', { id: this.pendingEntityId });\n } else {\n this.debugLog('[PDF] loadEntity:duplicate', {\n id: this.pendingEntityId,\n });\n }\n return;\n }\n\n this.loadedEntityId = this.pendingEntityId;\n\n const httpContext = new HttpContext().set(\n PRAXIS_LOADING_CTX,\n this.buildLoadingContext('data', 'Carregando dados…', false),\n );\n this.emitLoadingState('data', 'loading', 'Carregando dados do formulário...');\n this.crud\n .getById(this.pendingEntityId, { httpContext })\n .pipe(takeUntil(this.destroy$))\n .subscribe({\n next: (data: Record<string, any>) => {\n if (data && typeof data === 'object') {\n const normalized = normalizeDateArrays(data);\n this.loadedEntityData = normalized;\n if (Object.keys(this.form.controls).length) {\n this.form.patchValue(normalized);\n }\n this.hydratedEntityId = this.pendingEntityId;\n this.debugLog('[PDF] loadEntity:success', {\n id: this.pendingEntityId,\n });\n this.emitLoadingState('data', 'success', 'Dados carregados.');\n } else {\n this.warnLog(\n 'Invalid entity data received:',\n data,\n { actionId: 'entity.load', throttleKey: 'praxis-dynamic-form:invalid-entity-data' },\n );\n this.emitLoadingState('data', 'error', 'Dados inválidos recebidos.');\n }\n },\n error: (err) => {\n this.emitLoadingState('data', 'error', 'Erro ao carregar dados.', err);\n },\n });\n }\n\n private buildFormFromConfig(options: FormBuildOptions = { reason: 'initialization' }): void {\n const fieldMetadata = this.config.fieldMetadata || [];\n const previousState = options.preserveRuntimeState\n ? this.captureFormRuntimeState()\n : null;\n this.fieldVisibility = {}; // Reset visibility state\n\n const mountCtx = this.buildLoadingContext(\n 'mount',\n 'Montando interface…',\n false,\n );\n this.beginLoading(mountCtx);\n try {\n this.triggerMountAnimation();\n // Construção do formulário via serviço dinâmico\n // Optional diagnostics were removed after validation.\n this.emitLoadingState('render', 'loading', 'Montando campos do formulário...');\n this.logRowGapsSnapshot('buildForm');\n this.form = this.dynamicForm.createFormGroupFromMetadata(fieldMetadata);\n this.applyDateRangeRequiredValidators(fieldMetadata);\n this.restoreFormRuntimeState(previousState, options);\n\n // Inicializar visibilidade padrão por campo\n for (const field of fieldMetadata) {\n this.fieldVisibility[field.name] = true;\n }\n\n // Contexto de regras\n this.contextService.setAvailableFields(fieldMetadata);\n if (this.config.formRules) {\n this.contextService.setFormRules(this.config.formRules);\n // Avaliação inicial\n this.evaluateAndApplyRules();\n }\n\n this.form.valueChanges\n .pipe(debounceTime(50), takeUntil(this.destroy$))\n .subscribe((values) => {\n this.evaluateAndApplyRules();\n if (this.isReactiveValidationEnabled()) {\n try { this.reactiveValidate$?.next(); } catch { }\n }\n this.valueChange.emit({\n formData: values,\n changedFields: Object.keys(values),\n isValid: this.form.valid,\n entityId: this.resourceId ?? undefined,\n });\n });\n\n this.formReady.emit({\n formGroup: this.form,\n fieldsMetadata: fieldMetadata,\n layout: this.layout,\n hasEntity: this.resourceId != null,\n entityId: this.resourceId ?? undefined,\n });\n this.emitLoadingState('render', 'success', 'Campos montados.');\n this.debugLog('[PDF] buildForm:done', {\n fields: this.config.fieldMetadata?.length,\n });\n this.hasBuiltFormFromConfig = true;\n } finally {\n this.endLoading(mountCtx);\n }\n // Invalidate fields cache after building a new form\n this.columnFieldsCache.clear();\n // Setup reactive validation pipeline if enabled\n this.setupReactiveValidation();\n }\n\n private captureFormRuntimeState(): FormRuntimeStateSnapshot | null {\n if (!this.form || !Object.keys(this.form.controls || {}).length) {\n return null;\n }\n\n const dirtyFields = Object.entries(this.form.controls)\n .filter(([, control]) => control.dirty)\n .map(([fieldName]) => fieldName);\n const touchedFields = Object.entries(this.form.controls)\n .filter(([, control]) => control.touched)\n .map(([fieldName]) => fieldName);\n\n return {\n rawValue: this.form.getRawValue(),\n dirtyFields,\n touchedFields,\n context: this.buildCurrentFormRuntimeContext(),\n };\n }\n\n private buildCurrentFormRuntimeContext(): FormRuntimeStateContext {\n const resourcePath = (this.resourcePath || '').trim();\n return {\n resourcePath: resourcePath || null,\n mode: this.resolveModeKey(this.mode),\n entityId:\n this.hydratedEntityId ??\n this.loadedEntityId ??\n this.pendingEntityId ??\n this.resourceId ??\n null,\n };\n }\n\n private buildRestoreTargetContext(): FormRuntimeStateContext {\n const resourcePath = (this.resourcePath || '').trim();\n return {\n resourcePath: resourcePath || null,\n mode: this.resolveModeKey(this.mode),\n entityId: this.resourceId ?? this.pendingEntityId ?? null,\n };\n }\n\n private isCompatibleRuntimeStateContext(previousState: FormRuntimeStateSnapshot): boolean {\n const currentContext = this.buildRestoreTargetContext();\n return (\n previousState.context.resourcePath === currentContext.resourcePath &&\n previousState.context.mode === currentContext.mode &&\n previousState.context.entityId === currentContext.entityId\n );\n }\n\n private restoreFormRuntimeState(\n previousState: FormRuntimeStateSnapshot | null,\n options: FormBuildOptions,\n ): void {\n if (!Object.keys(this.form.controls || {}).length) {\n return;\n }\n\n const snapshotValue =\n previousState &&\n this.isCompatibleRuntimeStateContext(previousState) &&\n Object.keys(previousState.rawValue || {}).length\n ? previousState.rawValue\n : null;\n const fallbackEntityValue =\n !snapshotValue &&\n options.fallbackToLoadedEntity === true &&\n this.loadedEntityData &&\n (this.hydratedEntityId ?? this.loadedEntityId ?? null) != null &&\n (this.hydratedEntityId ?? this.loadedEntityId ?? null) ===\n (this.resourceId ?? this.pendingEntityId ?? null)\n ? this.loadedEntityData\n : null;\n const valueToRestore = snapshotValue ?? fallbackEntityValue;\n\n if (valueToRestore) {\n this.form.patchValue(valueToRestore, { emitEvent: false });\n }\n\n if (\n !previousState ||\n !options.preserveInteractionState ||\n !this.isCompatibleRuntimeStateContext(previousState)\n ) {\n return;\n }\n\n for (const fieldName of previousState.dirtyFields) {\n this.form.get(fieldName)?.markAsDirty({ onlySelf: true });\n }\n\n for (const fieldName of previousState.touchedFields) {\n this.form.get(fieldName)?.markAsTouched({ onlySelf: true });\n }\n }\n\n /**\n * Backward-compatible required validation for DATE_RANGE controls.\n * Some core builds do not enforce required start/end for dateRange fields.\n */\n private applyDateRangeRequiredValidators(fieldMetadata: FieldMetadata[]): void {\n for (const meta of fieldMetadata) {\n const ct = normalizeControlTypeKey((meta as any)?.controlType);\n if (ct !== 'DATE_RANGE') continue;\n\n const isRequired =\n (meta as any)?.required === true ||\n (meta as any)?.validators?.required === true;\n if (!isRequired) continue;\n\n const control = this.form.get(meta.name);\n if (!control) continue;\n\n control.addValidators((c: AbstractControl): ValidationErrors | null => {\n const value = c.value as any;\n if (!value) return { required: true };\n const start =\n value.startDate ??\n value.start ??\n value.fromDate ??\n value.beginDate ??\n null;\n const end =\n value.endDate ??\n value.end ??\n value.toDate ??\n value.finishDate ??\n null;\n return start && end ? null : { required: true };\n });\n control.updateValueAndValidity({ emitEvent: false, onlySelf: true });\n }\n }\n\n private isMountAnimationDisabled(): boolean {\n try {\n if (this.config?.behavior?.disableMountAnimation === true) return true;\n const globalDisable = this.global.get<boolean>('form.disableMountAnimation');\n return globalDisable === true;\n } catch {\n return false;\n }\n }\n\n private triggerMountAnimation(): void {\n if (this.hasMountedAnimation || this.isMountAnimationDisabled()) return;\n this.hasMountedAnimation = true;\n this.isMounting = true;\n this.cdr.markForCheck();\n this.mountAnimationTimer = setTimeout(() => {\n this.isMounting = false;\n this.cdr.markForCheck();\n this.mountAnimationTimer = null;\n }, 240);\n }\n\n protected getMountDurationVar(): string | null {\n const ms = this.config?.behavior?.mountAnimation?.durationMs;\n if (typeof ms !== 'number' || !isFinite(ms) || ms <= 0) return null;\n return `${ms}ms`;\n }\n\n protected getMountOffsetVar(): string | null {\n const px = this.config?.behavior?.mountAnimation?.offsetPx;\n if (typeof px !== 'number' || !isFinite(px) || px < 0) return null;\n return `${px}px`;\n }\n\n protected getMountStaggerVar(): string | null {\n const ms = this.config?.behavior?.mountAnimation?.staggerMs;\n if (typeof ms !== 'number' || !isFinite(ms) || ms < 0) return null;\n return `${ms}ms`;\n }\n\n private connectionKey(): string | null {\n const id = this.componentKeyId();\n return id ? `conn:form:${id}` : null;\n }\n\n private isEquivalentFormConfig(left: FormConfig | null | undefined, right: FormConfig | null | undefined): boolean {\n try {\n const emptyConfig = { sections: [] } as FormConfig;\n const normalizedLeft = normalizeFormConfig(left ?? emptyConfig);\n const normalizedRight = normalizeFormConfig(right ?? emptyConfig);\n return JSON.stringify(normalizedLeft) === JSON.stringify(normalizedRight);\n } catch {\n return false;\n }\n }\n\n private saveConnection(origin: 'input' | 'quick-connect' | 'editor'): void {\n const rp = (this.resourcePath || '').trim();\n if (!rp) return;\n const key = this.connectionKey();\n if (!key) return;\n (this.connectionStorage.loadConnection(key) as any).pipe(take(1)).subscribe((prev: any) => {\n if (prev?.resourcePath === rp) return;\n (this.connectionStorage.saveConnection(key, {\n resourcePath: rp,\n version: 1,\n updatedAt: new Date().toISOString(),\n origin,\n }) as any).subscribe();\n });\n }\n\n disconnect(): void {\n try {\n const key = this.connectionKey();\n if (key) (this.connectionStorage.clearConnection(key) as any).subscribe();\n } catch { }\n this.resourcePath = '';\n this.initializationStatus = 'idle';\n this.currentErrorMessage = '';\n this.isRecoverable = false;\n this.hydratedEntityId = null;\n this.hasBuiltFormFromConfig = false;\n // Clear form group content safely\n try { this.form.reset(); } catch { }\n this.cdr.detectChanges();\n }\n\n // Fechar a toolbar quando o componente filho solicita (ESC)\n onToolbarRequestClose(): void {\n // Limpa seleção/hover para esconder a toolbar\n this.canvasState.setHoveredElement(null);\n this.canvasState.setSelectedElement(null);\n this.selectedElement = null;\n this.cdr.detectChanges();\n }\n\n private evaluateAndApplyRules(): void {\n if (!this.config.formRules || !this.form) {\n this.fieldRuleProps = {};\n this.sectionRuleProps = {};\n this.actionRuleProps = {};\n this.rowRuleProps = {};\n this.columnRuleProps = {};\n this.columnFieldsCache.clear();\n return;\n }\n\n const evaluated = this.rulesService.applyRules(\n this.form,\n this.config.formRules,\n );\n\n this.fieldRuleProps = evaluated.fieldProps || {};\n this.sectionRuleProps = evaluated.sectionProps || {};\n this.actionRuleProps = evaluated.actionProps || {};\n this.rowRuleProps = evaluated.rowProps || {};\n this.columnRuleProps = evaluated.columnProps || {};\n this.columnFieldsCache.clear();\n\n const fieldMetadata = this.config.fieldMetadata || [];\n const fieldByName = new Map<string, FieldMetadata>(\n fieldMetadata.map((f) => [f.name, f]),\n );\n\n for (const field of fieldMetadata) {\n const overrides: any = this.fieldRuleProps[field.name] || {};\n const control = this.form.get(field.name);\n const readonlyOverride =\n overrides.readonly !== undefined ? overrides.readonly : overrides.readOnly;\n const disabledOverride = overrides.disabled;\n\n const meta = fieldByName.get(field.name);\n\n const isVisible =\n overrides.visible !== undefined\n ? !!overrides.visible\n : true;\n this.fieldVisibility[field.name] = isVisible;\n\n const baseDisabled =\n (meta as any)?.disabled === true || (meta as any)?.readOnly === true;\n const shouldDisable =\n (disabledOverride !== undefined\n ? disabledOverride\n : baseDisabled) ||\n (readonlyOverride !== undefined ? readonlyOverride : false) ||\n isVisible === false;\n\n if (control) {\n if (shouldDisable && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!shouldDisable && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n\n if (!meta) continue;\n\n const mergedValidators: any = { ...(meta.validators || {}) };\n if (overrides.validators && typeof overrides.validators === 'object') {\n Object.assign(mergedValidators, overrides.validators);\n }\n if (overrides.required !== undefined) {\n mergedValidators.required = overrides.required;\n }\n\n if (control) {\n const overrideStyle = overrides.style;\n const nextMeta = {\n ...meta,\n validators: mergedValidators,\n disabled: shouldDisable,\n readOnly:\n readonlyOverride !== undefined\n ? readonlyOverride\n : (meta as any).readOnly,\n cssClass:\n overrides.className !== undefined\n ? overrides.className || undefined\n : (meta as any).cssClass,\n style: {\n ...(overrideStyle === null ? {} : (meta as any).style),\n ...(overrideStyle && typeof overrideStyle === 'object'\n ? overrideStyle\n : {}),\n },\n } as FieldMetadata;\n this.dynamicForm.updateControlFromMetadata(this.form, nextMeta, {\n emitEvent: false,\n });\n }\n }\n\n this.cdr.detectChanges();\n }\n\n isSectionCollapsed(section?: FormSection): boolean {\n const props = this.getSectionRuleProps(section);\n const collapsible =\n props.collapsible !== undefined ? props.collapsible : section?.collapsible;\n if (!collapsible) {\n return false;\n }\n const collapsed =\n props.collapsed !== undefined ? props.collapsed : section?.collapsed;\n return !!collapsed;\n }\n\n isSectionCollapsible(section?: FormSection): boolean {\n const props = this.getSectionRuleProps(section);\n return (props.collapsible !== undefined\n ? props.collapsible\n : section?.collapsible) === true;\n }\n\n private getSectionRuleProps(section?: FormSection): any {\n if (!section || !section.id) return {};\n return this.sectionRuleProps[section.id] || {};\n }\n\n isSectionVisible(section?: FormSection): boolean {\n if (!section) return true;\n const props = this.getSectionRuleProps(section);\n if (props.visible !== undefined) {\n return !!props.visible;\n }\n return true;\n }\n\n getSectionTitle(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.title !== undefined ? props.title : section.title;\n }\n\n getSectionDescription(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.description !== undefined ? props.description : section.description;\n }\n\n getSectionAppearance(section: FormSection): 'card' | 'plain' | 'step' | undefined {\n const props = this.getSectionRuleProps(section);\n return props.appearance ?? (section as any).appearance;\n }\n\n getSectionStepLabel(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.stepLabel ?? (section as any).stepLabel;\n }\n\n getSectionTitleColor(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.titleColor !== undefined ? props.titleColor : section.titleColor;\n }\n\n getSectionDescriptionColor(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.descriptionColor !== undefined\n ? props.descriptionColor\n : section.descriptionColor;\n }\n\n getSectionTitleStyle(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.titleStyle ?? section.titleStyle;\n }\n\n getSectionDescriptionStyle(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.descriptionStyle ?? section.descriptionStyle;\n }\n\n getSectionHeaderTooltip(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.headerTooltip ?? section.headerTooltip;\n }\n\n getSectionHeaderActions(section: FormSection): FormSectionHeaderAction[] {\n const props = this.getSectionRuleProps(section);\n const source = props.headerActions ?? (section as any).headerActions;\n if (!Array.isArray(source)) return [];\n return source\n .filter(\n (action) =>\n !!action && typeof action.id === 'string' && !!action.id.trim(),\n )\n .map((action) => this.applySectionHeaderActionOverrides(section, action))\n .filter((action) => action.visible !== false);\n }\n\n getSectionHeaderAlign(section: FormSection): 'start' | 'center' | undefined {\n const props = this.getSectionRuleProps(section);\n return props.headerAlign ?? section.headerAlign;\n }\n\n getSectionGapBottom(section: FormSection): number | null {\n const props = this.getSectionRuleProps(section);\n const gap = props.gapBottom ?? section.gapBottom;\n return gap ?? null;\n }\n\n getSectionTitleGapBottom(section: FormSection): number | null {\n const props = this.getSectionRuleProps(section);\n const gap = props.titleGapBottom ?? section.titleGapBottom;\n return gap ?? null;\n }\n\n getSectionDescriptionGapBottom(section: FormSection): number | null {\n const props = this.getSectionRuleProps(section);\n const gap = props.descriptionGapBottom ?? section.descriptionGapBottom;\n return gap ?? null;\n }\n\n getSectionHeaderActionColor(\n action: FormSectionHeaderAction,\n ): 'primary' | 'accent' | 'warn' | undefined {\n const c = String(action.color || '').toLowerCase();\n switch (c) {\n case 'primary':\n return 'primary';\n case 'accent':\n case 'secondary':\n return 'accent';\n case 'warn':\n case 'danger':\n case 'error':\n return 'warn';\n default:\n return undefined;\n }\n }\n\n getSectionHeaderActionTooltip(action: FormSectionHeaderAction): string {\n return action.tooltip || action.label;\n }\n\n isSectionHeaderActionDisabled(action: FormSectionHeaderAction): boolean {\n return this.submitting || !!action.disabled || !!action.loading;\n }\n\n getSectionHeaderActionNgClass(action: FormSectionHeaderAction): Record<string, boolean> {\n const className = action.className;\n const tone = String(action.color || 'basic').toLowerCase();\n return {\n ...(className ? { [className]: true } : {}),\n [`tone-${tone}`]: true,\n loading: !!action.loading,\n };\n }\n\n getSectionHeaderActionStyles(action: FormSectionHeaderAction): Record<string, any> | null {\n return action.style && Object.keys(action.style).length ? action.style : null;\n }\n\n getSectionHeaderActionLoadingLabel(action: FormSectionHeaderAction): string {\n return action.tooltip || action.label;\n }\n\n onSectionHeaderActionClick(\n section: FormSection,\n action: FormSectionHeaderAction,\n event: Event,\n ): void {\n event.preventDefault();\n event.stopPropagation();\n if (this.isSectionHeaderActionDisabled(action)) return;\n const actionId = this.getSectionHeaderActionEventId(action);\n if (!actionId) return;\n const confirmationMessage = this._getConfirmationMessageForAliases(\n ...this.getSectionHeaderActionRuleKeys(section, action),\n actionId,\n action.id,\n );\n const emitAction = () => {\n this.customAction.emit({\n actionId,\n formData: this.form.value,\n isValid: this.form.valid,\n source: 'section-header',\n ...(section.id ? { sectionId: section.id } : {}),\n });\n };\n if (confirmationMessage) {\n this._showConfirmationDialog(actionId, confirmationMessage, emitAction);\n } else {\n emitAction();\n }\n }\n\n private applySectionHeaderActionOverrides(\n section: FormSection,\n action: FormSectionHeaderAction,\n ): FormSectionHeaderAction {\n const override = this.getSectionHeaderActionRuleKeys(section, action)\n .map((key) => (key ? this.actionRuleProps?.[key] : undefined))\n .find((candidate) => !!candidate);\n if (!override) return action;\n return {\n ...action,\n ...(override.label !== undefined ? { label: override.label } : {}),\n ...(override.icon !== undefined ? { icon: override.icon } : {}),\n ...(override.visible !== undefined ? { visible: override.visible } : {}),\n ...(override.disabled !== undefined ? { disabled: override.disabled } : {}),\n ...(override.loading !== undefined ? { loading: override.loading } : {}),\n ...(override.tooltip !== undefined ? { tooltip: override.tooltip } : {}),\n ...(override.color !== undefined ? { color: override.color } : {}),\n ...(override.className !== undefined ? { className: override.className } : {}),\n ...(override.style !== undefined ? { style: override.style } : {}),\n };\n }\n\n private getSectionHeaderActionEventId(\n action: Pick<FormSectionHeaderAction, 'id' | 'action'>,\n ): string {\n return action.action?.trim() || action.id.trim();\n }\n\n private getSectionHeaderActionRuleKeys(\n section: Pick<FormSection, 'id'>,\n action: Pick<FormSectionHeaderAction, 'id' | 'action'>,\n ): string[] {\n const logicalId = this.getSectionHeaderActionEventId(action);\n const scopedKey =\n section.id && logicalId\n ? `section:${section.id}:header-action:${logicalId}`\n : undefined;\n const unscopedHeaderActionKey = logicalId\n ? `header-action:${logicalId}`\n : undefined;\n return [scopedKey, unscopedHeaderActionKey, logicalId, action.id?.trim()].filter(\n (value): value is string => !!value,\n );\n }\n\n private getRowRuleProps(row?: FormRow): any {\n if (!row || !row.id) return {};\n return this.rowRuleProps[row.id] || {};\n }\n\n isRowVisible(row?: FormRow): boolean {\n if (!row) return true;\n const props = this.getRowRuleProps(row);\n if (props.visible !== undefined) return !!props.visible;\n return true;\n }\n\n getRowGap(row: FormRow): number | null {\n const props = this.getRowRuleProps(row);\n return props.gap ?? row.gap ?? null;\n }\n\n getRowRowGap(row: FormRow): number | null {\n const props = this.getRowRuleProps(row);\n return props.rowGap ?? row.rowGap ?? null;\n }\n\n getRowClasses(row: FormRow): string[] {\n const props = this.getRowRuleProps(row);\n const classes: string[] = [];\n if (props.className) classes.push(props.className);\n return classes;\n }\n\n getRowStyles(row: FormRow): Record<string, any> | null {\n const props = this.getRowRuleProps(row);\n const styles = { ...(props.style || {}) };\n return Object.keys(styles).length ? styles : null;\n }\n\n getSectionIcon(section: FormSection): string | undefined {\n const props = this.getSectionRuleProps(section);\n return props.icon !== undefined ? props.icon : section.icon;\n }\n\n getSectionHeaderVisual(section: FormSection): ResolvedSectionHeaderVisual {\n const sectionWithHeader = section as FormSection & { sectionHeader?: FormSectionHeaderConfig };\n const header = this.getSectionHeaderConfig(sectionWithHeader);\n const legacyIcon = this.getSectionIcon(section);\n if (!header) {\n return legacyIcon ? { kind: 'icon', icon: legacyIcon } : { kind: 'none' };\n }\n\n const mode = header.mode ?? 'icon';\n const formData = this.form?.getRawValue?.() ?? {};\n if (mode === 'icon') {\n const icon = legacyIcon || header.fallbackIcon;\n return icon ? { kind: 'icon', icon } : { kind: 'none' };\n }\n\n if (mode === 'avatar-image' || mode === 'auto') {\n const imageSrc = this.resolveSectionHeaderImageSrc(\n this.getSectionHeaderFieldValue(formData, header.sourceField),\n );\n if (imageSrc) {\n return {\n kind: 'image',\n src: imageSrc,\n alt: this.getSectionHeaderAltText(section, formData, header),\n };\n }\n if (mode === 'avatar-image') {\n return this.getSectionHeaderEmptyVisual(section, formData, header);\n }\n }\n\n if (mode === 'avatar-initials' || mode === 'auto') {\n const initials = this.deriveSectionHeaderInitials(\n this.getSectionHeaderInitialsSourceValue(formData, header),\n header.initialsMaxLength,\n );\n if (initials) {\n return {\n kind: 'initials',\n text: initials,\n ariaLabel: this.getSectionHeaderAltText(section, formData, header),\n };\n }\n }\n\n return this.getSectionHeaderEmptyVisual(section, formData, header);\n }\n\n getSectionHeaderAvatarSize(section: FormSection): NonNullable<FormSectionHeaderConfig['size']> | null {\n const header = this.getSectionHeaderConfig(\n section as FormSection & { sectionHeader?: FormSectionHeaderConfig },\n );\n if (!header) return null;\n return header.size ?? SECTION_HEADER_SIZE_DEFAULT;\n }\n\n private getSectionHeaderConfig(\n section: FormSection & { sectionHeader?: FormSectionHeaderConfig },\n ): FormSectionHeaderConfig | undefined {\n const props = this.getSectionRuleProps(section);\n const base = section.sectionHeader;\n if (props.sectionHeader === undefined) {\n return base;\n }\n if (props.sectionHeader === null) {\n return undefined;\n }\n if (!props.sectionHeader || typeof props.sectionHeader !== 'object') {\n return base;\n }\n return {\n ...(base || {}),\n ...props.sectionHeader,\n };\n }\n\n private getSectionHeaderFieldValue(formData: Record<string, unknown>, fieldName?: string): unknown {\n if (!fieldName) return undefined;\n return this.getMetadataPath(formData, fieldName);\n }\n\n private getSectionHeaderInitialsSourceValue(\n formData: Record<string, unknown>,\n header?: FormSectionHeaderConfig,\n ): unknown {\n const candidates = getSectionHeaderTextFieldCandidates(header);\n for (const fieldName of candidates) {\n const value = this.getSectionHeaderFieldValue(formData, fieldName);\n if (typeof value === 'string' && value.trim()) return value;\n if (value != null && typeof value !== 'object') return value;\n }\n return undefined;\n }\n\n private getSectionHeaderFallbackIcon(\n section: FormSection,\n header?: FormSectionHeaderConfig,\n ): string | undefined {\n return header?.fallbackIcon || section.icon || undefined;\n }\n\n private getSectionHeaderEmptyVisual(\n section: FormSection,\n formData: Record<string, unknown>,\n header?: FormSectionHeaderConfig,\n ): ResolvedSectionHeaderVisual {\n const emptyState: FormSectionHeaderEmptyState = header?.emptyState ?? 'placeholder-avatar';\n const fallbackIcon = this.getSectionHeaderFallbackIcon(section, header);\n const ariaLabel = this.getSectionHeaderAltText(section, formData, header);\n if (emptyState === 'none') return { kind: 'none' };\n if (emptyState === 'placeholder-avatar') {\n return {\n kind: 'placeholder',\n ariaLabel,\n };\n }\n return fallbackIcon\n ? {\n kind: 'placeholder',\n icon: fallbackIcon,\n ariaLabel,\n }\n : { kind: 'none' };\n }\n\n private getSectionHeaderAltText(\n section: FormSection,\n formData: Record<string, unknown>,\n header?: FormSectionHeaderConfig,\n ): string {\n const altSource = this.getSectionHeaderFieldValue(formData, header?.altField)\n ?? this.getSectionHeaderInitialsSourceValue(formData, header);\n const normalized = typeof altSource === 'string' ? altSource.trim() : '';\n if (normalized) return normalized;\n const sectionTitle = this.getSectionTitle(section);\n return sectionTitle ? sectionTitle : '';\n }\n\n private deriveSectionHeaderInitials(value: unknown, maxLength?: number): string | null {\n return deriveSectionHeaderInitials(\n value,\n clampSectionHeaderInitialsMaxLength(maxLength),\n );\n }\n\n private resolveSectionHeaderImageSrc(value: unknown): string | null {\n if (typeof value === 'string') {\n const normalized = value.trim();\n if (!normalized) return null;\n if (normalized.startsWith('data:image/')) return normalized;\n if (/^(https?:\\/\\/|blob:|\\/|\\.\\/|\\.\\.\\/)/i.test(normalized)) return normalized;\n if (/\\.(png|jpe?g|gif|webp|svg)(\\?.*)?$/i.test(normalized)) return normalized;\n return null;\n }\n\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n let cached = this.sectionHeaderBlobUrlCache.get(value);\n if (!cached) {\n cached = URL.createObjectURL(value);\n this.sectionHeaderBlobUrlCache.set(value, cached);\n this.sectionHeaderObjectUrls.add(cached);\n }\n return cached;\n }\n\n if (value instanceof ArrayBuffer) {\n return this.bytesToDataUrl(new Uint8Array(value), 'image/png');\n }\n\n if (ArrayBuffer.isView(value)) {\n return this.bytesToDataUrl(\n new Uint8Array(value.buffer, value.byteOffset, value.byteLength),\n 'image/png',\n );\n }\n\n if (Array.isArray(value) && value.every((entry) => Number.isInteger(entry) && entry >= 0 && entry <= 255)) {\n return this.bytesToDataUrl(Uint8Array.from(value), 'image/png');\n }\n\n if (!value || typeof value !== 'object') return null;\n\n const imageObject = value as Record<string, unknown>;\n const directString = this.firstNonEmptyString(imageObject, ['url', 'src', 'href', 'dataUrl']);\n if (directString) {\n return this.resolveSectionHeaderImageSrc(directString);\n }\n\n const nestedBlob = imageObject['blob'] ?? imageObject['file'];\n if (nestedBlob) {\n return this.resolveSectionHeaderImageSrc(nestedBlob);\n }\n\n const base64 = this.firstNonEmptyString(imageObject, ['base64', 'content', 'data']);\n if (base64) {\n const contentType = this.firstNonEmptyString(imageObject, ['contentType', 'mimeType', 'type']) || 'image/png';\n return `data:${contentType};base64,${base64.replace(/^data:[^;]+;base64,/i, '')}`;\n }\n\n const bytes = imageObject['bytes'] ?? imageObject['byteArray'];\n if (bytes instanceof ArrayBuffer || ArrayBuffer.isView(bytes) || Array.isArray(bytes)) {\n const contentType = this.firstNonEmptyString(imageObject, ['contentType', 'mimeType', 'type']) || 'image/png';\n if (bytes instanceof ArrayBuffer) return this.bytesToDataUrl(new Uint8Array(bytes), contentType);\n if (ArrayBuffer.isView(bytes)) {\n return this.bytesToDataUrl(\n new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength),\n contentType,\n );\n }\n if (Array.isArray(bytes)) {\n return this.bytesToDataUrl(Uint8Array.from(bytes), contentType);\n }\n }\n\n return null;\n }\n\n private bytesToDataUrl(bytes: Uint8Array, contentType: string): string | null {\n if (!bytes.length) return null;\n let binary = '';\n const chunkSize = 0x8000;\n for (let index = 0; index < bytes.length; index += chunkSize) {\n const chunk = bytes.subarray(index, index + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return `data:${contentType};base64,${btoa(binary)}`;\n }\n\n private firstNonEmptyString(\n target: Record<string, unknown>,\n keys: string[],\n ): string | null {\n for (const key of keys) {\n const value = target[key];\n if (typeof value === 'string' && value.trim()) return value.trim();\n }\n return null;\n }\n\n getSectionClasses(section: FormSection): string[] {\n const classes: string[] = [];\n const appearance = this.getSectionAppearance(section);\n if (appearance) classes.push(`section-appearance-${appearance}`);\n const baseClass = (section as any).className as string | undefined;\n if (baseClass) classes.push(baseClass);\n const props = this.getSectionRuleProps(section);\n if (props.className) classes.push(props.className);\n return classes;\n }\n\n getSectionStyles(section: FormSection): Record<string, any> | null {\n const props = this.getSectionRuleProps(section);\n const styles = { ...((section as any)?.styles || {}) };\n if (props.style === null) {\n // null remove overrides e estilos herdados\n this.sanitizeSectionStylesForEditorialContext(section, styles);\n this.applyBorderPropsToStyle(styles, props);\n return Object.keys(styles).length ? styles : null;\n }\n Object.entries(props.style || {}).forEach(([k, v]) => {\n styles[k] = v;\n });\n this.sanitizeSectionStylesForEditorialContext(section, styles);\n this.applyBorderPropsToStyle(styles, props);\n return Object.keys(styles).length ? styles : null;\n }\n\n private sanitizeSectionStylesForEditorialContext(\n section: FormSection,\n styles: Record<string, any>,\n ): void {\n if (!this.isEditorialVisualContext()) {\n return;\n }\n\n if (this.getSectionAppearance(section) !== 'step') {\n return;\n }\n\n [\n 'background',\n 'backgroundColor',\n 'background-color',\n 'backgroundImage',\n 'background-image',\n 'boxShadow',\n 'box-shadow',\n ].forEach((key) => {\n delete styles[key];\n });\n }\n\n private isEditorialVisualContext(): boolean {\n return !!(this.config?.editorialContext || this.editorialContext);\n }\n\n hasEditorialVisualContext(): boolean {\n return this.isEditorialVisualContext();\n }\n\n private applyBorderPropsToStyle(\n styles: Record<string, any>,\n props: any,\n ): void {\n if (props.borderColor !== undefined) {\n if (props.borderColor === null) {\n delete styles['borderColor'];\n } else {\n styles['borderColor'] = props.borderColor;\n }\n }\n if (props.borderStyle !== undefined) {\n if (props.borderStyle === null) {\n delete styles['borderStyle'];\n } else {\n styles['borderStyle'] = props.borderStyle;\n }\n }\n if (props.borderWidth !== undefined) {\n if (props.borderWidth === null) {\n delete styles['borderWidth'];\n } else {\n styles['borderWidth'] = props.borderWidth;\n }\n }\n }\n\n toggleSectionCollapse(event: Event, section: FormSection): void {\n event.stopPropagation();\n if (!this.isSectionCollapsible(section)) return;\n section.collapsed = !this.isSectionCollapsed(section);\n try { this.cdr.markForCheck(); } catch { }\n }\n\n sectionPanelId(section: FormSection, index: number): string {\n const safeId = section?.id || `section-${index}`;\n return `section-panel-${safeId}`;\n }\n\n getSectionCollapsedSummary(section: FormSection): string {\n const rows = section?.rows || [];\n const fieldCount = rows.reduce((acc, row) => {\n const cols = row?.columns || [];\n const colFields = cols.reduce((cAcc, col) => cAcc + ((col?.fields || []).length), 0);\n return acc + colFields;\n }, 0);\n const rowLabel = rows.length === 1 ? 'linha' : 'linhas';\n const fieldLabel = fieldCount === 1 ? 'campo' : 'campos';\n return `${rows.length} ${rowLabel}, ${fieldCount} ${fieldLabel}`;\n }\n\n getColumnFields(column: { fields: string[]; id?: string }): FieldMetadata[] {\n // Build a lightweight signature based on the ordered list of visible field names\n // When the signature is unchanged, return the cached array reference to avoid\n // triggering DynamicFieldLoader re-renders due to a new array instance.\n const key = column.id || JSON.stringify(column.fields);\n const visibleNames = column.fields\n .filter((name) => this.fieldVisibility[name] !== false)\n .map((name) => {\n const overrides: any = this.fieldRuleProps[name] || {};\n return `${name}:${JSON.stringify({\n className: overrides.className,\n style: overrides.style,\n })}`;\n })\n .join('|');\n\n const cached = this.columnFieldsCache.get(key);\n if (cached && cached.signature === visibleNames) {\n return cached.value;\n }\n\n const fieldMetadata = this.config.fieldMetadata || [];\n const byName = new Map<string, FieldMetadata>(\n fieldMetadata.map((f) => [f.name, f]),\n );\n const ordered: FieldMetadata[] = [];\n for (const name of column.fields) {\n if (this.fieldVisibility[name] === false) continue;\n const meta = byName.get(name);\n if (meta) {\n const overrides: any = this.fieldRuleProps[name] || {};\n if (overrides.className || overrides.style) {\n ordered.push({\n ...meta,\n cssClass: overrides.className ?? (meta as any).cssClass,\n style: {\n ...(meta as any).style,\n ...(overrides.style || {}),\n },\n } as FieldMetadata);\n } else {\n ordered.push(meta);\n }\n }\n }\n this.columnFieldsCache.set(key, { signature: visibleNames, value: ordered });\n return ordered;\n }\n\n private getColumnRuleProps(column?: FormColumn): any {\n if (!column || !column.id) return {};\n return this.columnRuleProps[column.id] || {};\n }\n\n private getEffectiveColumn(column: FormColumn): FormColumn {\n const props = this.getColumnRuleProps(column);\n const merged: any = { ...column };\n Object.entries(props || {}).forEach(([k, v]) => {\n if (v === null) {\n delete merged[k];\n } else {\n merged[k] = v as any;\n }\n });\n return merged;\n }\n\n getColumnClasses(column: FormColumn): string[] {\n const effective = this.getEffectiveColumn(column);\n const classes = [\n ...this.getColumnSpanClasses(effective),\n ...this.getColumnOffsetClasses(effective),\n ...this.getColumnOrderClasses(effective),\n ...this.getColumnHiddenClasses(effective),\n ];\n if (effective.align) {\n classes.push(`align-${effective.align}`);\n }\n if (effective.className) {\n classes.push(effective.className);\n }\n return classes;\n }\n\n private getColumnSpanClasses(column: FormColumn): string[] {\n const { xs, sm, md, lg, xl } = resolveSpan(column.span);\n return [\n `span-xs-${xs}`,\n `span-sm-${sm}`,\n `span-md-${md}`,\n `span-lg-${lg}`,\n `span-xl-${xl}`,\n ];\n }\n\n private getColumnOffsetClasses(column: FormColumn): string[] {\n const { xs, sm, md, lg, xl } = resolveOffset(column.offset);\n return [\n `offset-xs-${xs}`,\n `offset-sm-${sm}`,\n `offset-md-${md}`,\n `offset-lg-${lg}`,\n `offset-xl-${xl}`,\n ];\n }\n\n private getColumnOrderClasses(column: FormColumn): string[] {\n const { xs, sm, md, lg, xl } = resolveOrder(column.order);\n return [\n `order-xs-${xs}`,\n `order-sm-${sm}`,\n `order-md-${md}`,\n `order-lg-${lg}`,\n `order-xl-${xl}`,\n ];\n }\n\n private getColumnHiddenClasses(column: FormColumn): string[] {\n const { xs, sm, md, lg, xl } = resolveHidden(column.hidden);\n const classes: string[] = [];\n if (xs) classes.push('hidden-xs');\n if (sm) classes.push('hidden-sm');\n if (md) classes.push('hidden-md');\n if (lg) classes.push('hidden-lg');\n if (xl) classes.push('hidden-xl');\n return classes;\n }\n\n isColumnVisible(column: FormColumn): boolean {\n const props = this.getColumnRuleProps(column);\n if (props.visible !== undefined) {\n return !!props.visible;\n }\n // A column is visible if at least one of its fields is visible.\n return column.fields.some((fieldName) => this.fieldVisibility[fieldName]);\n }\n\n getColumnPadding(column: FormColumn): number | undefined {\n const effective = this.getEffectiveColumn(column);\n return effective.padding;\n }\n\n getColumnStyles(column: FormColumn): Record<string, any> | null {\n const props = this.getColumnRuleProps(column);\n const styles = { ...(props.style || {}) };\n return Object.keys(styles).length ? styles : null;\n }\n\n private _getConfirmationMessage(actionId: string): string | undefined {\n return this._getConfirmationMessageForAliases(actionId);\n }\n\n private _getConfirmationMessageForAliases(\n ...actionIds: Array<string | undefined>\n ): string | undefined {\n const messages = this.config.messages;\n if (!messages) return undefined;\n\n for (const actionId of actionIds) {\n if (!actionId) continue;\n const customMessage = messages.customActions?.[actionId]?.confirmation;\n if (customMessage) return customMessage;\n const confirmation = messages.confirmations?.[actionId];\n if (confirmation) return confirmation;\n }\n\n return undefined;\n }\n\n private _showConfirmationDialog(\n actionId: string,\n message: string,\n onConfirm: () => void,\n ): void {\n const dialogRef = this.dialog.open<\n ConfirmDialogComponent,\n ConfirmDialogData,\n boolean\n >(ConfirmDialogComponent, {\n data: {\n title: 'Confirmação',\n message: message,\n confirmText: 'Confirmar',\n cancelText: 'Cancelar',\n type:\n actionId === 'cancel' || actionId === 'reset' ? 'warning' : 'info',\n },\n autoFocus: false,\n });\n\n dialogRef.afterClosed().subscribe((confirmed) => {\n this.actionConfirmation.emit({\n actionId,\n message,\n confirmed: !!confirmed,\n });\n if (confirmed) {\n onConfirm();\n }\n });\n }\n\n onFormAction(event: PraxisFormActionEvent): void {\n if (this.submitting) {\n return;\n }\n const { actionId, button, originalEvent } = event;\n const confirmationMessage = this._getConfirmationMessage(actionId);\n if (button.type === 'submit' && originalEvent) {\n originalEvent.preventDefault();\n originalEvent.stopPropagation();\n }\n if (confirmationMessage) {\n this._showConfirmationDialog(actionId, confirmationMessage, () =>\n this._executeAction(button),\n );\n } else {\n this._executeAction(button);\n }\n }\n\n private _executeAction(button: FormActionButton): void {\n const actionId = button.id || button.action;\n if (!actionId) return;\n\n switch (actionId) {\n case 'submit':\n this.onSubmit();\n break;\n case 'cancel':\n const needsConfirm = this.shouldConfirmCancelOnDirty();\n if (needsConfirm) {\n const dialogRef = this.dialog.open(ConfirmDialogComponent, {\n data: {\n title: 'Descartar alterações?',\n message:\n 'Você tem alterações não salvas. Deseja sair sem salvar?',\n confirmText: 'Descartar',\n cancelText: 'Cancelar',\n type: 'warning',\n },\n autoFocus: false,\n });\n dialogRef.afterClosed().subscribe((confirmed) => {\n if (confirmed) this.formCancel.emit();\n });\n } else {\n this.formCancel.emit();\n }\n break;\n case 'reset':\n this.form.reset();\n this.formReset.emit();\n break;\n default:\n // This is a custom action\n this.customAction.emit({\n actionId: actionId,\n formData: this.form.value,\n isValid: this.form.valid,\n source: 'button',\n });\n break;\n }\n }\n\n async onSubmit(): Promise<void> {\n if (this.submitting) return;\n // Hooks: beforeValidate\n try { await this.runHooks('beforeValidate'); } catch { }\n if (this.form.invalid) {\n // UX: marcar todos como touched para exibir erros\n this.form.markAllAsTouched();\n this.form.updateValueAndValidity({ onlySelf: false, emitEvent: false });\n // Comportamento opcional conforme config.behavior\n const behavior = this.config.behavior || ({} as any);\n if (behavior.focusFirstError || behavior.scrollToErrors) {\n try {\n const host: HTMLElement | null = document.querySelector(\n '.praxis-dynamic-form',\n );\n const firstInvalid: HTMLElement | null = host?.querySelector(\n '.ng-invalid[formcontrolname], .ng-invalid input, .ng-invalid select, .ng-invalid textarea',\n ) as any;\n if (firstInvalid) {\n if (behavior.scrollToErrors) {\n firstInvalid.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n if (behavior.focusFirstError && (firstInvalid as any).focus) {\n setTimeout(() => (firstInvalid as any).focus(), 50);\n }\n }\n } catch { }\n }\n // Hooks: afterValidate (invalid)\n try { await this.runHooks('afterValidate'); } catch { }\n return;\n }\n // Hooks: afterValidate (valid)\n try { await this.runHooks('afterValidate'); } catch { }\n // Hooks: beforeSubmit (cancelable) — must run BEFORE snapshotting form value\n try {\n const res = await this.runHooks('beforeSubmit');\n if (res && (res as any).stopped && (res as any).stopped.outcome?.status === 'cancel') {\n // Cancel submission path — focus field if provided\n const field = (res as any).stopped.outcome?.field as string | undefined;\n const reason = (res as any).stopped.outcome?.reason as string | undefined;\n if (field) {\n try {\n const host: HTMLElement | null = document.querySelector('.praxis-dynamic-form');\n const el: HTMLElement | null = host?.querySelector(`[formcontrolname=\"${field}\"]`) as any;\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n setTimeout(() => (el as any).focus?.(), 50);\n }\n } catch { }\n }\n if (reason === 'conflict') {\n try { this.snackBar.open('Conflito de dados: verifique os campos únicos.', undefined, { duration: 3000 }); } catch { }\n }\n return;\n }\n } catch { }\n // Snapshot after hooks potentially changed control values\n const formData = this.form.getRawValue();\n // Preferir resourceId para decidir operação; mode controla apenas UX (edição vs visualização)\n const operation: 'create' | 'update' =\n this.resourceId != null ? 'update' : 'create';\n\n this.formSubmit.emit({\n stage: 'before',\n formData,\n isValid: true,\n operation,\n entityId: this.resourceId ?? undefined,\n });\n\n // Extra: pass snapshot to after hooks via extras when relevant\n\n const req$ =\n operation === 'update'\n ? this.crud.update(this.resourceId!, formData)\n : this.crud.create(formData);\n\n // Mensagem de loading configurável durante o submit\n try {\n const loadingMsg = this.config.messages?.loading?.submit;\n if (loadingMsg) {\n this._activeSnack = this.snackBar.open(loadingMsg);\n }\n } catch { }\n\n this.submitting = true;\n this.cdr.detectChanges();\n\n req$\n .pipe(\n takeUntil(this.destroy$),\n finalize(() => {\n setTimeout(() => {\n this.submitting = false;\n this.cdr.detectChanges();\n });\n }),\n )\n .subscribe({\n next: (result) => {\n // Encerrar loading\n try {\n this._activeSnack?.dismiss();\n this._activeSnack = null;\n } catch { }\n this.formSubmit.emit({\n stage: 'after',\n formData,\n isValid: true,\n operation,\n entityId: this.resourceId ?? undefined,\n result,\n });\n // Mensagens de sucesso configuráveis\n try {\n const msgs: any = this.config.messages;\n let successMsg: string | undefined =\n msgs?.customActions?.submit?.success;\n if (!successMsg) {\n successMsg =\n operation === 'create'\n ? msgs?.createRegistrySuccess\n : msgs?.updateRegistrySuccess;\n }\n if (successMsg) {\n this.snackBar.open(successMsg, undefined, { duration: 3000 });\n }\n } catch { }\n // Hooks: afterSubmit\n try { (async () => await this.runHooks('afterSubmit', { result, formData, operation }))(); } catch { }\n // Comportamentos pós-salvar\n const behavior = this.config.behavior || ({} as any);\n if (behavior.clearAfterSave) {\n this.form.reset();\n }\n if (behavior.redirectAfterSave) {\n this.navigateAfterSave(behavior.redirectAfterSave);\n }\n },\n error: (error) => {\n // Encerrar loading\n try {\n this._activeSnack?.dismiss();\n this._activeSnack = null;\n } catch { }\n this.formSubmit.emit({\n stage: 'error',\n formData,\n isValid: false,\n operation,\n entityId: this.resourceId ?? undefined,\n error,\n });\n // Hook: onError (submit)\n try { (async () => await this.runHooks('onError', { error, formData, operation }))(); } catch { }\n // Mensagens de erro configuráveis\n try {\n const msgs: any = this.config.messages;\n let errorMsg: string | undefined =\n msgs?.customActions?.submit?.error;\n if (!errorMsg) {\n errorMsg =\n operation === 'create'\n ? msgs?.createRegistryError\n : msgs?.updateRegistryError;\n }\n if (!errorMsg) {\n errorMsg = this.errorMessages.getSubmitErrorMessage(error);\n }\n this.submitError = errorMsg!;\n this.snackBar.open(errorMsg!, undefined, {\n duration: 4000,\n panelClass: ['snackbar-error'],\n });\n } catch { }\n },\n });\n }\n\n private navigateAfterSave(redirectAfterSave: string): void {\n if (!this.router || typeof this.router.navigateByUrl !== 'function') {\n this.warnOnceLog(\n '[PraxisDynamicForm] redirectAfterSave ignored because Router is unavailable.',\n { redirectAfterSave },\n {\n actionId: 'submit.redirect',\n dedupeKey: `praxis-dynamic-form:redirect-ignored:${redirectAfterSave}`,\n },\n );\n return;\n }\n try {\n const navigation = this.router.navigateByUrl(redirectAfterSave);\n if (navigation && typeof (navigation as Promise<boolean>).catch === 'function') {\n void (navigation as Promise<boolean>).catch((error) => {\n this.warnLog(\n '[PraxisDynamicForm] redirectAfterSave navigation failed.',\n {\n redirectAfterSave,\n error: this.toErrorMessage(error),\n },\n {\n actionId: 'submit.redirect',\n throttleKey: `praxis-dynamic-form:redirect-failed:${redirectAfterSave}`,\n },\n );\n });\n }\n } catch (error) {\n this.warnLog(\n '[PraxisDynamicForm] redirectAfterSave navigation failed.',\n {\n redirectAfterSave,\n error: this.toErrorMessage(error),\n },\n {\n actionId: 'submit.redirect',\n throttleKey: `praxis-dynamic-form:redirect-failed:${redirectAfterSave}`,\n },\n );\n }\n }\n\n private shouldConfirmCancelOnDirty(): boolean {\n if (!this.form.dirty) return false;\n\n const backConfigConfirm = this.backConfig?.confirmOnDirty;\n if (typeof backConfigConfirm === 'boolean') {\n return backConfigConfirm;\n }\n\n const behaviorConfirm = this.config?.behavior?.confirmOnUnsavedChanges;\n if (typeof behaviorConfirm === 'boolean') {\n return behaviorConfirm;\n }\n\n // Corporate-safe fallback: dirty form asks confirmation when no explicit policy was provided.\n return true;\n }\n\n /**\n * TOGGLE DE CUSTOMIZAÇÃO DE LAYOUT - NÃO É EDIÇÃO DE DADOS\n *\n * Este método alterna entre:\n * - Modo normal: Usuário interage com dados do formulário (conforme mode: view/edit/create)\n * - Modo customização: Usuário pode mover sections/rows/columns e configurar layout\n *\n * IMPORTANTE: Independe completamente do mode do formulário\n */\n toggleEditMode(): void {\n const newValue = !this.enableCustomization;\n this.enableCustomizationChange.emit(newValue);\n this.cdr.detectChanges();\n }\n\n async openConfigEditor(): Promise<void> {\n const initialConfig = normalizeFormConfig(this.config as FormConfig);\n const initialDocument = createDynamicFormAuthoringDocument({\n config: initialConfig,\n bindings: { mode: this.mode },\n contextSnapshot: this.captureCurrentContextSnapshot(),\n });\n const { PraxisDynamicFormConfigEditor } = await import('./config-editor');\n const ref = this.settingsPanel.open({\n id: `form.${this.formId}`,\n title: this.i18n.t(\n 'settings.title',\n undefined,\n 'Configuração do Formulário',\n PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE,\n ),\n expanded: true,\n content: {\n component: PraxisDynamicFormConfigEditor,\n inputs: {\n document: initialDocument,\n formId: this.formId,\n componentKeyId: this.componentKeyId(),\n presentationMode: this.presentationModeGlobal === true,\n },\n },\n });\n\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe((cfg: any) => {\n try { this.debugLog('[PDF] settingsPanel.applied$', { hasCfg: !!cfg }); } catch { }\n if (cfg) {\n const doc = parseLegacyOrDynamicFormDocument(cfg);\n const plan = buildDynamicFormApplyPlan(\n doc,\n this.buildDynamicFormEditorRuntimeContext(),\n {\n saveConfig: false,\n saveBindings: true,\n saveContextSnapshot: true,\n attachSchemaSnapshot: true,\n replaceContext: true,\n },\n );\n this.executeDynamicFormEditorApplyPlan(plan, 'settings-applied');\n }\n });\n\n // Handle reset from Settings Panel: clear persisted config so globals/user defaults apply\n ref.reset$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n try { this.debugLog('[PDF] settingsPanel.reset$'); } catch { }\n this.clearDynamicFormEditorPersistence();\n });\n\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe((cfg: any) => {\n try { this.debugLog('[PDF] settingsPanel.saved$', { hasCfg: !!cfg }); } catch { }\n if (cfg) {\n const doc = parseLegacyOrDynamicFormDocument(cfg);\n const plan = buildDynamicFormApplyPlan(\n doc,\n this.buildDynamicFormEditorRuntimeContext(),\n {\n saveConfig: true,\n saveBindings: true,\n saveContextSnapshot: true,\n attachSchemaSnapshot: true,\n replaceContext: true,\n },\n );\n this.executeDynamicFormEditorApplyPlan(plan, 'settings-saved');\n }\n });\n\n ref.reset$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n try { this.debugLog('[PDF] settingsPanel.reset$ (second handler)'); } catch { }\n const resetPlan = buildDynamicFormApplyPlan(\n initialDocument,\n this.buildDynamicFormEditorRuntimeContext(),\n {\n saveConfig: false,\n saveBindings: false,\n saveContextSnapshot: false,\n attachSchemaSnapshot: true,\n replaceContext: true,\n },\n );\n this.executeDynamicFormEditorApplyPlan(resetPlan, 'settings-reset');\n });\n }\n\n // --- Canvas Interaction Methods ---\n\n onElementMouseEnter(\n event: MouseEvent,\n type: CanvasElementType,\n data: any,\n element?: HTMLElement,\n ): void {\n if (!this.enableCustomization) return;\n const domElement = (element || event.currentTarget) as HTMLElement;\n const path = this.dynamicLayout.getElementPath(this.config, domElement);\n this.canvasState.setHoveredElement({ type, domElement, data, path });\n }\n\n onElementMouseLeave(event: MouseEvent): void {\n if (!this.enableCustomization) return;\n event.stopPropagation();\n // Check if the new target is still within the hovered element\n const toElement = event.relatedTarget as HTMLElement;\n if (this.hoveredElement?.domElement.contains(toElement)) {\n return;\n }\n this.canvasState.setHoveredElement(null);\n }\n\n onElementClick(\n event: MouseEvent,\n type: CanvasElementType,\n data: any,\n element?: HTMLElement,\n ): void {\n if (!this.enableCustomization) return;\n event.preventDefault();\n event.stopPropagation();\n const domElement = (element || event.currentTarget) as HTMLElement;\n const path = this.dynamicLayout.getElementPath(this.config, domElement);\n this.canvasState.setSelectedElement({ type, domElement, data, path });\n }\n\n // openElementEditor removed; toolbar now focuses on field metadata customization only.\n\n /**\n * Opens the appropriate editor based on current selection (section/row/column/field).\n */\n openSelectedElementEditor(): void {\n if (!this.selectedElement) return;\n const last = this.selectedElement.path[this.selectedElement.path.length - 1];\n const type = last?.type || this.selectedElement.type;\n switch (type) {\n case 'section':\n this.openSectionEditor(last?.data);\n return;\n case 'row':\n this.openRowEditor(last?.data);\n return;\n case 'column':\n this.openColumnEditor(last?.data);\n return;\n case 'field':\n this.openFieldMetadataEditor();\n return;\n default:\n return;\n }\n }\n\n // Inline banner actions\n onIgnoreOutdated(): void {\n const meta = this.schemaState.meta || {};\n const hash = meta.serverHash as string | undefined;\n this.setOutdatedIgnore(hash, true);\n this.schemaOutdated = false;\n this.schemaStatusChange.emit({ outdated: false, serverHash: hash, lastVerifiedAt: meta.lastVerifiedAt, formId: this.formId });\n this.cdr.markForCheck();\n }\n onSnoozeOutdated(): void {\n const meta = this.schemaState.meta || {};\n const hash = meta.serverHash as string | undefined;\n const until = new Date(Date.now() + Math.max(0, this.resolvedPrefs.snoozeMs || 0));\n this.setOutdatedSnooze(hash, until);\n this.schemaOutdated = false;\n this.schemaStatusChange.emit({ outdated: false, serverHash: hash, lastVerifiedAt: meta.lastVerifiedAt, formId: this.formId });\n this.cdr.markForCheck();\n }\n\n // =============================\n // Schema verification (ETag) + persistence helpers\n // =============================\n private getSchemaMetaKey(): string | null {\n const id = this.componentKeyId();\n return id ? `form-schema-meta:${id}` : null;\n }\n private getSchemaMetaIndexKey(): string | null {\n const key = this.getSchemaMetaKey();\n return key ? `${key}:index` : null;\n }\n private getSchemaMetaKeyForSchemaId(schemaId?: string | null): string | null {\n const scopeKey = this.getSchemaMetaKey();\n const id = String(schemaId || '').trim();\n if (!scopeKey || !id) return null;\n return `${scopeKey}:schema:${id}`;\n }\n private getSchemaMetaKeyForContext(context: SchemaIdParams): string | null {\n try {\n const schemaId = buildSchemaId(context);\n return this.getSchemaMetaKeyForSchemaId(schemaId) || this.getSchemaMetaKey();\n } catch {\n return this.getSchemaMetaKey();\n }\n }\n private loadStoredSchemaMeta(key?: string | null): Promise<any | undefined> {\n if (!key) return Promise.resolve(undefined);\n return firstValueFrom(this.asyncConfigStorage.loadConfig<any>(key))\n .then((value) => value ?? undefined)\n .catch(() => undefined);\n }\n private rememberSchemaMetaContext(schemaId?: string): void {\n const id = String(schemaId || '').trim();\n if (!id) return;\n const indexKey = this.getSchemaMetaIndexKey();\n if (!indexKey) return;\n this.asyncConfigStorage\n .loadConfig<string[]>(indexKey)\n .pipe(take(1))\n .subscribe({\n next: (stored) => {\n const unique = new Set<string>(\n (Array.isArray(stored) ? stored : [])\n .map((item) => String(item || '').trim())\n .filter((item) => !!item),\n );\n unique.add(id);\n this.asyncConfigStorage\n .saveConfig(indexKey, Array.from(unique))\n .pipe(take(1))\n .subscribe({ error: () => {} });\n },\n error: () => {},\n });\n }\n private isSameSchemaContext(\n left: SchemaIdParams | null | undefined,\n right: SchemaIdParams | null | undefined,\n ): boolean {\n if (!left || !right) return false;\n return (\n left.path === right.path &&\n left.operation === right.operation &&\n left.schemaType === right.schemaType &&\n left.includeInternalSchemas === right.includeInternalSchemas &&\n left.tenant === right.tenant &&\n left.locale === right.locale &&\n left.apiOrigin === right.apiOrigin\n );\n }\n private isStoredSchemaMetaForContext(\n storedMeta: any,\n schemaId: string,\n context: SchemaIdParams,\n ): boolean {\n if (!storedMeta || typeof storedMeta !== 'object') return false;\n const storedSchemaId = String(storedMeta.schemaId || '').trim();\n if (storedSchemaId && storedSchemaId !== schemaId) return false;\n const storedContext = storedMeta.schemaContext as SchemaIdParams | undefined;\n if (storedContext && !this.isSameSchemaContext(storedContext, context)) return false;\n return true;\n }\n private getPrefsKey(): string | null {\n const id = this.componentKeyId();\n return id ? `form-schema-prefs:${id}` : null;\n }\n private getOutdatedIgnoreKey(serverHash: string): string | null {\n const id = this.componentKeyId();\n return id ? `form-schema-ignore:${id}:${serverHash}` : null;\n }\n private getOutdatedSnoozeKey(serverHash: string): string | null {\n const id = this.componentKeyId();\n return id ? `form-schema-snooze:${id}:${serverHash}` : null;\n }\n private getOutdatedNotifiedKey(serverHash: string): string | null {\n const id = this.componentKeyId();\n return id ? `form-schema-notified:${id}:${serverHash}` : null;\n }\n private isOutdatedIgnored(serverHash?: string): boolean {\n if (!serverHash) return false;\n if (this.schemaState.meta?.serverHash === serverHash) return this.schemaState.ignored;\n return false;\n }\n private getOutdatedSnoozeUntil(serverHash?: string): number | undefined {\n if (!serverHash) return undefined;\n if (this.schemaState.meta?.serverHash === serverHash) return this.schemaState.snoozeUntil;\n return undefined;\n }\n private setOutdatedSnooze(serverHash?: string, until?: Date): void {\n if (!serverHash) return;\n const key = this.getOutdatedSnoozeKey(serverHash);\n if (!key) return;\n if (until) {\n this.asyncConfigStorage.saveConfig(key, until.toISOString()).subscribe();\n if (this.schemaState.meta?.serverHash === serverHash) this.schemaState.snoozeUntil = until.getTime();\n } else {\n this.asyncConfigStorage.clearConfig(key).subscribe();\n if (this.schemaState.meta?.serverHash === serverHash) this.schemaState.snoozeUntil = 0;\n }\n }\n private setOutdatedIgnore(serverHash?: string, val = true): void {\n if (!serverHash) return;\n const key = this.getOutdatedIgnoreKey(serverHash);\n if (!key) return;\n if (val) {\n this.asyncConfigStorage.saveConfig(key, true).subscribe();\n if (this.schemaState.meta?.serverHash === serverHash) this.schemaState.ignored = true;\n } else {\n this.asyncConfigStorage.clearConfig(key).subscribe();\n if (this.schemaState.meta?.serverHash === serverHash) this.schemaState.ignored = false;\n }\n }\n private setOutdatedNotified(serverHash?: string): void {\n if (!serverHash) return;\n const key = this.getOutdatedNotifiedKey(serverHash);\n if (!key) return;\n this.asyncConfigStorage.saveConfig(key, true).subscribe();\n if (this.schemaState.meta?.serverHash === serverHash) this.schemaState.notified = true;\n }\n private wasOutdatedNotified(serverHash?: string): boolean {\n if (!serverHash) return false;\n if (this.schemaState.meta?.serverHash === serverHash) return this.schemaState.notified;\n return false;\n }\n\n private async resolveSchemaPrefs(): Promise<void> {\n // Start with component inputs (may be defaults)\n let resolved: typeof this.resolvedPrefs = {\n notifyIfOutdated: this.notifyIfOutdated ?? 'both',\n snoozeMs: this.snoozeMs ?? 24 * 60 * 60 * 1000,\n autoOpenSettingsOnOutdated: this.autoOpenSettingsOnOutdated ?? false,\n };\n // Widget-level persisted prefs\n try {\n const prefsKey = this.getPrefsKey();\n if (prefsKey) {\n const w = await firstValueFrom(this.asyncConfigStorage.loadConfig<any>(prefsKey));\n if (w && typeof w === 'object') {\n // Heuristic: if component inputs equal library defaults, allow widget prefs to override\n const inputsAreDefaults = (this.notifyIfOutdated === 'both') && (this.snoozeMs === 24 * 60 * 60 * 1000) && (this.autoOpenSettingsOnOutdated === false);\n if (inputsAreDefaults) {\n resolved = {\n notifyIfOutdated: (w.notifyIfOutdated as any) ?? resolved.notifyIfOutdated,\n snoozeMs: (typeof w.snoozeMs === 'number' ? w.snoozeMs : resolved.snoozeMs),\n autoOpenSettingsOnOutdated: (typeof w.autoOpenSettingsOnOutdated === 'boolean' ? w.autoOpenSettingsOnOutdated : resolved.autoOpenSettingsOnOutdated),\n };\n }\n }\n }\n } catch { }\n // Global fallback (via GlobalConfigService)\n try {\n const g = this.global.getSchemaPrefsGlobal?.();\n if (g && typeof g === 'object') {\n resolved = {\n notifyIfOutdated: (resolved.notifyIfOutdated ?? (g.notifyIfOutdated as any)) || 'both',\n snoozeMs: (resolved.snoozeMs ?? g.snoozeMs) || 24 * 60 * 60 * 1000,\n autoOpenSettingsOnOutdated: (resolved.autoOpenSettingsOnOutdated ?? g.autoOpenSettingsOnOutdated) || false,\n };\n }\n } catch { }\n this.resolvedPrefs = resolved;\n }\n\n shouldShowOutdatedInline(): boolean {\n if (!this.enableCustomization) return false;\n if (this.resolvedPrefs.notifyIfOutdated === 'none') return false;\n const serverHash = this.schemaState.meta?.serverHash as string | undefined;\n if (!serverHash) return false;\n if (!this.schemaOutdated) return false;\n if (this.isOutdatedIgnored(serverHash)) return false;\n const snoozeUntil = this.getOutdatedSnoozeUntil(serverHash) || 0;\n if (snoozeUntil && Date.now() < snoozeUntil) return false;\n return this.resolvedPrefs.notifyIfOutdated === 'inline' || this.resolvedPrefs.notifyIfOutdated === 'both';\n }\n\n private maybeShowOutdatedSnack(): void {\n if (!this.enableCustomization) return;\n if (this.resolvedPrefs.notifyIfOutdated === 'none') return;\n const serverHash = this.schemaState.meta?.serverHash as string | undefined;\n if (!serverHash || !this.schemaOutdated) return;\n if (this.isOutdatedIgnored(serverHash)) return;\n const snoozeUntil = this.getOutdatedSnoozeUntil(serverHash) || 0;\n if (snoozeUntil && Date.now() < snoozeUntil) return;\n if (!(this.resolvedPrefs.notifyIfOutdated === 'snackbar' || this.resolvedPrefs.notifyIfOutdated === 'both')) return;\n if (this.wasOutdatedNotified(serverHash)) return;\n try {\n const ref = this.snackBar.open('O schema do servidor mudou.', 'Reconciliar', { duration: 8000 });\n ref.onAction().subscribe(() => {\n this.openConfigEditor();\n });\n ref.afterDismissed().subscribe(() => {\n // Snooze on dismiss\n const until = new Date(Date.now() + Math.max(0, this.resolvedPrefs.snoozeMs || 0));\n this.setOutdatedSnooze(serverHash, until);\n });\n this.setOutdatedNotified(serverHash);\n } catch { }\n }\n\n // Verify-only using ETag without downloading schema body\n private async verifyServerSchemaVersion(): Promise<void> {\n try {\n if (!this.resourcePath) return;\n // Only verify when we already have a base configuration (sections)\n if ((this.config?.sections?.length ?? 0) === 0) return;\n\n const ctx = this.buildSchemaContext();\n const schemaContext: SchemaIdParams = {\n path: ctx.path,\n operation: ctx.operation,\n schemaType: ctx.schemaType,\n includeInternalSchemas: ctx.includeInternalSchemas,\n tenant: ctx.tenant,\n locale: ctx.locale,\n apiOrigin: ctx.apiOrigin,\n };\n const currentSchemaId = buildSchemaId(schemaContext);\n const scopedMetaKey =\n this.getSchemaMetaKeyForSchemaId(currentSchemaId) ||\n this.getSchemaMetaKeyForContext(schemaContext) ||\n this.getSchemaMetaKey();\n if (!scopedMetaKey) return;\n const baseUrl = ctx.baseUrl;\n const u = new URL(baseUrl);\n u.searchParams.set('path', ctx.path);\n u.searchParams.set('operation', String(ctx.operation || 'get'));\n u.searchParams.set('schemaType', String(ctx.schemaType || 'response'));\n u.searchParams.set('includeInternalSchemas', String(!!ctx.includeInternalSchemas));\n\n // Load previously persisted meta (serverHash)\n const scopedMeta = await this.loadStoredSchemaMeta(scopedMetaKey);\n const legacyScopeKey = this.getSchemaMetaKey();\n const legacyMeta =\n legacyScopeKey && legacyScopeKey !== scopedMetaKey\n ? await this.loadStoredSchemaMeta(legacyScopeKey)\n : undefined;\n const persistedMeta = this.isStoredSchemaMetaForContext(\n scopedMeta,\n currentSchemaId,\n schemaContext,\n )\n ? scopedMeta\n : this.isStoredSchemaMetaForContext(\n legacyMeta,\n currentSchemaId,\n schemaContext,\n )\n ? legacyMeta\n : undefined;\n const lastLocalHash =\n this.isSameSchemaContext(this.lastSchemaMeta?.context, schemaContext)\n ? this.lastSchemaMeta?.serverHash\n : undefined;\n const previousHash = (persistedMeta?.serverHash as string | undefined) || lastLocalHash;\n // If we have no prior hash and no base, skip verification (handled by initial fetch)\n if (!previousHash && (this.config?.sections?.length ?? 0) === 0) {\n return;\n }\n const tenant = (() => { try { return this.global.getTenant(); } catch { return undefined; } })();\n const locale = (() => { try { return (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined; } catch { return undefined; } })();\n\n const res = await fetchWithETag({ url: u.toString(), schemaHash: previousHash, tenant, locale });\n const nowIso = new Date().toISOString();\n const metaToSave: any = { ...(persistedMeta || {}) };\n metaToSave.schemaId = currentSchemaId;\n metaToSave.schemaContext = schemaContext;\n metaToSave.lastVerifiedAt = nowIso;\n if (!metaToSave.serverHash && previousHash) {\n metaToSave.serverHash = previousHash;\n }\n\n if (res.status === 304) {\n this.asyncConfigStorage.saveConfig(scopedMetaKey, metaToSave).subscribe();\n this.rememberSchemaMetaContext(currentSchemaId);\n // Mirror meta in memory (config.metadata) without persisting config\n try {\n const mem: any = { ...(this.config.metadata || {}) };\n if (metaToSave.serverHash) mem.serverHash = metaToSave.serverHash;\n mem.schemaId = metaToSave.schemaId;\n mem.schemaContext = metaToSave.schemaContext;\n mem.lastVerifiedAt = metaToSave.lastVerifiedAt;\n this.config = { ...(this.config as any), metadata: mem } as any;\n this.cdr.markForCheck();\n } catch { }\n if (this.schemaOutdated) this.schemaOutdated = false;\n this.schemaStatusChange.emit({ outdated: false, serverHash: metaToSave.serverHash, lastVerifiedAt: metaToSave.lastVerifiedAt, formId: this.formId });\n\n // Update local state\n this.schemaState.meta = metaToSave;\n return;\n }\n\n // status === 200: server hash changed (or first verification without hash). Do not apply schema here.\n const newHash = (res as any).schemaHash as string | undefined;\n metaToSave.serverHash = newHash;\n this.asyncConfigStorage.saveConfig(scopedMetaKey, metaToSave).subscribe();\n this.rememberSchemaMetaContext(currentSchemaId);\n // Mirror meta in memory (config.metadata) without persisting config\n try {\n const mem: any = { ...(this.config.metadata || {}) };\n if (metaToSave.serverHash) mem.serverHash = metaToSave.serverHash;\n mem.schemaId = metaToSave.schemaId;\n mem.schemaContext = metaToSave.schemaContext;\n mem.lastVerifiedAt = metaToSave.lastVerifiedAt;\n this.config = { ...(this.config as any), metadata: mem } as any;\n this.cdr.markForCheck();\n } catch { }\n\n // Only mark outdated when there is a confirmed prior hash for this context.\n const hadBase = !!previousHash;\n this.schemaOutdated = !!(this.enableCustomization && hadBase);\n this.schemaStatusChange.emit({ outdated: this.schemaOutdated, serverHash: newHash, lastVerifiedAt: metaToSave.lastVerifiedAt, formId: this.formId });\n\n // Load state for new hash\n if (newHash) {\n const ignoreKey = this.getOutdatedIgnoreKey(newHash);\n const snoozeKey = this.getOutdatedSnoozeKey(newHash);\n const notifiedKey = this.getOutdatedNotifiedKey(newHash);\n const ignored = ignoreKey\n ? await firstValueFrom(this.asyncConfigStorage.loadConfig<boolean>(ignoreKey)).catch(() => false)\n : false;\n const snooze = snoozeKey\n ? await firstValueFrom(this.asyncConfigStorage.loadConfig<string>(snoozeKey)).catch(() => null)\n : null;\n const notified = notifiedKey\n ? await firstValueFrom(this.asyncConfigStorage.loadConfig<boolean>(notifiedKey)).catch(() => false)\n : false;\n this.schemaState = {\n ignored: !!ignored,\n snoozeUntil: snooze ? Date.parse(snooze) : 0,\n notified: !!notified,\n meta: metaToSave\n };\n } else {\n this.schemaState.meta = metaToSave;\n }\n\n if (this.schemaOutdated) {\n if (this.resolvedPrefs.autoOpenSettingsOnOutdated) {\n this.openConfigEditor();\n } else {\n this.maybeShowOutdatedSnack();\n }\n }\n } catch {\n // ignore verification errors; form remains functional\n }\n }\n\n /**\n * Opens the Field Metadata Editor from the canvas toolbar when a field is selected.\n * Currently a safe stub until @praxisui/metadata-editor is available.\n */\n openFieldMetadataEditor(): void {\n if (!this.selectedElement || this.selectedElement.type !== 'field') return;\n try {\n this.debugLog('[PDF] openFieldMetadataEditor(): start');\n } catch { }\n\n const last = this.selectedElement.path[this.selectedElement.path.length - 1];\n const fieldName: string = (last?.data as any)?.name || (this.selectedElement.data as any)?.name || '';\n if (!fieldName) {\n this.snackBar.open('Campo selecionado inválido para metadados', undefined, { duration: 2500 });\n return;\n }\n\n const fieldMeta = (this.config.fieldMetadata || []).find((f) => f.name === fieldName);\n if (!fieldMeta) {\n this.snackBar.open(`Metadados não encontrados para: ${fieldName}`, undefined, { duration: 2500 });\n return;\n }\n\n // Derive seed from FieldMetadata for INPUT flow\n const controlType = fieldMeta.controlType as any;\n const normalizedControlType = resolveControlTypeAlias(controlType, controlType);\n const ctU = normalizeControlTypeKey(normalizedControlType);\n const seed: any = {\n name: fieldMeta.name,\n label: fieldMeta.label,\n placeholder: (fieldMeta as any).placeholder,\n description: (fieldMeta as any).description,\n hint: (fieldMeta as any).hint,\n // Canonical constraints only (no legacy)\n required: (fieldMeta as any).required,\n minLength: (fieldMeta as any).minLength,\n maxLength: (fieldMeta as any).maxLength,\n pattern: (fieldMeta as any).pattern,\n mask: (fieldMeta as any).mask,\n // Common behavior & MD config to reflect current state in editor\n prefixIcon: (fieldMeta as any).prefixIcon,\n prefixIconColor: (fieldMeta as any).prefixIconColor,\n suffixIcon: (fieldMeta as any).suffixIcon,\n suffixIconColor: (fieldMeta as any).suffixIconColor,\n prefix: (fieldMeta as any).prefix,\n suffix: (fieldMeta as any).suffix,\n showCharacterCount: (fieldMeta as any).showCharacterCount,\n autocomplete: (fieldMeta as any).autocomplete,\n spellcheck: (fieldMeta as any).spellcheck,\n disabled: (fieldMeta as any).disabled,\n readonly: (fieldMeta as any).readonly ?? (fieldMeta as any).readOnly,\n inputMode: (fieldMeta as any).inputMode,\n autoFocus: (fieldMeta as any).autoFocus,\n inputType: (fieldMeta as any).inputType,\n defaultValue: (fieldMeta as any).defaultValue,\n // Text transform (Formato)\n textTransform: (fieldMeta as any).textTransform,\n textTransformApply: (fieldMeta as any).textTransformApply,\n errorStateMatcher: (fieldMeta as any).errorStateMatcher,\n disabledInteractive: (fieldMeta as any).disabledInteractive,\n ariaLabel: (fieldMeta as any).ariaLabel,\n ariaDescribedby: (fieldMeta as any).ariaDescribedby,\n ariaLabelledby: (fieldMeta as any).ariaLabelledby,\n tabIndex: (fieldMeta as any).tabIndex,\n dataAttributes: (fieldMeta as any).dataAttributes,\n materialDesign: (fieldMeta as any).materialDesign,\n clearButton: (fieldMeta as any).clearButton,\n extra: (fieldMeta as any).extra,\n controlType,\n };\n\n // Seed específicos para NUMBER (numericTextBox)\n if (ctU === 'NUMERIC_TEXT_BOX') {\n const fmAny = fieldMeta as any;\n if (fmAny.min !== undefined) seed.min = fmAny.min;\n if (fmAny.max !== undefined) seed.max = fmAny.max;\n if (fmAny.step !== undefined) seed.step = fmAny.step;\n if (fmAny.numberFormat) {\n seed.numberFormat = {\n decimalPlaces: fmAny.numberFormat.decimalPlaces,\n };\n const useGrouping = (fmAny.numberFormat as any).useGrouping;\n if (useGrouping !== undefined) {\n (seed as any).showGrouping = !!useGrouping;\n }\n }\n }\n\n // Seed específicos para CURRENCY_INPUT\n if (ctU === 'CURRENCY_INPUT' || ctU === 'CURRENCY') {\n const fmAny = fieldMeta as any;\n if (fmAny.currency !== undefined) seed.currency = fmAny.currency;\n if (fmAny.currencyPosition !== undefined) seed.currencyPosition = fmAny.currencyPosition;\n if (fmAny.decimalPlaces !== undefined) seed.decimalPlaces = fmAny.decimalPlaces;\n if (fmAny.locale !== undefined) seed.locale = fmAny.locale;\n if (fmAny.thousandsSeparator !== undefined) seed.thousandsSeparator = fmAny.thousandsSeparator;\n if (fmAny.decimalSeparator !== undefined) seed.decimalSeparator = fmAny.decimalSeparator;\n if (fmAny.allowNegative !== undefined) seed.allowNegative = !!fmAny.allowNegative;\n // Legacy numberFormat fallbacks (if present)\n if (fmAny.numberFormat) {\n if (fmAny.numberFormat.decimalPlaces !== undefined && seed.decimalPlaces === undefined) {\n seed.decimalPlaces = fmAny.numberFormat.decimalPlaces;\n }\n if (fmAny.numberFormat.currency && seed.currency === undefined) {\n seed.currency = fmAny.numberFormat.currency;\n }\n if (fmAny.numberFormat.locale && seed.locale === undefined) {\n seed.locale = fmAny.numberFormat.locale;\n }\n }\n }\n\n // Seed específicos para PRICE_RANGE\n if (ctU === 'PRICE_RANGE' || ctU === 'PRICERANGE') {\n const fmAny = fieldMeta as any;\n if (fmAny.startLabel !== undefined) seed.startLabel = fmAny.startLabel;\n if (fmAny.endLabel !== undefined) seed.endLabel = fmAny.endLabel;\n if (fmAny.startPlaceholder !== undefined) seed.startPlaceholder = fmAny.startPlaceholder;\n if (fmAny.endPlaceholder !== undefined) seed.endPlaceholder = fmAny.endPlaceholder;\n if (fmAny.layout !== undefined) seed.layout = fmAny.layout;\n if (fmAny.gap !== undefined) seed.gap = fmAny.gap;\n if (fmAny.hideSubLabels !== undefined) seed.hideSubLabels = !!fmAny.hideSubLabels;\n if (fmAny.clearButtonPlacement !== undefined) seed.clearButtonPlacement = fmAny.clearButtonPlacement;\n\n if (fmAny.currency !== undefined) seed.currency = fmAny.currency;\n if (fmAny.currencyPosition !== undefined) seed.currencyPosition = fmAny.currencyPosition;\n if (fmAny.decimalPlaces !== undefined) seed.decimalPlaces = fmAny.decimalPlaces;\n if (fmAny.locale !== undefined) seed.locale = fmAny.locale;\n if (fmAny.thousandsSeparator !== undefined) seed.thousandsSeparator = fmAny.thousandsSeparator;\n if (fmAny.decimalSeparator !== undefined) seed.decimalSeparator = fmAny.decimalSeparator;\n if (fmAny.allowNegative !== undefined) seed.allowNegative = !!fmAny.allowNegative;\n\n if (fmAny.min !== undefined) seed.min = fmAny.min;\n if (fmAny.max !== undefined) seed.max = fmAny.max;\n if (fmAny.startMin !== undefined) seed.startMin = fmAny.startMin;\n if (fmAny.startMax !== undefined) seed.startMax = fmAny.startMax;\n if (fmAny.endMin !== undefined) seed.endMin = fmAny.endMin;\n if (fmAny.endMax !== undefined) seed.endMax = fmAny.endMax;\n if (fmAny.startMinMessage !== undefined) seed.startMinMessage = fmAny.startMinMessage;\n if (fmAny.startMaxMessage !== undefined) seed.startMaxMessage = fmAny.startMaxMessage;\n if (fmAny.endMinMessage !== undefined) seed.endMinMessage = fmAny.endMinMessage;\n if (fmAny.endMaxMessage !== undefined) seed.endMaxMessage = fmAny.endMaxMessage;\n if (fmAny.endMinOffset !== undefined) seed.endMinOffset = fmAny.endMinOffset;\n if (fmAny.startMaxOffset !== undefined) seed.startMaxOffset = fmAny.startMaxOffset;\n if (fmAny.endMinOffsetMessage !== undefined) seed.endMinOffsetMessage = fmAny.endMinOffsetMessage;\n if (fmAny.startMaxOffsetMessage !== undefined) seed.startMaxOffsetMessage = fmAny.startMaxOffsetMessage;\n if (fmAny.step !== undefined) seed.step = fmAny.step;\n }\n\n // Seed específicos para TEXTAREA\n if (controlType === 'textarea') {\n const fmAny = fieldMeta as any;\n seed.rows = fmAny.rows;\n seed.cols = fmAny.cols;\n seed.minRows = fmAny.minRows;\n seed.maxRows = fmAny.maxRows;\n seed.wrap = fmAny.wrap;\n // Editor expõe autoResize; runtime usa autoSize\n seed.autoResize = fmAny.autoSize !== undefined ? !!fmAny.autoSize : undefined;\n }\n\n // Seed específicos para AVATAR\n if (ctU === 'AVATAR') {\n const fmAny = fieldMeta as any;\n const defaultUrl = typeof fmAny.defaultValue === 'string' ? fmAny.defaultValue : undefined;\n if (!seed.extra || seed.extra.imageSrc == null) {\n if (defaultUrl) {\n seed.extra = { ...(seed.extra || {}), imageSrc: defaultUrl };\n }\n }\n }\n\n // Seed específicos para RATING (MaterialRating)\n if (ctU === 'RATING') {\n const fmAny = fieldMeta as any;\n\n if (fmAny.max !== undefined) seed.max = fmAny.max;\n // Editor usa allowHalf; runtime também pode ter precision numérica\n if (fmAny.allowHalf !== undefined) seed.allowHalf = !!fmAny.allowHalf;\n else if (fmAny.precision !== undefined) {\n const p = fmAny.precision;\n seed.allowHalf = typeof p === 'number' ? p === 0.5 : (String(p).toLowerCase() === 'half');\n }\n if (fmAny.selection !== undefined) seed.selection = fmAny.selection;\n if (fmAny.size !== undefined) seed.size = fmAny.size;\n if (fmAny.icon !== undefined) seed.icon = fmAny.icon;\n if (fmAny.emptyIcon !== undefined) seed.emptyIcon = fmAny.emptyIcon;\n if (fmAny.svgIcon !== undefined) seed.svgIcon = fmAny.svgIcon;\n if (fmAny.svgIconOutline !== undefined) seed.svgIconOutline = fmAny.svgIconOutline;\n if (fmAny.ratingColor !== undefined) seed.ratingColor = fmAny.ratingColor;\n if (fmAny.outlineColor !== undefined) seed.outlineColor = fmAny.outlineColor;\n if (fmAny.readonly !== undefined) seed.readonly = fmAny.readonly;\n if (fmAny.tabIndex !== undefined) seed.tabIndex = fmAny.tabIndex;\n if (fmAny.ariaLabel !== undefined) seed.ariaLabel = fmAny.ariaLabel;\n }\n\n // Seed para SELECT-like\n const isSelectLike = (\n ctU === 'SELECT' ||\n ctU === 'MULTI_SELECT' ||\n ctU === 'AUTO_COMPLETE' ||\n ctU === 'SELECTION_LIST' ||\n ctU === 'TRANSFER_LIST' ||\n ctU === 'RADIO' ||\n ctU === 'BUTTON_TOGGLE' ||\n ctU === 'TREE_SELECT' ||\n ctU === 'MULTI_SELECT_TREE'\n );\n try {\n this.debugLog('[PDF] seed controlType analysis', {\n fieldName,\n controlType,\n ctU,\n isSelectLike,\n fieldMetaPreview: {\n resourcePath: (fieldMeta as any)?.resourcePath,\n optionLabelKey: (fieldMeta as any)?.optionLabelKey,\n optionValueKey: (fieldMeta as any)?.optionValueKey,\n filterCriteria: (fieldMeta as any)?.filterCriteria,\n },\n });\n } catch { }\n if (isSelectLike) {\n const fmAny = fieldMeta as any;\n const staticOptions =\n fmAny.selectOptions || fmAny.listOptions || fmAny.options || undefined;\n if (staticOptions) {\n try {\n seed.options = JSON.stringify(staticOptions, null, 2);\n } catch {\n seed.options = staticOptions;\n }\n try {\n const t = typeof staticOptions;\n const len = Array.isArray(staticOptions)\n ? staticOptions.length\n : (typeof staticOptions === 'string' ? staticOptions.length : undefined);\n this.debugLog('[PDF][EditorSeed] options prepared (select-like)', {\n fieldName,\n controlType,\n valueType: t,\n countOrLength: len,\n });\n } catch { }\n }\n if (fmAny.emptyOptionText !== undefined) seed.emptyOptionText = fmAny.emptyOptionText;\n if (fmAny.multiple !== undefined) seed.multiple = fmAny.multiple;\n if (fmAny.optionLabelKey !== undefined) seed.optionLabelKey = fmAny.optionLabelKey;\n if (fmAny.optionValueKey !== undefined) seed.optionValueKey = fmAny.optionValueKey;\n // Legacy keys are normalized upstream (core normalizers)\n if (fmAny.resourcePath !== undefined || fmAny.endpoint !== undefined) {\n seed.resourcePath = fmAny.resourcePath ?? fmAny.endpoint;\n }\n if (fmAny.filterCriteria !== undefined) {\n try {\n seed.filterCriteria = JSON.stringify(fmAny.filterCriteria, null, 2);\n } catch {\n seed.filterCriteria = fmAny.filterCriteria;\n }\n }\n if (fmAny.searchable !== undefined) seed.searchable = fmAny.searchable;\n if (fmAny.selectAll !== undefined) seed.selectAll = fmAny.selectAll;\n if (fmAny.maxSelections !== undefined) seed.maxSelections = fmAny.maxSelections;\n }\n\n // TRANSFER_LIST\n if (ctU === 'TRANSFER_LIST') {\n const fmAny = fieldMeta as any;\n const src = fmAny.transferOptions || fmAny.options;\n if (src) {\n try { seed.options = JSON.stringify(src, null, 2); } catch { seed.options = src; }\n try {\n this.debugLog('[PDF][EditorSeed] options prepared (TRANSFER_LIST)', {\n fieldName,\n controlType,\n valueType: typeof src,\n countOrLength: Array.isArray(src) ? src.length : (typeof src === 'string' ? src.length : undefined),\n });\n } catch { }\n }\n if (fmAny.optionLabelKey !== undefined) seed.optionLabelKey = fmAny.optionLabelKey;\n if (fmAny.optionValueKey !== undefined) seed.optionValueKey = fmAny.optionValueKey;\n if (fmAny.resourcePath !== undefined || fmAny.endpoint !== undefined) {\n seed.resourcePath = fmAny.resourcePath ?? fmAny.endpoint;\n }\n if (fmAny.filterCriteria !== undefined) {\n try { seed.filterCriteria = JSON.stringify(fmAny.filterCriteria, null, 2); } catch { seed.filterCriteria = fmAny.filterCriteria; }\n }\n if (fmAny.maxSelections !== undefined) seed.maxSelections = fmAny.maxSelections;\n }\n\n // RADIO\n if (ctU === 'RADIO') {\n const fmAny = fieldMeta as any;\n const src = fmAny.radioOptions || fmAny.options;\n if (src) {\n try { seed.options = JSON.stringify(src, null, 2); } catch { seed.options = src; }\n try {\n this.debugLog('[PDF][EditorSeed] options prepared (RADIO)', {\n fieldName,\n controlType,\n valueType: typeof src,\n countOrLength: Array.isArray(src) ? src.length : (typeof src === 'string' ? src.length : undefined),\n });\n } catch { }\n }\n if (fmAny.optionLabelKey !== undefined) seed.optionLabelKey = fmAny.optionLabelKey;\n if (fmAny.optionValueKey !== undefined) seed.optionValueKey = fmAny.optionValueKey;\n if (fmAny.resourcePath !== undefined || fmAny.endpoint !== undefined) {\n seed.resourcePath = fmAny.resourcePath ?? fmAny.endpoint;\n }\n if (fmAny.filterCriteria !== undefined) {\n try { seed.filterCriteria = JSON.stringify(fmAny.filterCriteria, null, 2); } catch { seed.filterCriteria = fmAny.filterCriteria; }\n }\n if (fmAny.color !== undefined) seed.color = fmAny.color;\n if (fmAny.layout !== undefined) seed.layout = fmAny.layout;\n if (fmAny.labelPosition !== undefined) seed.labelPosition = fmAny.labelPosition;\n if (fmAny.selectionMode !== undefined) seed.selectionMode = fmAny.selectionMode;\n if (fmAny.variant !== undefined) seed.variant = fmAny.variant;\n if (fmAny.density !== undefined) seed.density = fmAny.density;\n }\n\n // CHECKBOX\n if (ctU === 'CHECKBOX') {\n const fmAny = fieldMeta as any;\n const src = fmAny.checkboxOptions || fmAny.options;\n if (src) {\n try { seed.options = JSON.stringify(src, null, 2); } catch { seed.options = src; }\n try {\n this.debugLog('[PDF][EditorSeed] options prepared (CHECKBOX)', {\n fieldName,\n controlType,\n valueType: typeof src,\n countOrLength: Array.isArray(src) ? src.length : (typeof src === 'string' ? src.length : undefined),\n });\n } catch { }\n }\n if (fmAny.optionLabelKey !== undefined) seed.optionLabelKey = fmAny.optionLabelKey;\n if (fmAny.optionValueKey !== undefined) seed.optionValueKey = fmAny.optionValueKey;\n if (fmAny.resourcePath !== undefined || fmAny.endpoint !== undefined) {\n seed.resourcePath = fmAny.resourcePath ?? fmAny.endpoint;\n }\n if (fmAny.filterCriteria !== undefined) {\n try { seed.filterCriteria = JSON.stringify(fmAny.filterCriteria, null, 2); } catch { seed.filterCriteria = fmAny.filterCriteria; }\n }\n if (fmAny.searchable !== undefined) seed.searchable = fmAny.searchable;\n if (fmAny.selectAll !== undefined) seed.selectAll = fmAny.selectAll;\n if (fmAny.maxSelections !== undefined) seed.maxSelections = fmAny.maxSelections;\n if (fmAny.layout !== undefined) seed.layout = fmAny.layout;\n if (fmAny.labelPosition !== undefined) seed.labelPosition = fmAny.labelPosition;\n if (fmAny.color !== undefined) seed.color = fmAny.color;\n if (fmAny.indeterminate !== undefined) seed.indeterminate = !!fmAny.indeterminate;\n if (fmAny.selectionMode !== undefined) seed.selectionMode = fmAny.selectionMode;\n if (fmAny.variant !== undefined) seed.variant = fmAny.variant;\n if (fmAny.density !== undefined) seed.density = fmAny.density;\n if (fmAny.requiredChecked !== undefined) seed.requiredChecked = !!fmAny.requiredChecked;\n else if (fmAny.validators?.requiredChecked !== undefined) seed.requiredChecked = !!fmAny.validators.requiredChecked;\n if (fmAny.links !== undefined) {\n try { seed.links = JSON.stringify(fmAny.links, null, 2); } catch { seed.links = fmAny.links; }\n }\n if (fmAny.linkText !== undefined) seed.linkText = fmAny.linkText;\n if (fmAny.linkUrl !== undefined) seed.linkUrl = fmAny.linkUrl;\n if (fmAny.linkTarget !== undefined) seed.linkTarget = fmAny.linkTarget;\n }\n\n // BUTTON_TOGGLE\n if (ctU === 'BUTTON_TOGGLE') {\n const fmAny = fieldMeta as any;\n const src = fmAny.toggleOptions || fmAny.options;\n if (src) {\n try { seed.options = JSON.stringify(src, null, 2); } catch { seed.options = src; }\n try {\n this.debugLog('[PDF][EditorSeed] options prepared (BUTTON_TOGGLE)', {\n fieldName,\n controlType,\n valueType: typeof src,\n countOrLength: Array.isArray(src) ? src.length : (typeof src === 'string' ? src.length : undefined),\n });\n } catch { }\n }\n if (fmAny.optionLabelKey !== undefined) seed.optionLabelKey = fmAny.optionLabelKey;\n if (fmAny.optionValueKey !== undefined) seed.optionValueKey = fmAny.optionValueKey;\n // Legacy keys are normalized upstream (core normalizers)\n if (fmAny.resourcePath !== undefined || fmAny.endpoint !== undefined) {\n seed.resourcePath = fmAny.resourcePath ?? fmAny.endpoint;\n }\n if (fmAny.filterCriteria !== undefined) {\n try { seed.filterCriteria = JSON.stringify(fmAny.filterCriteria, null, 2); } catch { seed.filterCriteria = fmAny.filterCriteria; }\n }\n if (fmAny.multiple !== undefined) seed.multiple = fmAny.multiple;\n if (fmAny.maxSelections !== undefined) seed.maxSelections = fmAny.maxSelections;\n if (fmAny.appearance !== undefined) seed.appearance = fmAny.appearance;\n }\n\n // TREE_SELECT / MULTI_SELECT_TREE\n if (ctU === 'TREE_SELECT' || ctU === 'MULTI_SELECT_TREE') {\n const fmAny = fieldMeta as any;\n const src = fmAny.nodes || fmAny.options;\n if (src) {\n try { seed.options = JSON.stringify(src, null, 2); } catch { seed.options = src; }\n try {\n this.debugLog('[PDF][EditorSeed] options prepared (TREE_SELECT)', {\n fieldName,\n controlType,\n valueType: typeof src,\n countOrLength: Array.isArray(src) ? src.length : (typeof src === 'string' ? src.length : undefined),\n });\n } catch { }\n }\n if (fmAny.searchable !== undefined) seed.searchable = fmAny.searchable;\n if (fmAny.leafOnly !== undefined) seed.leafOnly = fmAny.leafOnly;\n if (fmAny.autoExpandOnSearch !== undefined) seed.autoExpandOnSearch = fmAny.autoExpandOnSearch;\n if (fmAny.returnPath !== undefined) seed.returnPath = fmAny.returnPath;\n if (fmAny.returnObject !== undefined) seed.returnObject = fmAny.returnObject;\n }\n\n // Log seed preview for debugging Remote Source editors\n try {\n const seedPreview: any = {\n controlType,\n resourcePath: (seed as any)?.resourcePath,\n optionLabelKey: (seed as any)?.optionLabelKey,\n optionValueKey: (seed as any)?.optionValueKey,\n filterCriteria:\n typeof (seed as any)?.filterCriteria === 'string'\n ? (seed as any)?.filterCriteria\n : (seed as any)?.filterCriteria != null\n ? JSON.stringify((seed as any)?.filterCriteria)\n : undefined,\n };\n this.debugLog('[PDF] Opening FieldMetadataEditor with seed', {\n fieldName,\n seed: seedPreview,\n });\n } catch { }\n\n // Lazy import to avoid tight coupling if needed\n import('@praxisui/metadata-editor')\n .then((m) => {\n const { FieldMetadataEditorComponent } = m as any;\n try { this.debugLog('[PDF] @praxisui/metadata-editor loaded'); } catch { }\n this.openFieldMetadataEditorInternal(FieldMetadataEditorComponent, controlType, seed, fieldName);\n })\n .catch((err) => { try { this.errorLog('[PDF] Failed to load @praxisui/metadata-editor', err); } catch { } });\n }\n\n /**\n * Internal seam to open the metadata editor and wire up apply/save handlers.\n * Extracted for easier testing and to avoid coupling tests to dynamic import.\n */\n private openFieldMetadataEditorInternal(\n editorComponent: any,\n controlType: any,\n seed: any,\n fieldName: string,\n ): void {\n const titleLabel = (seed && seed.label) ? String(seed.label) : fieldName;\n const titleIcon = this.getControlTypeIcon(controlType);\n const typeLabel = this.getControlTypeName(controlType);\n const composedTitle = `${typeLabel} - ${titleLabel}`;\n try {\n this.debugLog('[PDF] settingsPanel.open(FieldMetadataEditor)', { fieldName, composedTitle });\n } catch { }\n const ref = this.settingsPanel.open({\n id: `field-meta.${this.formId}.${fieldName}`,\n title: composedTitle,\n titleIcon,\n content: {\n component: editorComponent,\n inputs: { controlType, seed, hostBridge: { applyPatch: (p: any) => { try { this.debugLog('[PDF] hostBridge.applyPatch invoked', { fieldName, keys: p && typeof p === 'object' ? Object.keys(p) : undefined }); } catch { } handlePatch(p); } } },\n },\n });\n if (!ref) return;\n try {\n if (normalizeControlTypeKey(controlType) === 'RATING') {\n this.debugLog('[PDF] Opening Rating editor with seed', {\n fieldName,\n seed: {\n max: seed?.max,\n allowHalf: seed?.allowHalf,\n precision: seed?.precision,\n selection: seed?.selection,\n size: seed?.size,\n icon: seed?.icon,\n emptyIcon: seed?.emptyIcon,\n svgIcon: seed?.svgIcon,\n svgIconOutline: seed?.svgIconOutline,\n ratingColor: seed?.ratingColor,\n outlineColor: seed?.outlineColor,\n readonly: seed?.readonly,\n tabIndex: seed?.tabIndex,\n ariaLabel: seed?.ariaLabel,\n },\n });\n }\n } catch { }\n\n const handlePatch = (patch: Partial<any>) => {\n if (!patch) return;\n try {\n const sig = JSON.stringify(patch);\n const now = Date.now();\n const lastSig = this.lastFieldPatchSig.get(fieldName);\n const lastAt = this.lastFieldPatchAt.get(fieldName) || 0;\n // Ignore duplicates within 1200ms window\n if (lastSig === sig && now - lastAt < 1200) {\n this.debugLog('[PDF] field-metadata:dedupe-skip', { fieldName });\n return;\n }\n this.lastFieldPatchSig.set(fieldName, sig);\n this.lastFieldPatchAt.set(fieldName, now);\n } catch { }\n try { this.debugLog('[PDF] FieldMetadataEditor patch received', { fieldName, controlType, patch }); } catch { }\n this.applyFieldMetadataPatch(fieldName, patch);\n };\n\n const subscribeIfStream = (stream: any, handler: (v: any) => void): void => {\n if (!stream || typeof stream.pipe !== 'function') return;\n stream.pipe(takeUntil(this.destroy$)).subscribe(handler);\n };\n\n // Wire subscriptions for Apply/Save events from Settings Panel\n try { this.debugLog('[PDF] Subscribing to SettingsPanel events for FieldMetadataEditor', { fieldName }); } catch { }\n subscribeIfStream(ref.applied$, (v) => {\n try { this.debugLog('[PDF] settingsPanel.applied$ payload', { fieldName, keys: v && typeof v === 'object' ? Object.keys(v) : undefined }); } catch { }\n handlePatch(v);\n });\n // Persist changes when user clicks Save as well\n subscribeIfStream(ref.saved$, (v) => {\n try { this.debugLog('[PDF] settingsPanel.saved$ payload', { fieldName, keys: v && typeof v === 'object' ? Object.keys(v) : undefined }); } catch { }\n handlePatch(v);\n });\n // Log close reason to detect save paths without payload\n subscribeIfStream(ref.closed$, (reason: any) => {\n try { this.debugLog('[PDF] SettingsPanel closed', { fieldName, reason }); } catch { }\n });\n }\n\n private openRowEditor(row: any): void {\n if (!row) return;\n import('./canvas/components/row-editor/row-editor.component').then((m) => {\n const { RowEditorComponent } = m as any;\n const ref = this.settingsPanel.open({\n id: `row.${this.formId || 'form'}.${row.id}`,\n title: 'Configurar Linha',\n titleIcon: 'view_stream',\n content: { component: RowEditorComponent, inputs: { row } },\n });\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n });\n }\n\n private openColumnEditor(column: any): void {\n if (!column) return;\n import('./canvas/components/column-editor/column-editor.component').then((m) => {\n const { ColumnEditorComponent } = m as any;\n const ref = this.settingsPanel.open({\n id: `column.${this.formId || 'form'}.${column.id}`,\n title: 'Configurar Coluna',\n titleIcon: 'view_column',\n content: { component: ColumnEditorComponent, inputs: { column } },\n });\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n });\n }\n\n openSectionEditor(section: any, focusTarget?: 'title' | 'description'): void {\n if (!section) return;\n import('./canvas/components/section-editor/section-editor.component').then((m) => {\n const { SectionEditorComponent } = m as any;\n const ref = this.settingsPanel.open({\n id: `section.${this.formId || 'form'}.${section.id}`,\n title: section.title || 'Configurar Seção',\n titleIcon: 'view_agenda',\n content: {\n component: SectionEditorComponent,\n inputs: { section, focusTarget, fieldMetadata: this.config.fieldMetadata || [] },\n },\n });\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n });\n }\n\n private resolveControlTypeEditorial(controlType: any): ResolvedComponentMetadataEditorialMeta | undefined {\n const rawControlType = String(controlType ?? '').trim();\n if (!rawControlType) return undefined;\n\n const candidates = Array.from(\n new Set(\n [\n rawControlType,\n resolveControlTypeAlias(rawControlType),\n normalizeControlTypeKey(controlType),\n resolveControlTypeAlias(normalizeControlTypeKey(controlType)),\n ]\n .filter((value): value is string => !!String(value ?? '').trim())\n .map((value) => String(value).trim()),\n ),\n );\n\n for (const candidate of candidates) {\n try {\n const resolved = this.componentMetaRegistry?.resolveEditorial?.(candidate, { namespace: 'dynamicFields' });\n if (resolved) return resolved;\n } catch {\n // Keep trying the next candidate.\n }\n }\n\n try {\n const directMeta = this.componentMetaRegistry?.get?.(rawControlType);\n if (directMeta) {\n return this.componentMetaRegistry?.resolveEditorial?.(rawControlType, { namespace: 'dynamicFields' });\n }\n } catch {\n // Ignore and fall back to neutral defaults.\n }\n\n return undefined;\n }\n\n private getControlTypeIcon(controlType: any): string {\n return this.resolveControlTypeEditorial(controlType)?.icon ?? 'text_fields';\n }\n\n /**\n * Friendly control type name resolved from the canonical editorial resolver when available.\n * Falls back only to neutral technical defaults when nothing can be resolved.\n */\n private getControlTypeName(controlType: any): string {\n return this.resolveControlTypeEditorial(controlType)?.friendlyName ?? String(controlType ?? '');\n }\n\n private applyNullDeletionPatch(target: any, patch: any, depth = 0): void {\n if (!target || !patch || typeof patch !== 'object' || Array.isArray(patch)) {\n return;\n }\n if (depth > 8) return;\n Object.entries(patch).forEach(([key, value]) => {\n if (value === null) {\n this.deleteMetadataPath(target, key);\n return;\n }\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const nextTarget = key.includes('.')\n ? this.getMetadataPath(target, key)\n : (target as any)[key];\n if (nextTarget && typeof nextTarget === 'object') {\n this.applyNullDeletionPatch(nextTarget, value, depth + 1);\n }\n }\n });\n }\n\n private stripNullMarkersFromPatch(value: any): any {\n if (Array.isArray(value)) {\n return value.map((entry) => this.stripNullMarkersFromPatch(entry));\n }\n if (!value || typeof value !== 'object') {\n return value;\n }\n const out: Record<string, any> = {};\n Object.entries(value).forEach(([key, entry]) => {\n if (entry === null) return;\n if (entry && typeof entry === 'object' && !Array.isArray(entry)) {\n const nested = this.stripNullMarkersFromPatch(entry);\n if (nested && Object.keys(nested).length) {\n out[key] = nested;\n }\n return;\n }\n out[key] = entry;\n });\n return out;\n }\n\n private deleteMetadataPath(target: any, path: string): void {\n if (!target || typeof path !== 'string' || !path.trim()) return;\n const segments = path.split('.').map((segment) => segment.trim()).filter(Boolean);\n if (!segments.length) return;\n let cursor: any = target;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n if (!cursor || typeof cursor !== 'object') return;\n cursor = cursor[segment];\n }\n if (!cursor || typeof cursor !== 'object') return;\n delete cursor[segments[segments.length - 1]];\n }\n\n private getMetadataPath(target: any, path: string): any {\n if (!target || typeof path !== 'string' || !path.trim()) return undefined;\n const segments = path.split('.').map((segment) => segment.trim()).filter(Boolean);\n let cursor: any = target;\n for (const segment of segments) {\n if (!cursor || typeof cursor !== 'object') return undefined;\n cursor = cursor[segment];\n }\n return cursor;\n }\n\n /**\n * Applies a metadata patch to the field with the given name and rebuilds the form.\n */\n private applyFieldMetadataPatch(fieldName: string, patch: any): void {\n const idx = (this.config.fieldMetadata || []).findIndex((f) => f.name === fieldName);\n try {\n const keys = patch && typeof patch === 'object' ? Object.keys(patch) : undefined;\n this.debugLog('[PDF] applyFieldMetadataPatch:start', { fieldName, index: idx, patchKeys: keys });\n } catch { }\n if (idx < 0) return;\n\n let fm = { ...(this.config.fieldMetadata![idx]) } as any;\n this.applyNullDeletionPatch(fm, patch);\n patch = this.stripNullMarkersFromPatch(patch) as Partial<any>;\n try { this.debugLog('[PDF] fm.isExtensible(before-map)', { extensible: Object.isExtensible(fm) }); } catch { }\n const prevControlType = normalizeControlTypeKey(fm.controlType);\n try {\n const nextCtUpperPre = normalizeControlTypeKey(\n (patch as any).controlType ?? fm.controlType,\n );\n this.debugLog('[PDF] applyFieldMetadataPatch:pre', { fieldName, prevControlType, nextCtUpperPre });\n } catch { }\n // Wrap the mapping logic so any error is surfaced\n try {\n // Allow changing controlType from editor\n if ((patch as any).controlType !== undefined) {\n fm.controlType = (patch as any).controlType;\n }\n // Common updates for INPUT\n if (patch.label !== undefined) fm.label = patch.label;\n if (patch.placeholder !== undefined) fm.placeholder = patch.placeholder;\n if ((patch as any).description !== undefined) (fm as any).description = (patch as any).description;\n if (patch.hint !== undefined) fm.hint = patch.hint;\n if (patch.prefixIcon !== undefined) fm.prefixIcon = patch.prefixIcon;\n if ((patch as any).prefixIconColor !== undefined) (fm as any).prefixIconColor = (patch as any).prefixIconColor;\n if (patch.suffixIcon !== undefined) fm.suffixIcon = patch.suffixIcon;\n if ((patch as any).suffixIconColor !== undefined) (fm as any).suffixIconColor = (patch as any).suffixIconColor;\n if (patch.prefix !== undefined) fm.prefix = patch.prefix;\n if (patch.suffix !== undefined) fm.suffix = patch.suffix;\n if (patch.defaultValue !== undefined) fm.defaultValue = patch.defaultValue;\n if (patch.showCharacterCount !== undefined) fm.showCharacterCount = patch.showCharacterCount;\n if (patch.autocomplete !== undefined) fm.autocomplete = patch.autocomplete;\n if (patch.spellcheck !== undefined) fm.spellcheck = patch.spellcheck;\n if (patch.disabled !== undefined) fm.disabled = patch.disabled;\n if (patch.readonly !== undefined) fm.readonly = patch.readonly;\n if (patch.inputMode !== undefined) fm.inputMode = patch.inputMode;\n if (patch.autoFocus !== undefined) fm.autoFocus = patch.autoFocus;\n if (patch.inputType !== undefined) fm.inputType = patch.inputType;\n // Coerce numeric constraints\n const toNum = (v: any) => (v === '' || v === null || v === undefined ? undefined : (typeof v === 'number' ? v : Number(v)));\n if (patch.minLength !== undefined) fm.minLength = toNum(patch.minLength);\n if (patch.maxLength !== undefined) fm.maxLength = toNum(patch.maxLength);\n // NUMBER: constraints (top-level canonical)\n if ((patch as any).min !== undefined) fm.min = toNum((patch as any).min);\n if ((patch as any).max !== undefined) fm.max = toNum((patch as any).max);\n if ((patch as any).step !== undefined) fm.step = toNum((patch as any).step);\n if (patch.pattern !== undefined) fm.pattern = patch.pattern as any;\n if (patch.textTransform !== undefined) (fm as any).textTransform = patch.textTransform as any;\n if ((patch as any).textTransformApply !== undefined)\n (fm as any).textTransformApply = (patch as any).textTransformApply as any;\n // Map textTransform to display/save transformers for presentation and persistence\n const tName = (fm as any).textTransform as string | undefined;\n const tApply = ((fm as any).textTransformApply as 'displayOnly' | 'saveOnly' | 'both') || 'displayOnly';\n if (tName && tName !== 'none') {\n const transformer = getTextTransformer(tName as any);\n // Display: also apply for CSS variants in presentation mode\n if (tApply === 'displayOnly' || tApply === 'both') {\n (fm as any).transformDisplayValue = transformer ?? ((v: any) => v);\n // For CSS-only values without a functional transformer (should not happen), keep default\n }\n if (tApply === 'saveOnly' || tApply === 'both') {\n (fm as any).transformSaveValue = transformer ?? ((v: any) => v);\n }\n if (!transformer) {\n // CSS variants get their visual transform via style; for presentation we leave default\n this.debugLog('[DynamicForm] textTransform has no functional transformer (CSS variant):', { fieldName, tName, tApply });\n } else {\n this.debugLog('[DynamicForm] textTransform mapped to transformers:', { fieldName, tName, tApply });\n }\n } else {\n // Clear any previous transformers if transform removed\n if ((patch as any).textTransform !== undefined) {\n delete (fm as any).transformDisplayValue;\n delete (fm as any).transformSaveValue;\n this.debugLog('[DynamicForm] textTransform cleared for field:', fieldName);\n }\n }\n if (patch.errorStateMatcher !== undefined) fm.errorStateMatcher = patch.errorStateMatcher;\n if (patch.disabledInteractive !== undefined) fm.disabledInteractive = patch.disabledInteractive;\n if (patch.clearButton !== undefined) fm.clearButton = { ...(fm.clearButton || {}), ...(patch.clearButton || {}) };\n else if (\n (patch as any)['clearButton.enabled'] !== undefined ||\n (patch as any)['clearButton.icon'] !== undefined ||\n (patch as any)['clearButton.tooltip'] !== undefined ||\n (patch as any)['clearButton.ariaLabel'] !== undefined ||\n (patch as any)['clearButton.showOnlyWhenFilled'] !== undefined\n ) {\n fm.clearButton = fm.clearButton || {};\n if ((patch as any)['clearButton.enabled'] !== undefined) fm.clearButton.enabled = (patch as any)['clearButton.enabled'];\n if ((patch as any)['clearButton.icon'] !== undefined) fm.clearButton.icon = (patch as any)['clearButton.icon'];\n if ((patch as any)['clearButton.tooltip'] !== undefined) fm.clearButton.tooltip = (patch as any)['clearButton.tooltip'];\n if ((patch as any)['clearButton.ariaLabel'] !== undefined) fm.clearButton.ariaLabel = (patch as any)['clearButton.ariaLabel'];\n if ((patch as any)['clearButton.showOnlyWhenFilled'] !== undefined) fm.clearButton.showOnlyWhenFilled = (patch as any)['clearButton.showOnlyWhenFilled'];\n }\n if (patch.ariaLabel !== undefined) fm.ariaLabel = patch.ariaLabel;\n if (patch.ariaDescribedby !== undefined) fm.ariaDescribedby = patch.ariaDescribedby;\n if (patch.ariaLabelledby !== undefined) fm.ariaLabelledby = patch.ariaLabelledby;\n if (patch.tabIndex !== undefined) fm.tabIndex = patch.tabIndex;\n if (patch.dataAttributes !== undefined) {\n if (typeof patch.dataAttributes === 'string') {\n try {\n fm.dataAttributes = JSON.parse(patch.dataAttributes);\n } catch {\n fm.dataAttributes = patch.dataAttributes as any;\n }\n } else {\n fm.dataAttributes = patch.dataAttributes as any;\n }\n }\n // Generic extras passthrough: merge into fm.extra to allow component-specific appearance/behavior\n if ((patch as any).extra !== undefined) {\n const currExtra = ((fm as any).extra && typeof (fm as any).extra === 'object') ? (fm as any).extra : {};\n const patchExtra = (patch as any).extra || {};\n (fm as any).extra = { ...currExtra, ...patchExtra } as any;\n }\n const extraEntries = Object.entries(patch || {}).filter(([key]) => key.startsWith('extra.'));\n if (extraEntries.length) {\n const currExtra =\n (fm as any).extra && typeof (fm as any).extra === 'object'\n ? { ...(fm as any).extra }\n : {};\n for (const [key, value] of extraEntries) {\n const extraKey = key.slice('extra.'.length);\n if (!extraKey) continue;\n (currExtra as any)[extraKey] = value;\n }\n (fm as any).extra = currExtra as any;\n }\n // Required canonical top-level only\n if ((patch as any).required !== undefined) {\n (fm as any).required = (patch as any).required;\n }\n fm.validators = { ...(fm.validators || {}) };\n // messages only (pattern moved to top-level)\n if (patch.validators?.requiredMessage !== undefined)\n fm.validators.requiredMessage = patch.validators.requiredMessage;\n if (patch.validators?.minLengthMessage !== undefined)\n fm.validators.minLengthMessage = patch.validators.minLengthMessage;\n if (patch.validators?.maxLengthMessage !== undefined)\n fm.validators.maxLengthMessage = patch.validators.maxLengthMessage;\n if (patch.validators?.patternMessage !== undefined)\n fm.validators.patternMessage = patch.validators.patternMessage;\n if ((patch as any)?.validators?.minMessage !== undefined)\n (fm.validators as any).minMessage = (patch as any).validators.minMessage;\n if ((patch as any)?.validators?.maxMessage !== undefined)\n (fm.validators as any).maxMessage = (patch as any).validators.maxMessage;\n if (patch.validators?.validationTrigger !== undefined)\n fm.validators.validationTrigger = patch.validators.validationTrigger;\n if (patch.validators?.validationDebounce !== undefined)\n fm.validators.validationDebounce = patch.validators.validationDebounce;\n if (patch.validators?.showInlineErrors !== undefined)\n fm.validators.showInlineErrors = patch.validators.showInlineErrors;\n if (patch.validators?.errorPosition !== undefined)\n fm.validators.errorPosition = patch.validators.errorPosition;\n if ((patch as any).mask !== undefined) fm.mask = (patch as any).mask;\n\n if (patch.materialDesign !== undefined) {\n fm.materialDesign = { ...(fm.materialDesign || {}), ...(patch.materialDesign || {}) };\n // Compat bridge: alguns componentes usam color no nível raiz (metadata().color)\n if ((patch.materialDesign as any).color !== undefined) {\n (fm as any).color = (patch.materialDesign as any).color;\n }\n }\n\n // NUMBER: numberFormat (fase 1: decimalPlaces, agrupamento)\n if ((patch as any).numberFormat !== undefined) {\n const nf = (patch as any).numberFormat as any;\n fm.numberFormat = { ...(fm.numberFormat || {}), ...(nf || {}) };\n }\n if ((patch as any).showGrouping !== undefined) {\n fm.numberFormat = { ...(fm.numberFormat || {}), useGrouping: !!(patch as any).showGrouping } as any;\n }\n\n // NUMBER: coerce defaultValue to number when applicable\n if (fm.controlType === 'numericTextBox' && fm.defaultValue !== undefined) {\n const n = toNum(fm.defaultValue);\n fm.defaultValue = n === undefined ? fm.defaultValue : n;\n }\n\n // --- TEXTAREA specific mappings ---\n if (normalizeControlTypeKey((fm.controlType as any)) === 'TEXTAREA') {\n if ((patch as any).rows !== undefined) (fm as any).rows = toNum((patch as any).rows);\n if ((patch as any).cols !== undefined) (fm as any).cols = toNum((patch as any).cols);\n if ((patch as any).minRows !== undefined) (fm as any).minRows = toNum((patch as any).minRows);\n if ((patch as any).maxRows !== undefined) (fm as any).maxRows = toNum((patch as any).maxRows);\n if ((patch as any).wrap !== undefined) (fm as any).wrap = (patch as any).wrap as any; // 'soft'|'hard'|'off'\n if ((patch as any).autoResize !== undefined) (fm as any).autoSize = !!(patch as any).autoResize;\n if ((patch as any).resize !== undefined) (fm as any).resize = (patch as any).resize as any; // css resize\n if ((patch as any).showStats !== undefined) (fm as any).showStats = !!(patch as any).showStats;\n if ((patch as any).enableTabIndent !== undefined) (fm as any).enableTabIndent = !!(patch as any).enableTabIndent;\n if ((patch as any).textAreaMode !== undefined) (fm as any).textAreaMode = (patch as any).textAreaMode as any;\n if ((patch as any).tabSize !== undefined) (fm as any).tabSize = toNum((patch as any).tabSize);\n }\n\n // --- SELECT-like specific mappings ---\n const fct = normalizeControlTypeKey((fm.controlType as any));\n const isSelect = fct === 'SELECT' || fct === 'MULTI_SELECT';\n const isAutocomplete = fct === 'AUTO_COMPLETE';\n const isSelectionList = fct === 'SELECTION_LIST';\n\n const normalizeOptions = (raw: any): Array<{ value: any; text?: string; label?: string; disabled?: boolean; group?: string; children?: any[] }> | undefined => {\n if (raw == null) return undefined;\n let arr: any;\n if (typeof raw === 'string') {\n const str = raw.trim();\n if (!str) return [];\n try {\n arr = JSON.parse(str);\n } catch {\n // Fallback: linhas \"valor|rótulo\" ou apenas valor\n arr = str\n .split(/\\r?\\n/)\n .map((l) => l.trim())\n .filter((l) => !!l)\n .map((l) => {\n const [value, text] = l.split('|');\n return { value: value, text: text ?? value };\n });\n }\n } else if (Array.isArray(raw)) {\n arr = raw;\n } else {\n return undefined;\n }\n return arr.map((o: any) =>\n typeof o === 'object' && o !== null\n ? { value: o.value, text: o.text ?? o.label, disabled: o.disabled, group: o.group, children: o.children }\n : { value: o, text: String(o) },\n );\n };\n\n if ((patch as any).options !== undefined) {\n const norm = normalizeOptions((patch as any).options) ?? [];\n if (isSelect || isAutocomplete) {\n (fm as any).selectOptions = norm;\n } else if (isSelectionList) {\n (fm as any).listOptions = norm;\n } else if (fct === 'TRANSFER_LIST') {\n (fm as any).transferOptions = norm;\n } else if (fct === 'RADIO') {\n (fm as any).radioOptions = norm;\n } else if (fct === 'BUTTON_TOGGLE') {\n (fm as any).toggleOptions = norm;\n } else if (fct === 'TREE_SELECT' || fct === 'MULTI_SELECT_TREE') {\n // Tree supports either nodes[] or options[] with children\n (fm as any).nodes = norm as any;\n }\n }\n if ((patch as any).emptyOptionText !== undefined) (fm as any).emptyOptionText = (patch as any).emptyOptionText;\n if ((patch as any).multiple !== undefined) (fm as any).multiple = !!(patch as any).multiple;\n if ((patch as any).optionLabelKey !== undefined) (fm as any).optionLabelKey = (patch as any).optionLabelKey;\n if ((patch as any).optionValueKey !== undefined) (fm as any).optionValueKey = (patch as any).optionValueKey;\n const canonicalResourcePath =\n (patch as any).resourcePath !== undefined\n ? (patch as any).resourcePath\n : (patch as any).endpoint;\n if (canonicalResourcePath !== undefined) {\n (fm as any).resourcePath = canonicalResourcePath;\n }\n if ((fm as any).endpoint !== undefined) {\n delete (fm as any).endpoint;\n }\n if ((patch as any).filterCriteria !== undefined) {\n const val = (patch as any).filterCriteria;\n if (typeof val === 'string') {\n try {\n (fm as any).filterCriteria = JSON.parse(val);\n } catch {\n (fm as any).filterCriteria = val as any;\n }\n } else {\n (fm as any).filterCriteria = val as any;\n }\n }\n if ((patch as any).searchable !== undefined) (fm as any).searchable = !!(patch as any).searchable;\n if ((patch as any).selectAll !== undefined) (fm as any).selectAll = !!(patch as any).selectAll;\n if ((patch as any).searchPlaceholder !== undefined)\n (fm as any).searchPlaceholder = (patch as any).searchPlaceholder;\n if ((patch as any).maxSelections !== undefined)\n (fm as any).maxSelections = toNum((patch as any).maxSelections) as any;\n if ((patch as any).leftLabel !== undefined)\n (fm as any).leftLabel = (patch as any).leftLabel;\n if ((patch as any).rightLabel !== undefined)\n (fm as any).rightLabel = (patch as any).rightLabel;\n if ((patch as any).leftPlaceholder !== undefined)\n (fm as any).leftPlaceholder = (patch as any).leftPlaceholder;\n if ((patch as any).rightPlaceholder !== undefined)\n (fm as any).rightPlaceholder = (patch as any).rightPlaceholder;\n\n // Tree-select specific behaviour flags\n if ((patch as any).leafOnly !== undefined) (fm as any).leafOnly = !!(patch as any).leafOnly;\n if ((patch as any).autoExpandOnSearch !== undefined)\n (fm as any).autoExpandOnSearch = !!(patch as any).autoExpandOnSearch;\n if ((patch as any).returnPath !== undefined) (fm as any).returnPath = !!(patch as any).returnPath;\n if ((patch as any).returnObject !== undefined) (fm as any).returnObject = !!(patch as any).returnObject;\n\n // --- Additional type-specific mappings ---\n const fctApply: string = normalizeControlTypeKey((fm as any).controlType);\n\n // DATE_INPUT / MONTH_INPUT / WEEK_INPUT: string constraints\n if (fctApply === 'DATEINPUT' || fctApply === 'DATE_INPUT') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n }\n if (fctApply === 'MONTH' || fctApply === 'MONTH_INPUT') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n }\n if (fctApply === 'WEEK' || fctApply === 'WEEK_INPUT') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n }\n\n // TIME_INPUT\n if (fctApply === 'TIME' || fctApply === 'TIME_INPUT') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n if ((patch as any).step !== undefined) (fm as any).step = toNum((patch as any).step);\n }\n\n // TIME_PICKER\n if (fctApply === 'TIMEPICKER' || fctApply === 'TIME_PICKER') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n if ((patch as any).interval !== undefined) (fm as any).interval = (patch as any).interval as any;\n if ((patch as any).timeOptions !== undefined) {\n const raw = (patch as any).timeOptions;\n (fm as any).timeOptions = Array.isArray(raw)\n ? raw\n : String(raw || '')\n .split(/\\r?\\n/)\n .map((s) => s.trim())\n .filter(Boolean);\n }\n if ((patch as any).openOnClick !== undefined) (fm as any).openOnClick = !!(patch as any).openOnClick;\n if ((patch as any).touchUi !== undefined) (fm as any).touchUi = !!(patch as any).touchUi;\n if ((patch as any).format !== undefined) (fm as any).format = (patch as any).format;\n if ((patch as any).showSeconds !== undefined) (fm as any).showSeconds = !!(patch as any).showSeconds;\n if ((patch as any).stepMinute !== undefined) (fm as any).stepMinute = toNum((patch as any).stepMinute);\n if ((patch as any).stepSecond !== undefined) (fm as any).stepSecond = toNum((patch as any).stepSecond);\n if ((patch as any).timeFilter !== undefined) (fm as any).timeFilter = (patch as any).timeFilter;\n }\n\n // TIME_RANGE\n if (fctApply === 'TIMERANGE' || fctApply === 'TIME_RANGE') {\n if ((patch as any).min !== undefined) (fm as any).min = (patch as any).min;\n if ((patch as any).max !== undefined) (fm as any).max = (patch as any).max;\n if ((patch as any).step !== undefined) (fm as any).step = toNum((patch as any).step);\n if ((patch as any).defaultValue?.start !== undefined || (patch as any).defaultValue?.end !== undefined) {\n const dv = { ...(fm as any).defaultValue };\n if ((patch as any).defaultValue?.start !== undefined) dv.start = (patch as any).defaultValue.start;\n if ((patch as any).defaultValue?.end !== undefined) dv.end = (patch as any).defaultValue.end;\n (fm as any).defaultValue = dv;\n }\n }\n\n // PRICE_RANGE\n if (fctApply === 'PRICERANGE' || fctApply === 'PRICE_RANGE') {\n const p: any = patch as any;\n if (p.startLabel !== undefined) (fm as any).startLabel = p.startLabel;\n if (p.endLabel !== undefined) (fm as any).endLabel = p.endLabel;\n if (p.startPlaceholder !== undefined) (fm as any).startPlaceholder = p.startPlaceholder;\n if (p.endPlaceholder !== undefined) (fm as any).endPlaceholder = p.endPlaceholder;\n if (p.layout !== undefined) (fm as any).layout = p.layout;\n if (p.gap !== undefined) (fm as any).gap = p.gap;\n if (p.hideSubLabels !== undefined) (fm as any).hideSubLabels = !!p.hideSubLabels;\n if (p.clearButtonPlacement !== undefined) (fm as any).clearButtonPlacement = p.clearButtonPlacement;\n\n if (p.currency !== undefined) (fm as any).currency = p.currency;\n if (p.currencyPosition !== undefined) (fm as any).currencyPosition = p.currencyPosition;\n if (p.decimalPlaces !== undefined) (fm as any).decimalPlaces = toNum(p.decimalPlaces);\n if (p.locale !== undefined) (fm as any).locale = p.locale;\n if (p.thousandsSeparator !== undefined) (fm as any).thousandsSeparator = p.thousandsSeparator;\n if (p.decimalSeparator !== undefined) (fm as any).decimalSeparator = p.decimalSeparator;\n if (p.allowNegative !== undefined) (fm as any).allowNegative = !!p.allowNegative;\n\n if (p.startMin !== undefined) (fm as any).startMin = toNum(p.startMin);\n if (p.startMax !== undefined) (fm as any).startMax = toNum(p.startMax);\n if (p.endMin !== undefined) (fm as any).endMin = toNum(p.endMin);\n if (p.endMax !== undefined) (fm as any).endMax = toNum(p.endMax);\n if (p.startMinMessage !== undefined) (fm as any).startMinMessage = p.startMinMessage;\n if (p.startMaxMessage !== undefined) (fm as any).startMaxMessage = p.startMaxMessage;\n if (p.endMinMessage !== undefined) (fm as any).endMinMessage = p.endMinMessage;\n if (p.endMaxMessage !== undefined) (fm as any).endMaxMessage = p.endMaxMessage;\n if (p.endMinOffset !== undefined) (fm as any).endMinOffset = toNum(p.endMinOffset);\n if (p.startMaxOffset !== undefined) (fm as any).startMaxOffset = toNum(p.startMaxOffset);\n if (p.endMinOffsetMessage !== undefined) (fm as any).endMinOffsetMessage = p.endMinOffsetMessage;\n if (p.startMaxOffsetMessage !== undefined) (fm as any).startMaxOffsetMessage = p.startMaxOffsetMessage;\n }\n\n // CHECKBOX group\n if (fctApply === 'CHECKBOX') {\n if ((patch as any).options !== undefined) {\n const norm = normalizeOptions((patch as any).options) ?? [];\n (fm as any).checkboxOptions = norm;\n }\n if ((patch as any).selectionMode !== undefined) (fm as any).selectionMode = (patch as any).selectionMode;\n if ((patch as any).variant !== undefined) (fm as any).variant = (patch as any).variant;\n if ((patch as any).density !== undefined) (fm as any).density = (patch as any).density;\n if ((patch as any).layout !== undefined) (fm as any).layout = (patch as any).layout;\n if ((patch as any).labelPosition !== undefined) (fm as any).labelPosition = (patch as any).labelPosition;\n if ((patch as any).color !== undefined) (fm as any).color = (patch as any).color;\n if ((patch as any).indeterminate !== undefined) (fm as any).indeterminate = !!(patch as any).indeterminate;\n if ((patch as any).requiredChecked !== undefined) {\n (fm as any).requiredChecked = !!(patch as any).requiredChecked;\n (fm as any).validators = { ...((fm as any).validators || {}), requiredChecked: !!(patch as any).requiredChecked };\n }\n if ((patch as any).links !== undefined) {\n const links = (patch as any).links;\n if (typeof links === 'string') {\n try {\n (fm as any).links = JSON.parse(links);\n } catch {\n (fm as any).links = links as any;\n }\n } else {\n (fm as any).links = links as any;\n }\n }\n if ((patch as any).linkText !== undefined) (fm as any).linkText = (patch as any).linkText;\n if ((patch as any).linkUrl !== undefined) (fm as any).linkUrl = (patch as any).linkUrl;\n if ((patch as any).linkTarget !== undefined) (fm as any).linkTarget = (patch as any).linkTarget;\n }\n\n if (fctApply === 'RADIO') {\n if ((patch as any).selectionMode !== undefined) (fm as any).selectionMode = (patch as any).selectionMode;\n if ((patch as any).variant !== undefined) (fm as any).variant = (patch as any).variant;\n if ((patch as any).density !== undefined) (fm as any).density = (patch as any).density;\n if ((patch as any).layout !== undefined) (fm as any).layout = (patch as any).layout;\n if ((patch as any).labelPosition !== undefined) (fm as any).labelPosition = (patch as any).labelPosition;\n if ((patch as any).color !== undefined) (fm as any).color = (patch as any).color;\n }\n\n // TOGGLE\n if (fctApply === 'TOGGLE') {\n if ((patch as any).color !== undefined) (fm as any).color = (patch as any).color;\n if ((patch as any).labelPosition !== undefined) (fm as any).labelPosition = (patch as any).labelPosition;\n if ((patch as any).hideIcon !== undefined) (fm as any).hideIcon = !!(patch as any).hideIcon;\n if ((patch as any).disableRipple !== undefined) (fm as any).disableRipple = !!(patch as any).disableRipple;\n if ((patch as any).requiredTrue !== undefined) (fm as any).requiredTrue = !!(patch as any).requiredTrue;\n }\n\n // SLIDER\n if (fctApply === 'SLIDER') {\n if ((patch as any).thumbLabel !== undefined) (fm as any).thumbLabel = !!(patch as any).thumbLabel;\n if ((patch as any).vertical !== undefined) (fm as any).vertical = !!(patch as any).vertical;\n if ((patch as any).showTicks !== undefined) (fm as any).showTicks = (patch as any).showTicks as any;\n if ((patch as any).invert !== undefined) (fm as any).invert = !!(patch as any).invert;\n if ((patch as any).color !== undefined) (fm as any).color = (patch as any).color;\n }\n\n // RANGE_SLIDER\n if (fctApply === 'RANGESLIDER' || fctApply === 'RANGE_SLIDER') {\n if ((patch as any).mode !== undefined) (fm as any).mode = (patch as any).mode;\n if ((patch as any).thumbLabel !== undefined) (fm as any).thumbLabel = !!(patch as any).thumbLabel;\n if ((patch as any).showTicks !== undefined) (fm as any).showTicks = (patch as any).showTicks as any;\n if ((patch as any).discrete !== undefined) (fm as any).discrete = !!(patch as any).discrete;\n if ((patch as any).vertical !== undefined) (fm as any).vertical = !!(patch as any).vertical;\n if ((patch as any).invert !== undefined) (fm as any).invert = !!(patch as any).invert;\n if ((patch as any).minDistance !== undefined) (fm as any).minDistance = toNum((patch as any).minDistance);\n if ((patch as any).maxDistance !== undefined) (fm as any).maxDistance = toNum((patch as any).maxDistance);\n if ((patch as any).displayWith !== undefined) (fm as any).displayWith = (patch as any).displayWith as any;\n if ((patch as any).showInputs !== undefined) (fm as any).showInputs = !!(patch as any).showInputs;\n if ((patch as any).color !== undefined) (fm as any).color = (patch as any).color;\n }\n\n // CURRENCY_INPUT: numberFormat extras\n if (fctApply === 'CURRENCY' || fctApply === 'CURRENCY_INPUT') {\n if ((patch as any).currency !== undefined) (fm as any).currency = (patch as any).currency;\n if ((patch as any).currencyPosition !== undefined) (fm as any).currencyPosition = (patch as any).currencyPosition;\n if ((patch as any).decimalPlaces !== undefined) (fm as any).decimalPlaces = toNum((patch as any).decimalPlaces);\n if ((patch as any).locale !== undefined) (fm as any).locale = (patch as any).locale;\n if ((patch as any).thousandsSeparator !== undefined) (fm as any).thousandsSeparator = (patch as any).thousandsSeparator;\n if ((patch as any).decimalSeparator !== undefined) (fm as any).decimalSeparator = (patch as any).decimalSeparator;\n if ((patch as any).allowNegative !== undefined) (fm as any).allowNegative = !!(patch as any).allowNegative;\n if ((patch as any).numberFormat) {\n const nf = (patch as any).numberFormat as any;\n (fm as any).numberFormat = { ...(fm as any).numberFormat, ...(nf || {}) };\n }\n // showGrouping handled earlier\n }\n\n // CPF_CNPJ_INPUT\n if (fctApply === 'CPF_CNPJ_INPUT' || fctApply === 'CPF_CNPJ') {\n if ((patch as any).maskMode !== undefined) (fm as any).maskMode = (patch as any).maskMode;\n if ((patch as any).validate !== undefined) (fm as any).validate = !!(patch as any).validate;\n // Map to newer names if present in runtime components\n if ((patch as any).maskMode !== undefined) (fm as any).documentType = (patch as any).maskMode;\n }\n\n // FILE_UPLOAD\n if (fctApply === 'UPLOAD' || fctApply === 'FILE_UPLOAD') {\n if ((patch as any).accept !== undefined) (fm as any).accept = (patch as any).accept;\n if ((patch as any).multiple !== undefined) (fm as any).multiple = !!(patch as any).multiple;\n if ((patch as any).maxSizeMB !== undefined) (fm as any).maxSizeMB = toNum((patch as any).maxSizeMB);\n if ((patch as any).resourcePath !== undefined) (fm as any).resourcePath = (patch as any).resourcePath;\n if ((patch as any).uploadUrl !== undefined) (fm as any).uploadUrl = (patch as any).uploadUrl;\n if ((patch as any).filterCriteria !== undefined) {\n try {\n (fm as any).filterCriteria = typeof (patch as any).filterCriteria === 'string'\n ? JSON.parse((patch as any).filterCriteria as any)\n : (patch as any).filterCriteria;\n } catch {\n (fm as any).filterCriteria = (patch as any).filterCriteria as any;\n }\n }\n }\n\n // YEAR_INPUT (map minYear/maxYear to min/max if provided)\n if (fctApply === 'YEAR' || fctApply === 'YEAR_INPUT') {\n if ((patch as any).minYear !== undefined) (fm as any).min = toNum((patch as any).minYear);\n if ((patch as any).maxYear !== undefined) (fm as any).max = toNum((patch as any).maxYear);\n if ((patch as any).step !== undefined) (fm as any).step = toNum((patch as any).step);\n }\n\n // Persist using Immer for safe immutable update\n this.config = produce(this.config, (draft) => {\n (draft.fieldMetadata as any) = draft.fieldMetadata || [];\n (draft.fieldMetadata as any)[idx] = fm as any;\n });\n this.configChange.emit(this.config);\n\n // COLOR PICKER specific mappings from editor → runtime metadata\n try {\n const nextCtUpper = normalizeControlTypeKey((fm as any).controlType);\n if (nextCtUpper === 'COLOR_PICKER') {\n const p: any = patch as any;\n // Unified format key\n if (p.format !== undefined) (fm as any).format = p.format;\n // Preview flag (editor may use showPreview)\n if (p.showPreview !== undefined) (fm as any).preview = !!p.showPreview;\n if (p.preview !== undefined) (fm as any).preview = !!p.preview;\n // Views from textarea (JSON or lines)\n if (p.views !== undefined) {\n let views: any = p.views;\n if (typeof views === 'string') {\n const s = views.trim();\n try { views = JSON.parse(s); } catch { views = s.split(/\\r?\\n|,/).map((t: string) => t.trim()).filter(Boolean); }\n }\n if (Array.isArray(views)) (fm as any).views = views;\n }\n // Active view, actions, clear\n if (p.activeView !== undefined) (fm as any).activeView = p.activeView;\n if (p.clearButton !== undefined) (fm as any).clearButton = !!p.clearButton;\n if (p.actionsLayout !== undefined) (fm as any).actionsLayout = p.actionsLayout;\n // Adaptive/Popup\n if (p.adaptiveMode !== undefined) (fm as any).adaptiveMode = !!p.adaptiveMode;\n if (p.adaptiveTitle !== undefined) (fm as any).adaptiveTitle = p.adaptiveTitle;\n if (p.adaptiveSubtitle !== undefined) (fm as any).adaptiveSubtitle = p.adaptiveSubtitle;\n if (p.popupSettings?.width !== undefined || p['popupSettings.width'] !== undefined) {\n const w = p.popupSettings?.width ?? p['popupSettings.width'];\n (fm as any).popupSettings = { ...(fm as any).popupSettings, width: w };\n }\n // Gradient settings\n if (p.gradientSettings?.showOpacity !== undefined || p.showAlpha !== undefined) {\n (fm as any).gradientSettings = {\n ...(fm as any).gradientSettings,\n showOpacity: p.gradientSettings?.showOpacity ?? !!p.showAlpha,\n };\n }\n if (p.gradientSettings?.channel !== undefined) {\n (fm as any).gradientSettings = { ...(fm as any).gradientSettings, channel: p.gradientSettings.channel };\n }\n // Palette settings\n if (p.paletteSettings?.preset !== undefined) {\n (fm as any).paletteSettings = { ...(fm as any).paletteSettings, preset: p.paletteSettings.preset };\n }\n if (p.paletteSettings?.columns !== undefined) {\n const toNum = (v: any) => (v === '' || v === null || v === undefined ? undefined : (typeof v === 'number' ? v : Number(v)));\n (fm as any).paletteSettings = { ...(fm as any).paletteSettings, columns: toNum(p.paletteSettings.columns) };\n }\n if (p.paletteSettings?.colors !== undefined || p.presetColors !== undefined) {\n const raw = (p.paletteSettings?.colors ?? p.presetColors) as any;\n let colors: string[] | undefined;\n if (typeof raw === 'string') {\n const s = raw.trim();\n try { const parsed = JSON.parse(s); if (Array.isArray(parsed)) colors = parsed.filter((x) => typeof x === 'string'); } catch { }\n if (!colors) {\n const byLine = s.split(/\\r?\\n|,/).map((t) => t.trim()).filter(Boolean);\n if (byLine.length) colors = byLine;\n }\n } else if (Array.isArray(raw)) {\n colors = raw.filter((x) => typeof x === 'string');\n }\n if (colors) (fm as any).paletteSettings = { ...(fm as any).paletteSettings, colors };\n }\n // Theming\n if (p.fillMode !== undefined) (fm as any).fillMode = p.fillMode;\n if (p.rounded !== undefined) (fm as any).rounded = p.rounded;\n if (p.size !== undefined) (fm as any).size = p.size;\n if (p.icon !== undefined) (fm as any).icon = p.icon;\n if (p.svgIcon !== undefined) (fm as any).svgIcon = p.svgIcon;\n if (p.iconClass !== undefined) {\n try { (fm as any).iconClass = typeof p.iconClass === 'string' ? JSON.parse(p.iconClass) : p.iconClass; }\n catch { (fm as any).iconClass = p.iconClass; }\n }\n // A11y\n if ((p as any).tabindex !== undefined) (fm as any).tabindex = (typeof (p as any).tabindex === 'number' ? (p as any).tabindex : Number((p as any).tabindex));\n }\n } catch { }\n\n // RATING specific mappings from editor → runtime metadata (extracted helper)\n try {\n const nextCtUpper = normalizeControlTypeKey((fm as any).controlType);\n if (nextCtUpper === 'RATING' || nextCtUpper.includes('RATING')) {\n const before = {\n max: (fm as any).max,\n allowHalf: (fm as any).allowHalf,\n precision: (fm as any).precision,\n selection: (fm as any).selection,\n size: (fm as any).size,\n icon: (fm as any).icon,\n emptyIcon: (fm as any).emptyIcon,\n svgIcon: (fm as any).svgIcon,\n svgIconOutline: (fm as any).svgIconOutline,\n ratingColor: (fm as any).ratingColor,\n outlineColor: (fm as any).outlineColor,\n readonly: (fm as any).readonly,\n tabIndex: (fm as any).tabIndex,\n ariaLabel: (fm as any).ariaLabel,\n };\n fm = withRatingMetadata(fm, patch);\n try {\n this.debugLog('[PDF] RATING mapping post-state', {\n fieldName,\n post: {\n max: (fm as any).max,\n allowHalf: (fm as any).allowHalf,\n precision: (fm as any).precision,\n selection: (fm as any).selection,\n size: (fm as any).size,\n ratingColor: (fm as any).ratingColor,\n outlineColor: (fm as any).outlineColor,\n },\n });\n } catch { }\n const after = {\n max: (fm as any).max,\n allowHalf: (fm as any).allowHalf,\n precision: (fm as any).precision,\n selection: (fm as any).selection,\n size: (fm as any).size,\n icon: (fm as any).icon,\n emptyIcon: (fm as any).emptyIcon,\n svgIcon: (fm as any).svgIcon,\n svgIconOutline: (fm as any).svgIconOutline,\n ratingColor: (fm as any).ratingColor,\n outlineColor: (fm as any).outlineColor,\n readonly: (fm as any).readonly,\n tabIndex: (fm as any).tabIndex,\n ariaLabel: (fm as any).ariaLabel,\n };\n try { this.debugLog('[PDF] RATING patch applied', { before, patch, after }); } catch { }\n }\n } catch (e) { try { this.warnLog('[PDF] RATING mapping error', e); } catch { } }\n\n this.debugLog('[PDF] applyFieldMetadataPatch:after-mapping', { fieldName });\n } catch (err) {\n try { this.errorLog('[PDF] applyFieldMetadataPatch:error-during-mapping', { fieldName, error: (err as any)?.message || err }); } catch { }\n // Robust fallback: apply minimal mapping for RATING and continue\n try {\n const ct = normalizeControlTypeKey(\n (patch as any).controlType ?? fm.controlType,\n );\n if (ct === 'RATING') {\n fm = withRatingMetadata(fm, patch);\n try { this.debugLog('[PDF] RATING patch applied (fallback)', { patch }); } catch { }\n }\n } catch { }\n // Do not return; proceed with write-back/persist/hot-update\n }\n\n // Persist the updated field metadata back into the form config\n try {\n // Use a defensive deep clone to avoid downstream mutations (e.g., live component setters)\n const fmForConfig = (() => {\n try { return structuredClone(fm); } catch { }\n try { return JSON.parse(JSON.stringify(fm)); } catch { }\n // Fallback to shallow copy if deep clone fails\n return { ...(fm as any) };\n })();\n // Immutable write-back: replace fieldMetadata array to avoid mutating frozen arrays\n const currList = (this.config.fieldMetadata || []) as any[];\n const nextList = currList.slice();\n nextList[idx] = fmForConfig as any;\n this.config = { ...(this.config as any), fieldMetadata: nextList } as any;\n\n // Produce a safe preview of what will be persisted for this field\n const preview: any = {};\n for (const [k, v] of Object.entries(fmForConfig)) {\n if (v == null) { preview[k] = v; continue; }\n const t = typeof v;\n if (t === 'string' || t === 'number' || t === 'boolean') preview[k] = v;\n else if (Array.isArray(v)) preview[k] = `array(${v.length})`;\n else if (t === 'function') preview[k] = '[fn]';\n else if (t === 'object') preview[k] = '[object]';\n else preview[k] = `[${t}]`;\n }\n try { this.debugLog('[PDF] field-metadata:write-back', { fieldName, index: idx, keys: Object.keys(fmForConfig), preview }); } catch { }\n } catch (e) { }\n // Note: config reference already updated above via immutable write-back\n\n // Hot-update path: update only the affected control and component\n const isStructuralChange = (() => {\n const nextCt = normalizeControlTypeKey((fm as any).controlType);\n return nextCt !== prevControlType; // control type changed\n })();\n\n if (isStructuralChange) {\n // Structural: refresh the loader that contains this field, or rebuild as fallback\n const loader = this.findLoaderForField(fieldName);\n if (loader) loader.refresh(); else this.buildFormFromConfig({\n reason: 'loader-refresh',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n } else {\n try {\n // Update validators/state on the existing FormControl\n this.dynamicForm.updateControlFromMetadata(this.form, fm as any, { emitEvent: false });\n } catch {\n // Fallback if control is missing\n this.buildFormFromConfig({\n reason: 'loader-refresh',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n }\n // Reapply metadata on the live component instance when possible\n const loader = this.findLoaderForField(fieldName);\n try { this.debugLog('[PDF] hot-update: loader lookup', { fieldName, found: !!loader }); } catch { }\n if (loader) {\n try {\n const comp = (loader as any).getComponent?.(fieldName);\n try { this.debugLog('[PDF] hot-update: component lookup', { fieldName, found: !!comp }); } catch { }\n if (comp) {\n const inst: any = comp.instance as any;\n if (typeof inst.setInputMetadata === 'function') {\n try {\n this.debugLog('[PDF] Applying setInputMetadata on live instance', { fieldName, hasFn: true });\n try { this.debugLog('[PDF] hot-update: setInputMetadata payload preview', { fieldName, allowHalf: (fm as any)?.allowHalf, precision: (fm as any)?.precision, ratingColor: (fm as any)?.ratingColor, outlineColor: (fm as any)?.outlineColor }); } catch { }\n inst.setInputMetadata(fm);\n } catch (e) {\n this.warnLog('[PDF] setInputMetadata failed; refreshing loader', e);\n loader.refresh();\n }\n } else if (inst?.metadata && typeof inst.metadata === 'function' && 'set' in inst.metadata) {\n try {\n this.debugLog('[PDF] Using metadata.set on live instance', { fieldName });\n inst.metadata.set(fm);\n } catch (e) {\n this.warnLog('[PDF] metadata.set failed; refreshing loader', e);\n loader.refresh();\n }\n } else {\n // No hot path available; refresh the column's loader\n this.warnLog('[PDF] No hot-update path; refreshing loader', { fieldName });\n loader.refresh();\n }\n } else {\n // Component not found (field may be hidden); refresh loader to pick changes\n this.warnLog('[PDF] Component not found; refreshing loader', { fieldName });\n loader.refresh();\n }\n } catch (e) {\n this.warnLog('[PDF] hot-update error; refreshing loader', { fieldName, error: (e as any)?.message || e });\n try { loader.refresh(); } catch { }\n }\n } else {\n // Could not locate loader (edge case); rebuild safely\n this.debugLog('[PDF] Loader not found; rebuilding form');\n this.buildFormFromConfig({\n reason: 'loader-refresh',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n }\n }\n\n this.cdr.detectChanges();\n\n // Persist updated config locally so editor changes survive reloads\n try {\n const key = this.formConfigKey();\n if (!key) {\n this.warnMissingId();\n return;\n }\n // Log snapshot of the just-updated field before persist\n try {\n const fmNow = (this.config.fieldMetadata || [])[idx] as any;\n\n const preview: any = {};\n for (const [k, v] of Object.entries(fmNow || {})) {\n if (v == null) { preview[k] = v; continue; }\n const t = typeof v;\n if (t === 'string' || t === 'number' || t === 'boolean') preview[k] = v;\n else if (Array.isArray(v)) preview[k] = `array(${v.length})`;\n else if (t === 'function') preview[k] = '[fn]';\n else if (t === 'object') preview[k] = '[object]';\n else preview[k] = `[${t}]`;\n }\n this.debugLog('[PDF] field-metadata:persist-preview', { key, fieldName, index: idx, preview });\n } catch { }\n this.persistFormConfig(key, this.config);\n this.debugLog('[PDF] field-metadata:persisted', { key, fieldName });\n } catch (e) {\n this.warnLog('[PDF] field-metadata:persist-error', e);\n }\n }\n\n /** Find the DynamicFieldLoaderDirective instance that currently hosts a given field */\n private findLoaderForField(fieldName: string): DynamicFieldLoaderDirective | undefined {\n const loaders = this.fieldLoaders?.toArray() || [];\n for (const ldr of loaders) {\n try {\n if (ldr.getComponent(fieldName)) return ldr;\n } catch { }\n }\n return undefined;\n }\n\n // --- New methods for field canvas interaction ---\n\n onToolbarMove(direction: 'up' | 'down'): void {\n if (!this.selectedElement) return;\n const last = this.selectedElement.path[this.selectedElement.path.length - 1];\n const correlationId = this.genCorrelationId();\n this.lastCorrelationId = correlationId;\n try {\n if (last.type === 'section') {\n const sections = this.config.sections || [];\n const fromIndex = sections.findIndex((s) => s.id === (last.data as any).id);\n if (fromIndex < 0) return;\n const toIndex = direction === 'up' ? Math.max(0, fromIndex - 1) : Math.min(sections.length - 1, fromIndex + 1);\n if (toIndex === fromIndex) return;\n const result = this.dynamicLayout.moveSectionById(\n this.config,\n (last.data as any).id,\n toIndex,\n { correlationId, origin: 'PraxisDynamicForm' },\n );\n this.config = result.config;\n } else {\n return; // Move arrows are not supported for other types\n }\n this.configChange.emit(this.config);\n this.cdr.detectChanges();\n } catch (e) {\n this.warnLog('[PDF] move via toolbar failed', e);\n }\n }\n\n onToolbarToggleReadonly(): void {\n this.updateSelectedFieldMeta((meta) => {\n const curr = (meta as any).readonly ?? (meta as any).readOnly ?? false;\n (meta as any).readonly = !curr;\n // keep legacy prop in sync if present\n if ((meta as any).readOnly !== undefined) (meta as any).readOnly = !curr;\n }, { validators: false, disabled: false });\n // Blur to immediately apply readonly overlays in shells\n this.blurAllInputs();\n }\n\n onToolbarToggleRequired(): void {\n this.updateSelectedFieldMeta((meta) => {\n // Toggle canonical required flag\n const next = !meta.required;\n meta.required = next;\n // Ensure ValidatorOptions mirrors the canonical required state so the\n // DynamicFormService rebuilds validators immediately.\n (meta as any).validators = {\n ...(meta as any).validators,\n required: next,\n } as any;\n }, { validators: true, disabled: false });\n // Remove focus to reflect validation markers instantly on UI\n this.blurAllInputs();\n }\n\n onToolbarToggleHidden(): void {\n this.updateSelectedFieldMeta((meta, fieldName) => {\n const next = !(meta as any).hidden;\n (meta as any).hidden = next;\n // reflect on current visibility map\n this.fieldVisibility[fieldName] = !next;\n }, { validators: false, disabled: false });\n // Blur focused inputs to promptly hide overlays when field becomes hidden\n this.blurAllInputs();\n }\n\n onToolbarToggleDisabled(): void {\n this.updateSelectedFieldMeta((meta) => {\n (meta as any).disabled = !(meta as any).disabled;\n }, { validators: false, disabled: true });\n // Blur to ensure disabled state visually applies without extra interaction\n this.blurAllInputs();\n }\n\n /** Helper to update metadata of the currently selected field and refresh the control if needed */\n private updateSelectedFieldMeta(\n mutator: (meta: FieldMetadata, fieldName: string) => void,\n options: { validators: boolean; disabled: boolean },\n ): void {\n if (!this.selectedElement) return;\n const last = this.selectedElement.path[this.selectedElement.path.length - 1];\n if (last.type !== 'field') return;\n const fieldName = (last.data as FieldMetadata).name;\n const list = this.config.fieldMetadata || [];\n const idx = list.findIndex((m) => m.name === fieldName);\n if (idx < 0) return;\n const meta = list[idx];\n // Create a shallow, extensible copy to avoid mutating potentially frozen objects (immer/ensureIds)\n const nextMeta: FieldMetadata = { ...(meta as any) } as FieldMetadata;\n mutator(nextMeta, fieldName);\n // Replace in config\n (this.config.fieldMetadata as FieldMetadata[])[idx] = nextMeta;\n\n // Keep canvas selection in sync so toolbar icons reflect new state\n try {\n // Update the 'field' entry in the path\n const fieldPathIndex = this.selectedElement.path.findIndex((p) => p.type === 'field');\n if (fieldPathIndex >= 0) {\n this.selectedElement.path[fieldPathIndex] = {\n ...this.selectedElement.path[fieldPathIndex],\n data: nextMeta,\n } as any;\n }\n // Also update the shortcut data reference on the selected element\n if (this.selectedElement.type === 'field') {\n (this.selectedElement as any).data = nextMeta;\n }\n } catch { }\n\n // Invalidate fields cache to force re-evaluation of [fields] arrays so\n // DynamicFieldLoader gets fresh metadata references and templates update\n // immediately (e.g., required marker, readonly, disabled, visibility).\n this.columnFieldsCache.clear();\n\n // Update control state from metadata\n if (options.validators || options.disabled) {\n this.dynamicForm.updateControlFromMetadata(this.form, nextMeta, { emitEvent: false });\n }\n this.configChange.emit(this.config);\n this.cdr.detectChanges();\n }\n\n onFieldMouseEnter(payload: {\n field: FieldMetadata;\n element: HTMLElement;\n }): void {\n if (!this.enableCustomization) return;\n const path = this.dynamicLayout.getElementPath(\n this.config,\n payload.element,\n );\n this.canvasState.setHoveredElement({\n type: 'field',\n domElement: payload.element,\n data: payload.field,\n path,\n });\n }\n\n onFieldMouseLeave(payload: {\n field: FieldMetadata;\n element: HTMLElement;\n }): void {\n if (!this.enableCustomization) return;\n this.canvasState.setHoveredElement(null);\n }\n\n onFieldClick(payload: { field: FieldMetadata; element: HTMLElement }): void {\n if (!this.enableCustomization) return;\n const path = this.dynamicLayout.getElementPath(\n this.config,\n payload.element,\n );\n this.canvasState.setSelectedElement({\n type: 'field',\n domElement: payload.element,\n data: payload.field,\n path,\n });\n }\n\n onDragStarted(event: {\n field: FieldMetadata;\n index: number;\n dragEvent: CdkDragStart<any>;\n dragData: any;\n }): void {\n if (!this.enableCustomization) return;\n const correlationId = this.genCorrelationId();\n this.currentDnD = { id: correlationId, snapshot: this.config };\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} start`, {\n containerId: event.dragEvent.source.dropContainer.id,\n index: event.index,\n data: event.dragData,\n });\n }\n }\n\n onDragMoved(event: {\n field: FieldMetadata;\n index: number;\n dragEvent: CdkDragMove<any>;\n dragData: any;\n }): void {\n if (!this.debugDnD || !this.currentDnD) return;\n this.debugLog(`[PDF:DND] ${this.currentDnD.id} move`, {\n containerId: event.dragEvent.source.dropContainer.id,\n pointer: event.dragEvent.pointerPosition,\n });\n }\n\n onDragEnded(event: {\n field: FieldMetadata;\n index: number;\n dragEvent: CdkDragEnd<any>;\n dragData: any;\n }): void {\n if (!this.debugDnD || !this.currentDnD) return;\n this.debugLog(`[PDF:DND] ${this.currentDnD.id} end`, {\n containerId: event.dragEvent.source.dropContainer.id,\n });\n }\n\n onSectionDrop(event: CdkDragDrop<any>): void {\n if (!this.enableCustomization || event.previousIndex === event.currentIndex) {\n return;\n }\n const correlationId = this.currentDnD?.id || this.genCorrelationId();\n const itemEl = event.item.element.nativeElement as HTMLElement;\n const fromId = itemEl.dataset.sectionId as string;\n const toIndex = event.currentIndex;\n if (!fromId) {\n if (this.debugDnD) {\n this.warnLog(\n `[PDF:DND] ${correlationId} invalid section drop`,\n {\n fromId,\n toIndex,\n },\n {\n actionId: 'dnd.section.invalid',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:section:invalid',\n },\n );\n }\n return;\n }\n const snapshot = this.currentDnD?.snapshot || this.config;\n try {\n this.lastCorrelationId = correlationId;\n const result = this.dynamicLayout.moveSectionById(\n this.config,\n fromId,\n toIndex,\n { correlationId, origin: 'PraxisDynamicForm' },\n );\n this.config = result.config;\n // Update drop list data to prevent CDK from reverting the drag operation\n event.container.data = this.config.sections;\n event.previousContainer.data = this.config.sections;\n this.configChange.emit(this.config);\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n this.warnLog(\n `[PDF:DND] ${correlationId} rollback`,\n error,\n {\n actionId: 'dnd.section.rollback',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:section:rollback',\n },\n );\n this.config = snapshot;\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onRowDrop(event: CdkDragDrop<any>): void {\n if (\n !this.enableCustomization ||\n (event.previousContainer === event.container &&\n event.previousIndex === event.currentIndex)\n ) {\n return;\n }\n const correlationId = this.currentDnD?.id || this.genCorrelationId();\n const itemEl = event.item.element.nativeElement as HTMLElement;\n const currEl = event.container.element.nativeElement as HTMLElement;\n const fromIds = {\n sectionId: itemEl.dataset.sectionId as string,\n rowId: itemEl.dataset.rowId as string,\n };\n const toIds = {\n sectionId: currEl.dataset.sectionId as string,\n toIndex: event.currentIndex,\n };\n if (!fromIds.sectionId || !fromIds.rowId || !toIds.sectionId) {\n if (this.debugDnD) {\n this.warnLog(\n `[PDF:DND] ${correlationId} invalid row drop`,\n {\n fromIds,\n toIds,\n },\n {\n actionId: 'dnd.row.invalid',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:row:invalid',\n },\n );\n }\n return;\n }\n const snapshot = this.currentDnD?.snapshot || this.config;\n try {\n this.lastCorrelationId = correlationId;\n const result = this.dynamicLayout.moveRowById(\n this.config,\n fromIds.sectionId,\n fromIds.rowId,\n toIds.sectionId,\n toIds.toIndex,\n { correlationId, origin: 'PraxisDynamicForm' },\n );\n this.config = result.config;\n // Sync CDK drop list data for source and destination containers\n const destSection = this.config.sections.find(\n (s) => s.id === toIds.sectionId,\n );\n const srcSection = this.config.sections.find(\n (s) => s.id === fromIds.sectionId,\n );\n event.container.data = destSection?.rows || [];\n event.previousContainer.data = srcSection?.rows || [];\n this.configChange.emit(this.config);\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n this.warnLog(\n `[PDF:DND] ${correlationId} rollback`,\n error,\n {\n actionId: 'dnd.row.rollback',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:row:rollback',\n },\n );\n this.config = snapshot;\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onColumnDrop(event: CdkDragDrop<any>): void {\n if (\n !this.enableCustomization ||\n (event.previousContainer === event.container &&\n event.previousIndex === event.currentIndex)\n ) {\n return;\n }\n const correlationId = this.currentDnD?.id || this.genCorrelationId();\n const itemEl = event.item.element.nativeElement as HTMLElement;\n const prevEl = event.previousContainer.element.nativeElement as HTMLElement;\n const currEl = event.container.element.nativeElement as HTMLElement;\n const fromIds = {\n sectionId: itemEl.dataset.sectionId || prevEl.dataset.sectionId,\n rowId: itemEl.dataset.rowId || prevEl.dataset.rowId,\n columnId: itemEl.dataset.columnId || itemEl.id,\n } as {\n sectionId: string | undefined;\n rowId: string | undefined;\n columnId: string | undefined;\n };\n const toIds = {\n sectionId: currEl.dataset.sectionId as string,\n rowId: currEl.dataset.rowId as string,\n toIndex: event.currentIndex,\n };\n if (\n !fromIds.sectionId ||\n !fromIds.rowId ||\n !fromIds.columnId ||\n !toIds.sectionId ||\n !toIds.rowId\n ) {\n if (this.debugDnD) {\n this.warnLog(\n `[PDF:DND] ${correlationId} invalid column drop`,\n {\n fromIds,\n toIds,\n },\n {\n actionId: 'dnd.column.invalid',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:column:invalid',\n },\n );\n }\n return;\n }\n const snapshot = this.currentDnD?.snapshot || this.config;\n try {\n this.lastCorrelationId = correlationId;\n const result = this.dynamicLayout.moveColumnById(\n this.config,\n fromIds.sectionId,\n fromIds.rowId,\n fromIds.columnId,\n toIds.sectionId,\n toIds.rowId,\n toIds.toIndex,\n { correlationId, origin: 'PraxisDynamicForm' },\n );\n this.config = result.config;\n // Update drop list data for source and destination rows\n const destColumns = this.config.sections\n .find((s) => s.id === toIds.sectionId)\n ?.rows.find((r) => r.id === toIds.rowId)?.columns;\n const srcColumns = this.config.sections\n .find((s) => s.id === fromIds.sectionId)\n ?.rows.find((r) => r.id === fromIds.rowId)?.columns;\n event.container.data = destColumns || [];\n event.previousContainer.data = srcColumns || [];\n this.configChange.emit(this.config);\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n this.warnLog(\n `[PDF:DND] ${correlationId} rollback`,\n error,\n {\n actionId: 'dnd.column.rollback',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:column:rollback',\n },\n );\n this.config = snapshot;\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onFieldDrop(event: CdkDragDrop<any>): void {\n if (\n !this.enableCustomization ||\n (event.previousContainer === event.container &&\n event.previousIndex === event.currentIndex)\n ) {\n return;\n }\n const correlationId = this.currentDnD?.id || this.genCorrelationId();\n const prevEl = event.previousContainer.element.nativeElement as HTMLElement;\n const currEl = event.container.element.nativeElement as HTMLElement;\n const fromIds = {\n sectionId: prevEl.dataset.sectionId as string,\n rowId: prevEl.dataset.rowId as string,\n columnId: prevEl.dataset.columnId as string,\n fieldName: event.item.data?.fieldName as string,\n };\n const toIds = {\n sectionId: currEl.dataset.sectionId as string,\n rowId: currEl.dataset.rowId as string,\n columnId: currEl.dataset.columnId as string,\n toIndex: event.currentIndex,\n };\n if (\n !fromIds.sectionId ||\n !fromIds.rowId ||\n !fromIds.columnId ||\n !fromIds.fieldName ||\n !toIds.sectionId ||\n !toIds.rowId ||\n !toIds.columnId\n ) {\n if (this.debugDnD) {\n this.warnLog(\n `[PDF:DND] ${correlationId} invalid drop ids`,\n {\n fromIds,\n toIds,\n },\n {\n actionId: 'dnd.field.invalid',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:field:invalid',\n },\n );\n }\n return;\n }\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} drop`, {\n previousContainer: event.previousContainer.id,\n container: event.container.id,\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n item: event.item.data,\n });\n }\n const snapshot = this.currentDnD?.snapshot || this.config;\n try {\n this.lastCorrelationId = correlationId;\n const result = this.dynamicLayout.moveFieldById(\n this.config,\n fromIds,\n toIds,\n { correlationId, origin: 'PraxisDynamicForm' },\n );\n this.config = result.config;\n // Sync drop list data for source and destination columns\n const destFields = this.config.sections\n .find((s) => s.id === toIds.sectionId)\n ?.rows.find((r) => r.id === toIds.rowId)\n ?.columns.find((c) => c.id === toIds.columnId)?.fields;\n const srcFields = this.config.sections\n .find((s) => s.id === fromIds.sectionId)\n ?.rows.find((r) => r.id === fromIds.rowId)\n ?.columns.find((c) => c.id === fromIds.columnId)?.fields;\n event.container.data = destFields || [];\n event.previousContainer.data = srcFields || [];\n this.configChange.emit(this.config);\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n if (this.debugDnD) {\n this.debugLog(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n this.warnLog(\n `[PDF:DND] ${correlationId} rollback`,\n error,\n {\n actionId: 'dnd.field.rollback',\n correlationId,\n throttleKey: 'praxis-dynamic-form:dnd:field:rollback',\n },\n );\n this.config = snapshot;\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onSelectPath(pathPart: CanvasPathPart): void {\n // Re-calculating the path is necessary in case the config has changed\n const path = this.dynamicLayout.getElementPath(\n this.config,\n pathPart.domElement,\n );\n this.canvasState.setSelectedElement({\n type: pathPart.type,\n domElement: pathPart.domElement,\n data: pathPart.data,\n path,\n });\n }\n\n /**\n * Creates a new section and uses the layout service to insert it\n * at the correct position.\n * @param sectionIndex The index of the section after which to insert the new one.\n */\n addNewSectionAfter(sectionIndex: number): void {\n if (!this.config) {\n return;\n }\n\n // 1. Define the structure for a new, blank section.\n // The service's `ensureIds` utility will populate the blank IDs.\n const newSection: FormSection = {\n id: '',\n title: 'Nova Seção',\n rows: [\n {\n id: '',\n columns: [\n {\n id: '',\n fields: [],\n },\n ],\n },\n ],\n };\n\n // 2. Call the service's `insertSection` method, following the existing pattern.\n const result = this.dynamicLayout.insertSection(\n this.config,\n newSection,\n sectionIndex + 1, // Insert *after* the current index\n );\n\n // 3. Update the component's state from the result.\n this.config = result.config;\n this.configChange.emit(this.config); // Emit the change for parent components\n this.buildFormFromConfig({\n reason: 'layout-edit',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n }); // Rebuild the form to reflect the new structure\n\n // 4. Clear the current UI selection.\n this.canvasState.setSelectedElement(null); // Use the canvas state service to clear selection\n\n // 5. Trigger change detection to be safe.\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.schemaCache = null;\n this.isInitialized = false;\n for (const objectUrl of this.sectionHeaderObjectUrls) {\n try { URL.revokeObjectURL(objectUrl); } catch { }\n }\n this.sectionHeaderObjectUrls.clear();\n if (this.mountAnimationTimer) {\n clearTimeout(this.mountAnimationTimer);\n this.mountAnimationTimer = null;\n }\n }\n\n // TrackBy functions for performance optimization\n trackBySection(index: number, section: FormSection): string {\n return section.id;\n }\n\n trackByRow(index: number, row: FormRow): string {\n return row.id;\n }\n\n trackByColumn(index: number, column: FormColumn): string {\n return column.id;\n }\n\n /** Apply configuration or canonical authoring updates coming from external adapters (e.g., AI). */\n applyConfigFromAdapter(nextConfig: FormConfig): void;\n applyConfigFromAdapter(nextConfig: DynamicFormAuthoringDocument): void;\n applyConfigFromAdapter(nextConfig: unknown): void {\n const raw = nextConfig as Record<string, unknown> | null;\n const isCanonicalDocument =\n !!raw &&\n typeof raw === 'object' &&\n (raw as any).kind === 'praxis.dynamic-form.editor';\n const isLegacyEditorPayload =\n !!raw &&\n typeof raw === 'object' &&\n (Object.prototype.hasOwnProperty.call(raw, 'formConfig') ||\n Object.prototype.hasOwnProperty.call(raw, 'inputsPatch') ||\n Object.prototype.hasOwnProperty.call(raw, 'backConfig') ||\n Object.prototype.hasOwnProperty.call(raw, 'presentation') ||\n Object.prototype.hasOwnProperty.call(raw, 'schemaPrefs'));\n const doc = isCanonicalDocument || isLegacyEditorPayload\n ? parseLegacyOrDynamicFormDocument(nextConfig)\n : createDynamicFormAuthoringDocument({\n config: nextConfig,\n bindings: { mode: this.mode },\n contextSnapshot: this.captureCurrentContextSnapshot(),\n });\n const plan = buildDynamicFormApplyPlan(\n doc,\n this.buildDynamicFormEditorRuntimeContext(),\n {\n saveConfig: false,\n saveBindings: false,\n saveContextSnapshot: false,\n attachSchemaSnapshot: true,\n replaceContext: isCanonicalDocument,\n },\n );\n this.executeDynamicFormEditorApplyPlan(plan, 'adapter-apply');\n }\n\n private buildDynamicFormEditorRuntimeContext(): DynamicFormRuntimeContext {\n return {\n currentBindings: {\n mode: this.mode,\n },\n currentContextSnapshot: this.captureCurrentContextSnapshot(),\n server: {\n schemaHash:\n this.lastSchemaMeta?.serverHash ||\n this.schemaState.meta?.serverHash ||\n (this.config as any)?.metadata?.serverHash,\n },\n };\n }\n\n private captureCurrentContextSnapshot(): DynamicFormContextSnapshot {\n return {\n backConfig: this.backConfig ? structuredClone(this.backConfig) : undefined,\n presentation: this.captureCurrentPresentationSnapshot(),\n schemaPrefs: this.captureCurrentSchemaPrefsSnapshot(),\n };\n }\n\n private captureCurrentPresentationSnapshot(): DynamicFormPresentationSnapshot {\n return {\n labelPosition: this.presentationVars.labelPosition,\n labelFontSize: this.parsePresentationCssNumber(this.presentationVars.labelSize),\n valueFontSize: this.parsePresentationCssNumber(this.presentationVars.valueSize),\n compact: this.presentationVars.compact,\n density: this.presentationVars.density,\n labelWidth: this.parsePresentationCssNumber(this.presentationVars.labelWidth),\n labelAlign: this.presentationVars.labelAlign,\n valueAlign: this.presentationVars.valueAlign,\n };\n }\n\n private captureCurrentSchemaPrefsSnapshot(): DynamicFormSchemaPrefsSnapshot {\n return {\n notifyIfOutdated: this.notifyIfOutdated,\n snoozeMs: this.snoozeMs,\n autoOpenSettingsOnOutdated: this.autoOpenSettingsOnOutdated,\n };\n }\n\n private executeDynamicFormEditorApplyPlan(\n plan: DynamicFormApplyPlan,\n trigger:\n | 'settings-applied'\n | 'settings-saved'\n | 'adapter-apply'\n | 'settings-reset',\n ): void {\n if (plan.diagnostics.some((item) => item.level === 'error')) {\n this.warnLog('[PraxisDynamicForm] Editor document validation failed', {\n diagnostics: plan.diagnostics,\n });\n return;\n }\n\n const nextMode = plan.bindingsPatch?.mode;\n const previousMode = this.mode;\n const targetMode = nextMode || (plan.runtime?.clearMode ? 'create' : undefined);\n if (targetMode) {\n this.mode = targetMode;\n if (plan.persistence?.saveBindings) {\n const inputsKey = this.formInputsKey();\n if (inputsKey) {\n if (plan.runtime?.clearMode) {\n this.asyncConfigStorage.clearConfig(inputsKey).subscribe();\n } else {\n this.asyncConfigStorage\n .loadConfig<any>(inputsKey)\n .pipe(take(1))\n .subscribe((prev) => {\n this.asyncConfigStorage\n .saveConfig(inputsKey, { ...(prev || {}), mode: targetMode })\n .subscribe();\n });\n }\n }\n }\n }\n\n const contextSnapshot = plan.contextSnapshot;\n if (plan.runtime?.refreshBackNavigation && contextSnapshot?.backConfig) {\n this.backConfig = contextSnapshot.backConfig;\n if (plan.persistence?.saveContextSnapshot) {\n const backKey = this.crudBackKey();\n if (backKey) {\n this.asyncConfigStorage\n .saveConfig(backKey, contextSnapshot.backConfig)\n .subscribe();\n }\n }\n } else if (plan.runtime?.clearBackNavigation) {\n this.backConfig = undefined;\n if (plan.persistence?.saveContextSnapshot) {\n const backKey = this.crudBackKey();\n if (backKey) {\n this.asyncConfigStorage.clearConfig(backKey).subscribe();\n }\n }\n }\n\n if (plan.runtime?.refreshPresentation && contextSnapshot?.presentation) {\n if (plan.persistence?.saveContextSnapshot) {\n const presKey = this.formPresKey(\n this.resolveModeKey(targetMode || previousMode),\n );\n if (presKey) {\n this.asyncConfigStorage\n .saveConfig(presKey, contextSnapshot.presentation)\n .subscribe();\n }\n }\n this.applyPresentationConfig(contextSnapshot.presentation);\n } else if (plan.runtime?.clearPresentation) {\n if (plan.persistence?.saveContextSnapshot) {\n this.clearStoredPresentationSnapshots();\n }\n this.resetPresentationVarsToDefaults();\n }\n\n if (plan.runtime?.refreshSchemaState && contextSnapshot?.schemaPrefs) {\n this.notifyIfOutdated = contextSnapshot.schemaPrefs.notifyIfOutdated || 'both';\n this.snoozeMs = contextSnapshot.schemaPrefs.snoozeMs ?? this.snoozeMs;\n this.autoOpenSettingsOnOutdated =\n contextSnapshot.schemaPrefs.autoOpenSettingsOnOutdated === true;\n if (plan.persistence?.saveContextSnapshot) {\n const prefsKey = this.getPrefsKey();\n if (prefsKey) {\n this.asyncConfigStorage\n .saveConfig(prefsKey, contextSnapshot.schemaPrefs)\n .subscribe();\n }\n }\n void this.resolveSchemaPrefs();\n } else if (plan.runtime?.clearSchemaState) {\n this.resetSchemaPrefsToDefaults();\n if (plan.persistence?.saveContextSnapshot) {\n const prefsKey = this.getPrefsKey();\n if (prefsKey) {\n this.asyncConfigStorage.clearConfig(prefsKey).subscribe();\n }\n }\n }\n\n const nextConfig = this.attachRuntimeMetadataToDynamicFormConfig(\n plan.canonicalConfig,\n plan.metadata?.attachSchemaSnapshot === true,\n );\n this.config = normalizeFormConfig(nextConfig as FormConfig);\n\n if (plan.persistence?.saveConfig) {\n const key = this.formConfigKey(this.resolveModeKey(targetMode || this.mode));\n this.persistFormConfig(key, this.config);\n }\n\n this.configChange.emit(this.config);\n if (plan.runtime?.rebuildForm) {\n this.buildFormFromConfig({\n reason: 'editor-plan',\n preserveRuntimeState: true,\n preserveInteractionState: true,\n fallbackToLoadedEntity: true,\n });\n const hasRenderableConfig =\n (this.config?.sections?.length ?? 0) > 0 ||\n (this.config?.fieldMetadata?.length ?? 0) > 0;\n if (hasRenderableConfig) {\n this.isInitialized = true;\n this.initializationStatus = 'success';\n }\n }\n if (plan.runtime?.rebindMode && targetMode && targetMode !== previousMode) {\n this.reloadForModeChange();\n }\n this.cdr.detectChanges();\n try {\n this.debugLog('[PDF] executeDynamicFormEditorApplyPlan()', { trigger, plan });\n } catch {}\n }\n\n private attachRuntimeMetadataToDynamicFormConfig(\n cfg: FormConfig,\n attachSchemaSnapshot: boolean,\n ): FormConfig {\n if (!attachSchemaSnapshot) {\n return cfg;\n }\n\n const next = structuredClone(cfg) as FormConfig & {\n metadata?: Record<string, unknown>;\n };\n const schemaHash =\n this.lastSchemaMeta?.serverHash || this.schemaState.meta?.serverHash;\n if (!schemaHash) {\n return next;\n }\n\n next.metadata = {\n ...(next.metadata || {}),\n serverHash: schemaHash,\n };\n return next;\n }\n\n private parsePresentationCssNumber(value: string | null | undefined): number | null {\n if (!value) return null;\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private clearDynamicFormEditorPersistence(\n modes?: Array<'create' | 'edit' | 'view' | undefined>,\n ): void {\n const inputsKey = this.formInputsKey();\n if (inputsKey) {\n this.asyncConfigStorage.clearConfig(inputsKey).subscribe();\n }\n\n const prefsKey = this.getPrefsKey();\n if (prefsKey) {\n this.asyncConfigStorage.clearConfig(prefsKey).subscribe();\n }\n\n const backKey = this.crudBackKey();\n if (backKey) {\n this.asyncConfigStorage.clearConfig(backKey).subscribe();\n }\n\n const scopedModes = Array.from(\n new Set(\n (modes && modes.length ? modes : ['create', 'edit', 'view']).map((mode) =>\n this.resolveModeKey(mode),\n ),\n ),\n );\n\n this.clearStoredPresentationSnapshots(scopedModes);\n scopedModes.forEach((mode) => {\n const key = this.formConfigKey(mode);\n if (key) {\n this.asyncConfigStorage.clearConfig(key).subscribe();\n }\n });\n }\n\n private clearStoredPresentationSnapshots(\n modes: ReadonlyArray<'create' | 'edit' | 'view'> = ['create', 'edit', 'view'],\n ): void {\n modes.forEach((mode) => {\n const presKey = this.formPresKey(mode);\n if (presKey) {\n this.asyncConfigStorage.clearConfig(presKey).subscribe();\n }\n });\n }\n\n private resetPresentationVarsToDefaults(): void {\n this.presentationVars = {\n labelPosition: 'above',\n labelSize: '0.78rem',\n valueSize: '1rem',\n compact: false,\n density: 'comfortable',\n labelWidth: '140px',\n labelAlign: 'start',\n valueAlign: 'start',\n };\n }\n\n private resetSchemaPrefsToDefaults(): void {\n this.notifyIfOutdated = 'both';\n this.snoozeMs = 24 * 60 * 60 * 1000;\n this.autoOpenSettingsOnOutdated = false;\n }\n\n // Public method for template access\n retryInitialization(): void {\n // Reset state for retry\n this.isInitialized = false;\n this.schemaCache = null;\n this.loadedEntityId = null;\n this.hydratedEntityId = null;\n this.initializationStatus = 'idle';\n this.tryInitializeForm();\n }\n\n getErrorTitle(): string {\n const titles = {\n 'config-load': 'Configuração Inválida',\n 'schema-fetch': 'Erro de Conexão',\n sync: 'Sincronização Parcial',\n 'form-build': 'Erro Interno',\n };\n\n const stage = this.currentErrorDetails?.stage || 'form-build';\n return titles[stage as keyof typeof titles] || 'Erro no Formulário';\n }\n\n showDetailedError(): void {\n const details = this.currentErrorDetails\n ? JSON.stringify(this.currentErrorDetails, null, 2)\n : 'Nenhum detalhe disponível';\n alert(\n `Detalhes técnicos:\\n\\n${details}\\n\\nPor favor, compartilhe estas informações com o suporte técnico.`,\n );\n }\n\n private buildSchemaContext(): SchemaIdParams & { baseUrl: string } {\n // Heurística: se schemaSource não for explicitamente 'resource', detectar por formId contendo 'filter'\n const inferredFilter = /(^|[-_])filter($|[-_])/i.test(this.formId || '');\n const useFilterSchema = this.schemaSource === 'filter' || inferredFilter;\n\n // Derive base path preserving prefixes from schemaUrl (supports missing/legacy crud mocks)\n const schemaUrlSource =\n typeof (this.crud as any).schemaUrl === 'function'\n ? (this.crud as any).schemaUrl()\n : typeof (this.crud as any).schemaUrl === 'string'\n ? (this.crud as any).schemaUrl\n : '';\n const basePath = (schemaUrlSource || '').replace(/\\/+$/, '').replace(/\\/schemas$/, '');\n let path = basePath ? `${basePath}${useFilterSchema ? '/filter' : '/all'}` : '';\n if (!path) {\n const rp = (this.resourcePath || '').replace(/^\\/+|\\/+$/g, '');\n path = `/${rp}${useFilterSchema ? '/filter' : '/all'}`;\n }\n const operation = useFilterSchema ? 'post' : 'get';\n const schemaType: 'request' | 'response' = useFilterSchema ? 'request' : 'response';\n const baseUrl =\n typeof (this.crud as any).getSchemasFilteredBaseUrl === 'function'\n ? (this.crud as any).getSchemasFilteredBaseUrl()\n : '';\n let apiOrigin = '';\n try { apiOrigin = new URL(baseUrl).origin; } catch { }\n // Tenant/locale from GlobalConfigService and navigator\n const tenant: string | undefined = this.global?.getTenant?.();\n const locale = (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined;\n return { path, operation, schemaType, includeInternalSchemas: useFilterSchema, tenant, locale, baseUrl, apiOrigin };\n }\n\n private async getSchemaWithCache(): Promise<any> {\n if (this.schemaCache) {\n this.debugLog('[PDF] schema:fromCache');\n return this.schemaCache;\n }\n const ctx = this.buildSchemaContext();\n const schemaContext: SchemaIdParams = {\n path: ctx.path,\n operation: ctx.operation,\n schemaType: ctx.schemaType,\n includeInternalSchemas: ctx.includeInternalSchemas,\n tenant: ctx.tenant,\n locale: ctx.locale,\n apiOrigin: ctx.apiOrigin,\n };\n const loadingCtx = this.buildLoadingContext(\n 'schema',\n 'Carregando configuração…',\n true,\n );\n this.beginLoading(loadingCtx);\n this.emitLoadingState('schema', 'loading', 'Carregando schema do formulário...');\n try {\n const url = this.crud.schemaUrl?.();\n this.debugLog('[PDF] schema:fetching', { url, mode: ctx.schemaType });\n } catch { }\n\n try { await this.global.ready(); } catch {}\n const disableCache = this.global.get<boolean>('cache.disableSchemaCache');\n const adapter = disableCache\n ? new MemoryCacheAdapter()\n : new LocalStorageCacheAdapter({ ttlMs: 30 * 60 * 1000, maxEntries: 200 });\n const client = new SchemaMetadataClient(adapter);\n const loadLegacySchema = async (reason?: unknown): Promise<any> => {\n try { this.warnLog('[PDF] schema:metadata-fallback', reason); } catch { }\n const legacyGetSchema = (this.crud as any)?.getSchema;\n if (typeof legacyGetSchema !== 'function') {\n throw reason instanceof Error\n ? reason\n : new Error('Schema metadata unavailable and legacy crud.getSchema() not found.');\n }\n const legacyResult = legacyGetSchema.call(this.crud);\n const legacyDefs = await firstValueFrom(\n legacyResult && typeof legacyResult.pipe === 'function'\n ? legacyResult.pipe(take(1))\n : legacyResult,\n );\n try {\n const schemaId = buildSchemaId(schemaContext);\n this.lastSchemaMeta = { schemaId, context: schemaContext };\n } catch { }\n this.schemaCache = legacyDefs;\n this.emitLoadingState('schema', 'success', 'Schema carregado.');\n return legacyDefs;\n };\n try {\n const legacyGetSchema = (this.crud as any)?.getSchema;\n const preferLegacySchema =\n typeof legacyGetSchema === 'function' &&\n !!(legacyGetSchema as any)?.and;\n if (preferLegacySchema) {\n return await loadLegacySchema(\n new Error('Using legacy schema source (mocked crud.getSchema).'),\n );\n }\n if (!ctx.baseUrl) {\n return await loadLegacySchema(new Error('Missing schema metadata base URL.'));\n }\n const entry = await client.getSchema({\n baseUrl: ctx.baseUrl,\n path: ctx.path,\n operation: ctx.operation,\n schemaType: ctx.schemaType,\n includeInternalSchemas: ctx.includeInternalSchemas,\n tenant: ctx.tenant,\n locale: ctx.locale,\n });\n const defs = this.schemaNormalizer.normalizeSchema(entry.schema);\n // Parse root-level x-ui.hooks if present (form-level hooks)\n try {\n const rootUi = (entry as any)?.schema?.['x-ui'];\n const hooks = rootUi && typeof rootUi === 'object' ? (rootUi as any).hooks : undefined;\n if (hooks && typeof hooks === 'object') {\n this.schemaRootHooks = hooks as FormHooksLayout;\n }\n } catch { }\n const schemaId = buildSchemaId(schemaContext);\n this.lastSchemaMeta = { schemaId, serverHash: entry.schemaHash, context: schemaContext };\n\n this.schemaCache = defs;\n this.emitLoadingState('schema', 'success', 'Schema carregado.');\n // Persist meta for future ETag verifications\n try {\n const metaKey =\n this.getSchemaMetaKeyForSchemaId(schemaId) ||\n this.getSchemaMetaKeyForContext(schemaContext) ||\n this.getSchemaMetaKey();\n if (metaKey) {\n const nowIso = new Date().toISOString();\n this.asyncConfigStorage\n .saveConfig(metaKey, {\n schemaId,\n schemaContext,\n serverHash: entry.schemaHash,\n lastVerifiedAt: nowIso,\n })\n .pipe(take(1))\n .subscribe({ error: () => {} });\n this.rememberSchemaMetaContext(schemaId);\n }\n } catch { }\n return defs;\n } catch (error) {\n return await loadLegacySchema(error);\n } finally {\n this.endLoading(loadingCtx);\n }\n }\n\n private isReactiveValidationEnabled(): boolean {\n if (this.reactiveValidation !== null) return !!this.reactiveValidation;\n return !!this.config?.behavior?.reactiveValidation;\n }\n\n private getReactiveValidationDebounceMs(): number {\n if (this.reactiveValidationDebounceMs != null) return this.reactiveValidationDebounceMs;\n const fromCfg = this.config?.behavior?.reactiveValidationDebounceMs;\n return typeof fromCfg === 'number' ? fromCfg : 150;\n }\n\n private setupReactiveValidation(): void {\n if (!this.isReactiveValidationEnabled()) {\n this.reactiveValidate$ = undefined;\n return;\n }\n const ms = this.getReactiveValidationDebounceMs();\n this.reactiveValidate$ = new Subject<void>();\n this.reactiveValidate$\n .pipe(debounceTime(ms), takeUntil(this.destroy$))\n .subscribe(() => {\n try { (async () => await this.runHooks('afterValidate'))(); } catch { }\n });\n }\n\n private logRowGapsSnapshot(reason: string): void {\n try {\n const sections = (this.config?.sections || []).map((s, si) => ({\n section: s.id || si,\n rows: (s.rows || []).map((r, ri) => ({\n row: r.id || ri,\n gap: (r as any).gap ?? null,\n rowGap: (r as any).rowGap ?? null,\n })),\n }));\n this.debugLog('[PraxisDynamicForm] rowGap snapshot', { reason, sections });\n } catch { }\n }\n\n private applyPresentationVars(): void {\n try {\n const presFromConfig: any | undefined = (this.config as any)?.presentation;\n const key = this.formPresKey();\n if (key && presFromConfig) {\n // Persist presentation tweaks coming from external config (e.g., IA)\n this.asyncConfigStorage\n .saveConfig(key, presFromConfig)\n .pipe(take(1))\n .subscribe({ error: () => {} });\n }\n if (presFromConfig) {\n this.applyPresentationConfig(presFromConfig);\n return;\n }\n if (!key) return;\n this.asyncConfigStorage\n .loadConfig<any>(key)\n .pipe(take(1))\n .subscribe((pres) => {\n if (!pres) return;\n this.applyPresentationConfig(pres);\n });\n } catch { }\n }\n\n private applyPresentationConfig(pres: any): void {\n const labelSize: string =\n pres.labelFontSize != null && pres.labelFontSize !== ''\n ? `${pres.labelFontSize} px`\n : this.presentationVars.labelSize;\n const valueSize: string =\n pres.valueFontSize != null && pres.valueFontSize !== ''\n ? `${pres.valueFontSize} px`\n : this.presentationVars.valueSize;\n const labelPosition: 'above' | 'left' =\n pres.labelPosition === 'left' ? 'left' : 'above';\n const compact: boolean = !!pres.compact;\n const density: 'comfortable' | 'cozy' | 'compact' =\n pres.density === 'comfortable' ||\n pres.density === 'cozy' ||\n pres.density === 'compact'\n ? pres.density\n : this.presentationVars.density;\n const labelWidth: string =\n pres.labelWidth != null && pres.labelWidth !== ''\n ? `${pres.labelWidth} px`\n : this.presentationVars.labelWidth;\n const labelAlign: 'start' | 'center' | 'end' =\n pres.labelAlign === 'start' ||\n pres.labelAlign === 'center' ||\n pres.labelAlign === 'end'\n ? pres.labelAlign\n : this.presentationVars.labelAlign;\n const valueAlign: 'start' | 'center' | 'end' =\n pres.valueAlign === 'start' ||\n pres.valueAlign === 'center' ||\n pres.valueAlign === 'end'\n ? pres.valueAlign\n : this.presentationVars.valueAlign;\n this.presentationVars = {\n labelPosition,\n labelSize,\n valueSize,\n compact,\n density,\n labelWidth,\n labelAlign,\n valueAlign,\n };\n this.cdr.detectChanges();\n // Normalize configuration to canonical schema (constraints at top-level)\n if (this.config) {\n this.config = normalizeFormConfig(this.config);\n }\n }\n}\n","@if (isLoading) {\n<!-- Loading State -->\n<div class=\"form-loading\">\n <mat-progress-spinner diameter=\"40\"></mat-progress-spinner>\n <p>Carregando formulário...</p>\n</div>\n} @else if (initializationStatus === 'error') {\n<!-- Error State -->\n<div class=\"form-error\">\n <mat-icon color=\"warn\" [praxisIcon]=\"'error'\"></mat-icon>\n <h3>{{ getErrorTitle() }}</h3>\n <p>{{ currentErrorMessage }}</p>\n @if (isRecoverable) {\n <button mat-stroked-button (click)=\"retryInitialization()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n Tentar Novamente\n </button>\n }\n <button mat-button (click)=\"showDetailedError()\" class=\"show-details\">\n Ver Detalhes Técnicos\n </button>\n <!-- Permitir correção do resourcePath diretamente do estado de erro -->\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\" class=\"connect-action\">\n <mat-icon [praxisIcon]=\"'bolt'\"></mat-icon>\n Conectar a recurso\n </button>\n</div>\n} @else if (initializationStatus === 'success') {\n<!-- Inline banner for schema change (only when customization is enabled) -->\n@if (shouldShowOutdatedInline()) {\n<div class=\"pfx-form-info-banner\" role=\"status\" aria-live=\"polite\">\n <div class=\"text\">O schema do servidor mudou. Reconciliar agora?</div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"openConfigEditor()\">\n <mat-icon [praxisIcon]=\"'sync'\"></mat-icon>\n Reconciliar\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">Lembrar depois</button>\n <button mat-button (click)=\"onIgnoreOutdated()\">Ignorar</button>\n </div>\n</div>\n}\n\n<!-- Configuration Controls -->\n@if (shouldShowConfigControls && enableCustomization) {\n<div class=\"form-config-controls\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n <button type=\"button\" mat-icon-button (click)=\"openConfigEditor()\" [disabled]=\"isLoading\" class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\" [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou — Reconciliar' : 'Configurar formulário'\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button type=\"button\" mat-icon-button (click)=\"disconnect()\" matTooltip=\"Desconectar da fonte de dados\"\n [disabled]=\"isLoading\">\n <mat-icon [praxisIcon]=\"'link_off'\"></mat-icon>\n </button>\n</div>\n}\n\n<!-- Form Content -->\n@if (!resourcePath && (!config.sections || config.sections.length === 0)) {\n<praxis-empty-state-card icon=\"link\" [title]=\"'Conecte o formulário à fonte de dados'\"\n [description]=\"'Informe a rota do recurso da API para gerar automaticamente os campos do formulário.'\"\n [primaryAction]=\"{ label: 'Conectar à fonte de dados', icon: 'bolt', action: openQuickConnect.bind(this) }\"></praxis-empty-state-card>\n}\n<form #formHost (ngSubmit)=\"onSubmit()\" [attr.aria-busy]=\"submitting ? 'true' : null\"\n [attr.aria-label]=\"'Formulário ' + (config.metadata?.version || '')\" [class.canvas-mode-enabled]=\"enableCustomization\"\n [class.presentation-mode]=\"effectivePresentation\" [class.readonly-mode]=\"effectiveReadonly\"\n [class.editorial-visual-context]=\"hasEditorialVisualContext()\"\n [class.pfx-mounting]=\"isMounting\" [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\" [style.--pfx-pres-label-align]=\"presentationVars.labelAlign\"\n [style.--pfx-pres-label-size]=\"presentationVars.labelSize\"\n [style.--pfx-pres-label-width]=\"presentationVars.labelWidth\"\n [style.--pfx-pres-row-gap]=\"presentationVars.density === 'compact' ? '6px' : (presentationVars.density === 'cozy' ? '8px' : '10px')\"\n [style.--pfx-pres-row-padding]=\"presentationVars.density === 'compact' ? '2px 0' : (presentationVars.density === 'cozy' ? '6px 0' : '8px 0')\"\n [style.--pfx-pres-value-align]=\"presentationVars.valueAlign\"\n [style.--pfx-pres-value-size]=\"presentationVars.valueSize\"\n [style.--pdx-form-mount-duration]=\"getMountDurationVar()\"\n [style.--pdx-form-mount-offset]=\"getMountOffsetVar()\"\n [style.--pdx-form-mount-stagger]=\"getMountStaggerVar()\"\n class=\"praxis-dynamic-form\">\n <praxis-canvas-toolbar (editMetadata)=\"openSelectedElementEditor()\" (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\" (moveDown)=\"onToolbarMove('down')\" (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\" (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\" (requestClose)=\"onToolbarRequestClose()\"\n *ngIf=\"enableCustomization && selectedElement\" [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"></praxis-canvas-toolbar>\n\n @if (formBlocksBefore.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before\" data-editorial-placement=\"before\">\n @for (block of formBlocksBefore; track (block.id ?? $index)) {\n <ng-container\n [dynamicWidgetLoader]=\"block\"\n [context]=\"getEditorialWidgetContext()\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onEditorialWidgetEvent('before', $event)\">\n </ng-container>\n }\n </section>\n }\n\n @if (actionPlacement === 'top' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"top\" [actions]=\"config.actions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"form.valid\" [submitError]=\"submitError\" [formId]=\"formId\" [actionOverrides]=\"actionRuleProps\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @for (section of config.sections; track (section.id ?? $index); let sectionIndex = $index;\n let last = $last) {\n <div class=\"section-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n @if (isSectionVisible(section)) {\n <div #sectionEl class=\"form-section canvas-element\" data-canvas-type=\"section\" [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\" (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [attr.data-section-appearance]=\"getSectionAppearance(section) || null\"\n [style.marginBottom.px]=\"!last ? getSectionGapBottom(section) : null\" [ngClass]=\"getSectionClasses(section)\"\n [ngStyle]=\"getSectionStyles(section)\">\n <div\n class=\"section-heading\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [class.step-appearance]=\"getSectionAppearance(section) === 'step'\"\n >\n <div class=\"section-heading-text\" [matTooltip]=\"getSectionHeaderTooltip(section) || null\"\n [matTooltipDisabled]=\"!getSectionHeaderTooltip(section)\">\n @if (getSectionStepLabel(section)) {\n <div class=\"section-step-label\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionStepLabel(section) }}\n </div>\n }\n @if (getSectionTitle(section)) {\n <h3 class=\"section-title\" [class.title-large]=\"getSectionTitleStyle(section) === 'titleLarge'\"\n [class.title-medium]=\"getSectionTitleStyle(section) === 'titleMedium'\"\n [class.title-small]=\"getSectionTitleStyle(section) === 'titleSmall'\"\n [class.headline-small]=\"getSectionTitleStyle(section) === 'headlineSmall'\"\n [style.marginBottom.px]=\"getSectionTitleGapBottom(section) ?? 20\" [style.color]=\"getSectionTitleColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [attr.id]=\"sectionPanelId(section, sectionIndex) + '-title'\">\n @let sectionHeaderVisual = getSectionHeaderVisual(section);\n @let sectionHeaderAvatarSize = getSectionHeaderAvatarSize(section);\n @if (sectionHeaderVisual.kind === 'icon') {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.kind === 'image') {\n <img class=\"section-title-avatar section-title-avatar-image\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\"\n [src]=\"sectionHeaderVisual.src\" [alt]=\"sectionHeaderVisual.alt\" />\n }\n @if (sectionHeaderVisual.kind === 'initials') {\n <span class=\"section-title-avatar section-title-avatar-text\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n {{ sectionHeaderVisual.text }}\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n @if (sectionHeaderVisual.kind === 'placeholder') {\n <span class=\"section-title-avatar section-title-avatar-placeholder\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n @if (sectionHeaderVisual.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.text) {\n <span>{{ sectionHeaderVisual.text }}</span>\n }\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n {{ getSectionTitle(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" mat-icon-button (click)=\"openSectionEditor(section, 'title')\"\n aria-label=\"Editar título da seção\" matTooltip=\"Editar título\">\n <mat-icon>edit</mat-icon>\n </button>\n }\n </h3>\n }\n @if (getSectionDescription(section)) {\n <p class=\"section-description\" [class.body-large]=\"getSectionDescriptionStyle(section) === 'bodyLarge'\"\n [class.body-medium]=\"getSectionDescriptionStyle(section) === 'bodyMedium'\"\n [class.body-small]=\"getSectionDescriptionStyle(section) === 'bodySmall'\"\n [style.marginBottom.px]=\"getSectionDescriptionGapBottom(section) ?? 8\" [style.color]=\"getSectionDescriptionColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionDescription(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" mat-icon-button\n (click)=\"openSectionEditor(section, 'description')\" aria-label=\"Editar descrição da seção\"\n matTooltip=\"Editar descrição\">\n <mat-icon>edit</mat-icon>\n </button>\n }\n </p>\n }\n </div>\n @if (getSectionHeaderActions(section).length) {\n <div class=\"section-heading-actions\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n @for (action of getSectionHeaderActions(section); track action.id) {\n <button\n type=\"button\"\n class=\"section-heading-action-btn\"\n mat-icon-button\n [color]=\"getSectionHeaderActionColor(action)\"\n [disabled]=\"isSectionHeaderActionDisabled(action)\"\n [matTooltip]=\"getSectionHeaderActionTooltip(action)\"\n [attr.aria-label]=\"action.label\"\n [attr.aria-busy]=\"action.loading ? 'true' : null\"\n [ngClass]=\"getSectionHeaderActionNgClass(action)\"\n [ngStyle]=\"getSectionHeaderActionStyles(action)\"\n (click)=\"onSectionHeaderActionClick(section, action, $event)\"\n >\n @if (action.loading) {\n <mat-progress-spinner diameter=\"16\" mode=\"indeterminate\"></mat-progress-spinner>\n <span class=\"section-heading-action-sr-only\">{{ getSectionHeaderActionLoadingLabel(action) }}</span>\n } @else {\n <mat-icon [praxisIcon]=\"action.icon\"></mat-icon>\n }\n </button>\n }\n </div>\n }\n @if (isSectionCollapsible(section)) {\n <button type=\"button\" class=\"section-collapse-btn\" mat-icon-button\n (click)=\"toggleSectionCollapse($event, section)\" [attr.aria-expanded]=\"!isSectionCollapsed(section)\"\n [attr.aria-controls]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-label]=\"isSectionCollapsed(section) ? 'Expandir seção' : 'Recolher seção'\">\n <mat-icon [praxisIcon]=\"isSectionCollapsed(section) ? 'expand_more' : 'expand_less'\"></mat-icon>\n </button>\n }\n </div>\n\n <div class=\"section-body\" [class.collapsed]=\"isSectionCollapsed(section)\"\n [attr.id]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-labelledby]=\"getSectionTitle(section) ? sectionPanelId(section, sectionIndex) + '-title' : null\">\n @if (!isSectionCollapsed(section)) {\n @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n @if (isRowVisible(row)) {\n <div class=\"row-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n <div #rowEl class=\"form-row grid-12 canvas-element\" data-canvas-type=\"row\" [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\" [style.--pfx-grid-gap.px]=\"getRowGap(row)\"\n [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [style.--pfx-mount-index]=\"rowIndex\"\n [style.marginBottom.px]=\"rowIndex < section.rows.length - 1 ? (getRowRowGap(row) ?? null) : null\"\n [ngClass]=\"getRowClasses(row)\" [ngStyle]=\"getRowStyles(row)\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\" (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\" [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\">\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div class=\"column-drop-wrapper\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\">\n <div #colEl class=\"form-column canvas-element\" [ngClass]=\"getColumnClasses(column)\"\n [style.padding.px]=\"getColumnPadding(column)\" [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [ngStyle]=\"getColumnStyles(column)\" [attr.data-testid]=\"column.testId || null\"\n [attr.data-row-gap]=\"getRowRowGap(row)\" data-canvas-type=\"column\" [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\" (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\">\n <ng-container dynamicFieldLoader [fields]=\"getColumnFields(column)\" [formGroup]=\"form\"\n [readonlyMode]=\"readonlyModeGlobal === null ? null : readonlyModeGlobal\"\n [disabledMode]=\"disabledModeGlobal === null ? null : disabledModeGlobal\"\n [presentationMode]=\"presentationForLoader\" [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"enableCustomization\" (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\" (canvasClick)=\"onFieldClick($event)\"\n (renderError)=\"onFieldRenderError($event)\">\n </ng-container>\n </div>\n </div>\n } }\n </div>\n </div>\n }\n }\n } @else {\n <div class=\"section-collapsed-placeholder\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'unfold_more'\"></mat-icon>\n <span>{{ getSectionCollapsedSummary(section) }}</span>\n </div>\n }\n @if (last && beforeActionsPlacement === 'insideLastSection' && formBlocksBeforeActions.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n @for (block of formBlocksBeforeActions; track (block.id ?? $index)) {\n <ng-container\n [dynamicWidgetLoader]=\"block\"\n [context]=\"getEditorialWidgetContext()\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onEditorialWidgetEvent('beforeActions', $event)\">\n </ng-container>\n }\n </section>\n }\n @if (actionPlacement === 'insideLastSection' && last && !(effectivePresentation\n || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"insideLastSection\" [actions]=\"config.actions\"\n [isSubmitting]=\"submitting\" [formIsValid]=\"form.valid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n </div>\n <!-- Overlay de bloqueio durante submissão -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner diameter=\"40\" color=\"primary\"></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n\n @if (enableCustomization && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button mat-fab color=\"primary\" aria-label=\"Adicionar nova seção\" (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova seção aqui\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n }\n }\n </div>\n }\n\n @if (beforeActionsPlacement !== 'insideLastSection' && formBlocksBeforeActions.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n @for (block of formBlocksBeforeActions; track (block.id ?? $index)) {\n <ng-container\n [dynamicWidgetLoader]=\"block\"\n [context]=\"getEditorialWidgetContext()\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onEditorialWidgetEvent('beforeActions', $event)\">\n </ng-container>\n }\n </section>\n }\n\n @if (actionPlacement === 'afterSections' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"afterSections\" [actions]=\"config.actions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"form.valid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @if (formBlocksAfter.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-after\" data-editorial-placement=\"after\">\n @for (block of formBlocksAfter; track (block.id ?? $index)) {\n <ng-container\n [dynamicWidgetLoader]=\"block\"\n [context]=\"getEditorialWidgetContext()\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onEditorialWidgetEvent('after', $event)\">\n </ng-container>\n }\n </section>\n }\n</form>\n@if (!enableCustomization && mode === 'view') {\n<div class=\"ai-floating-assistant\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n</div>\n}\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n FormConfig,\n FormConfigState,\n createDefaultFormConfig,\n isValidFormConfig\n} from '@praxisui/core';\n\n@Injectable({ providedIn: 'root' })\nexport class FormConfigService {\n private readonly _state$ = new BehaviorSubject<FormConfigState>({\n config: createDefaultFormConfig(),\n isLoading: false\n });\n\n readonly state$: Observable<FormConfigState> = this._state$.asObservable();\n readonly config$: Observable<FormConfig> = this._state$.pipe(map(s => s.config));\n\n get currentConfig(): FormConfig {\n return this._state$.value.config;\n }\n\n loadConfig(config: FormConfig): void {\n if (!isValidFormConfig(config)) {\n this.updateState({ error: 'Invalid form configuration', isLoading: false });\n return;\n }\n this.updateState({ config: { ...config }, isLoading: false, error: undefined });\n }\n\n updateConfig(configUpdate: Partial<FormConfig>): void {\n this.updateState({\n config: { ...this.currentConfig, ...configUpdate },\n error: undefined\n });\n }\n\n private updateState(state: Partial<FormConfigState>): void {\n this._state$.next({ ...this._state$.value, ...state });\n }\n\n /**\n * Export the current configuration as a JSON string.\n * @param pretty whether to pretty print the JSON\n */\n exportToJson(pretty = true): string {\n return JSON.stringify(this.currentConfig, null, pretty ? 2 : undefined);\n }\n\n /**\n * Load a configuration from a JSON string.\n * Invalid JSON will emit an error on the service state.\n */\n importFromJson(json: string): void {\n try {\n const parsed = JSON.parse(json);\n this.loadConfig(parsed);\n } catch {\n this.updateState({ error: 'Invalid JSON', isLoading: false });\n }\n }\n\n /**\n * Validate a configuration returning an array of error messages.\n */\n validateConfig(config: FormConfig): string[] {\n const errors: string[] = [];\n \n if (!isValidFormConfig(config)) {\n errors.push('Invalid form configuration');\n return errors;\n }\n\n const ids = new Set<string>();\n for (const section of config.sections) {\n if (!section.id) {\n errors.push('Section id is required');\n } else if (ids.has(section.id)) {\n errors.push(`Duplicate section id: ${section.id}`);\n } else {\n ids.add(section.id);\n }\n }\n\n return errors;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCardModule } from '@angular/material/card';\nimport { FormConfig } from '@praxisui/core';\nimport { FormConfigService } from '../services/form-config.service';\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\nimport {\n parseLegacyOrDynamicFormDocument,\n serializeDynamicFormAuthoringDocument,\n validateDynamicFormAuthoringInput,\n} from '../dynamic-form-editor-capability';\nimport {\n DynamicFormAuthoringDocument,\n EditorDiagnostic,\n} from '../dynamic-form-editor-document.model';\n\nexport interface JsonValidationResult {\n isValid: boolean;\n error?: string;\n document?: DynamicFormAuthoringDocument;\n config?: FormConfig;\n diagnostics?: EditorDiagnostic[];\n}\n\nexport interface JsonEditorEvent {\n type: 'apply' | 'format' | 'validation';\n payload: JsonValidationResult;\n}\n\n@Component({\n selector: 'form-json-config-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatCardModule,\n ],\n template: `\n <div class=\"json-config-editor\">\n <mat-card class=\"educational-card\">\n <mat-card-header>\n <mat-icon mat-card-avatar class=\"card-icon\">data_object</mat-icon>\n <mat-card-title>Edição Avançada JSON</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>\n <strong>Para usuários avançados:</strong> Edite o documento\n canônico de autoria do formulário diretamente em JSON.\n </p>\n <p>\n O editor JSON aceita apenas o envelope canônico\n <code>DynamicFormAuthoringDocument</code>. Payloads legados devem\n ser migrados ou aplicados por APIs de compatibilidade.\n </p>\n <div class=\"badges\">\n <span class=\"badge\" [class.ok]=\"isValidJson\" [class.err]=\"!isValidJson\">\n {{ isValidJson ? 'JSON válido' : 'JSON inválido' }}\n </span>\n <span class=\"badge\" [class.warn]=\"hasChanges()\">{{ hasChanges() ? 'Alterado' : 'Sem alterações' }}</span>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div class=\"json-editor-section\">\n <div class=\"json-editor-toolbar\">\n <button mat-button (click)=\"refreshJson()\">\n <mat-icon>refresh</mat-icon>\n Atualizar JSON\n </button>\n <button mat-button (click)=\"formatJson()\" [disabled]=\"!isValidJson\">\n <mat-icon>format_align_left</mat-icon>\n Formatar JSON\n </button>\n <button\n mat-button\n color=\"primary\"\n (click)=\"applyJsonChanges()\"\n [disabled]=\"!isValidJson\"\n >\n <mat-icon>check</mat-icon>\n Aplicar JSON\n </button>\n <span class=\"spacer\"></span>\n <button mat-button (click)=\"insertHooksTemplate()\">\n <mat-icon>download_for_offline</mat-icon>\n Inserir Hooks (exemplo)\n </button>\n <button mat-button (click)=\"enableReactiveValidation()\">\n <mat-icon>bolt</mat-icon>\n Habilitar Validação Reativa\n </button>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"json-textarea-field\">\n <mat-label>Configuração JSON</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"jsonText\"\n (ngModelChange)=\"onJsonTextChange($event)\"\n rows=\"20\"\n spellcheck=\"false\"\n class=\"json-textarea\"\n ></textarea>\n <mat-hint *ngIf=\"isValidJson\" class=\"valid-hint\"\n >JSON válido</mat-hint\n >\n <mat-error *ngIf=\"!isValidJson && jsonText\"\n >JSON inválido: {{ jsonError }}</mat-error\n >\n </mat-form-field>\n <div\n class=\"diagnostics-panel\"\n *ngIf=\"diagnostics.length\"\n aria-live=\"polite\"\n role=\"status\"\n >\n <div class=\"diagnostics-title\">Diagnósticos do documento</div>\n <div\n class=\"diagnostic-item\"\n *ngFor=\"let diagnostic of diagnostics\"\n [class.diagnostic-item--error]=\"diagnostic.level === 'error'\"\n [class.diagnostic-item--warning]=\"diagnostic.level === 'warning'\"\n [class.diagnostic-item--info]=\"diagnostic.level === 'info'\"\n >\n <strong>{{ diagnostic.level | uppercase }}</strong>\n <span>{{ diagnostic.message }}</span>\n <code *ngIf=\"diagnostic.path\">{{ diagnostic.path }}</code>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [\n `\n .json-config-editor {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n .educational-card {\n margin-bottom: 24px;\n background-color: var(--md-sys-color-surface-container-low);\n border-left: 4px solid var(--md-sys-color-primary);\n }\n .educational-card .mat-mdc-card-header {\n padding-bottom: 8px;\n }\n .card-icon {\n background-color: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n font-size: 20px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .educational-card .mat-mdc-card-title {\n font-size: 1.1rem;\n font-weight: 500;\n color: var(--md-sys-color-on-surface);\n }\n .educational-card .mat-mdc-card-content {\n color: var(--md-sys-color-on-surface-variant);\n line-height: 1.5;\n }\n .json-editor-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n .json-editor-toolbar {\n display: flex;\n gap: 12px;\n margin-bottom: 16px;\n padding: 12px;\n background-color: var(--md-sys-color-surface-container-low);\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n }\n .spacer { flex: 1; }\n .json-textarea-field {\n width: 100%;\n flex: 1;\n }\n .badges { display: flex; gap: 8px; margin-top: 8px; }\n .badge { padding: 2px 8px; border-radius: 999px; font-size: 12px; border: 1px solid var(--md-sys-color-outline-variant); }\n .badge.ok { background: var(--md-sys-color-primary-container); }\n .badge.err { background: var(--md-sys-color-error-container); }\n .badge.warn { background: var(--md-sys-color-secondary-container); }\n .json-textarea {\n font-family:\n 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace !important;\n font-size: 13px !important;\n line-height: 1.4 !important;\n height: 100% !important;\n min-height: 300px !important;\n white-space: pre !important;\n overflow-wrap: normal !important;\n overflow-x: auto !important;\n resize: none !important;\n }\n .valid-hint {\n color: var(--md-sys-color-primary) !important;\n }\n .diagnostics-panel {\n margin-top: 12px;\n padding: 12px;\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background-color: var(--md-sys-color-surface-container-low);\n display: grid;\n gap: 8px;\n }\n .diagnostics-title {\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n }\n .diagnostic-item {\n display: grid;\n gap: 2px;\n padding-left: 10px;\n border-left: 3px solid var(--md-sys-color-outline);\n color: var(--md-sys-color-on-surface-variant);\n }\n .diagnostic-item--error {\n border-left-color: var(--md-sys-color-error);\n }\n .diagnostic-item--warning {\n border-left-color: var(--md-sys-color-tertiary);\n }\n .diagnostic-item--info {\n border-left-color: var(--md-sys-color-primary);\n }\n .diagnostic-item code {\n font-size: 12px;\n }\n @media (max-width: 768px) {\n .json-editor-toolbar {\n flex-direction: column;\n gap: 8px;\n }\n .json-textarea {\n font-size: 12px !important;\n min-height: 300px !important;\n }\n }\n `,\n ],\n})\nexport class JsonConfigEditorComponent implements OnInit, OnDestroy {\n @Input() config: FormConfig | null = null;\n @Input() document: DynamicFormAuthoringDocument | null = null;\n @Output() configChange = new EventEmitter<FormConfig>();\n @Output() documentChange = new EventEmitter<DynamicFormAuthoringDocument>();\n @Output() validationChange = new EventEmitter<JsonValidationResult>();\n @Output() editorEvent = new EventEmitter<JsonEditorEvent>();\n\n jsonText = '';\n isValidJson = true;\n jsonError = '';\n diagnostics: EditorDiagnostic[] = [];\n\n private destroy$ = new Subject<void>();\n private jsonTextChanges$ = new Subject<string>();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private configService: FormConfigService,\n ) {\n this.jsonTextChanges$\n .pipe(debounceTime(300), takeUntil(this.destroy$))\n .subscribe((text) => this.validateJson(text));\n }\n\n ngOnInit(): void {\n const doc =\n this.document ??\n parseLegacyOrDynamicFormDocument(\n this.config || this.configService.currentConfig,\n );\n try {\n this.jsonText = JSON.stringify(\n serializeDynamicFormAuthoringDocument(doc),\n null,\n 2,\n );\n } catch {\n this.jsonText = '{}';\n }\n this.validateJson(this.jsonText);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onJsonTextChange(text: string): void {\n this.jsonTextChanges$.next(text);\n }\n\n applyJsonChanges(): void {\n if (!this.isValidJson) {\n return;\n }\n try {\n const parsed = JSON.parse(this.jsonText);\n const diagnostics = validateDynamicFormAuthoringInput(parsed);\n const newDocument = parseLegacyOrDynamicFormDocument(parsed);\n this.configService.loadConfig(newDocument.config);\n this.documentChange.emit(newDocument);\n this.configChange.emit(newDocument.config);\n this.editorEvent.emit({\n type: 'apply',\n payload: {\n isValid: !diagnostics.some((item) => item.level === 'error'),\n document: newDocument,\n config: newDocument.config,\n diagnostics,\n },\n });\n } catch {\n const errorResult: JsonValidationResult = {\n isValid: false,\n error: 'Erro ao aplicar configuração JSON',\n };\n this.editorEvent.emit({ type: 'apply', payload: errorResult });\n }\n }\n\n formatJson(): void {\n if (!this.isValidJson) {\n return;\n }\n try {\n const parsed = JSON.parse(this.jsonText);\n const diagnostics = validateDynamicFormAuthoringInput(parsed);\n const document = parseLegacyOrDynamicFormDocument(parsed);\n this.jsonText = JSON.stringify(\n serializeDynamicFormAuthoringDocument(document),\n null,\n 2,\n );\n this.editorEvent.emit({\n type: 'format',\n payload: {\n isValid: !diagnostics.some((item) => item.level === 'error'),\n document,\n config: document.config,\n diagnostics,\n },\n });\n this.cdr.markForCheck();\n } catch {\n this.editorEvent.emit({\n type: 'format',\n payload: { isValid: false, error: 'Erro ao formatar JSON' },\n });\n }\n }\n\n updateJsonFromConfig(config: FormConfig): void {\n this.updateJsonFromDocument(\n parseLegacyOrDynamicFormDocument(config || { sections: [] }),\n );\n }\n\n updateJsonFromDocument(document: DynamicFormAuthoringDocument): void {\n this.jsonText = JSON.stringify(\n serializeDynamicFormAuthoringDocument(document),\n null,\n 2,\n );\n this.validateJson(this.jsonText);\n }\n\n /**\n * Força atualização do JSON com a configuração atual\n */\n refreshJson(): void {\n const document =\n this.document ??\n parseLegacyOrDynamicFormDocument(\n this.config || this.configService.currentConfig,\n );\n this.updateJsonFromDocument(document);\n }\n\n getCurrentConfig(): FormConfig | null {\n return this.getCurrentDocument()?.config || null;\n }\n\n getCurrentDocument(): DynamicFormAuthoringDocument | null {\n if (!this.isValidJson) {\n return null;\n }\n try {\n return parseLegacyOrDynamicFormDocument(JSON.parse(this.jsonText));\n } catch {\n return null;\n }\n }\n\n hasChanges(): boolean {\n const baseline =\n this.document ??\n (this.config\n ? parseLegacyOrDynamicFormDocument(this.config)\n : null);\n if (!baseline) {\n return false;\n }\n const currentDocument = this.getCurrentDocument();\n if (!currentDocument) {\n return false;\n }\n return (\n JSON.stringify(serializeDynamicFormAuthoringDocument(baseline)) !==\n JSON.stringify(serializeDynamicFormAuthoringDocument(currentDocument))\n );\n }\n\n private validateJson(text: string): void {\n const result: JsonValidationResult = {\n isValid: false,\n diagnostics: [],\n };\n if (!text.trim()) {\n result.error = 'JSON não pode estar vazio';\n this.updateValidationState(result);\n return;\n }\n try {\n const parsed = JSON.parse(text);\n const document = parseLegacyOrDynamicFormDocument(parsed);\n const diagnostics = validateDynamicFormAuthoringInput(parsed);\n const hasErrors = diagnostics.some((item) => item.level === 'error');\n result.isValid = !hasErrors;\n result.document = document;\n result.config = document.config;\n result.diagnostics = diagnostics;\n if (hasErrors) {\n result.error =\n diagnostics.find((item) => item.level === 'error')?.message ||\n 'Documento de autoria inválido';\n }\n this.updateValidationState(result);\n } catch (error) {\n result.error =\n error instanceof Error ? error.message : 'Erro de sintaxe JSON';\n this.updateValidationState(result);\n }\n }\n\n private updateValidationState(result: JsonValidationResult): void {\n this.isValidJson = result.isValid;\n this.jsonError = result.error || '';\n this.diagnostics = result.diagnostics || [];\n this.validationChange.emit(result);\n this.editorEvent.emit({ type: 'validation', payload: result });\n this.cdr.markForCheck();\n }\n\n // ----- Quick helpers to facilitate JSON edits -----\n insertHooksTemplate(): void {\n try {\n const parsed = JSON.parse(this.jsonText || '{}');\n parsed.hooks = parsed.hooks || {};\n parsed.hooks.beforeValidate = parsed.hooks.beforeValidate || [];\n parsed.hooks.beforeSubmit = parsed.hooks.beforeSubmit || [];\n // Insert only if not present (basic dedupe by id)\n const ensure = (arr: any[], decl: any) => {\n const k = JSON.stringify(decl);\n if (!arr.some((d) => JSON.stringify(d) === k)) arr.push(decl);\n };\n ensure(parsed.hooks.beforeValidate, { id: 'stripMasks', args: { fields: ['cpf', 'telefone'] } });\n ensure(parsed.hooks.beforeSubmit, { id: 'ensureNoConflicts', args: { uniqueBy: ['cpf'], idField: 'id' } });\n this.jsonText = JSON.stringify(parsed, null, 2);\n this.validateJson(this.jsonText);\n } catch (e) {\n // ignore\n }\n }\n\n enableReactiveValidation(): void {\n try {\n const parsed = JSON.parse(this.jsonText || '{}');\n parsed.behavior = parsed.behavior || {};\n parsed.behavior.reactiveValidation = true;\n if (parsed.behavior.reactiveValidationDebounceMs == null) parsed.behavior.reactiveValidationDebounceMs = 200;\n this.jsonText = JSON.stringify(parsed, null, 2);\n this.validateJson(this.jsonText);\n } catch {\n // ignore\n }\n }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n ComponentMetadataRegistry,\n FieldControlType,\n FieldMetadata,\n ResolvedComponentMetadataEditorialMeta,\n normalizeControlTypeKey,\n resolveControlTypeAlias,\n} from '@praxisui/core';\n\n@Component({\n selector: 'praxis-field-configurator',\n standalone: true,\n imports: [CommonModule, DragDropModule, MatIconModule, MatTooltipModule],\n template: `\n <div\n class=\"field-item\"\n cdkDrag\n [cdkDragData]=\"field\"\n [ngClass]=\"[typeClass, typeSpecificClass]\"\n [matTooltip]=\"tooltip\"\n >\n <mat-icon class=\"drag-handle\" cdkDragHandle>drag_indicator</mat-icon>\n <mat-icon class=\"field-icon\">{{ icon }}</mat-icon>\n <div class=\"field-texts\">\n <span class=\"field-label\">{{ field.label }}</span>\n <span class=\"field-type-label\">{{ typeLabel }}</span>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n /* Follow application theme via Material system tokens; avoid OS preference */\n --pdx-surface: var(--md-sys-color-surface);\n --pdx-surface-variant: var(--md-sys-color-surface-container);\n --pdx-outline: var(--md-sys-color-outline-variant);\n /* Category hues (inherit from theme) */\n --pdx-cat-text: var(--md-sys-color-primary);\n --pdx-cat-select: var(--md-sys-color-secondary);\n --pdx-cat-number: var(--md-sys-color-tertiary);\n --pdx-cat-datetime: var(--md-sys-color-primary);\n --pdx-cat-boolean: var(--md-sys-color-secondary);\n --pdx-cat-slider: var(--md-sys-color-tertiary);\n --pdx-cat-file: var(--md-sys-color-primary);\n --pdx-cat-color: var(--md-sys-color-secondary);\n --pdx-cat-id: var(--md-sys-color-secondary);\n }\n .field-item {\n /* Use grid to lock icon alignment with first text row */\n display: grid;\n grid-template-columns: 24px 24px 1fr;\n grid-auto-rows: min-content;\n column-gap: 6px;\n row-gap: 2px;\n padding: 6px 8px;\n border: 1px solid var(--pdx-outline);\n border-radius: 4px;\n background: var(--pdx-surface-variant);\n cursor: grab;\n border-left-width: 4px;\n border-left-style: solid;\n border-left-color: var(--pdx-outline);\n }\n .field-item.cdk-drag-dragging {\n cursor: grabbing;\n }\n .drag-handle,\n .field-icon {\n font-size: 20px;\n line-height: 1;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* lock icons to start of first text row */\n align-self: start;\n grid-row: 1 / span 2;\n }\n .drag-handle { cursor: grab; grid-column: 1; }\n .field-icon { grid-column: 2; }\n .field-item.cdk-drag-preview {\n box-shadow: var(--md-sys-elevation-level2);\n border: 1px solid var(--pdx-cat-text);\n background: var(--pdx-surface-variant);\n }\n .field-item.cdk-drag-placeholder {\n opacity: 0.5;\n }\n .field-texts {\n display: flex;\n flex-direction: column;\n grid-column: 3;\n grid-row: 1 / span 2;\n line-height: 1.2;\n }\n .field-label { line-height: 24px; }\n .field-type-label {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n /* Cores por categoria (tema-aware, com fallback dark/light) */\n .field-item.text-type { border-left-color: var(--pdx-cat-text); }\n .field-item.text-type .field-icon { color: var(--pdx-cat-text); }\n\n .field-item.date-type { border-left-color: var(--pdx-cat-datetime); }\n .field-item.date-type .field-icon { color: var(--pdx-cat-datetime); }\n\n .field-item.numeric-type { border-left-color: var(--pdx-cat-number); }\n .field-item.numeric-type .field-icon { color: var(--pdx-cat-number); }\n\n .field-item.select-type { border-left-color: var(--pdx-cat-select); }\n .field-item.select-type .field-icon { color: var(--pdx-cat-select); }\n\n .field-item.boolean-type { border-left-color: var(--pdx-cat-boolean); }\n .field-item.boolean-type .field-icon { color: var(--pdx-cat-boolean); }\n\n .field-item.slider-type { border-left-color: var(--pdx-cat-slider); }\n .field-item.slider-type .field-icon { color: var(--pdx-cat-slider); }\n\n .field-item.file-type { border-left-color: var(--pdx-cat-file); }\n .field-item.file-type .field-icon { color: var(--pdx-cat-file); }\n\n .field-item.color-type { border-left-color: var(--pdx-cat-color); }\n .field-item.color-type .field-icon { color: var(--pdx-cat-color); }\n\n .field-item.id-type { border-left-color: var(--pdx-cat-id); }\n .field-item.id-type .field-icon { color: var(--pdx-cat-id); }\n\n .field-item.unknown-type { border-left-color: var(--md-sys-color-outline); }\n .field-item.unknown-type .field-icon { color: var(--md-sys-color-outline); }\n\n /* Diferenciação por componente (variações sutis por tipo) */\n /* Texto */\n .field-item.ft-input { border-left-color: var(--pdx-cat-text); }\n .field-item.ft-input .field-icon { color: var(--pdx-cat-text); }\n .field-item.ft-textarea { border-left-color: var(--pdx-cat-text); }\n .field-item.ft-textarea .field-icon { color: var(--pdx-cat-text); }\n .field-item.ft-email { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-email .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-password { border-left-color: var(--pdx-cat-number); }\n .field-item.ft-password .field-icon { color: var(--pdx-cat-number); }\n .field-item.ft-url { border-left-color: var(--pdx-cat-text); }\n .field-item.ft-url .field-icon { color: var(--pdx-cat-text); }\n .field-item.ft-search { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-search .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-phone { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-phone .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-chip-input { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-chip-input .field-icon { color: var(--pdx-cat-select); }\n\n /* Numérico */\n .field-item.ft-numeric-text-box { border-left-color: var(--pdx-cat-number); }\n .field-item.ft-numeric-text-box .field-icon { color: var(--pdx-cat-number); }\n .field-item.ft-currency { border-left-color: var(--pdx-cat-number); }\n .field-item.ft-currency .field-icon { color: var(--pdx-cat-number); }\n .field-item.ft-year { border-left-color: var(--pdx-cat-number); }\n .field-item.ft-year .field-icon { color: var(--pdx-cat-number); }\n .field-item.ft-cpf-cnpj { border-left-color: var(--pdx-cat-id); }\n .field-item.ft-cpf-cnpj .field-icon { color: var(--pdx-cat-id); }\n\n /* Seleção */\n .field-item.ft-select { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-select .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-multi-select { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-multi-select .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-auto-complete { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-auto-complete .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-selection-list { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-selection-list .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-tree-select { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-tree-select .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-multi-select-tree { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-multi-select-tree .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-transfer-list { border-left-color: var(--pdx-cat-text); }\n .field-item.ft-transfer-list .field-icon { color: var(--pdx-cat-text); }\n\n /* Data & Hora */\n .field-item.ft-date-input { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-date-input .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-date { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-date .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-date-range { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-date-range .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-date-time-local { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-date-time-local .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-time { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-time .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-time-picker { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-time-picker .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-time-range { border-left-color: var(--pdx-cat-datetime); }\n .field-item.ft-time-range .field-icon { color: var(--pdx-cat-datetime); }\n .field-item.ft-month { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-month .field-icon { color: var(--pdx-cat-select); }\n .field-item.ft-week { border-left-color: var(--pdx-cat-select); }\n .field-item.ft-week .field-icon { color: var(--pdx-cat-select); }\n\n /* Booleanos */\n .field-item.ft-checkbox { border-left-color: var(--pdx-cat-boolean); }\n .field-item.ft-checkbox .field-icon { color: var(--pdx-cat-boolean); }\n .field-item.ft-radio { border-left-color: var(--pdx-cat-boolean); }\n .field-item.ft-radio .field-icon { color: var(--pdx-cat-boolean); }\n .field-item.ft-toggle { border-left-color: var(--pdx-cat-boolean); }\n .field-item.ft-toggle .field-icon { color: var(--pdx-cat-boolean); }\n\n /* Slider */\n .field-item.ft-slider { border-left-color: var(--pdx-cat-slider); }\n .field-item.ft-slider .field-icon { color: var(--pdx-cat-slider); }\n .field-item.ft-range-slider { border-left-color: var(--pdx-cat-slider); }\n .field-item.ft-range-slider .field-icon { color: var(--pdx-cat-slider); }\n\n /* Cor & Arquivo */\n .field-item.ft-color { border-left-color: var(--pdx-cat-color); }\n .field-item.ft-color .field-icon { color: var(--pdx-cat-color); }\n .field-item.ft-color-picker { border-left-color: var(--pdx-cat-color); }\n .field-item.ft-color-picker .field-icon { color: var(--pdx-cat-color); }\n .field-item.ft-upload { border-left-color: var(--pdx-cat-file); }\n .field-item.ft-upload .field-icon { color: var(--pdx-cat-file); }\n `,\n ],\n})\nexport class FieldConfiguratorComponent {\n private readonly registry = inject(ComponentMetadataRegistry);\n\n @Input() field!: FieldMetadata;\n\n // Categoria por tipo (para classe e cor)\n private readonly categoryByType: Partial<Record<FieldControlType, 'text' | 'date' | 'number' | 'select' | 'boolean' | 'slider' | 'file' | 'color' | 'id'>> = {\n [FieldControlType.INPUT]: 'text',\n [FieldControlType.TEXTAREA]: 'text',\n [FieldControlType.EMAIL_INPUT]: 'text',\n [FieldControlType.PASSWORD]: 'text',\n [FieldControlType.URL_INPUT]: 'text',\n [FieldControlType.SEARCH_INPUT]: 'text',\n [FieldControlType.PHONE]: 'text',\n [FieldControlType.CHIP_INPUT]: 'text',\n\n [FieldControlType.NUMERIC_TEXT_BOX]: 'number',\n [FieldControlType.CURRENCY_INPUT]: 'number',\n [FieldControlType.YEAR_INPUT]: 'number',\n [FieldControlType.CPF_CNPJ_INPUT]: 'id',\n\n [FieldControlType.SELECT]: 'select',\n [FieldControlType.MULTI_SELECT]: 'select',\n [FieldControlType.AUTO_COMPLETE]: 'select',\n [FieldControlType.SELECTION_LIST]: 'select',\n [FieldControlType.TREE_SELECT]: 'select',\n [FieldControlType.MULTI_SELECT_TREE]: 'select',\n [FieldControlType.TRANSFER_LIST]: 'select',\n\n [FieldControlType.RADIO]: 'boolean',\n [FieldControlType.CHECKBOX]: 'boolean',\n [FieldControlType.TOGGLE]: 'boolean',\n\n [FieldControlType.SLIDER]: 'slider',\n [FieldControlType.RANGE_SLIDER]: 'slider',\n\n [FieldControlType.DATE_INPUT]: 'date',\n [FieldControlType.DATE_PICKER]: 'date',\n [FieldControlType.DATE_RANGE]: 'date',\n [FieldControlType.DATETIME_LOCAL_INPUT]: 'date',\n [FieldControlType.TIME_INPUT]: 'date',\n [FieldControlType.TIME_PICKER]: 'date',\n [FieldControlType.TIME_RANGE]: 'date',\n [FieldControlType.MONTH_INPUT]: 'date',\n [FieldControlType.WEEK_INPUT]: 'date',\n\n [FieldControlType.COLOR_INPUT]: 'color',\n [FieldControlType.COLOR_PICKER]: 'color',\n [FieldControlType.FILE_UPLOAD]: 'file',\n [FieldControlType.AVATAR]: 'file',\n } as const;\n\n private resolveEditorialMeta(): ResolvedComponentMetadataEditorialMeta | undefined {\n const rawControlType = String(this.field?.controlType ?? '').trim();\n if (!rawControlType) return undefined;\n\n const candidates = Array.from(\n new Set(\n [\n rawControlType,\n resolveControlTypeAlias(rawControlType),\n normalizeControlTypeKey(this.field?.controlType),\n resolveControlTypeAlias(normalizeControlTypeKey(this.field?.controlType)),\n ]\n .filter((value): value is string => !!String(value ?? '').trim())\n .map((value) => String(value).trim()),\n ),\n );\n\n for (const candidate of candidates) {\n try {\n const resolved = this.registry.resolveEditorial(candidate, { namespace: 'dynamicFields' });\n if (resolved) return resolved;\n } catch {\n // Keep trying the next candidate.\n }\n }\n\n return undefined;\n }\n\n get icon(): string {\n return this.resolveEditorialMeta()?.icon ?? 'text_fields';\n }\n\n get typeClass(): string {\n const cat = this.categoryByType[this.field.controlType];\n return cat ? `${cat}-type` : 'unknown-type';\n }\n\n get typeSpecificClass(): string {\n const t = this.field.controlType;\n const map = this.typeSpecificClassMap;\n return map[t] ?? '';\n }\n\n get typeLabel(): string {\n return this.resolveEditorialMeta()?.friendlyName ?? String(this.field.controlType ?? '');\n }\n\n get tooltip(): string {\n return this.resolveEditorialMeta()?.description ?? this.field.name;\n }\n\n // Classe específica por tipo (para variar cores entre componentes da mesma categoria)\n private readonly typeSpecificClassMap: Partial<Record<FieldControlType, string>> = {\n // Texto\n [FieldControlType.INPUT]: 'ft-input',\n [FieldControlType.TEXTAREA]: 'ft-textarea',\n [FieldControlType.EMAIL_INPUT]: 'ft-email',\n [FieldControlType.PASSWORD]: 'ft-password',\n [FieldControlType.URL_INPUT]: 'ft-url',\n [FieldControlType.SEARCH_INPUT]: 'ft-search',\n [FieldControlType.PHONE]: 'ft-phone',\n [FieldControlType.CHIP_INPUT]: 'ft-chip-input',\n // Numérico\n [FieldControlType.NUMERIC_TEXT_BOX]: 'ft-numeric-text-box',\n [FieldControlType.CURRENCY_INPUT]: 'ft-currency',\n [FieldControlType.YEAR_INPUT]: 'ft-year',\n [FieldControlType.CPF_CNPJ_INPUT]: 'ft-cpf-cnpj',\n // Seleção\n [FieldControlType.SELECT]: 'ft-select',\n [FieldControlType.MULTI_SELECT]: 'ft-multi-select',\n [FieldControlType.AUTO_COMPLETE]: 'ft-auto-complete',\n [FieldControlType.SELECTION_LIST]: 'ft-selection-list',\n [FieldControlType.TREE_SELECT]: 'ft-tree-select',\n [FieldControlType.MULTI_SELECT_TREE]: 'ft-multi-select-tree',\n [FieldControlType.TRANSFER_LIST]: 'ft-transfer-list',\n // Data & Hora\n [FieldControlType.DATE_INPUT]: 'ft-date-input',\n [FieldControlType.DATE_PICKER]: 'ft-date',\n [FieldControlType.DATE_RANGE]: 'ft-date-range',\n [FieldControlType.DATETIME_LOCAL_INPUT]: 'ft-date-time-local',\n [FieldControlType.TIME_INPUT]: 'ft-time',\n [FieldControlType.TIME_PICKER]: 'ft-time-picker',\n [FieldControlType.TIME_RANGE]: 'ft-time-range',\n [FieldControlType.MONTH_INPUT]: 'ft-month',\n [FieldControlType.WEEK_INPUT]: 'ft-week',\n // Booleanos\n [FieldControlType.CHECKBOX]: 'ft-checkbox',\n [FieldControlType.RADIO]: 'ft-radio',\n [FieldControlType.TOGGLE]: 'ft-toggle',\n // Slider\n [FieldControlType.SLIDER]: 'ft-slider',\n [FieldControlType.RANGE_SLIDER]: 'ft-range-slider',\n // Cor & Arquivo\n [FieldControlType.COLOR_INPUT]: 'ft-color',\n [FieldControlType.COLOR_PICKER]: 'ft-color-picker',\n [FieldControlType.FILE_UPLOAD]: 'ft-upload',\n [FieldControlType.AVATAR]: 'ft-upload',\n } as const;\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { FieldConfiguratorComponent } from './field-configurator.component';\nimport { FormRow, FieldMetadata, FieldControlType, Breakpoint } from '@praxisui/core';\nimport { resolveSpan, resolveHidden, resolveOffset } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { FormsModule } from '@angular/forms';\nimport { produce } from 'immer';\nimport { MatDividerModule } from '@angular/material/divider';\n\n@Component({\n selector: 'praxis-row-configurator',\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n FieldConfiguratorComponent,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatMenuModule,\n MatDividerModule,\n ],\n templateUrl: './row-configurator.component.html',\n styles: [\n `\n .row-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n flex-wrap: wrap;\n }\n .bp-toggle {\n display: inline-flex;\n gap: 4px;\n align-items: center;\n }\n .bp-toggle__btn {\n min-width: 34px;\n height: 30px;\n line-height: 30px;\n padding: 0 8px;\n text-transform: uppercase;\n }\n .bp-toggle__btn.active {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n .gap-controls {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n align-items: center;\n }\n .gap-chip {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n padding: 0 4px;\n height: 32px;\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-variant);\n }\n .gap-chip__btn {\n width: 24px;\n height: 24px;\n line-height: 24px;\n min-width: 0;\n padding: 0;\n --mdc-icon-button-size: 24px;\n --mdc-icon-button-state-layer-size: 24px;\n }\n .gap-chip .mat-mdc-button-touch-target { width: 24px; height: 24px; }\n .gap-chip mat-icon { font-size: 16px; width: 16px; height: 16px; line-height: 16px; }\n .gap-chip__input {\n width: 42px;\n border: none;\n background: transparent;\n color: var(--md-sys-color-on-surface);\n font: var(--mdc-typography-body-medium, 600 13px/18px system-ui);\n text-align: center;\n outline: none;\n -moz-appearance: textfield;\n }\n .gap-chip__input::-webkit-outer-spin-button,\n .gap-chip__input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n .gap-chip__suffix {\n color: var(--md-sys-color-on-surface-variant);\n font: var(--mdc-typography-label-medium, 500 12px/16px system-ui);\n }\n .gap-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 12px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface-variant);\n font: var(--mdc-typography-label-medium, 500 12px/16px system-ui);\n }\n .chip-title {\n font: var(--mdc-typography-label-medium, 600 12px/16px system-ui);\n color: var(--md-sys-color-on-surface-variant);\n text-transform: uppercase;\n letter-spacing: 0.03em;\n }\n .span-warning {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--md-sys-color-on-error);\n background: var(--md-sys-color-error-container);\n border: 1px solid var(--md-sys-color-error);\n border-radius: 6px;\n padding: 4px 8px;\n }\n\n .row-container {\n position: relative;\n display: flex;\n align-items: stretch;\n }\n .row {\n display: flex;\n flex-grow: 1;\n position: relative;\n padding-right: 0; /* Removed gutter */\n border-radius: 6px;\n transition: box-shadow 0.2s ease;\n gap: var(--pfx-grid-gap, 12px); /* uniform gutters between columns */\n }\n .row:focus { outline: none; box-shadow: 0 0 0 2px var(--md-sys-color-primary); }\n .row:focus-visible { box-shadow: 0 0 0 2px var(--md-sys-color-primary); }\n .row.grid-12 {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n gap: var(--pfx-grid-gap, 16px);\n }\n .row.selected {\n box-shadow: 0 0 0 2px var(--md-sys-color-primary);\n }\n .row-label {\n position: absolute;\n left: -4px;\n top: -10px;\n transform: translateY(-100%);\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface-variant);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 10px;\n padding: 2px 6px;\n font-size: 11px;\n opacity: 0;\n transition: opacity 0.15s ease;\n pointer-events: none;\n }\n .row:hover .row-label, .row.selected .row-label { opacity: 1; }\n \n .row-actions-meta {\n margin-left: auto;\n }\n .column {\n position: relative;\n flex: 1;\n display: flex;\n flex-direction: column;\n border: 1px dashed var(--md-sys-color-outline-variant);\n margin: 0;\n background: var(--md-sys-color-surface-container);\n transition: background-color 0.2s ease, border-color 0.2s ease;\n border-radius: 8px;\n overflow: hidden; /* Ensure header stays inside */\n }\n \n .column-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 8px;\n background: var(--md-sys-color-surface-variant);\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n min-height: 36px;\n }\n\n .column-content {\n flex: 1;\n display: grid;\n align-content: start;\n gap: var(--px-row-field-gap, 6px);\n padding: 8px; /* Content padding */\n }\n\n .column-status-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n background: var(--md-sys-color-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n cursor: pointer;\n transition: all 0.2s ease;\n user-select: none;\n }\n \n .column-status-pill:hover, .column-status-pill.active {\n background: var(--md-sys-color-surface-variant);\n border-color: var(--md-sys-color-outline);\n }\n\n .status-bp {\n font-weight: 700;\n text-transform: uppercase;\n font-size: 11px;\n color: var(--md-sys-color-primary);\n }\n\n .status-divider {\n color: var(--md-sys-color-outline-variant);\n }\n\n .status-span, .status-offset {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--md-sys-color-on-surface);\n }\n \n .status-span mat-icon { font-size: 14px; width: 14px; height: 14px; }\n \n .status-hidden {\n color: var(--md-sys-color-error);\n display: flex;\n align-items: center;\n }\n .status-hidden mat-icon { font-size: 14px; width: 14px; height: 14px; }\n\n .column-actions {\n display: flex;\n align-items: center;\n opacity: 0; /* Hidden by default */\n transition: opacity 0.2s ease;\n }\n \n .column:hover .column-actions,\n .column.selected .column-actions,\n .column-actions:focus-within {\n opacity: 1;\n }\n\n .action-btn {\n width: 24px;\n height: 24px;\n line-height: 24px;\n padding: 0;\n }\n .action-btn mat-icon { font-size: 18px; width: 18px; height: 18px; line-height: 18px; }\n\n /* Popover Styles */\n .popover-content {\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 200px;\n }\n \n .control-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n \n .control-group label {\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant);\n text-transform: uppercase;\n font-weight: 600;\n }\n \n .control-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--md-sys-color-surface-container-high);\n border-radius: 8px;\n padding: 2px;\n }\n \n .value-display {\n font-weight: 600;\n font-size: 13px;\n }\n\n .row.grid-12 .column { flex: unset; }\n /* Normalize any accidental margins from wrappers created around fields */\n .column > div { margin: 0; }\n .column:focus { outline: none; box-shadow: 0 0 0 2px var(--md-sys-color-primary); }\n .column:focus-visible { box-shadow: 0 0 0 2px var(--md-sys-color-primary); }\n /* Highlight only the target column under the dragged item */\n .column.drop-active {\n border-color: var(--md-sys-color-primary);\n background: var(--md-sys-color-surface-variant);\n }\n .column.selected {\n border-color: var(--md-sys-color-primary);\n box-shadow: 0 0 0 2px var(--md-sys-color-primary);\n }\n .column.cdk-drop-list-receiving {\n animation: columnHighlight 0.3s ease-in-out;\n }\n @keyframes columnHighlight {\n from {\n box-shadow: 0 0 0 2px var(--md-sys-color-primary);\n }\n to {\n box-shadow: none;\n }\n }\n .field-selected-highlight.selected .field-item,\n .selected > .field-item {\n border-color: var(--md-sys-color-primary) !important;\n box-shadow: 0 0 0 2px var(--md-sys-color-primary);\n }\n .row-empty-placeholder {\n flex: 1;\n border: 1px dashed var(--md-sys-color-outline-variant);\n margin: 0;\n padding: 16px;\n text-align: center;\n color: var(--md-sys-color-on-surface-variant);\n background: var(--md-sys-color-surface-container);\n }\n .row-placeholder-actions {\n margin-top: 8px;\n display: flex;\n gap: 8px;\n justify-content: center;\n }\n .hidden-overlay {\n position: absolute;\n inset: 0;\n background: var(--md-sys-color-surface-container-low);\n border: 1px dashed var(--md-sys-color-outline);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n color: var(--md-sys-color-on-surface-variant);\n z-index: 2;\n pointer-events: none;\n }\n `,\n ],\n})\nexport class RowConfiguratorComponent implements OnChanges {\n @Input() row!: FormRow;\n @Input() fieldMetadata: FieldMetadata[] = [];\n @Input() sectionIndex!: number;\n @Input() rowIndex!: number;\n @Input() isLastRow: boolean = false;\n @Input() selected: { type: 'section' | 'row' | 'column' | 'field'; sectionIndex?: number; rowIndex?: number; columnIndex?: number; fieldName?: string } | null = null;\n @Input() availableFieldsListId: string | null = 'available-fields-list';\n @Input() connectedDropListIds: string[] = [];\n /** Gap herdado do layout (usado como fallback visual) */\n @Input() gapGlobal: number = 12;\n @Output() rowChange = new EventEmitter<FormRow>();\n @Output() remove = new EventEmitter<void>();\n @Output() applyRowGapAll = new EventEmitter<number>();\n @Output() fieldDrop = new EventEmitter<CdkDragDrop<any>>();\n @Output() select = new EventEmitter<any>();\n\n // Debounced dropzone highlight\n activeDropIndex: number | null = null;\n private hoverTimer: any = null;\n protected readonly breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\n previewBreakpoint: Breakpoint = 'md';\n menuContext: { type: 'row' | 'column'; columnIndex?: number } | null = null;\n private connectedColumnsCache = new Map<number, string[]>();\n private connectedColumnsSignature = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['connectedDropListIds'] ||\n changes['availableFieldsListId'] ||\n changes['row'] ||\n changes['sectionIndex'] ||\n changes['rowIndex']\n ) {\n this.rebuildConnectedColumnsCache();\n }\n }\n\n private rebuildConnectedColumnsCache(): void {\n const ids = Array.isArray(this.connectedDropListIds)\n ? this.connectedDropListIds\n : [];\n const cols = this.row?.columns?.length || 0;\n const signature = JSON.stringify({\n ids,\n available: this.availableFieldsListId,\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n cols,\n });\n if (signature === this.connectedColumnsSignature) return;\n this.connectedColumnsSignature = signature;\n this.connectedColumnsCache.clear();\n\n for (let i = 0; i < cols; i++) {\n const connected = ids.filter((id) => id !== this.getColumnId(i));\n if (this.availableFieldsListId) {\n connected.unshift(this.availableFieldsListId);\n }\n this.connectedColumnsCache.set(i, connected);\n }\n }\n\n getFieldByName(fieldName: string): FieldMetadata {\n return (\n this.fieldMetadata.find((f) => f.name === fieldName) || {\n name: fieldName,\n label: fieldName,\n controlType: FieldControlType.INPUT,\n }\n );\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n this.fieldDrop.emit(event);\n }\n\n selectRow(): void {\n this.select.emit({\n type: 'row',\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n });\n }\n\n openColumnConfig(index: number): void {\n this.select.emit({\n type: 'column',\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n columnIndex: index,\n openEditor: true,\n });\n }\n\n selectColumn(index: number, event: MouseEvent): void {\n // avoid triggering sort while selecting\n event.stopPropagation();\n this.select.emit({\n type: 'column',\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n columnIndex: index,\n });\n }\n\n selectField(fieldName: string, event: MouseEvent): void {\n event.stopPropagation();\n this.select.emit({\n type: 'field',\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n fieldName,\n });\n }\n\n openRowMenu(): void {\n if (\n this.selected?.type === 'column' &&\n this.selected.sectionIndex === this.sectionIndex &&\n this.selected.rowIndex === this.rowIndex &&\n this.selected.columnIndex != null\n ) {\n this.menuContext = { type: 'column', columnIndex: this.selected.columnIndex };\n } else {\n this.menuContext = { type: 'row' };\n }\n }\n\n onMenuClosed(): void {\n this.menuContext = null;\n }\n\n onDropEnter(index: number): void {\n clearTimeout(this.hoverTimer);\n this.hoverTimer = setTimeout(() => (this.activeDropIndex = index), 60);\n }\n onDropExit(index: number): void {\n clearTimeout(this.hoverTimer);\n if (this.activeDropIndex === index) this.activeDropIndex = null;\n }\n\n isRowSelected(): boolean {\n return (\n !!this.selected &&\n this.selected.type === 'row' &&\n this.selected.sectionIndex === this.sectionIndex &&\n this.selected.rowIndex === this.rowIndex\n );\n }\n\n isColumnSelected(i: number): boolean {\n return (\n !!this.selected &&\n this.selected.type === 'column' &&\n this.selected.sectionIndex === this.sectionIndex &&\n this.selected.rowIndex === this.rowIndex &&\n this.selected.columnIndex === i\n );\n }\n\n isFieldSelected(fieldName: string): boolean {\n return (\n !!this.selected &&\n this.selected.type === 'field' &&\n this.selected.sectionIndex === this.sectionIndex &&\n this.selected.rowIndex === this.rowIndex &&\n this.selected.fieldName === fieldName\n );\n }\n\n connectedColumns(index: number): string[] {\n this.rebuildConnectedColumnsCache();\n const cached = this.connectedColumnsCache.get(index);\n if (cached) return cached;\n\n const connected = (this.connectedDropListIds || []).filter(\n (id) => id !== this.getColumnId(index),\n );\n if (this.availableFieldsListId) {\n connected.unshift(this.availableFieldsListId);\n }\n this.connectedColumnsCache.set(index, connected);\n return connected;\n }\n\n addColumn(): void {\n const updated = produce(this.row, (draft) => {\n draft.columns.push({ id: this.generateId('col'), fields: [] });\n });\n this.rowChange.emit(updated);\n }\n\n removeColumn(index: number): void {\n const updated = produce(this.row, (draft) => {\n draft.columns.splice(index, 1);\n });\n this.rowChange.emit(updated);\n }\n\n removeRow(): void {\n this.remove.emit();\n }\n\n moveColumn(index: number, direction: number): void {\n if (index + direction < 0 || index + direction >= this.row.columns.length) return;\n\n const updated = produce(this.row, (draft) => {\n const temp = draft.columns[index];\n draft.columns[index] = draft.columns[index + direction];\n draft.columns[index + direction] = temp;\n });\n this.rowChange.emit(updated);\n }\n\n clearColumn(index: number): void {\n if (!confirm('Tem certeza que deseja remover todos os campos desta coluna?')) return;\n\n const updated = produce(this.row, (draft) => {\n draft.columns[index].fields = [];\n });\n this.rowChange.emit(updated);\n }\n\n addFieldToColumn(index: number): void {\n if (!this.fieldMetadata || this.fieldMetadata.length === 0) return;\n const firstAvailable = this.fieldMetadata[0]?.name;\n if (!firstAvailable) return;\n\n const updated = produce(this.row, (draft) => {\n const column = draft.columns[index];\n if (!column) return;\n if (!column.fields.includes(firstAvailable)) {\n column.fields.push(firstAvailable);\n }\n });\n this.rowChange.emit(updated);\n }\n\n\n\n public getColumnId(index: number): string {\n return `section-${this.sectionIndex}-row-${this.rowIndex}-column-${index}`;\n }\n\n private generateId(prefix: string): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n }\n\n // Column Presets: apply spans for md breakpoint and adjust column count\n applyPreset(spansMd: number[]): void {\n if (!spansMd?.length) return;\n const updated = produce(this.row, (draft) => {\n const target = spansMd.length;\n const current = draft.columns.length;\n\n if (current > target) {\n const extras = draft.columns.slice(target).flatMap((c) => c.fields || []);\n draft.columns = draft.columns.slice(0, target);\n if (extras.length) {\n draft.columns[target - 1].fields.push(...extras);\n }\n } else if (current < target) {\n for (let i = current; i < target; i++) {\n draft.columns.push({ id: this.generateId('col'), fields: [] });\n }\n }\n\n for (let i = 0; i < target; i++) {\n const md = spansMd[i];\n const col = draft.columns[i];\n col.span = { ...(col.span || {}), xs: 12, sm: 12, md, lg: md, xl: md } as any;\n }\n });\n this.rowChange.emit(updated);\n }\n\n getColumnClass(column: any): string {\n return column.className || (column.styles?.['class']) || '';\n }\n\n getSpanClasses(column: any): string[] {\n const { xs, sm, md, lg, xl } = resolveSpan(column?.span);\n return [\n `span-xs-${xs}`,\n `span-sm-${sm}`,\n `span-md-${md}`,\n `span-lg-${lg}`,\n `span-xl-${xl}`,\n ];\n }\n\n getColumnClassList(column: any): string {\n const base = this.getSpanClasses(column).join(' ');\n const custom = this.getColumnClass(column);\n return custom ? `${base} ${custom}` : base;\n }\n\n getSpanFor(column: any, bp: Breakpoint = this.previewBreakpoint): number {\n if (!column?.span && (this.row?.columns?.length ?? 0) > 1) {\n const share = Math.max(1, Math.floor(12 / (this.row.columns.length || 1)));\n return share;\n }\n return resolveSpan(column?.span)[bp];\n }\n\n getHiddenFor(column: any, bp: Breakpoint = this.previewBreakpoint): boolean {\n return resolveHidden(column?.hidden)[bp];\n }\n\n setSpan(columnIndex: number, value: number): void {\n const v = Math.min(12, Math.max(1, value));\n const bp = this.previewBreakpoint;\n const updated = produce(this.row, (draft) => {\n const col = draft.columns[columnIndex];\n const span = { ...resolveSpan(col.span) };\n span[bp] = v;\n col.span = span;\n });\n this.rowChange.emit(updated);\n }\n\n adjustSpan(columnIndex: number, delta: number): void {\n const current = this.getSpanFor(this.row.columns[columnIndex]);\n this.setSpan(columnIndex, current + delta);\n }\n\n toggleHidden(columnIndex: number): void {\n const bp = this.previewBreakpoint;\n const updated = produce(this.row, (draft) => {\n const col = draft.columns[columnIndex];\n const hidden = { ...resolveHidden(col.hidden) };\n hidden[bp] = !hidden[bp];\n col.hidden = hidden;\n });\n this.rowChange.emit(updated);\n }\n\n updateRowGap(kind: 'gap' | 'rowGap', value: number | string): void {\n const n = Number(value);\n if (Number.isNaN(n)) return;\n const current = Number((this.row as any)?.[kind]);\n if (kind === 'gap') {\n if (!Number.isFinite(current) && n === Number(this.gapGlobal ?? 0)) return;\n if (Number.isFinite(current) && current === n) return;\n } else {\n if (!Number.isFinite(current) && n === 0) return;\n if (Number.isFinite(current) && current === n) return;\n }\n if (kind === 'rowGap') {\n try {\n console.info('[RowConfigurator] rowGap change', {\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n value: Math.max(0, n),\n raw: value,\n });\n } catch { }\n }\n const updated = produce(this.row, (draft) => {\n (draft as any)[kind] = n;\n });\n this.rowChange.emit(updated);\n }\n adjustRowGapDelta(kind: 'gap' | 'rowGap', delta: number): void {\n const current = Number((this.row as any)[kind] ?? (kind === 'gap' ? this.gapGlobal : 0));\n const next = Math.max(0, current + delta);\n this.updateRowGap(kind, next);\n }\n\n applyRowGapToAll(): void {\n const value = Number(this.row?.rowGap ?? 0);\n const normalized = Number.isFinite(value) ? Math.max(0, value) : 0;\n try {\n console.info('[RowConfigurator] apply rowGap to all rows in section', {\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n value: normalized,\n });\n } catch { }\n this.applyRowGapAll.emit(normalized);\n }\n\n clearRowGap(): void {\n try {\n console.info('[RowConfigurator] clear rowGap (use default)', {\n sectionIndex: this.sectionIndex,\n rowIndex: this.rowIndex,\n });\n } catch { }\n this.updateRowGap('rowGap', null as any);\n }\n\n hasMultipleColumns(): boolean {\n return (this.row?.columns?.length || 0) > 1;\n }\n\n getSpanTotal(bp: Breakpoint = this.previewBreakpoint): number {\n return (this.row.columns || []).reduce((acc, col) => acc + this.getSpanFor(col, bp), 0);\n }\n\n getOffsetFor(column: any, bp: Breakpoint = this.previewBreakpoint): number {\n return resolveOffset(column?.offset)[bp];\n }\n\n setOffset(columnIndex: number, value: number): void {\n const bp = this.previewBreakpoint;\n const updated = produce(this.row, (draft) => {\n const col = draft.columns[columnIndex];\n const offset = { ...resolveOffset(col.offset) };\n const span = resolveSpan(col.span)[bp];\n const maxOffset = Math.max(0, 12 - span);\n offset[bp] = Math.min(maxOffset, Math.max(0, value));\n col.offset = offset;\n });\n this.rowChange.emit(updated);\n }\n\n adjustOffset(columnIndex: number, delta: number): void {\n const current = this.getOffsetFor(this.row.columns[columnIndex]);\n this.setOffset(columnIndex, current + delta);\n }\n\n getSuggestedSpan(columnIndex: number): number | null {\n const total = this.getSpanTotal();\n if (total === 12) return null;\n\n const currentSpan = this.getSpanFor(this.row.columns[columnIndex]);\n const delta = 12 - total;\n const suggested = currentSpan + delta;\n\n // Only suggest if it results in a valid span (1-12)\n if (suggested >= 1 && suggested <= 12) {\n return suggested;\n }\n return null;\n }\n}\n","<div class=\"row-meta\" *ngIf=\"row\">\n <div class=\"bp-toggle\" role=\"group\" aria-label=\"Breakpoint de visualização\">\n <button\n *ngFor=\"let bp of breakpoints\"\n type=\"button\"\n mat-stroked-button\n class=\"bp-toggle__btn\"\n [class.active]=\"previewBreakpoint === bp\"\n (click)=\"previewBreakpoint = bp\"\n >\n {{ bp }}\n </button>\n </div>\n <div class=\"gap-controls\">\n <div class=\"gap-chip\" *ngIf=\"hasMultipleColumns()\" matTooltip=\"Gap entre colunas (px)\"\n aria-label=\"Gap entre colunas\">\n <span class=\"chip-title\">Colunas</span>\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustRowGapDelta('gap', -2)\"\n aria-label=\"Reduzir gap de colunas\">\n <mat-icon>remove</mat-icon>\n </button>\n <input class=\"gap-chip__input\" type=\"number\" min=\"0\" [ngModel]=\"row.gap ?? gapGlobal\"\n (ngModelChange)=\"updateRowGap('gap', $event)\" aria-label=\"Valor do gap entre colunas\" />\n <span class=\"gap-chip__suffix\">px</span>\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustRowGapDelta('gap', 2)\"\n aria-label=\"Aumentar gap de colunas\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n <div class=\"gap-chip\" matTooltip=\"Gap abaixo da linha (px)\" aria-label=\"Gap abaixo da linha\">\n <span class=\"chip-title\">Linha</span>\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustRowGapDelta('rowGap', -2)\"\n aria-label=\"Reduzir espaço entre campos da linha\" matTooltip=\"Reduz o espaço entre campos desta linha\">\n <mat-icon>remove</mat-icon>\n </button>\n <input class=\"gap-chip__input\" type=\"number\" min=\"0\" [ngModel]=\"row.rowGap ?? 0\"\n (ngModelChange)=\"updateRowGap('rowGap', $event)\" aria-label=\"Espaço entre campos desta linha\" />\n <span class=\"gap-chip__suffix\">px</span>\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustRowGapDelta('rowGap', 2)\"\n aria-label=\"Aumentar espaço entre campos da linha\" matTooltip=\"Aumenta o espaço entre campos desta linha\">\n <mat-icon>add</mat-icon>\n </button>\n <button mat-icon-button class=\"gap-chip__btn\" [matMenuTriggerFor]=\"rowGapMenu\"\n matTooltip=\"Mais opções para aplicar este espaço\" aria-label=\"Mais opções de aplicação\">\n <mat-icon>done_all</mat-icon>\n </button>\n <mat-menu #rowGapMenu=\"matMenu\">\n <button mat-menu-item (click)=\"applyRowGapToAll()\">\n <mat-icon>done_all</mat-icon>\n <span>Aplicar em todas as linhas da seção</span>\n </button>\n <button mat-menu-item (click)=\"clearRowGap()\">\n <mat-icon>undo</mat-icon>\n <span>Voltar ao padrão</span>\n </button>\n </mat-menu>\n </div>\n <div class=\"gap-pill\" aria-label=\"Resumo de espaçamentos\">\n Campos: {{ (row.rowGap ?? 'padrão') }}px · Colunas: {{ (row.gap ?? gapGlobal) }}px\n </div>\n <div class=\"row-actions-meta\">\n <button mat-icon-button [matMenuTriggerFor]=\"rowMenu\" (click)=\"openRowMenu()\" matTooltip=\"Opções da linha\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\" (closed)=\"onMenuClosed()\">\n <ng-container *ngIf=\"menuContext?.type === 'column'; else rowMenuContent\">\n <button mat-menu-item (click)=\"toggleHidden(menuContext!.columnIndex!)\">\n <mat-icon>{{ getHiddenFor(row.columns[menuContext!.columnIndex!]) ? 'visibility' : 'visibility_off'\n }}</mat-icon>\n <span>{{ getHiddenFor(row.columns[menuContext!.columnIndex!]) ? 'Mostrar neste breakpoint' : 'Ocultar neste\n breakpoint' }}</span>\n </button>\n <button mat-menu-item (click)=\"removeColumn(menuContext!.columnIndex!)\">\n <mat-icon color=\"warn\">delete</mat-icon>\n <span>Remover coluna</span>\n </button>\n </ng-container>\n <ng-template #rowMenuContent>\n <div mat-menu-item disabled>Presets de colunas</div>\n <button mat-menu-item (click)=\"applyPreset([12])\"><mat-icon>view_column</mat-icon><span>1/1</span></button>\n <button mat-menu-item (click)=\"applyPreset([6,6])\"><mat-icon>view_column</mat-icon><span>1/2 —\n 1/2</span></button>\n <button mat-menu-item (click)=\"applyPreset([4,8])\"><mat-icon>view_column</mat-icon><span>1/3 —\n 2/3</span></button>\n <button mat-menu-item (click)=\"applyPreset([8,4])\"><mat-icon>view_column</mat-icon><span>2/3 —\n 1/3</span></button>\n <button mat-menu-item (click)=\"applyPreset([4,4,4])\"><mat-icon>view_column</mat-icon><span>1/3 — 1/3 —\n 1/3</span></button>\n <button mat-menu-item (click)=\"applyPreset([3,3,3,3])\"><mat-icon>view_column</mat-icon><span>1/4 — 1/4 — 1/4 —\n 1/4</span></button>\n <button mat-menu-item (click)=\"addColumn()\"><mat-icon>add</mat-icon><span>Adicionar coluna</span></button>\n <button mat-menu-item (click)=\"removeRow()\"><mat-icon>delete</mat-icon><span>Remover linha</span></button>\n </ng-template>\n </mat-menu>\n </div>\n </div>\n <div class=\"span-warning\" *ngIf=\"getSpanTotal(previewBreakpoint) !== 12\">\n <mat-icon color=\"warn\">warning</mat-icon>\n Soma de spans = {{ getSpanTotal(previewBreakpoint) }} (ideal: 12)\n </div>\n</div>\n\n<div class=\"row-container\" [style.marginBottom.px]=\"!isLastRow ? (row.rowGap || null) : null\">\n <ng-container *ngIf=\"row.columns.length > 0; else emptyRow\">\n <div class=\"row grid-12\" cdkDropListGroup (click)=\"selectRow()\" [class.selected]=\"isRowSelected()\" tabindex=\"0\"\n role=\"button\" [attr.aria-label]=\"'Linha ' + (rowIndex + 1)\" [attr.aria-selected]=\"isRowSelected()\"\n [style.--pfx-grid-gap.px]=\"row.gap || null\" [style.--px-row-field-gap.px]=\"row.rowGap ?? null\">\n <div class=\"row-label\" aria-hidden=\"true\">Linha {{ rowIndex + 1 }}</div>\n <div *ngFor=\"let column of row.columns; let i = index\" class=\"column\" [id]=\"getColumnId(i)\" cdkDropList\n [cdkDropListData]=\"column.fields\" [cdkDropListConnectedTo]=\"connectedColumns(i)\"\n (cdkDropListDropped)=\"drop($event)\" (cdkDropListEntered)=\"onDropEnter(i)\" (cdkDropListExited)=\"onDropExit(i)\"\n (click)=\"selectColumn(i, $event)\" [class.drop-active]=\"activeDropIndex === i\"\n [class.selected]=\"isColumnSelected(i)\" [ngClass]=\"getColumnClassList(column)\"\n [style.grid-column]=\"'span ' + getSpanFor(column)\" tabindex=\"0\" role=\"button\"\n [attr.aria-label]=\"'Coluna ' + (i + 1) + ' de Linha ' + (rowIndex + 1) + '; Largura ' + getSpanFor(column)\"\n [attr.aria-selected]=\"isColumnSelected(i)\">\n <div class=\"column-header\">\n <div class=\"column-status-pill\" [matMenuTriggerFor]=\"columnSettingsMenu\"\n matTooltip=\"Clique para ajustar largura e offset\" [class.active]=\"isColumnSelected(i)\">\n <span class=\"status-bp\">{{ previewBreakpoint }}</span>\n <span class=\"status-divider\">·</span>\n <span class=\"status-span\">\n <mat-icon>view_column</mat-icon>\n {{ getSpanFor(column) }}/12\n </span>\n <span class=\"status-divider\">·</span>\n <span class=\"status-offset\">\n off {{ getOffsetFor(column) }}\n </span>\n <span class=\"status-hidden\" *ngIf=\"getHiddenFor(column)\">\n <mat-icon>visibility_off</mat-icon>\n </span>\n </div>\n\n <div class=\"column-actions\">\n <button mat-icon-button class=\"action-btn\" [matMenuTriggerFor]=\"columnOverflowMenu\"\n (click)=\"$event.stopPropagation()\" matTooltip=\"Opções da coluna\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-menu #columnSettingsMenu=\"matMenu\" class=\"column-settings-popover\">\n <div class=\"popover-content\" (click)=\"$event.stopPropagation()\">\n <div class=\"control-group\" *ngIf=\"getSuggestedSpan(i) as suggested\">\n <button mat-flat-button color=\"primary\" (click)=\"setSpan(i, suggested)\"\n matTooltip=\"Ajustar largura para completar 12 colunas\">\n <mat-icon>auto_fix_high</mat-icon>\n Ajustar para {{ suggested }} (Total 12)\n </button>\n </div>\n <div class=\"control-group\">\n <label>Largura ({{ previewBreakpoint }})</label>\n <div class=\"control-row\">\n <button mat-icon-button (click)=\"adjustSpan(i, -1)\"><mat-icon>remove</mat-icon></button>\n <span class=\"value-display\">{{ getSpanFor(column) }} / 12</span>\n <button mat-icon-button (click)=\"adjustSpan(i, 1)\"><mat-icon>add</mat-icon></button>\n </div>\n </div>\n <div class=\"control-group\">\n <label>Offset ({{ previewBreakpoint }})</label>\n <div class=\"control-row\">\n <button mat-icon-button (click)=\"adjustOffset(i, -1)\"><mat-icon>chevron_left</mat-icon></button>\n <span class=\"value-display\">{{ getOffsetFor(column) }}</span>\n <button mat-icon-button (click)=\"adjustOffset(i, 1)\"><mat-icon>chevron_right</mat-icon></button>\n </div>\n </div>\n <div class=\"control-group\">\n <button mat-stroked-button (click)=\"toggleHidden(i)\" [color]=\"getHiddenFor(column) ? 'warn' : ''\">\n <mat-icon>{{ getHiddenFor(column) ? 'visibility' : 'visibility_off' }}</mat-icon>\n {{ getHiddenFor(column) ? 'Mostrar' : 'Ocultar' }}\n </button>\n </div>\n </div>\n </mat-menu>\n\n <mat-menu #columnOverflowMenu=\"matMenu\">\n <button mat-menu-item (click)=\"openColumnConfig(i)\" matTooltip=\"Abrir painel de configuração completa\">\n <mat-icon>tune</mat-icon>\n <span>Configurar coluna</span>\n </button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"moveColumn(i, -1)\" [disabled]=\"i === 0\"\n matTooltip=\"Mover coluna para a esquerda\">\n <mat-icon>arrow_back</mat-icon>\n <span>Mover para esquerda</span>\n </button>\n <button mat-menu-item (click)=\"moveColumn(i, 1)\" [disabled]=\"i === row.columns.length - 1\"\n matTooltip=\"Mover coluna para a direita\">\n <mat-icon>arrow_forward</mat-icon>\n <span>Mover para direita</span>\n </button>\n\n <button mat-menu-item (click)=\"clearColumn(i)\" [disabled]=\"column.fields.length === 0\"\n matTooltip=\"Remover todos os campos desta coluna\">\n <mat-icon>backspace</mat-icon>\n <span>Limpar conteúdo</span>\n </button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"removeColumn(i)\" matTooltip=\"Excluir esta coluna\">\n <mat-icon color=\"warn\">delete</mat-icon>\n <span>Remover coluna</span>\n </button>\n </mat-menu>\n <div class=\"column-content\">\n <div class=\"hidden-overlay\" *ngIf=\"getHiddenFor(column)\">\n <mat-icon aria-hidden=\"true\">visibility_off</mat-icon>\n <span>Oculta em {{ previewBreakpoint }}</span>\n </div>\n <ng-container *ngIf=\"column.fields.length > 0; else emptyColumn\">\n <div *ngFor=\"let fieldName of column.fields\" (click)=\"selectField(fieldName, $event)\"\n [class.selected]=\"isFieldSelected(fieldName)\">\n <praxis-field-configurator [field]=\"getFieldByName(fieldName)\"></praxis-field-configurator>\n </div>\n </ng-container>\n <ng-template #emptyColumn>\n <div class=\"column-placeholder\">\n <span>Coluna vazia — solte um campo ou remova.</span>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #emptyRow>\n <div class=\"row-empty-placeholder\">\n <span>Linha vazia — crie colunas ou remova.</span>\n <div class=\"row-placeholder-actions\">\n <button mat-stroked-button (click)=\"addColumn()\" matTooltip=\"Adicionar coluna\">\n <mat-icon>add</mat-icon> Adicionar coluna\n </button>\n <button mat-stroked-button color=\"warn\" (click)=\"removeRow()\" matTooltip=\"Remover linha\">\n <mat-icon>delete</mat-icon> Remover linha\n </button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\nimport type { SectionPreset } from './section-presets.types';\n\n@Injectable({ providedIn: 'root' })\nexport class SectionPresetRegistry {\n private presets = new Map<string, SectionPreset>();\n\n constructor() {\n // seeded by defaults file import side effect\n }\n\n register(preset: SectionPreset): void {\n this.presets.set(preset.id, preset);\n }\n\n get(id: string): SectionPreset | undefined {\n return this.presets.get(id);\n }\n\n list(): SectionPreset[] {\n return Array.from(this.presets.values());\n }\n}\n\n","import { inject } from '@angular/core';\nimport type { SectionPreset } from './section-presets.types';\nimport { SectionPresetRegistry } from './section-presets.registry';\n\nconst PRESETS: SectionPreset[] = [\n {\n id: 'section-basic-1col',\n name: 'Básico 1 Coluna',\n icon: 'view_agenda',\n description: 'Uma coluna por linha para campos amplos',\n structure: [{ columns: [{ span: 12 }] }],\n defaults: { row: { gap: 16, rowGap: 8 } },\n },\n {\n id: 'section-2col-equal',\n name: 'Duas Colunas 1/1',\n icon: 'view_column',\n description: 'Duas colunas balanceadas para campos médios',\n structure: [{ columns: [{ span: 6 }, { span: 6 }], gap: 16 }],\n },\n {\n id: 'section-3col-equal',\n name: 'Três Colunas 1/1/1',\n icon: 'view_week',\n description: 'Três colunas iguais para campos curtos',\n structure: [{ columns: [{ span: 4 }, { span: 4 }, { span: 4 }], gap: 16 }],\n },\n {\n id: 'section-sidebar-1-3_2-3',\n name: 'Sidebar 1/3 – 2/3',\n icon: 'view_sidebar',\n description: 'Coluna estreita para filtros e coluna larga para detalhes',\n structure: [{ columns: [{ span: 4 }, { span: 8 }], gap: 16 }],\n },\n {\n id: 'section-cards-3col',\n name: 'Cards (3 col)',\n icon: 'view_module',\n description: 'Três colunas com espaçamento amplo, ideal para agrupar',\n structure: [{ columns: [{ span: 4 }, { span: 4 }, { span: 4 }], gap: 24, rowGap: 12 }],\n },\n {\n id: 'section-accordion',\n name: 'Acordeão',\n icon: 'unfold_more',\n description: 'Seção expansível (apenas estrutura, comportamento a cargo do host)',\n structure: [{ columns: [{ span: 12 }], gap: 12 }],\n },\n {\n id: 'section-text-plus-two',\n name: 'Texto amplo + 2 colunas',\n icon: 'text_fields',\n description: 'Primeira linha ampla para texto/observação, segunda linha 1/2 — 1/2',\n structure: [\n { columns: [{ span: 12 }], gap: 16, rowGap: 12 },\n { columns: [{ span: 6 }, { span: 6 }], gap: 16 },\n ],\n },\n {\n id: 'section-hero-3col',\n name: 'Hero 2/3 + 1/3 e 3 colunas',\n icon: 'view_quilt',\n description: 'Primeira linha 2/3 — 1/3; segunda linha 3 colunas iguais',\n structure: [\n { columns: [{ span: 8 }, { span: 4 }], gap: 16, rowGap: 12 },\n { columns: [{ span: 4 }, { span: 4 }, { span: 4 }], gap: 16 },\n ],\n },\n {\n id: 'section-compact-3x2',\n name: 'Ficha compacta 3x2',\n icon: 'view_comfy_alt',\n description: 'Duas linhas de 3 colunas com espaçamento compacto',\n structure: [\n { columns: [{ span: 4 }, { span: 4 }, { span: 4 }], gap: 12, rowGap: 8 },\n { columns: [{ span: 4 }, { span: 4 }, { span: 4 }], gap: 12 },\n ],\n },\n {\n id: 'section-spaced-2x3',\n name: 'Formulário longo 2 colunas',\n icon: 'view_stream',\n description: 'Três linhas 1/2 — 1/2 com respiro maior',\n structure: [\n { columns: [{ span: 6 }, { span: 6 }], gap: 24, rowGap: 16 },\n { columns: [{ span: 6 }, { span: 6 }], gap: 24, rowGap: 16 },\n { columns: [{ span: 6 }, { span: 6 }], gap: 24 },\n ],\n },\n {\n id: 'section-centered',\n name: 'Coluna centralizada',\n icon: 'view_day',\n description: 'Conteúdo central com offset lateral (md+)',\n structure: [\n { columns: [{ span: 8, offset: { md: 2, lg: 2, xl: 2 } as any }], gap: 16 },\n ],\n defaults: { row: { gap: 16, rowGap: 12 } },\n },\n];\n\n// Side-effect registration\nexport function registerDefaultSectionPresets(): void {\n const registry = inject(SectionPresetRegistry);\n PRESETS.forEach((p) => registry.register(p));\n}\n","import { Component, Inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SectionPresetRegistry } from './section-presets.registry';\nimport type { SectionPreset } from './section-presets.types';\n\n@Component({\n selector: 'praxis-section-preset-picker',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule, MatTooltipModule],\n template: `\n <div class=\"picker\">\n <h2 mat-dialog-title class=\"dialog-title\">Presets de Seção</h2>\n <div class=\"grid\">\n <button\n *ngFor=\"let p of presets\"\n type=\"button\"\n class=\"preset-btn\"\n (click)=\"select(p)\"\n [matTooltip]=\"p.description || p.name\"\n >\n <mat-icon>{{ p.icon }}</mat-icon>\n <span class=\"name\">{{ p.name }}</span>\n </button>\n </div>\n <div class=\"actions\">\n <button mat-stroked-button type=\"button\" (click)=\"close()\">\n Cancelar\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n .picker { padding: 12px; width: 520px; color: var(--md-sys-color-on-surface); }\n .dialog-title { margin: 4px 0 8px; font-weight: 600; color: var(--md-sys-color-on-surface); }\n .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin: 8px 0 12px; }\n .preset-btn {\n display: flex; align-items: center; gap: 10px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 10px; padding: 12px 12px;\n background: var(--md-sys-color-surface-container);\n color: var(--md-sys-color-on-surface);\n transition: background 120ms ease, border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease;\n text-align: left;\n }\n .preset-btn mat-icon { color: var(--md-sys-color-primary); }\n .preset-btn .name { font-weight: 600; letter-spacing: .2px; }\n .preset-btn:hover {\n background: var(--md-sys-color-primary-container);\n border-color: var(--md-sys-color-primary);\n transform: translateY(-1px);\n box-shadow: var(--md-sys-elevation-level2);\n cursor: pointer;\n }\n .preset-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px var(--md-sys-color-primary);\n }\n .actions {\n display: flex; justify-content: flex-end; margin-top: 8px; padding-top: 8px;\n border-top: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface);\n }\n `,\n ],\n})\nexport class SectionPresetPickerComponent {\n presets: SectionPreset[] = [];\n\n constructor(\n private registry: SectionPresetRegistry,\n private ref: MatDialogRef<SectionPresetPickerComponent, SectionPreset | null>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.presets = this.registry.list();\n }\n\n select(preset: SectionPreset): void {\n this.ref.close(preset);\n }\n\n close(): void {\n this.ref.close(null);\n }\n}\n","import type { FormColumn, FormRow, FormSection } from '@praxisui/core';\nimport type { SectionPreset } from './section-presets.types';\n\n/**\n * Apply a section preset to an existing section.\n * Preserves existing field order, redistributing them across the new columns.\n */\nexport function applySectionPreset(\n section: FormSection,\n preset: SectionPreset,\n mode: 'structure' | 'style' = 'structure',\n): FormSection {\n const srcRows = section.rows || [];\n\n if (mode === 'style') {\n // Style-only: apply row gap/padding hints to existing rows\n const styledRows = srcRows.map((r, idx) => styleRowFromPreset(r, preset, idx));\n return { ...section, rows: styledRows };\n }\n\n // Collect all field names from current section in order\n const fields: string[] = [];\n for (const r of srcRows) {\n for (const c of r.columns) {\n for (const f of c.fields) fields.push(f);\n }\n }\n\n // Build new rows/columns structure from preset\n const targetRows: FormRow[] = preset.structure.map((sr) => ({\n id: randomId('row'),\n title: sr.title,\n gap: sr.gap ?? preset.defaults?.row?.gap ?? undefined,\n rowGap: sr.rowGap ?? preset.defaults?.row?.rowGap ?? undefined,\n columns: sr.columns.map((sc) => ({\n id: randomId('col'),\n fields: [],\n span: sc.span ? { md: sc.span } : undefined,\n padding: sc.padding,\n className: sc.className,\n })) as FormColumn[],\n }));\n\n // Redistribute existing fields round-robin through target columns\n let ci = 0;\n for (const f of fields) {\n assignFieldToNextColumn(targetRows, f, () => ci++);\n }\n\n return { ...section, rows: targetRows };\n}\n\nfunction styleRowFromPreset(row: FormRow, preset: SectionPreset, idx: number): FormRow {\n const hint = preset.structure[Math.min(idx, preset.structure.length - 1)];\n return {\n ...row,\n gap: hint?.gap ?? row.gap,\n rowGap: hint?.rowGap ?? row.rowGap,\n };\n}\n\nfunction assignFieldToNextColumn(targetRows: FormRow[], field: string, inc: () => number): void {\n if (!targetRows.length) return;\n // Find next non-empty row with columns\n const flatCols = targetRows.flatMap((r) => r.columns);\n if (!flatCols.length) return;\n const i = inc();\n const col = flatCols[i % flatCols.length];\n col.fields = [...(col.fields || []), field];\n}\n\nfunction randomId(prefix: string): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n CdkDragDrop,\n DragDropModule,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { RowConfiguratorComponent } from './row-configurator.component';\nimport { FormSection, FormRow, FieldMetadata } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { SectionPresetRegistry } from './section-presets.registry';\nimport { registerDefaultSectionPresets } from './section-presets.defaults';\nimport { SectionPresetPickerComponent } from './section-preset-picker.component';\nimport { applySectionPreset } from './apply-section-preset.util';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { FormSectionHeaderConfig } from '@praxisui/core';\nimport {\n deriveSectionHeaderInitials,\n getSectionHeaderTextFieldCandidates,\n SECTION_HEADER_SIZE_DEFAULT,\n} from '../utils/section-header.utils';\n\n// Local extension for layout configuration (supports inherited gap)\ntype LayoutFormSection = FormSection & {\n sectionHeader?: FormSectionHeaderConfig;\n gapCustomized?: boolean;\n};\n\n@Component({\n selector: 'praxis-section-configurator',\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n RowConfiguratorComponent,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatCardModule,\n MatTooltipModule,\n MatDialogModule,\n MatMenuModule,\n MatDividerModule,\n ],\n templateUrl: './section-configurator.component.html',\n styleUrls: ['./section-configurator.component.scss'],\n})\nexport class SectionConfiguratorComponent {\n @Input() section!: LayoutFormSection;\n @Input() sectionIndex!: number;\n @Input() allSections: FormSection[] = [];\n @Input() fieldMetadata: FieldMetadata[] = [];\n @Input() selected: { type: 'section' | 'row' | 'column' | 'field'; sectionIndex?: number; rowIndex?: number; columnIndex?: number; fieldName?: string } | null = null;\n @Input() availableFieldsListId: string | null = 'available-fields-list';\n @Input() columnDropListIds: string[] = [];\n @Input() gapGlobal: number = 16;\n @Output() sectionChange = new EventEmitter<FormSection>();\n @Output() applyStyleToAll = new EventEmitter<Partial<FormSection>>();\n @Output() remove = new EventEmitter<void>();\n @Output() select = new EventEmitter<any>();\n @Output() fieldDrop = new EventEmitter<{\n event: CdkDragDrop<any>;\n sectionIndex: number;\n rowIndex: number;\n }>();\n\n isHovered = false;\n isCollapsed = false;\n\n constructor(\n private dialog: MatDialog,\n private presetRegistry: SectionPresetRegistry,\n private settingsPanel: SettingsPanelService,\n ) {\n // ensure defaults are registered in DI context\n try { registerDefaultSectionPresets(); } catch {}\n }\n\n dropRow(event: CdkDragDrop<FormRow[]>) {\n const rows = [...this.section.rows];\n if (event.previousContainer === event.container) {\n moveItemInArray(rows, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex,\n );\n }\n this.onSectionUpdated({ rows });\n }\n\n addRow(): void {\n const newRow: FormRow = {\n id: this.generateId('row'),\n columns: [{ id: this.generateId('col'), fields: [] as string[] }],\n };\n const rows = [...this.section.rows, newRow];\n this.onSectionUpdated({ rows });\n }\n\n removeRow(index: number): void {\n const rows = [...this.section.rows];\n rows.splice(index, 1);\n this.onSectionUpdated({ rows });\n }\n\n onRowUpdated(index: number, updatedRow: FormRow): void {\n const rows = [...this.section.rows];\n rows[index] = updatedRow;\n try {\n console.info('[SectionConfigurator] row updated', {\n sectionIndex: this.sectionIndex,\n rowIndex: index,\n rowGap: updatedRow.rowGap ?? null,\n rowGapsSnapshot: rows.map((r) => r.rowGap ?? null),\n });\n } catch {}\n this.onSectionUpdated({ rows });\n }\n\n onApplyRowGapAll(value: number): void {\n const px = Math.max(0, Number(value) || 0);\n const rows = (this.section.rows || []).map((r) => ({ ...r, rowGap: px }));\n try {\n console.info('[SectionConfigurator] apply rowGap to all rows', {\n sectionIndex: this.sectionIndex,\n value: px,\n totalRows: rows.length,\n });\n } catch {}\n this.onSectionUpdated({ rows });\n }\n\n onSectionUpdated(changes: Partial<FormSection> = {}): void {\n const updated = {\n ...this.section,\n ...changes,\n };\n // keep local section in sync so subsequent actions see the latest rows\n this.section = updated;\n this.sectionChange.emit(updated);\n }\n\n onFieldDrop(event: CdkDragDrop<any>, rowIndex: number): void {\n this.fieldDrop.emit({ event, sectionIndex: this.sectionIndex, rowIndex });\n }\n\n onRemoveSection(): void {\n this.remove.emit();\n }\n\n onSelectSection(): void {\n this.select.emit({ type: 'section', sectionIndex: this.sectionIndex });\n }\n\n // Breadcrumb actions (stop propagation handled in template wrapper)\n onSelectSectionFromBreadcrumb(event: Event): void {\n event.stopPropagation();\n this.onSelectSection();\n }\n\n onSelectRowFromBreadcrumb(event: Event): void {\n event.stopPropagation();\n if (this.selected?.rowIndex != null) {\n this.select.emit({\n type: 'row',\n sectionIndex: this.sectionIndex,\n rowIndex: this.selected.rowIndex,\n });\n }\n }\n\n onSelectColumnFromBreadcrumb(event: Event): void {\n event.stopPropagation();\n if (this.selected?.rowIndex != null && this.selected?.columnIndex != null) {\n this.select.emit({\n type: 'column',\n sectionIndex: this.sectionIndex,\n rowIndex: this.selected.rowIndex,\n columnIndex: this.selected.columnIndex,\n });\n }\n }\n\n onClearSelectionFromBreadcrumb(event: Event): void {\n event.stopPropagation();\n this.select.emit(null);\n }\n\n onMouseEnter(): void {\n this.isHovered = true;\n }\n\n onMouseLeave(): void {\n this.isHovered = false;\n }\n\n toggleCollapsed(event?: Event): void {\n event?.stopPropagation();\n this.isCollapsed = !this.isCollapsed;\n }\n\n openAdvancedEditor(event?: Event): void {\n event?.stopPropagation();\n import('../canvas/components/section-editor/section-editor.component').then((m) => {\n const SectionEditorComponent = (m as any).SectionEditorComponent;\n if (!SectionEditorComponent) return;\n const ref = this.settingsPanel.open({\n id: `layout.section.${this.section.id || this.sectionIndex}`,\n title: this.section.title || `Seção ${this.sectionIndex + 1}`,\n titleIcon: 'view_agenda',\n content: {\n component: SectionEditorComponent,\n inputs: { section: this.section, fieldMetadata: this.fieldMetadata },\n },\n });\n ref.applied$?.subscribe(() => this.onSectionUpdated());\n ref.saved$?.subscribe(() => this.onSectionUpdated());\n });\n }\n\n getSectionHeaderPreview():\n | { kind: 'none' }\n | { kind: 'icon'; icon: string }\n | { kind: 'initials'; text: string; tooltip: string | null }\n | { kind: 'placeholder'; icon?: string; tooltip: string | null } {\n const header = this.section.sectionHeader;\n const mode = header?.mode ?? 'icon';\n const fallbackIcon = header?.fallbackIcon || this.section.icon || undefined;\n const previewLabel = this.resolveTextPreviewLabel(header);\n const imageLabel = this.resolveFieldLabel(header?.sourceField);\n if (mode === 'icon') {\n return { kind: 'icon', icon: this.section.icon || fallbackIcon || 'label_important' };\n }\n if (mode === 'avatar-image') {\n return this.resolveEmptyHeaderPreview(\n imageLabel,\n fallbackIcon,\n header?.emptyState,\n imageLabel ? 'image' : undefined,\n );\n }\n if (mode === 'avatar-initials') {\n const initials = deriveSectionHeaderInitials(previewLabel);\n if (initials) {\n return { kind: 'initials', text: initials, tooltip: previewLabel };\n }\n return this.resolveEmptyHeaderPreview(previewLabel, fallbackIcon, header?.emptyState);\n }\n if (mode === 'auto') {\n const initials = deriveSectionHeaderInitials(previewLabel);\n if (initials) {\n return { kind: 'initials', text: initials, tooltip: previewLabel };\n }\n return this.resolveEmptyHeaderPreview(\n imageLabel || previewLabel,\n fallbackIcon,\n header?.emptyState,\n imageLabel ? 'image' : undefined,\n );\n }\n return this.resolveEmptyHeaderPreview(previewLabel, fallbackIcon, header?.emptyState);\n }\n\n getSectionHeaderAvatarSize():\n NonNullable<FormSectionHeaderConfig['size']> | null {\n const header = this.section.sectionHeader;\n if (!header) return null;\n return header.size ?? SECTION_HEADER_SIZE_DEFAULT;\n }\n\n private resolveEmptyHeaderPreview(\n tooltip: string | null,\n fallbackIcon?: string,\n emptyState?: FormSectionHeaderConfig['emptyState'],\n preferredPlaceholderIcon?: string,\n ): { kind: 'none' } | { kind: 'placeholder'; icon?: string; tooltip: string | null } {\n if (emptyState === 'none') {\n return { kind: 'none' };\n }\n if (emptyState === 'fallback-icon' && fallbackIcon) {\n return {\n kind: 'placeholder',\n icon: fallbackIcon,\n tooltip,\n };\n }\n return preferredPlaceholderIcon\n ? { kind: 'placeholder', icon: preferredPlaceholderIcon, tooltip }\n : { kind: 'placeholder', tooltip };\n }\n\n private resolveFieldLabel(fieldName?: string): string | null {\n if (!fieldName) return null;\n const field = this.fieldMetadata.find((entry) => entry.name === fieldName);\n return (field?.label || field?.name || fieldName || '').trim() || null;\n }\n\n private resolveTextPreviewLabel(\n header?: LayoutFormSection['sectionHeader'],\n ): string | null {\n const candidates = getSectionHeaderTextFieldCandidates(header);\n for (const fieldName of candidates) {\n const label = this.resolveFieldLabel(fieldName);\n if (label) return label;\n }\n return null;\n }\n\n private generateId(prefix: string): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 9)}`;\n }\n\n isThisSectionSelected(): boolean {\n return !!this.selected && this.selected.sectionIndex === this.sectionIndex;\n }\n\n // Presets UI\n openSectionPresets(): void {\n const ref = this.dialog.open(SectionPresetPickerComponent, { width: '560px' });\n ref.afterClosed().subscribe((preset) => {\n if (!preset) return;\n const updated = applySectionPreset(this.section, preset, 'structure');\n this.onSectionUpdated(updated);\n });\n }\n\n applyCurrentStyleToAll(): void {\n const patch: Partial<FormSection> = {\n titleStyle: this.section.titleStyle,\n descriptionStyle: this.section.descriptionStyle,\n titleGapBottom: this.section.titleGapBottom,\n descriptionGapBottom: this.section.descriptionGapBottom,\n };\n this.applyStyleToAll.emit(patch);\n }\n}\n","<mat-card\n class=\"section-card\"\n cdkDrag\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n [class.hovered]=\"isHovered\"\n [class.selected]=\"isThisSectionSelected()\"\n [class.collapsed]=\"isCollapsed\"\n (click)=\"onSelectSection()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Seção ' + (sectionIndex + 1)\"\n [attr.aria-selected]=\"isThisSectionSelected()\"\n>\n <mat-card-header class=\"section-header\">\n <mat-card-title class=\"title-wrapper\">\n <div class=\"section-heading\">\n @let headerPreview = getSectionHeaderPreview();\n @let headerAvatarSize = getSectionHeaderAvatarSize();\n @if (headerPreview.kind === 'icon') {\n <mat-icon class=\"section-heading__icon\" aria-hidden=\"true\" [praxisIcon]=\"headerPreview.icon\"></mat-icon>\n }\n @if (headerPreview.kind === 'initials') {\n <span class=\"section-heading__avatar section-heading__avatar--text\" [class.size-sm]=\"headerAvatarSize === 'sm'\"\n [class.size-md]=\"headerAvatarSize === 'md'\" [class.size-lg]=\"headerAvatarSize === 'lg'\"\n [matTooltip]=\"headerPreview.tooltip || ''\" [matTooltipDisabled]=\"!headerPreview.tooltip\">\n {{ headerPreview.text }}\n </span>\n }\n @if (headerPreview.kind === 'placeholder') {\n <span class=\"section-heading__avatar section-heading__avatar--placeholder\" [class.size-sm]=\"headerAvatarSize === 'sm'\"\n [class.size-md]=\"headerAvatarSize === 'md'\" [class.size-lg]=\"headerAvatarSize === 'lg'\"\n [matTooltip]=\"headerPreview.tooltip || ''\" [matTooltipDisabled]=\"!headerPreview.tooltip\">\n @if (headerPreview.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"headerPreview.icon\"></mat-icon>\n }\n </span>\n }\n <div class=\"section-heading__text\">\n <span class=\"section-name\">{{ section.title || 'Sem título' }}</span>\n <span class=\"section-desc\" *ngIf=\"section.description\">{{ section.description }}</span>\n </div>\n </div>\n <button\n mat-icon-button\n type=\"button\"\n color=\"primary\"\n class=\"section-editor-trigger\"\n (click)=\"openAdvancedEditor($event)\"\n matTooltip=\"Para editar o título, use o editor completo da seção\"\n aria-label=\"Abrir editor da seção\"\n >\n <mat-icon>open_in_new</mat-icon>\n </button>\n </mat-card-title>\n <div class=\"section-header-actions\">\n <button\n mat-icon-button\n class=\"section-collapse-btn\"\n type=\"button\"\n (click)=\"toggleCollapsed($event)\"\n [attr.aria-expanded]=\"!isCollapsed\"\n [attr.aria-label]=\"isCollapsed ? 'Expandir seção' : 'Colapsar seção'\"\n [matTooltip]=\"isCollapsed ? 'Expandir seção' : 'Colapsar seção'\"\n >\n <mat-icon>{{ isCollapsed ? 'unfold_more' : 'unfold_less' }}</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"section-menu-btn\"\n [matMenuTriggerFor]=\"sectionMenu\"\n aria-label=\"Mais ações da seção\"\n matTooltip=\"Mais ações\"\n >\n <mat-icon [praxisIcon]=\"'more_vert'\"></mat-icon>\n </button>\n </div>\n <mat-menu #sectionMenu=\"matMenu\">\n <button mat-menu-item (click)=\"openSectionPresets()\">\n <mat-icon [praxisIcon]=\"'view_quilt'\"></mat-icon>\n <span>Presets de seção…</span>\n </button>\n <button mat-menu-item (click)=\"applyCurrentStyleToAll()\">\n <mat-icon [praxisIcon]=\"'format_paint'\"></mat-icon>\n <span>Aplicar estilo desta seção a todas</span>\n </button>\n <mat-divider></mat-divider>\n <button mat-menu-item *ngIf=\"section.description == null\" (click)=\"section.description = ''; onSectionUpdated()\">\n <mat-icon [praxisIcon]=\"'note_add'\"></mat-icon>\n <span>Adicionar descrição</span>\n </button>\n <button mat-menu-item *ngIf=\"section.description != null\" (click)=\"section.description = undefined; onSectionUpdated()\">\n <mat-icon [praxisIcon]=\"'backspace'\"></mat-icon>\n <span>Remover descrição</span>\n </button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"onRemoveSection()\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n <span>Remover seção</span>\n </button>\n </mat-menu>\n </mat-card-header>\n <mat-card-content [attr.aria-hidden]=\"isCollapsed\">\n <ng-container *ngIf=\"isThisSectionSelected(); else linhasTitle\">\n <div class=\"section-breadcrumbs\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"crumb as-button\"\n data-crumb=\"layout\"\n [attr.aria-label]=\"'Voltar ao Layout'\"\n disabled\n >\n Layout\n </button>\n <span class=\"sep\">›</span>\n <button\n type=\"button\"\n class=\"crumb as-button crumb-section\"\n data-crumb=\"section\"\n (click)=\"onSelectSectionFromBreadcrumb($event)\"\n [attr.aria-label]=\"'Selecionar Seção ' + (sectionIndex + 1)\"\n >\n Seção {{ sectionIndex + 1 }}\n </button>\n <ng-container *ngIf=\"selected?.rowIndex != null\">\n <span class=\"sep\">›</span>\n <button\n type=\"button\"\n class=\"crumb as-button crumb-row\"\n data-crumb=\"row\"\n (click)=\"onSelectRowFromBreadcrumb($event)\"\n [attr.aria-label]=\"'Selecionar Linha ' + (selected!.rowIndex! + 1)\"\n >\n Linha {{ selected!.rowIndex! + 1 }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"selected?.columnIndex != null\">\n <span class=\"sep\">›</span>\n <button\n type=\"button\"\n class=\"crumb as-button crumb-column\"\n data-crumb=\"column\"\n (click)=\"onSelectColumnFromBreadcrumb($event)\"\n [attr.aria-label]=\"'Selecionar Coluna ' + (selected!.columnIndex! + 1)\"\n >\n Coluna {{ selected!.columnIndex! + 1 }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"selected?.fieldName\">\n <span class=\"sep\">›</span>\n <span class=\"crumb active\">{{ selected!.fieldName }}</span>\n </ng-container>\n <button\n *ngIf=\"selected\"\n type=\"button\"\n class=\"crumb as-button crumb-clear\"\n data-crumb=\"clear\"\n (click)=\"onClearSelectionFromBreadcrumb($event)\"\n [attr.aria-label]=\"'Limpar seleção'\"\n >\n Limpar\n </button>\n </div>\n </ng-container>\n <ng-template #linhasTitle>\n <h5>Linhas</h5>\n </ng-template>\n <div\n class=\"row-list\"\n cdkDropList\n [cdkDropListData]=\"section.rows\"\n (cdkDropListDropped)=\"dropRow($event)\"\n >\n <praxis-row-configurator\n *ngFor=\"let row of section.rows; let i = index\"\n class=\"row-item\"\n [row]=\"row\"\n [fieldMetadata]=\"fieldMetadata\"\n [sectionIndex]=\"sectionIndex\"\n [rowIndex]=\"i\"\n [isLastRow]=\"i === section.rows.length - 1\"\n [selected]=\"selected\"\n [availableFieldsListId]=\"availableFieldsListId\"\n [connectedDropListIds]=\"columnDropListIds\"\n [gapGlobal]=\"gapGlobal\"\n (rowChange)=\"onRowUpdated(i, $event)\"\n (applyRowGapAll)=\"onApplyRowGapAll($event)\"\n (remove)=\"removeRow(i)\"\n (select)=\"select.emit($event)\"\n (fieldDrop)=\"onFieldDrop($event, i)\"\n cdkDrag\n ></praxis-row-configurator>\n </div>\n <div class=\"section-actions\" aria-label=\"Ações da seção\">\n <button\n class=\"fab-add-row\"\n mat-fab\n color=\"primary\"\n (click)=\"addRow()\"\n matTooltip=\"Adicionar linha\"\n aria-label=\"Adicionar linha\"\n >\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </mat-card-content>\n</mat-card>\n","import { Injectable } from '@angular/core';\n\n/** Tokens for theme colors used across the layout editor. */\nexport enum LayoutColorToken {\n Surface = '--md-sys-color-surface',\n SurfaceVariant = '--md-sys-color-surface-variant',\n Outline = '--md-sys-color-outline',\n Primary = '--md-sys-color-primary',\n}\n\n/**\n * Persists UI preferences of the layout editor such as the fields palette state\n * and exposes helpers to read theme tokens.\n */\n@Injectable({ providedIn: 'root' })\nexport class LayoutPrefsService {\n private readonly paletteCollapsedKey = 'layoutEditor.paletteCollapsed';\n\n /** Returns whether the fields palette is collapsed. */\n getPaletteCollapsed(): boolean {\n return localStorage.getItem(this.paletteCollapsedKey) === 'true';\n }\n\n /** Persists the collapsed state of the fields palette. */\n setPaletteCollapsed(collapsed: boolean): void {\n localStorage.setItem(this.paletteCollapsedKey, String(collapsed));\n }\n\n // Section gap preferências removidas; usar gapBottom por seção no layout\n\n /** Returns the current value for a theme color token. */\n getColor(token: LayoutColorToken): string {\n return getComputedStyle(document.documentElement)\n .getPropertyValue(token)\n .trim();\n }\n}\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n OnInit,\n inject,\n} from '@angular/core';\nimport {\n CdkDragDrop,\n DragDropModule,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport {\n FormConfig,\n FormSection,\n FormRow,\n FormColumn,\n FieldMetadata,\n} from '@praxisui/core';\nimport { SectionConfiguratorComponent } from './section-configurator.component';\nimport { FieldConfiguratorComponent } from './field-configurator.component';\nimport { LayoutColorToken, LayoutPrefsService } from './layout-prefs.service';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { FormsModule } from '@angular/forms';\nimport { produce } from 'immer';\n\ninterface FieldDropEvent {\n event: CdkDragDrop<any>;\n sectionIndex: number;\n rowIndex: number;\n}\n\n/**\n * Editor component for configuring sections, rows and fields of a dynamic form.\n * Provides a collapsible palette of available fields.\n */\n@Component({\n selector: 'praxis-layout-editor',\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n ScrollingModule,\n SectionConfiguratorComponent,\n FieldConfiguratorComponent,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatToolbarModule,\n MatButtonToggleModule,\n FormsModule,\n ],\n template: `\n <div class=\"layout-editor-wrapper\"\n cdkDropListGroup\n [class.no-available-fields]=\"!availableFields.length\"\n [style.--px-editor-section-gap.px]=\"densityConfig.sectionGap\"\n [style.--pfx-grid-gap.px]=\"densityConfig.gridGap\"\n [style.--pfx-form-stroke]=\"borderEnabled ? 'var(--md-sys-color-outline-variant)' : 'transparent'\"\n [style.--px-editor-separator-color]=\"dividerEnabled ? 'var(--md-sys-color-outline-variant)' : 'transparent'\">\n <mat-toolbar class=\"editor-toolbar\" aria-label=\"Preferências do layout\">\n <div class=\"title-block\">\n <span class=\"toolbar-title\">Layout do formulário</span>\n <span class=\"toolbar-subtitle\">Arraste campos e organize seções e colunas</span>\n </div>\n <span class=\"spacer\"></span>\n <div class=\"toolbar-group\">\n <span class=\"group-label\">Densidade</span>\n <mat-button-toggle-group [(ngModel)]=\"density\" aria-label=\"Densidade\" class=\"density-toggle\">\n <mat-button-toggle value=\"compact\" matTooltip=\"Compacta\">\n <mat-icon>view_list</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"cozy\" matTooltip=\"Aconchegante\">\n <mat-icon>view_stream</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"regular\" matTooltip=\"Regular\">\n <mat-icon>view_comfy</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div class=\"toolbar-group\">\n <span class=\"group-label\">Estilo</span>\n <mat-button-toggle-group [(ngModel)]=\"chromeToggles\" [multiple]=\"true\" class=\"toggle-icons-group\">\n <mat-button-toggle value=\"border\" matTooltip=\"Borda da seção\">\n <mat-icon>border_all</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"divider\" matTooltip=\"Separador estilo/grade\">\n <mat-icon>horizontal_rule</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div class=\"toolbar-group gap-group\">\n <span class=\"group-label\">Gap padrão entre colunas</span>\n <div class=\"gap-chip\" matTooltip=\"Padrão herdado pelas seções que não personalizaram o gap entre colunas\" aria-label=\"Espaço padrão entre colunas\">\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustGapGlobal(-4)\" aria-label=\"Reduzir gap global\">\n <mat-icon>remove</mat-icon>\n </button>\n <input\n class=\"gap-chip__input\"\n type=\"number\"\n min=\"0\"\n step=\"4\"\n [ngModel]=\"gapGlobal\"\n (ngModelChange)=\"setGapGlobal($event)\"\n aria-label=\"Valor do gap global\"\n />\n <span class=\"gap-chip__suffix\">px</span>\n <button mat-icon-button class=\"gap-chip__btn\" (click)=\"adjustGapGlobal(4)\" aria-label=\"Aumentar gap global\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n <button\n mat-icon-button\n class=\"gap-chip__btn\"\n type=\"button\"\n (click)=\"applyGapToAll()\"\n [disabled]=\"!canApplyAll()\"\n matTooltip=\"Aplicar este gap global em todas as seções sem gap personalizado\"\n aria-label=\"Aplicar gap global em todas as seções sem personalização\"\n >\n <mat-icon>done_all</mat-icon>\n </button>\n </div>\n </mat-toolbar>\n <div\n class=\"available-fields\"\n *ngIf=\"availableFields.length && !paletteCollapsed\"\n [ngStyle]=\"{\n background: prefs.getColor(colorTokens.Surface),\n borderColor: prefs.getColor(colorTokens.Outline),\n }\"\n >\n <button\n mat-icon-button\n class=\"collapse-toggle\"\n (click)=\"togglePalette()\"\n aria-label=\"Colapsar lista de campos\"\n matTooltip=\"Colapsar lista de campos\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n <h4>Campos disponíveis</h4>\n <small class=\"available-fields__hint\">Arraste para montar seções.</small>\n <div\n cdkDropList\n id=\"available-fields-list\"\n [cdkDropListData]=\"availableFields\"\n [cdkDropListConnectedTo]=\"columnDropListIds\"\n class=\"field-list\"\n >\n <praxis-field-configurator\n *ngFor=\"let field of availableFields\"\n [field]=\"field\"\n ></praxis-field-configurator>\n </div>\n </div>\n <button\n *ngIf=\"paletteCollapsed && availableFields.length\"\n mat-icon-button\n class=\"collapse-toggle\"\n (click)=\"togglePalette()\"\n aria-label=\"Expandir lista de campos\"\n matTooltip=\"Expandir lista de campos\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div class=\"layout-canvas\">\n <div class=\"no-fields-chip\" *ngIf=\"!availableFields.length\">\n Nenhum campo disponível\n </div>\n <div\n cdkDropList\n [cdkDropListData]=\"config.sections\"\n (cdkDropListDropped)=\"dropSection($event)\"\n class=\"section-list\"\n >\n <praxis-section-configurator\n *ngFor=\"let section of config.sections; let i = index; trackBy: trackBySection\"\n [section]=\"section\"\n [sectionIndex]=\"i\"\n [allSections]=\"config.sections\"\n [fieldMetadata]=\"config.fieldMetadata || []\"\n [selected]=\"selected\"\n [gapGlobal]=\"gapGlobal || 16\"\n [availableFieldsListId]=\"\n availableFields.length ? 'available-fields-list' : null\n \"\n [columnDropListIds]=\"columnDropListIds\"\n (select)=\"onSelect($event)\"\n (remove)=\"removeSection(i)\"\n (sectionChange)=\"onSectionUpdated(i, $event)\"\n (applyStyleToAll)=\"onApplyStyleToAll($event)\"\n (fieldDrop)=\"dropField($event)\"\n cdkDrag\n ></praxis-section-configurator>\n </div>\n <div class=\"add-section-container\" aria-label=\"Ações do layout\">\n <button\n mat-fab\n color=\"primary\"\n (click)=\"addSection()\"\n matTooltip=\"Adicionar seção\"\n aria-label=\"Adicionar seção\"\n class=\"fab-add-section\"\n >\n <mat-icon>add</mat-icon>\n </button>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./layout-editor.component.scss'],\n})\nexport class LayoutEditorComponent implements OnInit {\n @Input() config!: FormConfig;\n @Output() configChange = new EventEmitter<FormConfig>();\n paletteCollapsed = false;\n protected readonly prefs = inject(LayoutPrefsService);\n protected readonly colorTokens = LayoutColorToken;\n selected: { type: 'section' | 'row' | 'column' | 'field'; sectionIndex?: number; rowIndex?: number; columnIndex?: number; fieldName?: string } | null = null;\n // Global default for section gap (inherited when not customized)\n gapGlobal: number = 16;\n setGapGlobal(val: number | string): void {\n const n = Number(val);\n if (Number.isNaN(n)) return;\n this.gapGlobal = Math.max(0, n);\n }\n adjustGapGlobal(delta: number): void {\n this.setGapGlobal((this.gapGlobal ?? 0) + delta);\n }\n\n // Density control (global)\n density: 'compact' | 'cozy' | 'regular' = 'cozy';\n get densityConfig(): { gridGap: number; sectionGap: number } {\n switch (this.density) {\n case 'compact':\n return { gridGap: 8, sectionGap: 12 };\n case 'regular':\n return { gridGap: 16, sectionGap: 24 };\n case 'cozy':\n default:\n return { gridGap: 12, sectionGap: 16 };\n }\n }\n\n // Chrome toggles (border and divider)\n chromeToggles: string[] = ['border', 'divider'];\n get borderEnabled(): boolean { return this.chromeToggles.includes('border'); }\n get dividerEnabled(): boolean { return this.chromeToggles.includes('divider'); }\n\n canApplyAll(): boolean {\n if (!this.config?.sections?.length) return false;\n // Only enabled when there is at least one non-customized section\n return this.config.sections.some((s: any) => !s.gapCustomized);\n }\n\n applyGapToAll(): void {\n const px = this.gapGlobal ?? 0;\n const sections = this.config.sections.map((s: any) => {\n if (s.gapCustomized) return { ...s };\n return { ...s, gapBottom: px, gapCustomized: true };\n });\n this.emitNewConfig({ sections });\n }\n\n ngOnInit(): void {\n this.paletteCollapsed = this.prefs.getPaletteCollapsed();\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey && event.key === '.') {\n event.preventDefault();\n this.togglePalette();\n }\n }\n\n /**\n * Toggles the fields palette and persists the collapsed state.\n */\n togglePalette(): void {\n this.paletteCollapsed = !this.paletteCollapsed;\n this.prefs.setPaletteCollapsed(this.paletteCollapsed);\n }\n\n /**\n * Fields that are not yet placed in any section/column of the layout.\n */\n get availableFields(): FieldMetadata[] {\n if (!this.config || !this.config.fieldMetadata || !this.config.sections) {\n return [];\n }\n const visibleFields = this.config.fieldMetadata.filter(\n (f) => !(f as any)?.formHidden,\n );\n const placedFieldNames = new Set<string>();\n this.config.sections.forEach((s: FormSection) => {\n s.rows.forEach((r: FormRow) => {\n r.columns.forEach((c: FormColumn) => {\n c.fields.forEach((f: string) => placedFieldNames.add(f));\n });\n });\n });\n return visibleFields.filter(\n (f) => !placedFieldNames.has(f.name),\n );\n }\n\n get columnDropListIds(): string[] {\n const ids: string[] = [];\n this.config.sections.forEach((section, sIdx) => {\n section.rows.forEach((row, rIdx) => {\n row.columns.forEach((_, cIdx) =>\n ids.push(this.getColumnId(sIdx, rIdx, cIdx)),\n );\n });\n });\n return ids;\n }\n\n getColumnId(\n sectionIndex: number,\n rowIndex: number,\n columnIndex: number,\n ): string {\n return `section-${sectionIndex}-row-${rowIndex}-column-${columnIndex}`;\n }\n\n private parseColumnId(\n id: string,\n ): { sectionIndex: number; rowIndex: number; columnIndex: number } | null {\n const match = id.match(/section-(\\d+)-row-(\\d+)-column-(\\d+)/);\n return match\n ? {\n sectionIndex: Number(match[1]),\n rowIndex: Number(match[2]),\n columnIndex: Number(match[3]),\n }\n : null;\n }\n\n @Output() select = new EventEmitter<any>();\n\n // Selection helpers\n onSelect(sel: any): void {\n this.selected = sel;\n this.select.emit(sel);\n }\n clearSelection(): void {\n this.selected = null;\n }\n selectSection(sectionIndex: number): void {\n this.selected = { type: 'section', sectionIndex };\n }\n selectRow(sectionIndex: number, rowIndex: number): void {\n this.selected = { type: 'row', sectionIndex, rowIndex };\n }\n selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void {\n this.selected = { type: 'column', sectionIndex, rowIndex, columnIndex };\n }\n\n // No inspector helpers needed for now\n\n dropField({ event }: FieldDropEvent): void {\n const prevPos = this.parseColumnId(event.previousContainer.id);\n const currentPos = this.parseColumnId(event.container.id);\n\n const newConfig = produce(this.config, (draft) => {\n if (event.previousContainer.id === 'available-fields-list') {\n if (!currentPos) {\n return;\n }\n const field = event.item.data as FieldMetadata | undefined;\n if (!field) {\n return;\n }\n draft.sections[currentPos.sectionIndex].rows[\n currentPos.rowIndex\n ].columns[currentPos.columnIndex].fields.splice(\n event.currentIndex,\n 0,\n field.name,\n );\n } else if (event.container.id === 'available-fields-list') {\n if (!prevPos) {\n return;\n }\n draft.sections[prevPos.sectionIndex].rows[prevPos.rowIndex].columns[\n prevPos.columnIndex\n ].fields.splice(event.previousIndex, 1);\n } else if (\n prevPos &&\n currentPos &&\n prevPos.sectionIndex === currentPos.sectionIndex &&\n prevPos.rowIndex === currentPos.rowIndex &&\n prevPos.columnIndex === currentPos.columnIndex\n ) {\n const fields =\n draft.sections[currentPos.sectionIndex].rows[currentPos.rowIndex]\n .columns[currentPos.columnIndex].fields;\n moveItemInArray(fields, event.previousIndex, event.currentIndex);\n } else if (prevPos && currentPos) {\n const prevFields =\n draft.sections[prevPos.sectionIndex].rows[prevPos.rowIndex].columns[\n prevPos.columnIndex\n ].fields;\n const currFields =\n draft.sections[currentPos.sectionIndex].rows[currentPos.rowIndex]\n .columns[currentPos.columnIndex].fields;\n transferArrayItem(\n prevFields,\n currFields,\n event.previousIndex,\n event.currentIndex,\n );\n }\n });\n this.config = newConfig;\n this.configChange.emit(this.config);\n }\n\n dropSection(event: CdkDragDrop<FormSection[]>) {\n const sections = [...this.config.sections];\n if (event.previousContainer === event.container) {\n moveItemInArray(sections, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex,\n );\n }\n this.emitNewConfig({ sections });\n }\n\n addSection(): void {\n const newSection: FormSection & { gapCustomized?: boolean } = {\n id: `section_${Date.now()}`,\n title: 'Nova Seção',\n rows: [],\n gapCustomized: false,\n };\n const sections = [...this.config.sections, newSection];\n this.emitNewConfig({ sections });\n }\n\n removeSection(index: number): void {\n const sections = [...this.config.sections];\n sections.splice(index, 1);\n this.emitNewConfig({ sections });\n }\n\n onSectionUpdated(index: number, updatedSection: FormSection): void {\n const sections = [...this.config.sections];\n sections[index] = updatedSection;\n try {\n console.info('[LayoutEditor] section updated', {\n sectionIndex: index,\n rows: updatedSection.rows?.map((r) => ({\n id: r.id,\n rowGap: (r as any).rowGap ?? null,\n gap: (r as any).gap ?? null,\n })),\n });\n } catch { }\n this.emitNewConfig({ sections });\n }\n\n private emitNewConfig(configChanges: Partial<FormConfig>): void {\n const newConfig: FormConfig = {\n ...this.config,\n ...configChanges,\n };\n this.configChange.emit(newConfig);\n }\n\n onApplyStyleToAll(patch: Partial<FormSection>): void {\n const sections = this.config.sections.map((s) => ({ ...s, ...patch }));\n this.emitNewConfig({ sections });\n }\n\n // Keep section component instances stable to avoid collapsing expansion panels on small updates\n trackBySection(index: number, s: FormSection & { id?: string }): string | number {\n return s.id ?? index;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { FormConfig, FormBehaviorLayout } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-behavior-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatDividerModule,\n ],\n template: `\n <div class=\"behavior-editor-form\">\n <mat-slide-toggle\n [checked]=\"behavior.confirmOnUnsavedChanges\"\n (change)=\"updateBehavior('confirmOnUnsavedChanges', $event.checked)\"\n >\n Confirmar ao sair com alterações não salvas\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"behavior.trackHistory\"\n (change)=\"updateBehavior('trackHistory', $event.checked)\"\n >\n Rastrear histórico de alterações\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"behavior.focusFirstError\"\n (change)=\"updateBehavior('focusFirstError', $event.checked)\"\n >\n Focar no primeiro erro ao submeter\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"behavior.scrollToErrors\"\n (change)=\"updateBehavior('scrollToErrors', $event.checked)\"\n >\n Rolar até os erros ao submeter\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"behavior.clearAfterSave\"\n (change)=\"updateBehavior('clearAfterSave', $event.checked)\"\n >\n Limpar formulário após salvar\n </mat-slide-toggle>\n\n <mat-form-field>\n <mat-label>Redirecionar após salvar (URL)</mat-label>\n <input\n matInput\n [value]=\"behavior.redirectAfterSave || ''\"\n (input)=\"\n updateBehavior('redirectAfterSave', $any($event.target).value ?? '')\n \"\n />\n </mat-form-field>\n\n <mat-divider></mat-divider>\n\n <h4 class=\"section-title\">Animação de montagem</h4>\n <mat-slide-toggle\n [checked]=\"!behavior.disableMountAnimation\"\n (change)=\"updateBehavior('disableMountAnimation', !$event.checked)\"\n >\n Habilitar animação sutil ao montar o formulário\n </mat-slide-toggle>\n\n <div class=\"behavior-grid\" *ngIf=\"!behavior.disableMountAnimation\">\n <mat-form-field>\n <mat-label>Duração (ms)</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"80\"\n max=\"400\"\n [value]=\"behavior.mountAnimation?.durationMs ?? ''\"\n (input)=\"updateMountAnimation('durationMs', $any($event.target).value)\"\n placeholder=\"160\"\n />\n <mat-hint>Recomendado: 120–220ms</mat-hint>\n <mat-hint *ngIf=\"isOutOfRange('durationMs')\" class=\"warn-hint\">Fora da faixa recomendada</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Offset (px)</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n max=\"12\"\n [value]=\"behavior.mountAnimation?.offsetPx ?? ''\"\n (input)=\"updateMountAnimation('offsetPx', $any($event.target).value)\"\n placeholder=\"6\"\n />\n <mat-hint>Recomendado: 4–8px</mat-hint>\n <mat-hint *ngIf=\"isOutOfRange('offsetPx')\" class=\"warn-hint\">Fora da faixa recomendada</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Stagger (ms)</mat-label>\n <input\n matInput\n type=\"number\"\n min=\"0\"\n max=\"60\"\n [value]=\"behavior.mountAnimation?.staggerMs ?? ''\"\n (input)=\"updateMountAnimation('staggerMs', $any($event.target).value)\"\n placeholder=\"20\"\n />\n <mat-hint>Recomendado: 12–28ms</mat-hint>\n <mat-hint *ngIf=\"isOutOfRange('staggerMs')\" class=\"warn-hint\">Fora da faixa recomendada</mat-hint>\n </mat-form-field>\n </div>\n <button mat-stroked-button type=\"button\" (click)=\"resetMountAnimation()\" *ngIf=\"!behavior.disableMountAnimation\">\n Resetar animação para padrão\n </button>\n </div>\n `,\n styles: [\n `\n .behavior-editor-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n .section-title {\n margin: 6px 0 0;\n font-size: 0.95rem;\n font-weight: 600;\n }\n .behavior-grid {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 12px;\n }\n .warn-hint {\n color: var(--md-sys-color-error, #b42318);\n }\n @media (max-width: 900px) {\n .behavior-grid {\n grid-template-columns: 1fr;\n }\n }\n `,\n ],\n})\nexport class BehaviorEditorComponent {\n @Input() config!: FormConfig;\n @Output() configChange = new EventEmitter<FormConfig>();\n\n get behavior(): FormBehaviorLayout {\n return this.config.behavior || {};\n }\n\n updateBehavior(key: keyof FormBehaviorLayout, value: any): void {\n const newConfig = {\n ...this.config,\n behavior: {\n ...this.behavior,\n [key]: value,\n },\n };\n this.config = newConfig;\n this.configChange.emit(this.config);\n }\n\n updateMountAnimation(\n key: 'durationMs' | 'offsetPx' | 'staggerMs',\n value: any,\n ): void {\n const parsed = value === '' || value === null || value === undefined\n ? undefined\n : Number(value);\n const next = {\n ...this.behavior.mountAnimation,\n [key]: isFinite(parsed as number) ? parsed : undefined,\n };\n this.updateBehavior('mountAnimation', next);\n }\n\n isOutOfRange(key: 'durationMs' | 'offsetPx' | 'staggerMs'): boolean {\n const v = this.behavior.mountAnimation?.[key];\n if (typeof v !== 'number' || !isFinite(v)) return false;\n if (key === 'durationMs') return v < 120 || v > 220;\n if (key === 'offsetPx') return v < 4 || v > 8;\n return v < 12 || v > 28;\n }\n\n resetMountAnimation(): void {\n this.updateBehavior('mountAnimation', {\n durationMs: 160,\n offsetPx: 6,\n staggerMs: 20,\n });\n }\n}\n","import type { PraxisI18nConfig } from '@praxisui/core';\n\nexport const ACTIONS_EDITOR_I18N_NAMESPACE = 'praxisDynamicFormActionsEditor';\n\nexport const ACTIONS_EDITOR_I18N_CONFIG: Partial<PraxisI18nConfig> = {\n namespaces: {\n [ACTIONS_EDITOR_I18N_NAMESPACE]: {\n 'pt-BR': {\n 'global.title': 'Configuracao da acao global',\n 'global.section.essential': 'Essencial',\n 'global.section.dialogOptional': 'Dialogo (opcional)',\n 'global.validation.validJson': 'Informe um JSON valido.',\n 'tabs.defaultButtons': 'Botoes padrao',\n 'tabs.customButtons': 'Botoes customizados',\n 'tabs.layout': 'Layout',\n 'default.submit.title': 'Botao de submeter (submit)',\n 'default.cancel.title': 'Botao de cancelar (cancel)',\n 'default.reset.title': 'Botao de limpar (reset)',\n 'field.visible': 'Visivel',\n 'field.label': 'Label',\n 'field.icon': 'Icone',\n 'field.variant': 'Variante',\n 'field.color': 'Cor',\n 'field.shortcut': 'Atalho de teclado',\n 'field.shortcut.submitPlaceholder': 'Ex.: ctrl+s',\n 'field.shortcut.cancelPlaceholder': 'Ex.: esc',\n 'field.shortcut.resetPlaceholder': 'Ex.: ctrl+shift+r',\n 'variant.raised': 'Elevado (raised)',\n 'variant.stroked': 'Contornado (stroked)',\n 'variant.flat': 'Plano (flat)',\n 'variant.fab': 'Flutuante (fab)',\n 'custom.addButton': 'Adicionar botao',\n 'custom.defaultTitle': 'Novo botao customizado',\n 'custom.id': 'ID da acao',\n 'custom.action': 'Acao',\n 'custom.globalGroup': 'Acoes globais',\n 'custom.action.custom': 'Customizada',\n 'custom.action.help':\n 'Acoes globais exigem executor no app (ActionResolver). Customizadas so emitem evento. Cor e posicao afetam o botao.',\n 'custom.action.customPlaceholder': 'Ex.: custom_action, navigate, delete',\n 'custom.parameter': 'Parametro',\n 'custom.parameterRequired': 'Parametro obrigatorio.',\n 'custom.buttonColor': 'Cor do botao',\n 'custom.remove': 'Remover este botao',\n 'layout.placement': 'Posicao estrutural',\n 'layout.placement.insideLastSection': 'Dentro da ultima secao',\n 'layout.placement.afterSections': 'Apos as secoes',\n 'layout.placement.top': 'Antes das secoes',\n 'layout.gapTop': 'Espaco acima (px)',\n 'layout.gapTop.placeholder': '(padrao)',\n 'layout.alignment': 'Alinhamento dos botoes',\n 'layout.alignment.left': 'Esquerda',\n 'layout.alignment.center': 'Centro',\n 'layout.alignment.right': 'Direita',\n 'layout.alignment.justified': 'Justificado',\n 'layout.alignment.split': 'Separado',\n 'layout.orientation': 'Orientacao',\n 'layout.orientation.horizontal': 'Horizontal',\n 'layout.orientation.vertical': 'Vertical',\n 'layout.spacing': 'Espacamento',\n 'layout.spacing.compact': 'Compacto',\n 'layout.spacing.normal': 'Normal',\n 'layout.spacing.spacious': 'Espacado',\n 'layout.divider': 'Exibir divisor superior',\n 'layout.containerClassName': 'Classe do container',\n 'layout.containerStyles': 'Estilos do container (JSON)',\n 'layout.sticky': 'Barra de acoes fixa (sticky)',\n 'layout.mobile.title': 'Configuracoes mobile',\n 'layout.mobile.collapse': 'Colapsar em menu no mobile',\n 'layout.mobile.alignment': 'Alinhamento (mobile)',\n 'layout.mobile.orientation': 'Orientacao (mobile)',\n 'layout.mobile.default': 'Padrao',\n 'globalAction.payload.label': 'Payload (JSON opcional)',\n 'globalAction.payload.hint':\n 'Use JSON quando a acao global do app exigir payload estruturado.',\n 'custom.variant': 'Variante',\n 'custom.size': 'Tamanho',\n 'custom.size.small': 'Pequeno',\n 'custom.size.medium': 'Médio',\n 'custom.size.large': 'Grande',\n 'custom.tooltip': 'Tooltip',\n 'custom.shortcut': 'Atalho de Teclado',\n 'custom.shortcut.placeholder': 'Ex.: ctrl+shift+a',\n 'custom.className': 'Classe CSS',\n 'custom.disabled': 'Desabilitado',\n 'custom.loading': 'Loading',\n 'custom.style': 'Estilos do botão (JSON)',\n 'custom.style.placeholder': '{\"borderRadius\":\"999px\"}',\n 'custom.order.moveUp': 'Mover \"{{label}}\" para cima',\n 'custom.order.moveDown': 'Mover \"{{label}}\" para baixo',\n 'custom.order.moveUp.tooltip': 'Mover para cima',\n 'custom.order.moveDown.tooltip': 'Mover para baixo',\n 'custom.validation.invalidJson': 'JSON inválido.',\n 'custom.validation.objectJson': 'Informe um objeto JSON válido.',\n },\n 'en-US': {\n 'global.title': 'Global action settings',\n 'global.section.essential': 'Essential',\n 'global.section.dialogOptional': 'Dialog (optional)',\n 'global.validation.validJson': 'Provide valid JSON.',\n 'tabs.defaultButtons': 'Default buttons',\n 'tabs.customButtons': 'Custom buttons',\n 'tabs.layout': 'Layout',\n 'default.submit.title': 'Submit button (submit)',\n 'default.cancel.title': 'Cancel button (cancel)',\n 'default.reset.title': 'Reset button (reset)',\n 'field.visible': 'Visible',\n 'field.label': 'Label',\n 'field.icon': 'Icon',\n 'field.variant': 'Variant',\n 'field.color': 'Color',\n 'field.shortcut': 'Keyboard shortcut',\n 'field.shortcut.submitPlaceholder': 'Example: ctrl+s',\n 'field.shortcut.cancelPlaceholder': 'Example: esc',\n 'field.shortcut.resetPlaceholder': 'Example: ctrl+shift+r',\n 'variant.raised': 'Raised',\n 'variant.stroked': 'Stroked',\n 'variant.flat': 'Flat',\n 'variant.fab': 'FAB',\n 'custom.addButton': 'Add button',\n 'custom.defaultTitle': 'New custom button',\n 'custom.id': 'Action ID',\n 'custom.action': 'Action',\n 'custom.globalGroup': 'Global actions',\n 'custom.action.custom': 'Custom',\n 'custom.action.help':\n 'Global actions require an app-side executor (ActionResolver). Custom actions only emit events. Color and position affect the button.',\n 'custom.action.customPlaceholder': 'Example: custom_action, navigate, delete',\n 'custom.parameter': 'Parameter',\n 'custom.parameterRequired': 'Required parameter.',\n 'custom.buttonColor': 'Button color',\n 'custom.remove': 'Remove this button',\n 'layout.placement': 'Structural position',\n 'layout.placement.insideLastSection': 'Inside the last section',\n 'layout.placement.afterSections': 'After sections',\n 'layout.placement.top': 'Before sections',\n 'layout.gapTop': 'Top spacing (px)',\n 'layout.gapTop.placeholder': '(default)',\n 'layout.alignment': 'Button alignment',\n 'layout.alignment.left': 'Left',\n 'layout.alignment.center': 'Center',\n 'layout.alignment.right': 'Right',\n 'layout.alignment.justified': 'Justified',\n 'layout.alignment.split': 'Split',\n 'layout.orientation': 'Orientation',\n 'layout.orientation.horizontal': 'Horizontal',\n 'layout.orientation.vertical': 'Vertical',\n 'layout.spacing': 'Spacing',\n 'layout.spacing.compact': 'Compact',\n 'layout.spacing.normal': 'Normal',\n 'layout.spacing.spacious': 'Spacious',\n 'layout.divider': 'Show top divider',\n 'layout.containerClassName': 'Container class',\n 'layout.containerStyles': 'Container styles (JSON)',\n 'layout.sticky': 'Sticky action bar',\n 'layout.mobile.title': 'Mobile settings',\n 'layout.mobile.collapse': 'Collapse into menu on mobile',\n 'layout.mobile.alignment': 'Alignment (mobile)',\n 'layout.mobile.orientation': 'Orientation (mobile)',\n 'layout.mobile.default': 'Default',\n 'globalAction.payload.label': 'Payload (optional JSON)',\n 'globalAction.payload.hint':\n 'Use JSON when the global app action requires structured payload.',\n 'custom.variant': 'Variant',\n 'custom.size': 'Size',\n 'custom.size.small': 'Small',\n 'custom.size.medium': 'Medium',\n 'custom.size.large': 'Large',\n 'custom.tooltip': 'Tooltip',\n 'custom.shortcut': 'Keyboard shortcut',\n 'custom.shortcut.placeholder': 'Example: ctrl+shift+a',\n 'custom.className': 'CSS class',\n 'custom.disabled': 'Disabled',\n 'custom.loading': 'Loading',\n 'custom.style': 'Button styles (JSON)',\n 'custom.style.placeholder': '{\"borderRadius\":\"999px\"}',\n 'custom.order.moveUp': 'Move \"{{label}}\" up',\n 'custom.order.moveDown': 'Move \"{{label}}\" down',\n 'custom.order.moveUp.tooltip': 'Move up',\n 'custom.order.moveDown.tooltip': 'Move down',\n 'custom.validation.invalidJson': 'Invalid JSON.',\n 'custom.validation.objectJson': 'Provide a valid JSON object.',\n },\n },\n },\n};\n","import type {\n GlobalActionCatalogEntry,\n GlobalActionField,\n GlobalActionSpec,\n SurfaceOpenPayload,\n} from '@praxisui/core';\n\nexport type ActionCatalogOption = {\n id: string;\n label: string;\n description?: string;\n param?: {\n required?: boolean;\n label?: string;\n placeholder?: string;\n hint?: string;\n example?: string;\n };\n};\n\nexport type ParsedActionValue = {\n id: string;\n param: string;\n isGlobal: boolean;\n raw: string;\n};\n\nexport type ActionParamInfo = ParsedActionValue & {\n isJson: boolean;\n json?: any;\n};\n\nexport function buildGlobalActionCatalog(params: {\n legacySpecs: GlobalActionSpec[];\n injectedCatalog: GlobalActionCatalogEntry[];\n fallbackCatalog: GlobalActionCatalogEntry[];\n mapLegacySpec?: (spec: GlobalActionSpec) => ActionCatalogOption;\n mapCatalogEntry?: (entry: GlobalActionCatalogEntry) => ActionCatalogOption;\n}): ActionCatalogOption[] {\n const merged = new Map<string, ActionCatalogOption>();\n for (const spec of params.legacySpecs) {\n const mapped = params.mapLegacySpec\n ? params.mapLegacySpec(spec)\n : { ...spec };\n merged.set(mapped.id, mapped);\n }\n\n const source = params.injectedCatalog.length\n ? params.injectedCatalog\n : params.fallbackCatalog;\n for (const entry of source) {\n if (merged.has(entry.id)) continue;\n const mapped = params.mapCatalogEntry\n ? params.mapCatalogEntry(entry)\n : {\n id: entry.id,\n label: entry.label,\n description: entry.description,\n };\n merged.set(mapped.id, mapped);\n }\n\n return Array.from(merged.values());\n}\n\nexport function parseActionValue(\n value: string | undefined,\n catalog: ActionCatalogOption[],\n customActionValue = '__custom__',\n): ParsedActionValue {\n const raw = String(value || '').trim();\n if (!raw) {\n return { id: customActionValue, param: '', isGlobal: false, raw: '' };\n }\n const [prefix, ...rest] = raw.split(':');\n const candidate = catalog.find((item) => item.id === prefix);\n if (candidate) {\n return {\n id: candidate.id,\n param: rest.join(':'),\n isGlobal: true,\n raw,\n };\n }\n const exact = catalog.find((item) => item.id === raw);\n if (exact) {\n return { id: exact.id, param: '', isGlobal: true, raw };\n }\n return { id: customActionValue, param: '', isGlobal: false, raw };\n}\n\nexport function getActionParamInfo(\n value: string | undefined,\n catalog: ActionCatalogOption[],\n customActionValue = '__custom__',\n): ActionParamInfo {\n const parsed = parseActionValue(value, catalog, customActionValue);\n const param = parsed.param || '';\n const trimmed = param.trim();\n const looksJson =\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'));\n if (looksJson) {\n try {\n const json = JSON.parse(trimmed);\n if (json && typeof json === 'object') {\n return { ...parsed, param, isJson: true, json };\n }\n } catch {\n // ignore malformed legacy value\n }\n }\n return { ...parsed, param, isJson: false, json: undefined };\n}\n\nexport function normalizeSurfaceOpenPayload(\n payload?: Partial<SurfaceOpenPayload>,\n): SurfaceOpenPayload {\n return {\n presentation: payload?.presentation === 'drawer' ? 'drawer' : 'modal',\n title: payload?.title,\n subtitle: payload?.subtitle,\n icon: payload?.icon,\n size:\n payload?.size && Object.keys(payload.size).length\n ? { ...payload.size }\n : undefined,\n widget: {\n id: String(payload?.widget?.id || ''),\n inputs: { ...(payload?.widget?.inputs || {}) },\n bindingOrder: payload?.widget?.bindingOrder?.length\n ? [...payload.widget.bindingOrder]\n : undefined,\n },\n bindings: payload?.bindings?.length\n ? payload.bindings.map(\n (binding: NonNullable<SurfaceOpenPayload['bindings']>[number]) => ({\n ...binding,\n }),\n )\n : [],\n context:\n payload?.context &&\n typeof payload.context === 'object' &&\n !Array.isArray(payload.context)\n ? { ...payload.context }\n : undefined,\n };\n}\n\nexport function serializeGlobalActionParam(\n actionId: string,\n values: Record<string, any>,\n existingJson?: any,\n): string {\n const payload = buildGlobalActionPayload(values, existingJson);\n const preferJson = !!(existingJson && Object.keys(existingJson).length);\n const primary = buildPrimaryParam(actionId, values, payload, preferJson);\n if (primary) return primary;\n if (!payload || Object.keys(payload).length === 0) return '';\n return JSON.stringify(payload);\n}\n\nexport function isRequiredParamMissing(\n value: string | undefined,\n catalog: ActionCatalogOption[],\n customActionValue = '__custom__',\n): boolean {\n const parsed = parseActionValue(value, catalog, customActionValue);\n const spec = catalog.find((item) => item.id === parsed.id);\n if (!parsed.isGlobal || !spec?.param?.required) return false;\n return !String(parsed.param || '').trim();\n}\n\nexport function isEquivalentActionFieldValue(\n actual: any,\n draft: any,\n fieldType: GlobalActionField['type'],\n): boolean {\n if (fieldType === 'toggle') {\n return Boolean(actual) === Boolean(draft);\n }\n if (fieldType === 'number') {\n return String(actual ?? '') === String(draft ?? '');\n }\n return String(actual ?? '') === String(draft ?? '');\n}\n\nexport function parseMethodAndUrl(raw: string): {\n method?: string;\n url?: string;\n} {\n const text = String(raw || '').trim();\n if (!text) return {};\n const idx = text.indexOf(':');\n if (idx > 0) {\n return {\n method: text.slice(0, idx).toUpperCase(),\n url: text.slice(idx + 1),\n };\n }\n return { url: text };\n}\n\nexport function stringifyJson(value: any): string {\n if (value === undefined || value === null || value === '') return '';\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return '';\n }\n}\n\nfunction buildPrimaryParam(\n actionId: string,\n values: any,\n payload: any,\n preferJson: boolean,\n): string | '' {\n if (preferJson) return '';\n const onlyPayload = payload ? Object.keys(payload).length : 0;\n const text = (value?: any) => String(value || '').trim();\n if (actionId === 'navigate' || actionId === 'openUrl') {\n const url = text(values.url);\n if (url && onlyPayload === 1) return url;\n }\n if (\n actionId === 'showAlert' ||\n actionId === 'confirm' ||\n actionId === 'alert' ||\n actionId === 'prompt'\n ) {\n const message = text(values.message);\n if (message && onlyPayload === 1) return message;\n }\n if (actionId === 'download') {\n const url = text(values.url);\n if (url && onlyPayload === 1) return url;\n }\n if (actionId === 'copyToClipboard') {\n const copyText = text(values.text);\n if (copyText && onlyPayload === 1) return copyText;\n }\n if (\n actionId === 'saveFormDraft' ||\n actionId === 'loadFormDraft' ||\n actionId === 'clearFormDraft'\n ) {\n const key = text(values.key);\n if (key && onlyPayload === 1) return key;\n }\n if (actionId === 'refreshOptions' || actionId === 'loadDependentData') {\n const field = text(values.field);\n if (field && onlyPayload === 1) return field;\n }\n if (actionId === 'apiCall') {\n const method = text(values.method);\n const url = text(values.url);\n if (url && onlyPayload <= 2) {\n return method ? `${method}:${url}` : url;\n }\n }\n return '';\n}\n\nfunction buildGlobalActionPayload(values: any, existingJson?: any): any {\n const payload: any = {};\n const hasText = (value: any) => {\n if (value === undefined || value === null) return false;\n const text = String(value).trim();\n return text.length > 0;\n };\n const toText = (value: any) =>\n hasText(value) ? String(value).trim() : undefined;\n const toNumber = (value: any) => {\n if (!hasText(value)) return undefined;\n const num = Number(value);\n return Number.isFinite(num) ? num : undefined;\n };\n const toJson = (value: any) => {\n if (value === undefined || value === null || value === '') return undefined;\n if (typeof value === 'object') return value;\n const raw = String(value).trim();\n if (!raw) return undefined;\n try {\n return JSON.parse(raw);\n } catch {\n return undefined;\n }\n };\n const includeBool = (key: string, value: any) => {\n if (value === true) {\n payload[key] = true;\n } else if (\n value === false &&\n existingJson &&\n Object.prototype.hasOwnProperty.call(existingJson, key)\n ) {\n payload[key] = false;\n }\n };\n\n const message = toText(values.message);\n if (message) payload.message = message;\n const title = toText(values.title);\n if (title) payload.title = title;\n const themeColor = toText(values.themeColor);\n if (themeColor) payload.themeColor = themeColor;\n\n const positionTop = toText(values.positionTop);\n const positionRight = toText(values.positionRight);\n const positionBottom = toText(values.positionBottom);\n const positionLeft = toText(values.positionLeft);\n if (positionTop || positionRight || positionBottom || positionLeft) {\n payload.position = {\n ...(positionTop ? { top: positionTop } : {}),\n ...(positionRight ? { right: positionRight } : {}),\n ...(positionBottom ? { bottom: positionBottom } : {}),\n ...(positionLeft ? { left: positionLeft } : {}),\n };\n }\n\n const actionsLayout = toText(values.actionsLayout);\n if (actionsLayout) payload.actionsLayout = actionsLayout;\n\n const animationType = toText(values.animationType);\n const animationDirection = toText(values.animationDirection);\n const animationDuration = toNumber(values.animationDuration);\n if (animationType || animationDirection || animationDuration !== undefined) {\n payload.animation = {\n ...(animationType ? { type: animationType } : {}),\n ...(animationDirection ? { direction: animationDirection } : {}),\n ...(animationDuration !== undefined ? { duration: animationDuration } : {}),\n };\n }\n\n const width = toText(values.width);\n const height = toText(values.height);\n const minWidth = toText(values.minWidth);\n const maxWidth = toText(values.maxWidth);\n const minHeight = toText(values.minHeight);\n const maxHeight = toText(values.maxHeight);\n if (width) payload.width = width;\n if (height) payload.height = height;\n if (minWidth) payload.minWidth = minWidth;\n if (maxWidth) payload.maxWidth = maxWidth;\n if (minHeight) payload.minHeight = minHeight;\n if (maxHeight) payload.maxHeight = maxHeight;\n\n includeBool('disableClose', values.disableClose);\n includeBool('hasBackdrop', values.hasBackdrop);\n includeBool('closeOnBackdropClick', values.closeOnBackdropClick);\n includeBool('autoFocus', values.autoFocus);\n includeBool('restoreFocus', values.restoreFocus);\n\n const backdropClass = toText(values.backdropClass);\n const panelClass = toText(values.panelClass);\n if (backdropClass) payload.backdropClass = backdropClass;\n if (panelClass) payload.panelClass = panelClass;\n\n const autoFocusedElement = toText(values.autoFocusedElement);\n if (autoFocusedElement) payload.autoFocusedElement = autoFocusedElement;\n\n const ariaRole = toText(values.ariaRole);\n const ariaLabel = toText(values.ariaLabel);\n const ariaLabelledBy = toText(values.ariaLabelledBy);\n const ariaDescribedBy = toText(values.ariaDescribedBy);\n if (ariaRole) payload.ariaRole = ariaRole;\n if (ariaLabel) payload.ariaLabel = ariaLabel;\n if (ariaLabelledBy) payload.ariaLabelledBy = ariaLabelledBy;\n if (ariaDescribedBy) payload.ariaDescribedBy = ariaDescribedBy;\n\n const styles = toJson(values.styles);\n if (styles) payload.styles = styles;\n\n const confirmLabel = toText(values.confirmLabel);\n if (confirmLabel) payload.confirmLabel = confirmLabel;\n const cancelLabel = toText(values.cancelLabel);\n if (cancelLabel) payload.cancelLabel = cancelLabel;\n const okLabel = toText(values.okLabel);\n if (okLabel) payload.okLabel = okLabel;\n const placeholder = toText(values.placeholder);\n if (placeholder) payload.placeholder = placeholder;\n const defaultValue = toText(values.defaultValue);\n if (defaultValue) payload.defaultValue = defaultValue;\n\n if (values.mode === true) {\n payload.mode = 'dialog';\n }\n\n const url = toText(values.url);\n if (url) payload.url = url;\n const target = toText(values.target);\n if (target) payload.target = target;\n includeBool('newTab', values.newTab);\n includeBool('replaceUrl', values.replaceUrl);\n\n const method = toText(values.method);\n if (method) payload.method = method;\n const bodySource = toText(values.bodySource);\n if (bodySource) payload.bodySource = bodySource;\n const headers = toJson(values.headers);\n if (headers) payload.headers = headers;\n const body = toJson(values.body);\n if (body) payload.body = body;\n\n const key = toText(values.key);\n if (key) payload.key = key;\n const field = toText(values.field);\n if (field) payload.field = field;\n const copyText = toText(values.text);\n if (copyText) payload.text = copyText;\n includeBool('useFieldValue', values.useFieldValue);\n\n const contentType = toText(values.contentType);\n if (contentType) payload.contentType = contentType;\n const templateId = toText(values.templateId);\n if (templateId) payload.templateId = templateId;\n const componentRef = toText(values.componentRef);\n if (componentRef) payload.componentRef = componentRef;\n const safeHtml = toText(values.safeHtml);\n if (safeHtml) payload.safeHtml = safeHtml;\n const contentData = toJson(values.contentData);\n if (contentData !== undefined) {\n payload.content = { ...(payload.content || {}), data: contentData };\n }\n\n return payload;\n}\n","import { Component, EventEmitter, Input, Output, OnChanges, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n FormConfig,\n FormActionsLayout,\n FormActionButton,\n GLOBAL_ACTION_CATALOG,\n GLOBAL_ACTION_SPEC_CATALOG,\n PRAXIS_GLOBAL_ACTION_CATALOG,\n SurfaceOpenActionEditorComponent,\n type SurfaceOpenPayload,\n getGlobalActionCatalog,\n getGlobalActionUiSchema,\n type GlobalActionCatalogEntry,\n type GlobalActionField,\n PraxisI18nService,\n providePraxisI18nConfig,\n SURFACE_OPEN_I18N_CONFIG,\n SURFACE_OPEN_I18N_NAMESPACE,\n} from '@praxisui/core';\nimport {\n ACTIONS_EDITOR_I18N_CONFIG,\n ACTIONS_EDITOR_I18N_NAMESPACE,\n} from './actions-editor.i18n';\nimport {\n type ActionCatalogOption,\n buildGlobalActionCatalog,\n getActionParamInfo,\n isEquivalentActionFieldValue,\n normalizeSurfaceOpenPayload,\n parseActionValue,\n parseMethodAndUrl,\n serializeGlobalActionParam,\n stringifyJson,\n} from '../action-authoring/global-action-authoring.util';\n\ntype EditableActionButtonKey = keyof FormActionButton | 'className' | 'style';\n\n@Component({\n selector: 'praxis-actions-editor',\n standalone: true,\n providers: [\n providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG),\n providePraxisI18nConfig(ACTIONS_EDITOR_I18N_CONFIG),\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatSelectModule,\n MatTabsModule,\n MatExpansionModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n SurfaceOpenActionEditorComponent,\n ],\n template: `\n <ng-template #globalActionFields let-action let-index=\"index\">\n @if (getGlobalActionSchema(action); as schema) {\n <div class=\"action-global-fields\">\n <div class=\"action-global-title\">{{ tx('global.title', 'Global action settings') }}</div>\n @if (schema.editorMode === 'surface-open') {\n <praxis-surface-open-action-editor\n [value]=\"getSurfaceOpenActionPayload(action)\"\n hostKind=\"form\"\n (valueChange)=\"onSurfaceOpenActionPayloadChange(action, $event, index)\"\n ></praxis-surface-open-action-editor>\n } @else {\n <div class=\"action-global-grid\">\n @for (field of schema.fields; track field.key) {\n @if (shouldShowGlobalActionField(action, field)) {\n @if (schema.id === 'showAlert' && field.key === 'message') {\n <div class=\"action-section-title\">{{ tx('global.section.essential', 'Essential') }}</div>\n }\n @if (schema.id === 'showAlert' && field.key === 'title') {\n <div class=\"action-section-title\">{{ tx('global.section.dialogOptional', 'Dialog (optional)') }}</div>\n }\n @if (field.type === 'toggle') {\n <mat-slide-toggle\n [ngModel]=\"getGlobalActionFieldValue(action, field)\"\n (ngModelChange)=\"onGlobalActionFieldChange(action, field, $event, index)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n {{ field.label }}\n @if (field.hint) {\n <button\n mat-icon-button\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"field.hint\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n }\n </mat-slide-toggle>\n } @else if (field.type === 'textarea') {\n <mat-form-field>\n <mat-label>{{ field.label }}</mat-label>\n <textarea\n matInput\n [rows]=\"field.rows || 2\"\n [ngModel]=\"getGlobalActionFieldValue(action, field)\"\n (ngModelChange)=\"onGlobalActionFieldChange(action, field, $event, index)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"field.placeholder || ''\"\n ></textarea>\n @if (field.hint) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"field.hint\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n }\n </mat-form-field>\n } @else if (field.type === 'json') {\n <mat-form-field>\n <mat-label>{{ field.label }}</mat-label>\n <textarea\n matInput\n [rows]=\"field.rows || 3\"\n [ngModel]=\"getGlobalActionFieldValue(action, field)\"\n (ngModelChange)=\"onGlobalActionFieldChange(action, field, $event, index)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"field.placeholder || '{ }'\"\n ></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"tx('global.validation.validJson', 'Provide valid JSON.')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n @if (hasActionFieldError(action, field.key)) {\n <mat-error>{{ getActionFieldError(action, field.key) }}</mat-error>\n }\n </mat-form-field>\n } @else if (field.type === 'select') {\n <mat-form-field>\n <mat-label>{{ field.label }}</mat-label>\n <mat-select\n [ngModel]=\"getGlobalActionFieldValue(action, field)\"\n (ngModelChange)=\"onGlobalActionFieldChange(action, field, $event, index)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n @for (opt of field.options || []; track opt.value) {\n <mat-option [value]=\"opt.value\">{{ opt.label }}</mat-option>\n }\n </mat-select>\n @if (field.hint) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"field.hint\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n }\n </mat-form-field>\n } @else {\n <mat-form-field>\n <mat-label>{{ field.label }}</mat-label>\n <input\n matInput\n [type]=\"field.type === 'number' ? 'number' : 'text'\"\n [ngModel]=\"getGlobalActionFieldValue(action, field)\"\n (ngModelChange)=\"onGlobalActionFieldChange(action, field, $event, index)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"field.placeholder || ''\"\n />\n @if (field.hint) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"field.hint\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n }\n </mat-form-field>\n }\n }\n }\n </div>\n }\n </div>\n }\n </ng-template>\n <mat-tab-group>\n <mat-tab [label]=\"tx('tabs.defaultButtons', 'Default buttons')\">\n <div class=\"editor-container\">\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ tx('default.submit.title', 'Submit button (submit)') }}\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"action-fields\">\n <mat-slide-toggle\n [checked]=\"actions.submit.visible\"\n (change)=\"updateAction('submit', 'visible', $event.checked)\"\n >{{ tx('field.visible', 'Visible') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('field.label', 'Label') }}</mat-label>\n <input\n matInput\n [value]=\"actions.submit.label\"\n (input)=\"\n updateAction(\n 'submit',\n 'label',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.icon', 'Icon') }}</mat-label>\n <input\n matInput\n [value]=\"actions.submit.icon\"\n (input)=\"\n updateAction(\n 'submit',\n 'icon',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.variant', 'Variant') }}</mat-label>\n <mat-select\n [value]=\"actions.submit.variant\"\n (selectionChange)=\"\n updateAction('submit', 'variant', $event.value)\n \"\n >\n <mat-option value=\"raised\">{{ tx('variant.raised', 'Raised') }}</mat-option>\n <mat-option value=\"stroked\">{{ tx('variant.stroked', 'Stroked') }}</mat-option>\n <mat-option value=\"flat\">{{ tx('variant.flat', 'Flat') }}</mat-option>\n <mat-option value=\"fab\">{{ tx('variant.fab', 'FAB') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.color', 'Color') }}</mat-label>\n <mat-select\n [value]=\"actions.submit.color\"\n (selectionChange)=\"\n updateAction('submit', 'color', $event.value)\n \"\n >\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.shortcut', 'Keyboard shortcut') }}</mat-label>\n <input\n matInput\n [placeholder]=\"tx('field.shortcut.submitPlaceholder', 'Example: ctrl+s')\"\n [value]=\"actions.submit.shortcut\"\n (input)=\"\n updateAction(\n 'submit',\n 'shortcut',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <!-- Repetir para Cancel e Reset -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ tx('default.cancel.title', 'Cancel button (cancel)') }}\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"action-fields\">\n <mat-slide-toggle\n [checked]=\"actions.cancel.visible\"\n (change)=\"updateAction('cancel', 'visible', $event.checked)\"\n >{{ tx('field.visible', 'Visible') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('field.label', 'Label') }}</mat-label>\n <input\n matInput\n [value]=\"actions.cancel.label\"\n (input)=\"\n updateAction(\n 'cancel',\n 'label',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.icon', 'Icon') }}</mat-label>\n <input\n matInput\n [value]=\"actions.cancel.icon\"\n (input)=\"\n updateAction('cancel', 'icon', $any($event.target).value)\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.variant', 'Variant') }}</mat-label>\n <mat-select\n [value]=\"actions.cancel.variant\"\n (selectionChange)=\"\n updateAction('cancel', 'variant', $event.value)\n \"\n >\n <mat-option value=\"raised\">{{ tx('variant.raised', 'Raised') }}</mat-option>\n <mat-option value=\"stroked\">{{ tx('variant.stroked', 'Stroked') }}</mat-option>\n <mat-option value=\"flat\">{{ tx('variant.flat', 'Flat') }}</mat-option>\n <mat-option value=\"fab\">{{ tx('variant.fab', 'FAB') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.color', 'Color') }}</mat-label>\n <mat-select\n [value]=\"actions.cancel.color\"\n (selectionChange)=\"\n updateAction('cancel', 'color', $event.value)\n \"\n >\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.shortcut', 'Keyboard shortcut') }}</mat-label>\n <input\n matInput\n [placeholder]=\"tx('field.shortcut.cancelPlaceholder', 'Example: esc')\"\n [value]=\"actions.cancel.shortcut\"\n (input)=\"\n updateAction(\n 'cancel',\n 'shortcut',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ tx('default.reset.title', 'Reset button (reset)') }}\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"action-fields\">\n <mat-slide-toggle\n [checked]=\"actions.reset.visible\"\n (change)=\"updateAction('reset', 'visible', $event.checked)\"\n >{{ tx('field.visible', 'Visible') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('field.label', 'Label') }}</mat-label>\n <input\n matInput\n [value]=\"actions.reset.label\"\n (input)=\"\n updateAction('reset', 'label', $any($event.target).value)\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.icon', 'Icon') }}</mat-label>\n <input\n matInput\n [value]=\"actions.reset.icon\"\n (input)=\"\n updateAction('reset', 'icon', $any($event.target).value)\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.variant', 'Variant') }}</mat-label>\n <mat-select\n [value]=\"actions.reset.variant\"\n (selectionChange)=\"\n updateAction('reset', 'variant', $event.value)\n \"\n >\n <mat-option value=\"raised\">{{ tx('variant.raised', 'Raised') }}</mat-option>\n <mat-option value=\"stroked\">{{ tx('variant.stroked', 'Stroked') }}</mat-option>\n <mat-option value=\"flat\">{{ tx('variant.flat', 'Flat') }}</mat-option>\n <mat-option value=\"fab\">{{ tx('variant.fab', 'FAB') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.color', 'Color') }}</mat-label>\n <mat-select\n [value]=\"actions.reset.color\"\n (selectionChange)=\"\n updateAction('reset', 'color', $event.value)\n \"\n >\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.shortcut', 'Keyboard shortcut') }}</mat-label>\n <input\n matInput\n [placeholder]=\"tx('field.shortcut.resetPlaceholder', 'Example: ctrl+shift+r')\"\n [value]=\"actions.reset.shortcut\"\n (input)=\"\n updateAction(\n 'reset',\n 'shortcut',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </mat-accordion>\n </div>\n </mat-tab>\n\n <mat-tab [label]=\"tx('tabs.customButtons', 'Custom buttons')\">\n <div class=\"editor-container\">\n <button\n mat-stroked-button\n color=\"primary\"\n (click)=\"addCustomButton()\"\n class=\"add-button\"\n >\n <mat-icon>add</mat-icon> {{ tx('custom.addButton', 'Add button') }}\n </button>\n <mat-accordion multi>\n @for (\n customAction of actions.custom;\n track customAction.id || customAction.action || $index;\n let i = $index\n ) {\n <div class=\"custom-action-panel-shell\">\n <div class=\"custom-action-panel-toolbar\">\n <div class=\"custom-action-order-controls\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"getMoveCustomActionAriaLabel('up', customAction)\"\n [matTooltip]=\"tx('custom.order.moveUp.tooltip', 'Mover para cima')\"\n [disabled]=\"!canMoveCustomActionUp(i)\"\n (click)=\"moveCustomActionUp(i)\"\n >\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n [attr.aria-label]=\"getMoveCustomActionAriaLabel('down', customAction)\"\n [matTooltip]=\"tx('custom.order.moveDown.tooltip', 'Mover para baixo')\"\n [disabled]=\"!canMoveCustomActionDown(i)\"\n (click)=\"moveCustomActionDown(i)\"\n >\n <mat-icon>arrow_downward</mat-icon>\n </button>\n </div>\n </div>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ getCustomActionTitle(customAction) }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"action-fields\">\n <mat-slide-toggle\n [checked]=\"customAction.visible\"\n (change)=\"\n updateCustomAction(i, 'visible', $event.checked)\n \"\n >{{ tx('field.visible', 'Visible') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('custom.id', 'Action ID') }}</mat-label>\n <input\n matInput\n [value]=\"customAction.id\"\n (input)=\"\n updateCustomAction(i, 'id', $any($event.target).value)\n \"\n required\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.action', 'Action') }}</mat-label>\n <mat-select\n [value]=\"getCustomActionSelectValue(customAction.action)\"\n (selectionChange)=\"onCustomActionSelectChange(i, $event.value)\"\n >\n <mat-option [value]=\"customActionValue\">{{ tx('custom.action.custom', 'Custom') }}</mat-option>\n <mat-optgroup [label]=\"tx('custom.globalGroup', 'Global actions')\">\n @for (spec of globalActionCatalog; track spec.id) {\n <mat-option [value]=\"spec.id\">{{ getActionCatalogLabel(spec) }}</mat-option>\n }\n </mat-optgroup>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"tx('custom.action.help', 'Global actions require an app-side executor (ActionResolver). Custom actions only emit events. Color and position affect the button.')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (getCustomActionSelectValue(customAction.action) === customActionValue) {\n <mat-form-field>\n <mat-label>{{ tx('custom.action', 'Action') }}</mat-label>\n <input\n matInput\n [value]=\"getCustomActionCustomValue(customAction.action)\"\n (input)=\"onCustomActionCustomChange(i, $any($event.target).value)\"\n [placeholder]=\"tx('custom.action.customPlaceholder', 'Example: custom_action, navigate, delete')\"\n />\n </mat-form-field>\n } @else {\n @if (isGlobalActionId(getCustomActionSelectValue(customAction.action))) {\n <ng-container\n [ngTemplateOutlet]=\"globalActionFields\"\n [ngTemplateOutletContext]=\"{ $implicit: customAction, index: i }\"\n ></ng-container>\n } @else {\n @if (getActionSpecById(getCustomActionSelectValue(customAction.action)); as actionSpec) {\n @if (actionSpec.param) {\n <mat-form-field>\n <mat-label>{{ actionSpec.param.label || tx('custom.parameter', 'Parameter') }}</mat-label>\n <input\n matInput\n [value]=\"getCustomActionParam(customAction.action)\"\n (input)=\"onCustomActionParamChange(i, $any($event.target).value)\"\n [placeholder]=\"actionSpec.param.placeholder || ''\"\n />\n @if (actionSpec.param.required && !getCustomActionParam(customAction.action)) {\n <mat-error>{{ tx('custom.parameterRequired', 'Required parameter.') }}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n }\n <mat-form-field>\n <mat-label>{{ tx('field.label', 'Label') }}</mat-label>\n <input\n matInput\n [value]=\"customAction.label\"\n (input)=\"\n updateCustomAction(\n i,\n 'label',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('field.icon', 'Icon') }}</mat-label>\n <input\n matInput\n [value]=\"customAction.icon\"\n (input)=\"\n updateCustomAction(\n i,\n 'icon',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.buttonColor', 'Button color') }}</mat-label>\n <mat-select\n [value]=\"customAction.color\"\n (selectionChange)=\"\n updateCustomAction(i, 'color', $event.value)\n \"\n >\n <mat-option value=\"primary\">Primary</mat-option>\n <mat-option value=\"accent\">Accent</mat-option>\n <mat-option value=\"warn\">Warn</mat-option>\n <mat-option value=\"basic\">Basic</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.variant', 'Variante') }}</mat-label>\n <mat-select\n [value]=\"customAction.variant\"\n (selectionChange)=\"\n updateCustomAction(i, 'variant', $event.value)\n \"\n >\n <mat-option value=\"raised\">{{ tx('variant.raised', 'Raised') }}</mat-option>\n <mat-option value=\"stroked\">{{ tx('variant.stroked', 'Stroked') }}</mat-option>\n <mat-option value=\"flat\">{{ tx('variant.flat', 'Flat') }}</mat-option>\n <mat-option value=\"fab\">{{ tx('variant.fab', 'FAB') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.size', 'Tamanho') }}</mat-label>\n <mat-select\n [value]=\"customAction.size\"\n (selectionChange)=\"\n updateCustomAction(i, 'size', $event.value)\n \"\n >\n <mat-option value=\"small\">{{ tx('custom.size.small', 'Pequeno') }}</mat-option>\n <mat-option value=\"medium\">{{ tx('custom.size.medium', 'Médio') }}</mat-option>\n <mat-option value=\"large\">{{ tx('custom.size.large', 'Grande') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.tooltip', 'Tooltip') }}</mat-label>\n <input\n matInput\n [value]=\"customAction.tooltip\"\n (input)=\"\n updateCustomAction(\n i,\n 'tooltip',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.shortcut', 'Atalho de Teclado') }}</mat-label>\n <input\n matInput\n [value]=\"customAction.shortcut\"\n (input)=\"\n updateCustomAction(\n i,\n 'shortcut',\n $any($event.target).value\n )\n \"\n [placeholder]=\"tx('custom.shortcut.placeholder', 'Ex.: ctrl+shift+a')\"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('custom.className', 'Classe CSS') }}</mat-label>\n <input\n matInput\n [value]=\"$any(customAction).className\"\n (input)=\"\n updateCustomAction(\n i,\n 'className',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-slide-toggle\n [checked]=\"!!customAction.disabled\"\n (change)=\"\n updateCustomAction(i, 'disabled', $event.checked)\n \"\n >\n {{ tx('custom.disabled', 'Desabilitado') }}\n </mat-slide-toggle>\n <mat-slide-toggle\n [checked]=\"!!customAction.loading\"\n (change)=\"\n updateCustomAction(i, 'loading', $event.checked)\n \"\n >\n {{ tx('custom.loading', 'Loading') }}\n </mat-slide-toggle>\n <mat-form-field class=\"w-100\">\n <mat-label>{{ tx('custom.style', 'Estilos do botão (JSON)') }}</mat-label>\n <textarea\n matInput\n rows=\"4\"\n [ngModel]=\"getCustomActionStyleText(customAction, i)\"\n (ngModelChange)=\"onCustomActionStyleTextChange(i, $event)\"\n (blur)=\"applyCustomActionStyleText(customAction, i)\"\n [placeholder]=\"getCustomStylePlaceholder()\"\n ></textarea>\n @if (hasCustomActionStyleError(customAction, i)) {\n <mat-error>{{ getCustomActionStyleError(customAction, i) }}</mat-error>\n }\n </mat-form-field>\n </div>\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"removeCustomButton(i)\"\n [matTooltip]=\"tx('custom.remove', 'Remove this button')\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </mat-expansion-panel>\n </div>\n }\n </mat-accordion>\n </div>\n </mat-tab>\n\n <mat-tab [label]=\"tx('tabs.layout', 'Layout')\">\n <div class=\"editor-container action-fields\">\n <mat-form-field>\n <mat-label>{{ tx('layout.placement', 'Structural position') }}</mat-label>\n <mat-select [value]=\"actions.placement || 'afterSections'\" (selectionChange)=\"updateLayout('placement', $event.value)\">\n <mat-option value=\"insideLastSection\">{{ tx('layout.placement.insideLastSection', 'Inside the last section') }}</mat-option>\n <mat-option value=\"afterSections\">{{ tx('layout.placement.afterSections', 'After sections') }}</mat-option>\n <mat-option value=\"top\">{{ tx('layout.placement.top', 'Before sections') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('layout.gapTop', 'Top spacing (px)') }}</mat-label>\n <input matInput type=\"number\" [value]=\"getGapTopPx()\" (input)=\"onGapTopInput($any($event.target).value)\" [placeholder]=\"tx('layout.gapTop.placeholder', '(default)')\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('layout.alignment', 'Button alignment') }}</mat-label>\n <mat-select\n [value]=\"actions.position\"\n (selectionChange)=\"updateLayout('position', $event.value)\"\n >\n <mat-option value=\"left\">{{ tx('layout.alignment.left', 'Left') }}</mat-option>\n <mat-option value=\"center\">{{ tx('layout.alignment.center', 'Center') }}</mat-option>\n <mat-option value=\"right\">{{ tx('layout.alignment.right', 'Right') }}</mat-option>\n <mat-option value=\"justified\">{{ tx('layout.alignment.justified', 'Justified') }}</mat-option>\n <mat-option value=\"split\">{{ tx('layout.alignment.split', 'Split') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('layout.orientation', 'Orientation') }}</mat-label>\n <mat-select\n [value]=\"actions.orientation\"\n (selectionChange)=\"updateLayout('orientation', $event.value)\"\n >\n <mat-option value=\"horizontal\">{{ tx('layout.orientation.horizontal', 'Horizontal') }}</mat-option>\n <mat-option value=\"vertical\">{{ tx('layout.orientation.vertical', 'Vertical') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('layout.spacing', 'Spacing') }}</mat-label>\n <mat-select\n [value]=\"actions.spacing\"\n (selectionChange)=\"updateLayout('spacing', $event.value)\"\n >\n <mat-option value=\"compact\">{{ tx('layout.spacing.compact', 'Compact') }}</mat-option>\n <mat-option value=\"normal\">{{ tx('layout.spacing.normal', 'Normal') }}</mat-option>\n <mat-option value=\"spacious\">{{ tx('layout.spacing.spacious', 'Spacious') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-slide-toggle\n [checked]=\"actions.divider !== false\"\n (change)=\"updateLayout('divider', $event.checked)\"\n >{{ tx('layout.divider', 'Show top divider') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('layout.containerClassName', 'Container class') }}</mat-label>\n <input matInput [value]=\"actions.containerClassName\" (input)=\"updateLayout('containerClassName', $any($event.target).value)\" />\n </mat-form-field>\n <mat-form-field class=\"w-100\">\n <mat-label>{{ tx('layout.containerStyles', 'Container styles (JSON)') }}</mat-label>\n <textarea matInput rows=\"4\" [(ngModel)]=\"containerStylesText\" (blur)=\"applyContainerStylesText()\"></textarea>\n </mat-form-field>\n <mat-slide-toggle\n [checked]=\"actions.sticky\"\n (change)=\"updateLayout('sticky', $event.checked)\"\n >{{ tx('layout.sticky', 'Sticky action bar') }}</mat-slide-toggle\n >\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ tx('layout.mobile.title', 'Mobile settings') }}\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"action-fields\">\n <mat-slide-toggle\n [checked]=\"actions.mobile?.collapseToMenu || false\"\n (change)=\"updateLayoutMobile('collapseToMenu', $event.checked)\"\n >{{ tx('layout.mobile.collapse', 'Collapse into menu on mobile') }}</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>{{ tx('layout.mobile.alignment', 'Alignment (mobile)') }}</mat-label>\n <mat-select\n [value]=\"actions.mobile?.position\"\n (selectionChange)=\"\n updateLayoutMobile('position', $event.value)\n \"\n >\n <mat-option [value]=\"undefined\">{{ tx('layout.mobile.default', 'Default') }}</mat-option>\n <mat-option value=\"left\">{{ tx('layout.alignment.left', 'Left') }}</mat-option>\n <mat-option value=\"center\">{{ tx('layout.alignment.center', 'Center') }}</mat-option>\n <mat-option value=\"right\">{{ tx('layout.alignment.right', 'Right') }}</mat-option>\n <mat-option value=\"justified\">{{ tx('layout.alignment.justified', 'Justified') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ tx('layout.mobile.orientation', 'Orientation (mobile)') }}</mat-label>\n <mat-select\n [value]=\"actions.mobile?.orientation\"\n (selectionChange)=\"\n updateLayoutMobile('orientation', $event.value)\n \"\n >\n <mat-option [value]=\"undefined\">{{ tx('layout.mobile.default', 'Default') }}</mat-option>\n <mat-option value=\"horizontal\">{{ tx('layout.orientation.horizontal', 'Horizontal') }}</mat-option>\n <mat-option value=\"vertical\">{{ tx('layout.orientation.vertical', 'Vertical') }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </div>\n </mat-tab>\n </mat-tab-group>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n .action-fields {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 16px;\n align-items: center;\n }\n .action-global-fields {\n grid-column: 1 / -1;\n padding: 12px 14px;\n border: 1px dashed var(--md-sys-color-outline-variant, rgba(255, 255, 255, 0.12));\n border-radius: 10px;\n background: var(--md-sys-color-surface-container-low);\n }\n .action-global-title {\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--md-sys-color-on-surface-variant, #9aa0a6);\n margin-bottom: 10px;\n }\n .action-global-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px 16px;\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n\n .help-icon-button mat-icon {\n font-size: 18px;\n line-height: 18px;\n width: 18px;\n height: 18px;\n }\n\n .action-global-fields .mat-mdc-form-field-icon-suffix {\n align-self: center;\n }\n .action-section-title {\n width: 100%;\n margin: 10px 0 2px;\n font-size: 12px;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--md-sys-color-on-surface-variant, #9aa0a6);\n }\n .add-button {\n margin-bottom: 16px;\n align-self: flex-start;\n }\n .custom-action-panel-shell {\n display: grid;\n gap: 8px;\n }\n .custom-action-panel-toolbar {\n display: flex;\n justify-content: flex-end;\n }\n .custom-action-order-controls {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n justify-content: flex-end;\n }\n `,\n ],\n})\nexport class ActionsEditorComponent implements OnChanges {\n @Input() config!: FormConfig;\n @Output() configChange = new EventEmitter<FormConfig>();\n containerStylesText = '';\n private readonly customActionStyleTexts = new Map<string, string>();\n private readonly customActionStyleErrors = new Map<string, string>();\n private readonly globalActionCatalogSource =\n inject(GLOBAL_ACTION_CATALOG, { optional: true }) ?? [];\n private readonly i18n = inject(PraxisI18nService);\n readonly legacyActionSpecs = GLOBAL_ACTION_SPEC_CATALOG;\n readonly globalActionCatalog = buildGlobalActionCatalog({\n legacySpecs: this.legacyActionSpecs,\n injectedCatalog: getGlobalActionCatalog(this.globalActionCatalogSource),\n fallbackCatalog: PRAXIS_GLOBAL_ACTION_CATALOG,\n mapCatalogEntry: (entry) => this.mapCatalogEntryToActionSpec(entry),\n });\n readonly customActionValue = '__custom__';\n private readonly actionFieldDrafts = new Map<string, Record<string, string>>();\n private readonly actionFieldErrors = new Map<string, Record<string, string>>();\n // Util: extrai e aplica marginTop em containerStyles\n getGapTopPx(): number | null {\n const st = (this.config.actions as any)?.containerStyles;\n const raw = st?.marginTop as string | number | undefined;\n if (raw == null) return null;\n if (typeof raw === 'number') return raw;\n const m = String(raw).match(/-?\\d+/);\n return m ? Number(m[0]) : null;\n }\n onGapTopInput(val: any) {\n let num = Number(val);\n if (!isFinite(num)) {\n // limpar volta ao padrão\n const styles = { ...(this.actions as any)?.containerStyles };\n if (styles) {\n delete styles.marginTop;\n this.updateLayout('containerStyles', styles);\n } else {\n this.updateLayout('containerStyles', styles as any);\n }\n return;\n }\n if (num < 0) num = 0;\n const styles = { ...(this.actions as any)?.containerStyles, marginTop: `${num}px` };\n this.updateLayout('containerStyles', styles as any);\n }\n\n get actions(): FormActionsLayout {\n const base: FormActionsLayout = {\n submit: { visible: true, label: 'ENVIAR', color: 'primary', type: 'submit', variant: 'raised' as any },\n cancel: { visible: true, label: 'Cancel', color: 'basic', type: 'button', variant: 'raised' as any },\n reset: { visible: false, label: 'Reset', color: 'basic', type: 'reset', variant: 'stroked' as any },\n custom: [],\n position: 'right',\n orientation: 'horizontal',\n spacing: 'normal',\n sticky: false,\n divider: true,\n placement: 'afterSections',\n mobile: { collapseToMenu: false },\n } as any;\n const a: any = this.config.actions || {};\n return {\n ...base,\n ...a,\n submit: { ...base.submit, ...(a.submit || {}) },\n cancel: { ...base.cancel, ...(a.cancel || {}) },\n reset: { ...base.reset, ...(a.reset || {}) },\n mobile: { ...(base.mobile || {}), ...(a.mobile || {}) },\n } as FormActionsLayout;\n }\n\n ngOnChanges(): void {\n this.syncContainerStylesText();\n this.syncCustomActionStyleTexts();\n }\n\n private syncContainerStylesText(): void {\n const styles = (this.config.actions as any)?.containerStyles;\n this.containerStylesText = styles ? JSON.stringify(styles, null, 2) : '';\n }\n\n private syncCustomActionStyleTexts(): void {\n const activeKeys = new Set<string>();\n for (const [index, action] of (this.actions.custom || []).entries()) {\n const key = this.getCustomActionStyleKey(action, index);\n activeKeys.add(key);\n if (!this.customActionStyleTexts.has(key)) {\n this.customActionStyleTexts.set(key, stringifyJson((action as any).style));\n }\n }\n\n for (const key of Array.from(this.customActionStyleTexts.keys())) {\n if (!activeKeys.has(key)) {\n this.customActionStyleTexts.delete(key);\n this.customActionStyleErrors.delete(key);\n }\n }\n }\n\n getActionSpecById(id: string): ActionCatalogOption | undefined {\n return this.globalActionCatalog.find((item) => item.id === id);\n }\n\n getCustomActionSelectValue(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? parsed.id : this.customActionValue;\n }\n\n getCustomActionParam(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? parsed.param : '';\n }\n\n getCustomActionCustomValue(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? '' : parsed.raw;\n }\n\n onCustomActionSelectChange(index: number, value: string): void {\n const current = this.actions.custom?.[index];\n if (!current) return;\n this.clearActionFieldState(current);\n if (value === this.customActionValue) {\n const parsed = parseActionValue(current.action, this.globalActionCatalog, this.customActionValue);\n if (parsed.isGlobal) {\n this.updateCustomAction(index, 'action', '');\n }\n return;\n }\n const parsed = parseActionValue(current.action, this.globalActionCatalog, this.customActionValue);\n const param = parsed.isGlobal && parsed.id === value ? parsed.param : '';\n this.updateCustomAction(index, 'action', param ? `${value}:${param}` : value);\n }\n\n onCustomActionParamChange(index: number, value: string): void {\n const current = this.actions.custom?.[index];\n if (!current) return;\n const parsed = parseActionValue(current.action, this.globalActionCatalog, this.customActionValue);\n const id = parsed.isGlobal ? parsed.id : '';\n this.updateCustomAction(index, 'action', id ? (value ? `${id}:${value}` : id) : value);\n }\n\n onCustomActionCustomChange(index: number, value: string): void {\n this.updateCustomAction(index, 'action', value);\n }\n\n isGlobalActionId(id?: string): boolean {\n if (!id) return false;\n return this.globalActionCatalog.some((item: any) => item.id === id);\n }\n\n getActionCatalogLabel(spec: { id?: string; label?: string }): string {\n if (spec?.id === 'surface.open') {\n return this.i18n.t('action.surfaceOpen.label', undefined, spec.label || '', SURFACE_OPEN_I18N_NAMESPACE);\n }\n return spec?.label || '';\n }\n\n tx(key: string, fallback: string, params?: Record<string, string>): string {\n return this.i18n.t(key, params, fallback, ACTIONS_EDITOR_I18N_NAMESPACE);\n }\n\n getCustomActionTitle(action: FormActionButton): string {\n return action.label || this.tx('custom.defaultTitle', 'New custom button');\n }\n\n getMoveCustomActionAriaLabel(\n direction: 'up' | 'down',\n action: FormActionButton,\n ): string {\n const key = direction === 'up' ? 'custom.order.moveUp' : 'custom.order.moveDown';\n const fallback =\n direction === 'up'\n ? `Mover \"${this.getCustomActionTitle(action)}\" para cima`\n : `Mover \"${this.getCustomActionTitle(action)}\" para baixo`;\n return this.tx(key, fallback, { label: this.getCustomActionTitle(action) });\n }\n\n getCustomStylePlaceholder(): string {\n return this.tx('custom.style.placeholder', '{\"borderRadius\":\"999px\"}');\n }\n\n private getActionCatalogDescription(spec: { id?: string; description?: string }): string {\n if (spec?.id === 'surface.open') {\n return this.i18n.t('action.surfaceOpen.description', undefined, spec.description || '', SURFACE_OPEN_I18N_NAMESPACE);\n }\n return spec?.description || '';\n }\n\n private mapCatalogEntryToActionSpec(entry: GlobalActionCatalogEntry): ActionCatalogOption {\n const hasPayloadSchema = !!entry.payloadSchema;\n return {\n id: entry.id,\n label: this.getActionCatalogLabel(entry),\n description: this.getActionCatalogDescription(entry),\n param: hasPayloadSchema\n ? {\n label: this.tx('globalAction.payload.label', 'Payload (optional JSON)'),\n placeholder: entry.payloadSchema?.example\n ? JSON.stringify(entry.payloadSchema.example)\n : '{ }',\n hint: this.tx('globalAction.payload.hint', 'Use JSON when the global app action requires structured payload.'),\n required: !!entry.payloadSchema?.required?.length,\n }\n : undefined,\n };\n }\n\n getGlobalActionSchema(action: { action?: string }) {\n const parsed = parseActionValue(action.action, this.globalActionCatalog, this.customActionValue);\n if (!parsed.isGlobal) return undefined;\n return getGlobalActionUiSchema(parsed.id);\n }\n\n getSurfaceOpenActionPayload(action: { action?: string }): SurfaceOpenPayload {\n const info = getActionParamInfo(action.action, this.globalActionCatalog, this.customActionValue);\n const payload =\n info.isJson && info.json && typeof info.json === 'object' && !Array.isArray(info.json)\n ? (info.json as SurfaceOpenPayload)\n : undefined;\n return normalizeSurfaceOpenPayload(payload);\n }\n\n onSurfaceOpenActionPayloadChange(\n action: { action?: string },\n payload: SurfaceOpenPayload,\n index: number,\n ): void {\n this.updateCustomAction(\n index,\n 'action',\n `surface.open:${JSON.stringify(normalizeSurfaceOpenPayload(payload))}`,\n );\n }\n\n shouldShowGlobalActionField(action: { action?: string }, field: GlobalActionField): boolean {\n if (!field.dependsOnKey) return true;\n const schema = this.getGlobalActionSchema(action);\n if (!schema) return true;\n const values = this.collectGlobalActionFieldValues(action, schema.fields);\n return String(values[field.dependsOnKey] ?? '') === String(field.dependsOnValue ?? '');\n }\n\n hasActionFieldError(action: { action?: string }, key: string): boolean {\n const errors = this.actionFieldErrors.get(this.getActionDraftKey(action));\n return !!errors?.[key];\n }\n\n getActionFieldError(action: { action?: string }, key: string): string {\n const errors = this.actionFieldErrors.get(this.getActionDraftKey(action));\n return errors?.[key] || '';\n }\n\n getGlobalActionFieldValue(action: { action?: string }, field: GlobalActionField): any {\n const draftKey = this.getActionDraftKey(action);\n const draft = this.actionFieldDrafts.get(draftKey)?.[field.key];\n const info = getActionParamInfo(action.action, this.globalActionCatalog, this.customActionValue);\n const raw = info.param || '';\n const json = info.json || {};\n const hasJson = info.isJson;\n let value: any;\n switch (field.key) {\n case 'message':\n value = json.message ?? json.text ?? (hasJson ? '' : raw);\n break;\n case 'url':\n if (json.url) {\n value = json.url;\n break;\n }\n if (!hasJson && info.id === 'apiCall') {\n const parsed = parseMethodAndUrl(raw);\n value = parsed.url || '';\n break;\n }\n value = hasJson ? '' : raw;\n break;\n case 'method': {\n if (json.method) {\n value = String(json.method);\n break;\n }\n if (!hasJson) {\n const parsed = parseMethodAndUrl(raw);\n value = parsed.method || '';\n break;\n }\n value = '';\n break;\n }\n case 'bodySource':\n value = json.bodySource ?? '';\n break;\n case 'headers':\n value = stringifyJson(json.headers);\n break;\n case 'body':\n value = stringifyJson(json.body);\n break;\n case 'contentData':\n value = stringifyJson(json.content?.data);\n break;\n case 'styles':\n value = stringifyJson(json.styles);\n break;\n case 'positionTop':\n value = json.position?.top ?? '';\n break;\n case 'positionRight':\n value = json.position?.right ?? '';\n break;\n case 'positionBottom':\n value = json.position?.bottom ?? '';\n break;\n case 'positionLeft':\n value = json.position?.left ?? '';\n break;\n case 'animationType':\n value = json.animation?.type ?? '';\n break;\n case 'animationDirection':\n value = json.animation?.direction ?? '';\n break;\n case 'animationDuration':\n value = json.animation?.duration ?? '';\n break;\n case 'contentType':\n value = json.contentType ?? json.content?.type ?? '';\n break;\n case 'templateId':\n value = json.templateId ?? '';\n break;\n case 'componentRef':\n value = json.componentRef ?? '';\n break;\n case 'safeHtml':\n value = json.safeHtml ?? '';\n break;\n case 'mode':\n value = json.mode === 'dialog' || json.useDialog === true;\n break;\n case 'newTab':\n value = json.newTab ?? false;\n break;\n case 'replaceUrl':\n value = json.replaceUrl ?? false;\n break;\n case 'target':\n value = json.target ?? '';\n break;\n case 'text':\n value = json.text ?? (hasJson ? '' : raw);\n break;\n case 'key':\n case 'field':\n value = json[field.key] ?? (hasJson ? '' : raw);\n break;\n default:\n value = json[field.key] ?? '';\n break;\n }\n\n if (draft !== undefined) {\n if (isEquivalentActionFieldValue(value, draft, field.type)) {\n this.clearActionFieldDraft(action, field.key);\n } else {\n return draft;\n }\n }\n return value;\n }\n\n onGlobalActionFieldChange(\n action: { action?: string },\n field: GlobalActionField,\n value: any,\n index: number,\n ): void {\n const selectedId = this.getCustomActionSelectValue(action.action);\n if (!this.isGlobalActionId(selectedId)) return;\n const schema = getGlobalActionUiSchema(selectedId);\n if (!schema) return;\n\n this.setActionFieldDraft(action, field.key, value);\n\n if (field.type === 'json') {\n const raw = String(value || '');\n if (raw.trim()) {\n try {\n JSON.parse(raw);\n this.clearActionFieldError(action, field.key);\n } catch {\n this.setActionFieldError(action, field.key, 'JSON inválido.');\n return;\n }\n } else {\n this.clearActionFieldError(action, field.key);\n }\n }\n\n const values = this.collectGlobalActionFieldValues(action, schema.fields);\n values[field.key] = value;\n const info = getActionParamInfo(action.action, this.globalActionCatalog, this.customActionValue);\n const param = serializeGlobalActionParam(selectedId, values, info.json);\n this.updateCustomAction(index, 'action', param ? `${selectedId}:${param}` : selectedId);\n }\n\n private setActionFieldError(action: { action?: string }, key: string, message: string): void {\n const draftKey = this.getActionDraftKey(action);\n const errors = this.actionFieldErrors.get(draftKey) || {};\n errors[key] = message;\n this.actionFieldErrors.set(draftKey, errors);\n }\n\n private clearActionFieldError(action: { action?: string }, key: string): void {\n const draftKey = this.getActionDraftKey(action);\n const errors = this.actionFieldErrors.get(draftKey);\n if (!errors) return;\n delete errors[key];\n if (Object.keys(errors).length) {\n this.actionFieldErrors.set(draftKey, errors);\n } else {\n this.actionFieldErrors.delete(draftKey);\n }\n }\n\n private getActionDraftKey(action: { action?: string; id?: string; label?: string }): string {\n return String(action.id || action.action || action.label || 'action');\n }\n\n private setActionFieldDraft(action: { action?: string; id?: string; label?: string }, key: string, value: any): void {\n const draftKey = this.getActionDraftKey(action);\n const drafts = this.actionFieldDrafts.get(draftKey) || {};\n drafts[key] = value;\n this.actionFieldDrafts.set(draftKey, drafts);\n }\n\n private clearActionFieldDraft(action: { action?: string; id?: string; label?: string }, key: string): void {\n const draftKey = this.getActionDraftKey(action);\n const drafts = this.actionFieldDrafts.get(draftKey);\n if (!drafts) return;\n delete drafts[key];\n if (Object.keys(drafts).length) {\n this.actionFieldDrafts.set(draftKey, drafts);\n } else {\n this.actionFieldDrafts.delete(draftKey);\n }\n }\n\n private clearActionFieldState(action: { action?: string; id?: string; label?: string }): void {\n const draftKey = this.getActionDraftKey(action);\n this.actionFieldDrafts.delete(draftKey);\n this.actionFieldErrors.delete(draftKey);\n }\n\n private collectGlobalActionFieldValues(\n action: { action?: string },\n fields: GlobalActionField[],\n ): any {\n const values: any = {};\n fields.forEach((field) => {\n values[field.key] = this.getGlobalActionFieldValue(action, field);\n });\n return values;\n }\n\n updateAction(\n button: 'submit' | 'cancel' | 'reset',\n key: EditableActionButtonKey,\n value: any\n ) {\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n [button]: {\n ...this.actions[button],\n [key]: value,\n },\n },\n };\n this.configChange.emit(newConfig);\n }\n\n updateCustomAction(\n index: number,\n key: EditableActionButtonKey,\n value: any\n ) {\n const customActions = [...(this.actions.custom || [])];\n customActions[index] = {\n ...customActions[index],\n [key]: value,\n };\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n custom: customActions,\n },\n };\n this.configChange.emit(newConfig);\n if (key === 'style') {\n this.syncCustomActionStyleTexts();\n }\n }\n\n addCustomButton() {\n const newButton: FormActionButton = {\n id: `custom_${Date.now()}`,\n label: this.tx('custom.defaultTitle', 'New custom button'),\n visible: true,\n color: 'basic',\n action: `custom_action_${Date.now()}`,\n };\n const customActions = [...(this.actions.custom || []), newButton];\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n custom: customActions,\n },\n };\n this.configChange.emit(newConfig);\n }\n\n canMoveCustomActionUp(index: number): boolean {\n return index > 0;\n }\n\n canMoveCustomActionDown(index: number): boolean {\n return index >= 0 && index < (this.actions.custom?.length || 0) - 1;\n }\n\n moveCustomActionUp(index: number): void {\n this.reorderCustomAction(index, index - 1);\n }\n\n moveCustomActionDown(index: number): void {\n this.reorderCustomAction(index, index + 1);\n }\n\n private reorderCustomAction(fromIndex: number, toIndex: number): void {\n const customActions = [...(this.actions.custom || [])];\n if (\n fromIndex < 0\n || toIndex < 0\n || fromIndex >= customActions.length\n || toIndex >= customActions.length\n || fromIndex === toIndex\n ) {\n return;\n }\n\n const [moved] = customActions.splice(fromIndex, 1);\n customActions.splice(toIndex, 0, moved);\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n custom: customActions,\n },\n };\n this.configChange.emit(newConfig);\n }\n\n removeCustomButton(index: number) {\n const customActions = [...(this.actions.custom || [])];\n customActions.splice(index, 1);\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n custom: customActions,\n },\n };\n this.configChange.emit(newConfig);\n }\n\n updateLayout(key: keyof FormActionsLayout, value: any) {\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n [key]: value,\n },\n };\n this.configChange.emit(newConfig);\n if (key === 'containerStyles') this.syncContainerStylesText();\n }\n\n updateLayoutMobile(key: 'position' | 'orientation' | 'collapseToMenu', value: any) {\n const newConfig = {\n ...this.config,\n actions: {\n ...this.actions,\n mobile: {\n ...(this.actions.mobile || {}),\n [key]: value,\n },\n },\n };\n this.configChange.emit(newConfig);\n }\n\n applyContainerStylesText(): void {\n const txt = this.containerStylesText?.trim();\n if (!txt) {\n this.updateLayout('containerStyles', undefined as any);\n return;\n }\n try {\n const parsed = JSON.parse(txt);\n this.updateLayout('containerStyles', parsed as any);\n } catch {\n // keep text; no update on parse error\n }\n }\n\n getCustomActionStyleText(action: FormActionButton, index: number): string {\n const key = this.getCustomActionStyleKey(action, index);\n if (this.customActionStyleTexts.has(key)) {\n return this.customActionStyleTexts.get(key) || '';\n }\n const text = stringifyJson((action as any).style);\n this.customActionStyleTexts.set(key, text);\n return text;\n }\n\n onCustomActionStyleTextChange(index: number, value: string): void {\n const action = this.actions.custom?.[index];\n if (!action) return;\n const key = this.getCustomActionStyleKey(action, index);\n this.customActionStyleTexts.set(key, value);\n }\n\n applyCustomActionStyleText(action: FormActionButton, index: number): void {\n const key = this.getCustomActionStyleKey(action, index);\n const raw = (this.customActionStyleTexts.get(key) || '').trim();\n if (!raw) {\n this.customActionStyleErrors.delete(key);\n this.updateCustomAction(index, 'style', undefined);\n return;\n }\n\n try {\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n this.customActionStyleErrors.set(\n key,\n this.tx('custom.validation.objectJson', 'Informe um objeto JSON válido.'),\n );\n return;\n }\n this.customActionStyleErrors.delete(key);\n this.updateCustomAction(index, 'style', parsed);\n } catch {\n this.customActionStyleErrors.set(\n key,\n this.tx('custom.validation.invalidJson', 'JSON inválido.'),\n );\n }\n }\n\n hasCustomActionStyleError(action: FormActionButton, index: number): boolean {\n const key = this.getCustomActionStyleKey(action, index);\n return this.customActionStyleErrors.has(key);\n }\n\n getCustomActionStyleError(action: FormActionButton, index: number): string {\n const key = this.getCustomActionStyleKey(action, index);\n return this.customActionStyleErrors.get(key) || '';\n }\n\n private getCustomActionStyleKey(action: FormActionButton, index: number): string {\n return `custom:${action.id || action.action || action.label || `index-${index}`}`;\n }\n}\n\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n FormConfig,\n FormMessagesLayout,\n FormActionButton,\n} from '@praxisui/core';\n\n@Component({\n selector: 'praxis-messages-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatExpansionModule,\n MatIconModule,\n ],\n template: `\n <div class=\"messages-editor-container\">\n <mat-accordion multi>\n <mat-expansion-panel expanded>\n <mat-expansion-panel-header>\n <mat-panel-title> Mensagens de Feedback </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"messages-editor-form\">\n <mat-form-field>\n <mat-label>Sucesso ao Criar Registro</mat-label>\n <input\n matInput\n [value]=\"messages.createRegistrySuccess ?? defaultMessages.createRegistrySuccess\"\n (input)=\"\n updateMessage(\n 'createRegistrySuccess',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Erro ao Criar Registro</mat-label>\n <input\n matInput\n [value]=\"messages.createRegistryError ?? defaultMessages.createRegistryError\"\n (input)=\"\n updateMessage(\n 'createRegistryError',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Sucesso ao Atualizar Registro</mat-label>\n <input\n matInput\n [value]=\"messages.updateRegistrySuccess ?? defaultMessages.updateRegistrySuccess\"\n (input)=\"\n updateMessage(\n 'updateRegistrySuccess',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Erro ao Atualizar Registro</mat-label>\n <input\n matInput\n [value]=\"messages.updateRegistryError ?? defaultMessages.updateRegistryError\"\n (input)=\"\n updateMessage(\n 'updateRegistryError',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title> Mensagens de Confirmação </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"messages-editor-form\">\n <mat-form-field>\n <mat-label>Confirmação de Submissão</mat-label>\n <input\n matInput\n [value]=\"messages.confirmations?.submit ?? defaultMessages.confirmations?.submit\"\n (input)=\"\n updateConfirmationMessage(\n 'submit',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Confirmação de Cancelamento</mat-label>\n <input\n matInput\n [value]=\"messages.confirmations?.cancel ?? defaultMessages.confirmations?.cancel\"\n (input)=\"\n updateConfirmationMessage(\n 'cancel',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Confirmação de Reset</mat-label>\n <input\n matInput\n [value]=\"messages.confirmations?.reset ?? defaultMessages.confirmations?.reset\"\n (input)=\"\n updateConfirmationMessage('reset', $any($event.target).value)\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n\n @if (getCustomActions().length > 0) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n Mensagens de Ações Customizadas\n </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n @for (action of getCustomActions(); track action.id) {\n <div class=\"custom-action-messages\">\n <h5>\n <mat-icon>{{ action.icon || 'smart_button' }}</mat-icon>\n Mensagens para \"{{ action.label }}\" (ID: {{ action.id }})\n </h5>\n <div class=\"messages-editor-form\">\n <mat-form-field>\n <mat-label>Mensagem de Confirmação</mat-label>\n <input\n matInput\n [value]=\"messages.customActions?.[action.id!]?.confirmation ?? defaultCustomConfirmation(action)\"\n (input)=\"\n updateCustomActionMessage(\n action.id!,\n 'confirmation',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Mensagem de Sucesso</mat-label>\n <input\n matInput\n [value]=\"messages.customActions?.[action.id!]?.success ?? defaultCustomSuccess(action)\"\n (input)=\"\n updateCustomActionMessage(\n action.id!,\n 'success',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Mensagem de Erro</mat-label>\n <input\n matInput\n [value]=\"messages.customActions?.[action.id!]?.error ?? defaultCustomError(action)\"\n (input)=\"\n updateCustomActionMessage(\n action.id!,\n 'error',\n $any($event.target).value\n )\n \"\n />\n </mat-form-field>\n </div>\n </div>\n }\n </ng-template>\n </mat-expansion-panel>\n }\n </mat-accordion>\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title> Mensagens de Loading </mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div class=\"messages-editor-form\">\n <mat-form-field>\n <mat-label>Loading (Submit)</mat-label>\n <input\n matInput\n [value]=\"messages.loading?.submit ?? defaultMessages.loading?.submit\"\n (input)=\"\n updateLoadingMessage('submit', $any($event.target).value)\n \"\n />\n </mat-form-field>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </mat-accordion>\n </div>\n `,\n styles: [\n `\n .messages-editor-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n .messages-editor-form {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 16px;\n }\n .custom-action-messages {\n margin-top: 1rem;\n padding-top: 1rem;\n border-top: 1px solid var(--md-sys-color-outline-variant);\n }\n .custom-action-messages h5 {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 1rem;\n }\n `,\n ],\n})\nexport class MessagesEditorComponent {\n @Input() config!: FormConfig;\n @Output() configChange = new EventEmitter<FormConfig>();\n\n // Valores padrão exibidos quando não há configuração do usuário\n readonly defaultMessages: FormMessagesLayout = {\n createRegistrySuccess: 'Registro criado com sucesso.',\n createRegistryError: 'Erro ao criar registro.',\n updateRegistrySuccess: 'Registro atualizado com sucesso.',\n updateRegistryError: 'Erro ao atualizar registro.',\n confirmations: {\n submit: 'Deseja enviar o formulário?',\n cancel: 'Deseja descartar as alterações?',\n reset: 'Deseja limpar o formulário?',\n },\n loading: {\n submit: 'Salvando...',\n },\n };\n\n get messages(): FormMessagesLayout {\n return this.config.messages || {};\n }\n\n getCustomActions(): FormActionButton[] {\n return this.config.actions?.custom || [];\n }\n\n updateMessage(key: string, value: string): void {\n const newConfig = {\n ...this.config,\n messages: {\n ...this.messages,\n [key]: value,\n },\n };\n this.configChange.emit(newConfig);\n }\n\n updateConfirmationMessage(action: 'submit' | 'cancel' | 'reset', value: string) {\n const newConfig = {\n ...this.config,\n messages: {\n ...this.messages,\n confirmations: {\n ...this.messages.confirmations,\n [action]: value,\n },\n },\n };\n this.configChange.emit(newConfig);\n }\n\n updateCustomActionMessage(\n actionId: string,\n type: 'confirmation' | 'success' | 'error',\n value: string\n ) {\n const newConfig = {\n ...this.config,\n messages: {\n ...this.messages,\n customActions: {\n ...this.messages.customActions,\n [actionId]: {\n ...this.messages.customActions?.[actionId],\n [type]: value,\n },\n },\n },\n };\n this.configChange.emit(newConfig);\n }\n\n updateLoadingMessage(kind: 'submit', value: string) {\n const newConfig = {\n ...this.config,\n messages: {\n ...this.messages,\n loading: {\n ...this.messages.loading,\n [kind]: value,\n },\n },\n };\n this.configChange.emit(newConfig);\n }\n\n // Defaults para ações customizadas quando não configuradas\n defaultCustomConfirmation(action: FormActionButton): string {\n const label = action.label || action.id || 'ação';\n return `Deseja executar \"${label}\"?`;\n }\n\n defaultCustomSuccess(action: FormActionButton): string {\n const label = action.label || action.id || 'Ação';\n return `${label} executada com sucesso.`;\n }\n\n defaultCustomError(action: FormActionButton): string {\n const label = action.label || action.id || 'ação';\n return `Erro ao executar \"${label}\".`;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport type { FormConfig } from '@praxisui/core';\n\ntype Stage = 'beforeInit'|'afterInit'|'beforeValidate'|'afterValidate'|'beforeSubmit'|'afterSubmit'|'onError';\n\n@Component({\n selector: 'praxis-hooks-editor',\n standalone: true,\n imports: [CommonModule, FormsModule, MatExpansionModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatSlideToggleModule, MatSelectModule, MatTooltipModule],\n template: `\n <div class=\"hooks-editor\">\n <mat-accordion multi>\n <mat-expansion-panel *ngFor=\"let st of stages\" [expanded]=\"st === 'beforeSubmit'\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ stageLabel(st) }}\n </mat-panel-title>\n <mat-panel-description>\n {{ model.hooks[st].length || 0 }} hook(s)\n </mat-panel-description>\n </mat-expansion-panel-header>\n\n <div class=\"quick-add\">\n <span>Adicionar rápido:</span>\n <button mat-button (click)=\"quickAdd(st, 'stripMasks')\">stripMasks</button>\n <button mat-button (click)=\"quickAdd(st, 'ensureNoConflicts')\">ensureNoConflicts</button>\n <button mat-button (click)=\"quickAdd(st, 'prefillFromContext')\">prefillFromContext</button>\n <button mat-button (click)=\"quickAdd(st, 'notifySuccess')\">notifySuccess</button>\n <button mat-button (click)=\"quickAdd(st, 'reportTelemetry')\">reportTelemetry</button>\n <button mat-button (click)=\"quickAdd(st, 'logOnError')\">logOnError</button>\n </div>\n\n <div class=\"hook-list\" *ngIf=\"(model.hooks[st] || []).length > 0; else empty\">\n <div class=\"hook-item\" *ngFor=\"let h of model.hooks[st]; let i = index\">\n <div class=\"row\">\n <mat-form-field appearance=\"fill\" class=\"grow\">\n <mat-label>id</mat-label>\n <input matInput [(ngModel)]=\"h.id\" (ngModelChange)=\"touch()\" placeholder=\"ex.: stripMasks\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w120\">\n <mat-label>priority</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"h.priority\" (ngModelChange)=\"touch()\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w140\">\n <mat-label>timeoutMs</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"h.timeoutMs\" (ngModelChange)=\"touch()\" />\n </mat-form-field>\n <mat-slide-toggle [(ngModel)]=\"h.enabled\" (ngModelChange)=\"touch()\">Ativo</mat-slide-toggle>\n <button mat-icon-button color=\"warn\" (click)=\"remove(st, i)\" matTooltip=\"Remover\">\n <mat-icon>delete</mat-icon>\n </button>\n <button mat-icon-button (click)=\"reorder(st, i, -1)\" [disabled]=\"i===0\" matTooltip=\"Mover para cima\">\n <mat-icon>arrow_upward</mat-icon>\n </button>\n <button mat-icon-button (click)=\"reorder(st, i, +1)\" [disabled]=\"i===model.hooks[st].length-1\" matTooltip=\"Mover para baixo\">\n <mat-icon>arrow_downward</mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicate(st, i)\" matTooltip=\"Duplicar\">\n <mat-icon>content_copy</mat-icon>\n </button>\n </div>\n <mat-form-field appearance=\"outline\" class=\"args-field\">\n <mat-label>args (JSON)</mat-label>\n <textarea matInput [(ngModel)]=\"h._argsText\" (ngModelChange)=\"onArgsTextChange(h)\" rows=\"3\" spellcheck=\"false\"></textarea>\n <mat-error *ngIf=\"h._argsError\">JSON inválido</mat-error>\n </mat-form-field>\n <div class=\"row move-row\">\n <mat-form-field appearance=\"fill\" class=\"w220\">\n <mat-label>Mover para estágio</mat-label>\n <mat-select [(ngModel)]=\"h._targetStage\">\n <mat-option *ngFor=\"let s of stages\" [value]=\"s\">{{ s }}</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-stroked-button (click)=\"moveTo(st, i, h._targetStage)\" [disabled]=\"!h._targetStage\">\n <mat-icon>redo</mat-icon>\n Mover\n </button>\n </div>\n </div>\n </div>\n <ng-template #empty>\n <div class=\"empty\">Nenhum hook neste estágio.</div>\n </ng-template>\n\n <div class=\"panel-actions\">\n <button mat-stroked-button (click)=\"add(st)\">\n <mat-icon>add</mat-icon>\n Adicionar Hook\n </button>\n <button mat-stroked-button color=\"primary\" (click)=\"apply()\">\n <mat-icon>save</mat-icon>\n Aplicar Alterações\n </button>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n </div>\n `,\n styles: [\n `\n .hooks-editor { display: block; }\n .hook-item { padding: 8px; border: 1px solid var(--md-sys-color-outline-variant); border-radius: 8px; margin-bottom: 12px; }\n .row { display: flex; gap: 12px; align-items: center; }\n .grow { flex: 1; }\n .w120 { width: 120px; }\n .w140 { width: 140px; }\n .w220 { width: 220px; }\n .args-field { width: 100%; }\n .panel-actions { display: flex; gap: 12px; margin-top: 8px; }\n .quick-add { display: flex; align-items: center; gap: 8px; margin: 8px 0; flex-wrap: wrap; }\n .empty { opacity: 0.7; font-style: italic; padding: 8px 0; }\n .move-row { margin-top: 8px; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HooksEditorComponent {\n @Input() set config(v: FormConfig | null) {\n this.model.config = v || ({ sections: [] } as any);\n this.model.hooks = (this.model.config as any).hooks || {};\n this.ensureStages();\n // Prepare argsText for editing\n for (const st of this.stages) {\n for (const h of this.model.hooks[st]) {\n (h as any).enabled = (h as any).enabled !== false; // default true\n (h as any)._argsText = JSON.stringify(h.args ?? {}, null, 2);\n (h as any)._argsError = false;\n }\n }\n }\n @Output() configChange = new EventEmitter<FormConfig>();\n\n stages: Stage[] = ['beforeInit','afterInit','beforeValidate','afterValidate','beforeSubmit','afterSubmit','onError'];\n model: { config: FormConfig; hooks: Record<string, any[]> } = { config: { sections: [] }, hooks: {} } as any;\n\n stageLabel(st: Stage): string {\n const map: any = {\n beforeInit: 'beforeInit', afterInit: 'afterInit', beforeValidate: 'beforeValidate', afterValidate: 'afterValidate', beforeSubmit: 'beforeSubmit', afterSubmit: 'afterSubmit', onError: 'onError'\n };\n return map[st] || st;\n }\n\n ensureStages(): void {\n const h = (this.model.config as any).hooks || {};\n this.stages.forEach((s) => { if (!Array.isArray(h[s])) h[s] = []; });\n (this.model.config as any).hooks = h;\n this.model.hooks = h;\n }\n\n add(st: Stage): void {\n this.model.hooks[st].push({ id: '', priority: 0, timeoutMs: null, args: {}, _argsText: '{\\n\\n}' });\n this.touch();\n }\n\n remove(st: Stage, index: number): void {\n this.model.hooks[st].splice(index, 1);\n this.touch();\n }\n\n quickAdd(st: Stage, id: string): void {\n const decl: any = { id };\n if (id === 'stripMasks') decl.args = { fields: ['cpf','telefone'] };\n if (id === 'ensureNoConflicts') decl.args = { uniqueBy: ['cpf'], idField: 'id' };\n if (id === 'notifySuccess') decl.args = { message: 'Salvo com sucesso' };\n if (id === 'reportTelemetry') decl.args = { event: 'form_event' };\n if (id === 'prefillFromContext') decl.args = { values: { ativo: true } };\n if (id === 'logOnError') decl.args = {};\n (decl as any)._argsText = JSON.stringify(decl.args || {}, null, 2);\n (decl as any).enabled = true;\n this.model.hooks[st].push(decl);\n this.touch();\n }\n\n onArgsTextChange(h: any): void {\n try {\n h.args = JSON.parse(h._argsText || '{}');\n h._argsError = false;\n } catch {\n h._argsError = true;\n }\n this.touch(false);\n }\n\n touch(apply: boolean = false): void {\n if (apply) this.apply();\n }\n\n apply(): void {\n // Emit a cloned config to avoid accidental mutations upstream\n const cfg = { ...(this.model.config as any), hooks: this.model.hooks } as FormConfig;\n this.configChange.emit(cfg);\n }\n\n reorder(st: Stage, idx: number, dir: -1 | 1): void {\n const arr = this.model.hooks[st];\n const to = idx + dir;\n if (to < 0 || to >= arr.length) return;\n [arr[idx], arr[to]] = [arr[to], arr[idx]];\n this.touch();\n }\n\n duplicate(st: Stage, idx: number): void {\n const arr = this.model.hooks[st];\n const copy = JSON.parse(JSON.stringify(arr[idx]));\n arr.splice(idx + 1, 0, copy);\n this.touch();\n }\n\n moveTo(st: Stage, idx: number, target?: Stage): void {\n if (!target || target === st) return;\n const arr = this.model.hooks[st];\n const item = arr.splice(idx, 1)[0];\n (item as any)._targetStage = undefined;\n this.model.hooks[target].push(item);\n this.touch();\n }\n}\n","import { FormLayoutRule, migrateFormLayoutRule } from '@praxisui/core';\nimport {\n RuleBuilderState,\n RuleNode,\n FieldConditionConfig,\n} from '@praxisui/visual-builder';\nimport { filterRuleProperties, sanitizeRuleEffect } from './rule-property.utils';\n\n/**\n * Converts a RuleBuilderState produced by the visual builder into\n * an array of FormLayoutRule objects understood by the dynamic form.\n */\nexport function ruleBuilderStateToFormLayoutRules(\n state: RuleBuilderState | null | undefined,\n): FormLayoutRule[] {\n if (!state || !state.rootNodes?.length) {\n return [];\n }\n\n const rules: FormLayoutRule[] = [];\n const seenRuleIds = new Set<string>();\n\n for (const rootId of state.rootNodes) {\n const rootNode = state.nodes[rootId];\n const rule = ruleNodeToFormLayoutRule(rootNode, state.nodes);\n if (rule && !seenRuleIds.has(rule.id)) {\n rules.push(sanitizeRuleEffect(rule));\n seenRuleIds.add(rule.id);\n }\n }\n\n return rules;\n}\n\n/**\n * Converts an array of FormLayoutRule back into a RuleBuilderState\n * so that the visual builder can display the saved rules.\n *\n * The conversion handles a limited subset of rules (visibility and\n * required/validation rules with simple field conditions).\n */\nexport function formLayoutRulesToBuilderState(\n rules: FormLayoutRule[] | null | undefined,\n): RuleBuilderState {\n const state: RuleBuilderState = {\n nodes: {},\n rootNodes: [],\n validationErrors: [],\n mode: 'visual',\n isDirty: false,\n history: [],\n historyPosition: 0,\n };\n\n if (!rules || rules.length === 0) {\n return state;\n }\n\n for (const rule of rules) {\n const nodePairs = formLayoutRuleToNodes(rule);\n nodePairs.forEach(({ rootNode, conditionNode }) => {\n state.nodes[rootNode.id] = rootNode;\n state.rootNodes.push(rootNode.id);\n if (conditionNode) {\n state.nodes[conditionNode.id] = conditionNode;\n }\n });\n }\n\n return state;\n}\n\nfunction ruleNodeToFormLayoutRule(\n node: RuleNode | undefined,\n allNodes: Record<string, RuleNode>,\n): FormLayoutRule | null {\n if (!node) {\n return null;\n }\n\n const config: any = node.config || {};\n const candidateTargets: string[] = [];\n if (Array.isArray(config.targets) && config.targets.length) {\n candidateTargets.push(...config.targets);\n }\n if (config.targetField) {\n candidateTargets.push(config.targetField);\n }\n const { targets, targetType } = normalizeTargets(\n candidateTargets,\n config.targetType,\n );\n if (!targets.length || !targetType) {\n return null;\n }\n const normalizedTargetType = targetType as FormLayoutRule['targetType'];\n const ruleId = config.ruleId || node.id;\n const nodeType = (config.type as string) || (node.type as string);\n\n let conditionString: string | null = null;\n if (config.conditionNodeId) {\n conditionString = buildDslFromCondition(\n allNodes[config.conditionNodeId],\n allNodes,\n );\n } else if (config.condition) {\n conditionString = buildDslFromCondition(config.condition, allNodes);\n }\n\n const inferredProperties =\n nodeType === 'propertyRule' ? null : inferPropertiesFromNode(nodeType);\n const properties =\n config.properties || (inferredProperties?.properties ?? undefined);\n const propertiesWhenFalse =\n config.propertiesWhenFalse ||\n (inferredProperties?.propertiesWhenFalse ?? undefined);\n\n const migrated = migrateFormLayoutRule({\n id: ruleId,\n name: node.label || node.id,\n targetType: normalizedTargetType,\n targets,\n description: node.metadata?.description,\n effect: {\n condition: conditionString ?? null,\n properties,\n propertiesWhenFalse,\n },\n });\n\n return sanitizeRuleEffect(migrated);\n}\n\nfunction buildDslFromCondition(\n node: RuleNode | undefined,\n allNodes: Record<string, RuleNode>,\n): string | null {\n if (!node) {\n return null;\n }\n if (typeof (node as any) === 'string') {\n return node as any;\n }\n\n if (node.type === 'fieldCondition') {\n const cfg = node.config as FieldConditionConfig;\n const operator = normalizeOperator(cfg.operator);\n if (!cfg.fieldName || !operator) {\n return null;\n }\n const value = JSON.stringify(cfg.value);\n return `${cfg.fieldName} ${operator} ${value}`;\n }\n\n if (node.type === 'andGroup' || node.type === 'orGroup') {\n const op = node.type === 'andGroup' ? 'and' : 'or';\n const parts = (node.children || [])\n .map((id: string) => buildDslFromCondition(allNodes[id], allNodes))\n .filter((p: string | null | undefined): p is string => !!p);\n if (parts.length === 0) {\n return null;\n }\n return parts.length > 1 ? `(${parts.join(` ${op} `)})` : parts[0];\n }\n\n return null;\n}\n\nfunction inferPropertiesFromNode(\n nodeType: string | undefined,\n): { properties: Record<string, any>; propertiesWhenFalse: Record<string, any> } | null {\n switch (nodeType) {\n case 'visibleIf':\n return {\n properties: { visible: true },\n propertiesWhenFalse: { visible: false },\n };\n case 'requiredIf':\n return {\n properties: { required: true },\n propertiesWhenFalse: { required: false },\n };\n case 'disabledIf':\n return {\n properties: { disabled: true },\n propertiesWhenFalse: { disabled: false },\n };\n case 'readonlyIf':\n return {\n properties: { readonly: true },\n propertiesWhenFalse: { readonly: false },\n };\n default:\n return null;\n }\n}\n\nfunction formLayoutRuleToNodes(\n rule: FormLayoutRule,\n): Array<{ rootNode: RuleNode; conditionNode?: RuleNode }> {\n const normalizedRule = sanitizeRuleEffect(migrateFormLayoutRule(rule));\n const condition = normalizedRule.effect?.condition;\n const nodes: Array<{ rootNode: RuleNode; conditionNode?: RuleNode }> = [];\n const targets =\n normalizedRule.targets && normalizedRule.targets.length\n ? normalizedRule.targets\n : [normalizedRule.id || generateId()];\n\n targets.forEach((target, index) => {\n let conditionNode: RuleNode | undefined;\n if (typeof condition === 'string') {\n conditionNode = parseSimpleCondition(condition);\n }\n\n const inferredType = inferRuleType(normalizedRule);\n const rootType: any =\n inferredType === 'propertyRule'\n ? 'propertyRule'\n : normalizedRule.targetType === 'field' && inferredType !== 'custom'\n ? inferredType\n : 'custom';\n const config: any = {\n type: inferredType,\n validatorType: inferredType,\n targetField: prefixTarget(normalizedRule.targetType, target),\n targets: [...(normalizedRule.targets || [])],\n targetType: normalizedRule.targetType,\n logicOperator: 'and',\n properties: filterRuleProperties(\n normalizedRule.targetType,\n normalizedRule.effect?.properties,\n ),\n propertiesWhenFalse: filterRuleProperties(\n normalizedRule.targetType,\n normalizedRule.effect?.propertiesWhenFalse,\n ),\n ruleId: normalizedRule.id,\n condition: typeof condition === 'string' ? condition : undefined,\n };\n if (normalizedRule.targetType && normalizedRule.targetType !== 'field') {\n config.targetType = normalizedRule.targetType;\n }\n if (conditionNode) {\n config.conditionNodeId = conditionNode.id;\n config.conditions = [conditionNode.config];\n }\n\n const rootNode: RuleNode = {\n id:\n targets.length > 1\n ? `${normalizedRule.id || generateId()}-${index}`\n : normalizedRule.id || generateId(),\n type: rootType,\n label: normalizedRule.name,\n config,\n };\n nodes.push({ rootNode, conditionNode });\n });\n\n return nodes;\n}\n\nfunction inferRuleType(rule: FormLayoutRule): string {\n const props = rule.effect?.properties || {};\n const propsFalse = rule.effect?.propertiesWhenFalse || {};\n const hasNonToggleProps = Object.keys({ ...props, ...propsFalse }).some(\n (k) => !['visible', 'required', 'disabled', 'readonly'].includes(k),\n );\n const targetType = (rule.targetType || 'field') as string;\n\n if (targetType && targetType !== 'field') {\n return 'propertyRule';\n }\n if (hasNonToggleProps) {\n return 'propertyRule';\n }\n if (props.visible !== undefined || propsFalse.visible !== undefined) {\n return 'visibleIf';\n }\n if (props.required !== undefined || propsFalse.required !== undefined) {\n return 'requiredIf';\n }\n if (props.disabled !== undefined || propsFalse.disabled !== undefined) {\n return 'disabledIf';\n }\n if (props.readonly !== undefined || propsFalse.readonly !== undefined) {\n return 'readonlyIf';\n }\n if (targetType === 'action') {\n if (props.label !== undefined || props.icon !== undefined || props.className !== undefined || props.style !== undefined) {\n return 'custom';\n }\n if (props.disabled !== undefined || propsFalse.disabled !== undefined) {\n return 'disabledIf';\n }\n }\n if (targetType === 'section') {\n if (\n props.collapsible !== undefined ||\n props.collapsed !== undefined ||\n props.title !== undefined ||\n props.icon !== undefined ||\n props.className !== undefined ||\n props.style !== undefined\n ) {\n return 'custom';\n }\n }\n return 'custom';\n}\n\nfunction normalizeTargets(\n rawTargets: string[],\n explicitTargetType?: string,\n): { targets: string[]; targetType: FormLayoutRule['targetType'] } {\n if (!rawTargets.length) {\n return { targets: [], targetType: (explicitTargetType as any) || 'field' };\n }\n const detected = rawTargets.map((t) => detectTarget(t));\n const type =\n (explicitTargetType as any) ||\n (detected.some((d) => d.type === 'section')\n ? 'section'\n : detected.some((d) => d.type === 'action')\n ? 'action'\n : detected.some((d) => d.type === 'row')\n ? 'row'\n : detected.some((d) => d.type === 'column')\n ? 'column'\n : 'field');\n const targets = Array.from(\n new Set(detected.map((d) => d.value).filter(Boolean)),\n );\n return {\n targetType: type as FormLayoutRule['targetType'],\n targets,\n };\n}\n\nfunction detectTarget(\n value: string,\n): { type: 'field' | 'section' | 'action' | 'row' | 'column'; value: string } {\n if (isScopedSectionHeaderActionTarget(value) || isUnscopedSectionHeaderActionTarget(value)) {\n return { type: 'action', value };\n }\n if (value?.startsWith('section:')) {\n return { type: 'section', value: value.substring('section:'.length) };\n }\n if (value?.startsWith('action:')) {\n return { type: 'action', value: value.substring('action:'.length) };\n }\n if (value?.startsWith('row:')) {\n return { type: 'row', value: value.substring('row:'.length) };\n }\n if (value?.startsWith('column:')) {\n return { type: 'column', value: value.substring('column:'.length) };\n }\n return { type: 'field', value };\n}\n\nfunction prefixTarget(targetType: FormLayoutRule['targetType'], value: string): string {\n if (\n targetType === 'action' &&\n (isScopedSectionHeaderActionTarget(value) || isUnscopedSectionHeaderActionTarget(value))\n ) {\n return value;\n }\n if (targetType === 'section') return `section:${value}`;\n if (targetType === 'action') return `action:${value}`;\n if (targetType === 'row') return `row:${value}`;\n if (targetType === 'column') return `column:${value}`;\n return value;\n}\n\nfunction isScopedSectionHeaderActionTarget(value: string | undefined): boolean {\n return !!value && value.startsWith('section:') && value.includes(':header-action:');\n}\n\nfunction isUnscopedSectionHeaderActionTarget(value: string | undefined): boolean {\n return !!value && value.startsWith('header-action:');\n}\n\nfunction parseSimpleCondition(condition: string): RuleNode | undefined {\n const trimmed = condition.trim();\n const match = trimmed.match(\n /^(.+?)\\s+(eq|equals|==|=|neq|notequals|!=|<>|lt|lessthan|<|lte|lessthanorequal|<=|gt|greaterthan|>|gte|greaterthanorequal|>=|contains|startswith|endswith|in)\\s+(.+)$/iu,\n );\n if (!match) {\n return undefined;\n }\n const [, fieldNameRaw, operatorRaw, valueRaw] = match;\n const fieldName = fieldNameRaw.trim();\n if (!fieldName) {\n return undefined;\n }\n const operator = normalizeOperator(operatorRaw);\n if (!operator) {\n return undefined;\n }\n const normalizedValueRaw = valueRaw.trim();\n let value: any = normalizedValueRaw;\n try {\n value = JSON.parse(normalizedValueRaw);\n } catch {\n // treat as string without quotes\n value = normalizedValueRaw.replace(/^['\"]|['\"]$/g, '');\n }\n const nodeId = generateId();\n const config: FieldConditionConfig = {\n type: 'fieldCondition',\n fieldName,\n operator: operator as any,\n value,\n };\n return {\n id: nodeId,\n type: 'fieldCondition',\n config,\n };\n}\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 9);\n}\n\nfunction normalizeOperator(operator: string | undefined): string | undefined {\n if (!operator) {\n return undefined;\n }\n const normalized = operator.toLowerCase().replace(/[_\\s]/g, '');\n\n switch (normalized) {\n case 'eq':\n case 'equals':\n case '==':\n case '=':\n return 'eq';\n\n case 'neq':\n case 'notequals':\n case '!=':\n case '<>':\n return 'neq';\n\n case 'lt':\n case 'lessthan':\n case '<':\n return 'lt';\n\n case 'lte':\n case 'lessthanorequal':\n case '<=':\n return 'lte';\n\n case 'gt':\n case 'greaterthan':\n case '>':\n return 'gt';\n\n case 'gte':\n case 'greaterthanorequal':\n case '>=':\n return 'gte';\n\n case 'contains':\n return 'contains';\n\n case 'startswith':\n return 'startsWith';\n\n case 'endswith':\n return 'endsWith';\n\n case 'in':\n return 'in';\n\n default:\n return operator;\n }\n}\n","import {\n Component,\n ViewChild,\n Inject,\n Optional,\n OnInit,\n OnDestroy,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormConfig, FieldMetadata, FieldDefinition, FormSection, FormActionsLayout, RULE_PROPERTY_SCHEMA, FormLayoutRule } from '@praxisui/core';\nimport type { BackConfig } from '@praxisui/core';\nimport type { FieldDataType } from '@praxisui/core';\nimport { BehaviorSubject, Subject, firstValueFrom } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n SettingsPanelService,\n} from '@praxisui/settings-panel';\nimport {\n PraxisVisualBuilder,\n RuleBuilderConfig,\n RuleBuilderState,\n FieldSchema,\n FieldType,\n} from '@praxisui/visual-builder';\nimport { FormConfigService } from '../services/form-config.service';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage } from '@praxisui/core';\nimport {\n JsonConfigEditorComponent,\n JsonValidationResult,\n JsonEditorEvent,\n} from '../json-config-editor/json-config-editor.component';\nimport { LayoutEditorComponent } from '../layout-editor/layout-editor.component';\nimport { BehaviorEditorComponent } from '../behavior-editor/behavior-editor.component';\nimport { ActionsEditorComponent } from '../actions-editor/actions-editor.component';\nimport { MessagesEditorComponent } from '../messages-editor/messages-editor.component';\nimport { HooksEditorComponent } from '../hooks-editor/hooks-editor.component';\nimport { normalizeFormConfig } from '../utils/normalize-form-config';\nimport {\n formLayoutRulesToBuilderState,\n ruleBuilderStateToFormLayoutRules,\n} from '../utils/rule-converters';\nimport { CascadeManagerTabComponent } from '@praxisui/metadata-editor';\nimport {\n createDynamicFormAuthoringDocument,\n parseLegacyOrDynamicFormDocument,\n serializeDynamicFormAuthoringDocument,\n} from '../dynamic-form-editor-capability';\nimport {\n DynamicFormAuthoringDocument,\n DynamicFormPresentationSnapshot,\n DynamicFormSchemaPrefsSnapshot,\n} from '../dynamic-form-editor-document.model';\n\n@Component({\n selector: 'praxis-dynamic-form-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatTabsModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatButtonToggleModule,\n MatTooltipModule,\n JsonConfigEditorComponent,\n LayoutEditorComponent,\n BehaviorEditorComponent,\n ActionsEditorComponent,\n MessagesEditorComponent,\n HooksEditorComponent,\n PraxisVisualBuilder,\n CascadeManagerTabComponent,\n ],\n providers: [FormConfigService],\n templateUrl: './praxis-dynamic-form-config-editor.html',\n styleUrls: ['./praxis-dynamic-form-config-editor.scss'],\n})\nexport class PraxisDynamicFormConfigEditor\n implements SettingsValueProvider, OnInit, OnDestroy {\n @ViewChild(JsonConfigEditorComponent) jsonEditor?: JsonConfigEditorComponent;\n\n editedConfig: FormConfig;\n ruleBuilderConfig!: RuleBuilderConfig;\n ruleBuilderState?: RuleBuilderState;\n currentRules: FormLayoutRule[] = [];\n private initialConfig: FormConfig;\n private initialDocument: DynamicFormAuthoringDocument;\n private readonly openedWithCanonicalDocument: boolean;\n backConfig?: BackConfig;\n private includeBackConfigBlock = false;\n formId?: string;\n componentKeyId?: string;\n // Input patch: controls like mode (dados)\n inputMode: 'create' | 'edit' | 'view' = 'create';\n private includeBindingsBlock = false;\n private readonly editorMode: 'create' | 'edit' | 'view';\n // Indica se o editor foi aberto com o formulário em modo apresentação\n isPresentationMode = false;\n truncatePreview = false;\n previewItems = [\n { label: 'Nome', value: 'Maria da Conceição Albuquerque de Souza' },\n { label: 'E‑mail', value: 'maria.conceicao.albuquerque@example-enterprise.com.br' },\n { label: 'Data de Nascimento', value: '12/03/1985' },\n { label: 'Cargo', value: 'Especialista em Integrações de Sistemas e Automação' },\n ];\n\n // Presentation preferences (persisted outside FormConfig)\n presentationPrefs: {\n labelPosition: 'above' | 'left';\n labelFontSize?: number | null;\n valueFontSize?: number | null;\n compact?: boolean;\n density?: 'comfortable' | 'cozy' | 'compact';\n labelWidth?: number | null;\n labelAlign?: 'start' | 'center' | 'end';\n valueAlign?: 'start' | 'center' | 'end';\n } = {\n labelPosition: 'above',\n labelFontSize: null,\n valueFontSize: null,\n compact: false,\n density: 'comfortable',\n labelWidth: 140,\n labelAlign: 'start',\n valueAlign: 'start',\n };\n\n /** Ensure hints object exists (normalized upstream) */\n private ensureHints(): void {\n const c: any = this.editedConfig as any;\n if (!c.hints) {\n // Minimal fallback: seed with empty shape; normalize upstream will fill defaults on save\n c.hints = { dataModes: { create: '', edit: '', view: '' }, uiModes: { presentation: '', readonly: '', disabled: '', visible: '' } };\n }\n }\n\n // Schema verification preferences (persisted outside FormConfig)\n schemaPrefs: { notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none'; snoozeMs: number; autoOpenSettingsOnOutdated: boolean } = {\n notifyIfOutdated: 'both',\n snoozeMs: 24 * 60 * 60 * 1000,\n autoOpenSettingsOnOutdated: false,\n };\n private includePresentationBlock = false;\n private includeSchemaPrefsBlock = false;\n // Read-only current server meta (if any)\n serverMeta?: { serverHash?: string; lastVerifiedAt?: string };\n\n private destroy$ = new Subject<void>();\n private hasProcessedInitialRuleState = false;\n\n // Observables obrigatórios da interface SettingsValueProvider\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private lastRulesSignature: string | null = null;\n private readonly DEBUG =\n typeof window !== 'undefined' &&\n Boolean((window as any)['__PRAXIS_DEBUG__']);\n\n private debugLog(message: string, ...args: any[]): void {\n if (!this.DEBUG) return;\n if (args.length > 0) {\n console.debug(message, ...args);\n return;\n }\n console.debug(message);\n }\n\n constructor(\n @Inject(ASYNC_CONFIG_STORAGE) private storage: AsyncConfigStorage,\n private configService: FormConfigService,\n private settingsPanel: SettingsPanelService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(SETTINGS_PANEL_DATA) injectedData?: any,\n ) {\n const data = injectedData as any;\n this.openedWithCanonicalDocument =\n data?.document?.kind === 'praxis.dynamic-form.editor' ||\n data?.kind === 'praxis.dynamic-form.editor';\n const initialDocument = parseLegacyOrDynamicFormDocument(\n data?.document ?? injectedData,\n );\n this.initialDocument = initialDocument;\n const formCfg: FormConfig = initialDocument.config;\n this.backConfig = initialDocument.contextSnapshot?.backConfig;\n this.includeBackConfigBlock = Object.prototype.hasOwnProperty.call(\n initialDocument.contextSnapshot || {},\n 'backConfig',\n );\n this.formId = data?.formId;\n this.componentKeyId = data?.componentKeyId;\n this.includeBindingsBlock = Object.prototype.hasOwnProperty.call(\n initialDocument.bindings || {},\n 'mode',\n );\n this.inputMode = this.normalizeMode(initialDocument.bindings?.mode);\n this.editorMode = this.inputMode;\n // Flag de contexto do host (praxis-dynamic-form)\n this.isPresentationMode = !!data?.presentationMode;\n this.initialConfig = this.stripLegacy(normalizeFormConfig(formCfg));\n try {\n this.debugLog('[FormConfigEditor] ctor: initial', {\n sections: this.initialConfig.sections?.length || 0,\n fields: this.initialConfig.fieldMetadata?.length || 0,\n hasRules: !!(this.initialConfig as any).formRules?.length,\n hasRulesState: !!(this.initialConfig as any).formRulesState,\n });\n } catch { }\n this.backConfig = this.createBackConfigState(this.backConfig);\n this.includePresentationBlock = Object.prototype.hasOwnProperty.call(\n initialDocument.contextSnapshot || {},\n 'presentation',\n );\n this.presentationPrefs = this.mergePresentationPrefs(\n initialDocument.contextSnapshot?.presentation,\n );\n this.includeSchemaPrefsBlock = Object.prototype.hasOwnProperty.call(\n initialDocument.contextSnapshot || {},\n 'schemaPrefs',\n );\n this.schemaPrefs = this.mergeSchemaPrefs(\n initialDocument.contextSnapshot?.schemaPrefs,\n );\n this.editedConfig = structuredClone(this.initialConfig) as any;\n this.configService.loadConfig(structuredClone(this.initialConfig));\n\n }\n\n ngOnInit(): void {\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n this.editedConfig.fieldMetadata || [],\n this.editedConfig.sections || [],\n this.editedConfig.actions,\n );\n this.ruleBuilderState =\n (this.editedConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(this.editedConfig.formRules || []);\n this.currentRules = ruleBuilderStateToFormLayoutRules(this.ruleBuilderState);\n this.lastRulesSignature = this.computeRulesSignature(this.ruleBuilderState);\n // Inicializar estado de validação - assumir válido por padrão\n this.isValid$.next(true);\n this.updateDirtyState('init');\n void this.loadPrefsFromStorage();\n }\n\n reset(): void {\n this.isBusy$.next(true);\n\n try {\n this.editedConfig = structuredClone(this.initialConfig);\n this.includeBackConfigBlock = Object.prototype.hasOwnProperty.call(\n this.initialDocument.contextSnapshot || {},\n 'backConfig',\n );\n this.backConfig = this.createBackConfigState(\n this.initialDocument.contextSnapshot?.backConfig,\n );\n this.includeBindingsBlock = Object.prototype.hasOwnProperty.call(\n this.initialDocument.bindings || {},\n 'mode',\n );\n this.inputMode = this.normalizeMode(this.initialDocument.bindings?.mode);\n this.includePresentationBlock = Object.prototype.hasOwnProperty.call(\n this.initialDocument.contextSnapshot || {},\n 'presentation',\n );\n this.presentationPrefs = this.mergePresentationPrefs(\n this.initialDocument.contextSnapshot?.presentation,\n );\n this.includeSchemaPrefsBlock = Object.prototype.hasOwnProperty.call(\n this.initialDocument.contextSnapshot || {},\n 'schemaPrefs',\n );\n this.schemaPrefs = this.mergeSchemaPrefs(\n this.initialDocument.contextSnapshot?.schemaPrefs,\n );\n try { this.debugLog('[FormConfigEditor] reset()'); } catch { }\n this.jsonEditor?.updateJsonFromDocument(this.buildAuthoringDocument());\n this.ruleBuilderState =\n (this.editedConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(this.editedConfig.formRules || []);\n this.currentRules = ruleBuilderStateToFormLayoutRules(this.ruleBuilderState);\n this.lastRulesSignature = this.computeRulesSignature(this.ruleBuilderState);\n // Resetar validação para estado válido\n this.isValid$.next(true);\n this.updateDirtyState('reset');\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n // Public: referenced in template for (ngModelChange) handlers\n updateDirtyState(reason: string = 'unknown'): void {\n const a = serializeDynamicFormAuthoringDocument(this.initialDocument);\n const b = serializeDynamicFormAuthoringDocument(this.buildAuthoringDocument());\n const hasChanges = stableStringify(a) !== stableStringify(b);\n this.isDirty$.next(hasChanges);\n if (!reason.startsWith('json-')) {\n this.jsonEditor?.updateJsonFromDocument(this.buildAuthoringDocument());\n }\n try {\n if (hasChanges) {\n const diffs = diffObjects(a as any, b as any, [], 12);\n this.debugLog('[FormConfigEditor] dirty=true', { reason, diffs });\n } else {\n this.debugLog('[FormConfigEditor] dirty=false', { reason });\n }\n } catch { }\n // Nota: isValid$ é atualizado em onJsonValidationChange quando necessário\n // Para outras validações futuras, verificar se não há validação JSON em andamento\n }\n\n getSettingsValue(): any {\n const document = this.buildAuthoringDocument();\n try { this.debugLog('[FormConfigEditor] getSettingsValue()', { sections: document.config.sections?.length || 0 }); } catch { }\n return serializeDynamicFormAuthoringDocument(document);\n }\n\n onSave(): any {\n this.isBusy$.next(true);\n\n try {\n const document = this.buildAuthoringDocument();\n try { this.debugLog('[FormConfigEditor] onSave()', { sections: document.config.sections?.length || 0 }); } catch { }\n return serializeDynamicFormAuthoringDocument(document);\n } finally {\n this.isBusy$.next(false);\n }\n }\n\n // (Resumo/ações rápidas removidos da aba Geral conforme orientação)\n\n onJsonConfigChange(newValue: FormConfig | DynamicFormAuthoringDocument): void {\n const isCanonicalDocument =\n (newValue as DynamicFormAuthoringDocument)?.kind ===\n 'praxis.dynamic-form.editor';\n const document = isCanonicalDocument\n ? (newValue as DynamicFormAuthoringDocument)\n : parseLegacyOrDynamicFormDocument(newValue);\n this.editedConfig = this.stripLegacy(document.config);\n this.includeBackConfigBlock = isCanonicalDocument\n ? Object.prototype.hasOwnProperty.call(document.contextSnapshot || {}, 'backConfig')\n : this.includeBackConfigBlock || !!document.contextSnapshot?.backConfig;\n this.backConfig = this.createBackConfigState(\n isCanonicalDocument\n ? document.contextSnapshot?.backConfig\n : document.contextSnapshot?.backConfig || this.backConfig,\n );\n this.includeBindingsBlock = isCanonicalDocument\n ? Object.prototype.hasOwnProperty.call(document.bindings || {}, 'mode')\n : this.includeBindingsBlock || !!document.bindings?.mode;\n this.inputMode = this.normalizeMode(document.bindings?.mode);\n this.includePresentationBlock = isCanonicalDocument\n ? Object.prototype.hasOwnProperty.call(document.contextSnapshot || {}, 'presentation')\n : this.includePresentationBlock || !!document.contextSnapshot?.presentation;\n this.presentationPrefs = this.mergePresentationPrefs(\n document.contextSnapshot?.presentation,\n );\n this.includeSchemaPrefsBlock = isCanonicalDocument\n ? Object.prototype.hasOwnProperty.call(document.contextSnapshot || {}, 'schemaPrefs')\n : this.includeSchemaPrefsBlock || !!document.contextSnapshot?.schemaPrefs;\n this.schemaPrefs = this.mergeSchemaPrefs(\n document.contextSnapshot?.schemaPrefs,\n );\n this.ensureHints();\n try { this.debugLog('[FormConfigEditor] onJsonConfigChange()', { sections: this.editedConfig.sections?.length || 0 }); } catch { }\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n document.config.fieldMetadata || [],\n document.config.sections || [],\n document.config.actions,\n );\n this.ruleBuilderState =\n (document.config.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(document.config.formRules || []);\n this.currentRules = ruleBuilderStateToFormLayoutRules(this.ruleBuilderState);\n this.lastRulesSignature = this.computeRulesSignature(this.ruleBuilderState);\n this.updateDirtyState('json-change');\n }\n\n onJsonValidationChange(result: JsonValidationResult): void {\n // Atualizar estado de validação baseado no resultado do JSON\n this.isValid$.next(result.isValid);\n // Evitar marcar dirty apenas por validação (não há mudança real de config)\n if (this.isDirty$.value) {\n this.updateDirtyState('json-validate');\n }\n }\n\n onJsonEditorEvent(_event: JsonEditorEvent): void {\n // no-op for now\n }\n\n onConfigChange(newConfig: FormConfig): void {\n this.editedConfig = this.stripLegacy(newConfig);\n this.ensureHints();\n try { this.debugLog('[FormConfigEditor] onConfigChange()', { sections: newConfig.sections?.length || 0 }); } catch { }\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n newConfig.fieldMetadata || [],\n newConfig.sections || [],\n newConfig.actions,\n );\n this.ruleBuilderState =\n (newConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(newConfig.formRules || []);\n this.currentRules = ruleBuilderStateToFormLayoutRules(this.ruleBuilderState);\n this.lastRulesSignature = this.computeRulesSignature(this.ruleBuilderState);\n this.updateDirtyState('layout-change');\n }\n\n onRulesChanged(state: RuleBuilderState): void {\n if (!this.hasProcessedInitialRuleState) {\n const hadInitialRules =\n (this.initialConfig as any)?.formRules?.length ||\n !!(this.initialConfig as any)?.formRulesState;\n const isEmptyState =\n !state?.rootNodes || state.rootNodes.length === 0;\n if (hadInitialRules && isEmptyState) {\n this.hasProcessedInitialRuleState = true;\n return;\n }\n this.hasProcessedInitialRuleState = true;\n }\n\n const signature = this.computeRulesSignature(state);\n if (signature === this.lastRulesSignature) {\n return;\n }\n this.lastRulesSignature = signature;\n\n const rules = ruleBuilderStateToFormLayoutRules(state);\n try { this.debugLog('[FormConfigEditor] onRulesChanged()', { rules: rules?.length || 0 }); } catch { }\n // Avoid marking editor as dirty when there are no rules (empty initial state)\n if (!rules || rules.length === 0) {\n const next = { ...this.editedConfig } as any;\n // Remove optional fields when empty to keep snapshot stable\n if (Array.isArray(next.formRules) && next.formRules.length === 0) {\n delete next.formRules;\n }\n if (next.formRulesState && isEmptyRuleBuilderState(next.formRulesState)) {\n delete next.formRulesState;\n }\n this.editedConfig = next;\n this.ruleBuilderState = state;\n this.currentRules = [];\n this.updateDirtyState('rules-empty');\n return;\n }\n this.editedConfig = {\n ...this.editedConfig,\n formRules: rules,\n formRulesState: state,\n } as any;\n this.ruleBuilderState = state;\n this.currentRules = rules;\n this.updateDirtyState('rules-change');\n }\n\n get jsonDocument(): DynamicFormAuthoringDocument {\n return this.buildAuthoringDocument();\n }\n\n onBackConfigChange(): void {\n this.includeBackConfigBlock = true;\n this.updateDirtyState('back-config-change');\n }\n\n isBindingsBlockPersisted(): boolean {\n return this.includeBindingsBlock;\n }\n\n isPresentationBlockPersisted(): boolean {\n return this.includePresentationBlock;\n }\n\n isSchemaPrefsBlockPersisted(): boolean {\n return this.includeSchemaPrefsBlock;\n }\n\n isBackConfigBlockPersisted(): boolean {\n return this.includeBackConfigBlock;\n }\n\n onInputModeChange(): void {\n this.includeBindingsBlock = true;\n this.updateDirtyState('input-mode-change');\n }\n\n onPresentationPrefsChange(reason: string): void {\n this.includePresentationBlock = true;\n this.updateDirtyState(reason);\n }\n\n onSchemaPrefsChange(reason: string): void {\n this.includeSchemaPrefsBlock = true;\n this.updateDirtyState(reason);\n }\n\n private createRuleBuilderConfig(\n fieldMetadata: FieldMetadata[],\n sections: FormSection[] = [],\n actions?: FormActionsLayout,\n ): RuleBuilderConfig {\n const mapped = this.mapMetadataToSchema(fieldMetadata, sections, actions);\n return {\n fieldSchemas: mapped.byType.fields,\n targetSchemas: {\n fields: mapped.byType.fields,\n sections: mapped.byType.sections,\n actions: mapped.byType.actions,\n rows: mapped.byType.rows,\n columns: mapped.byType.columns,\n },\n targetPropertySchemas: RULE_PROPERTY_SCHEMA as any,\n propertySchema: RULE_PROPERTY_SCHEMA as any,\n };\n }\n\n private mapMetadataToSchema(\n metadata: FieldMetadata[],\n sections: FormSection[],\n actions?: FormActionsLayout,\n ): {\n combined: Record<string, FieldSchema>;\n byType: {\n fields: Record<string, FieldSchema>;\n sections: Record<string, FieldSchema>;\n actions: Record<string, FieldSchema>;\n rows: Record<string, FieldSchema>;\n columns: Record<string, FieldSchema>;\n };\n } {\n const combined: Record<string, FieldSchema> = {};\n const byType = {\n fields: {} as Record<string, FieldSchema>,\n sections: {} as Record<string, FieldSchema>,\n actions: {} as Record<string, FieldSchema>,\n rows: {} as Record<string, FieldSchema>,\n columns: {} as Record<string, FieldSchema>,\n };\n\n const visibleFields = (metadata || []).filter((f) => !(f as any)?.formHidden);\n\n for (const field of visibleFields) {\n const schema: FieldSchema = {\n name: field.name,\n label: field.label,\n origin: 'field',\n type: this.mapDataTypeToFieldType(field.dataType),\n description: field.description,\n required: field.required,\n allowedValues: field.options?.map((opt) => ({\n label: opt.text,\n value: opt.value,\n })),\n };\n combined[field.name] = schema;\n byType.fields[field.name] = schema;\n }\n\n // Expose sections as rule targets (prefixed)\n sections.forEach((section) => {\n const id = section.id || '';\n if (!id) return;\n const sectionLabel = section.title || id;\n const schema: FieldSchema = {\n name: `section:${id}`,\n label: `[Seção] ${sectionLabel}`,\n origin: 'section',\n type: FieldType.STRING,\n description: section.description,\n };\n combined[schema.name] = schema;\n byType.sections[id] = schema;\n\n // Rows within section\n (section.rows || []).forEach((row, rowIndex) => {\n const rowId = row.id || `row-${rowIndex}`;\n const rowLabel = row.title || `Linha ${rowIndex + 1}`;\n const rowKey = `row:${rowId}`;\n const rowSchema: FieldSchema = {\n name: rowKey,\n label: row.title\n ? `[Linha] ${row.title}`\n : `[Linha] ${sectionLabel} • ${rowLabel}`,\n origin: 'row',\n type: FieldType.STRING,\n description: row.title,\n };\n combined[rowKey] = rowSchema;\n byType.rows[rowId] = rowSchema;\n\n (row.columns || []).forEach((column, colIndex) => {\n const colId = column.id || `col-${colIndex}`;\n const colKey = `column:${colId}`;\n const columnLabel = column.title || `Coluna ${colIndex + 1}`;\n const colSchema: FieldSchema = {\n name: colKey,\n label: column.title\n ? `[Coluna] ${column.title}`\n : `[Coluna] ${sectionLabel} • ${rowLabel} • ${columnLabel}`,\n origin: 'column',\n type: FieldType.STRING,\n };\n combined[colKey] = colSchema;\n byType.columns[colId] = colSchema;\n });\n });\n });\n\n // Expose actions as rule targets (prefixed)\n const allActions: Array<{ id: string; label?: string }> = [];\n sections.forEach((section) => {\n (section.headerActions || []).forEach((action) => {\n const actionId = (action.action || action.id || '').trim();\n if (!actionId) return;\n const scopedActionId = section.id\n ? `section:${section.id}:header-action:${actionId}`\n : `header-action:${actionId}`;\n allActions.push({\n id: scopedActionId,\n label:\n action.label ||\n `${section.title || section.id} • ${actionId}`,\n });\n });\n });\n if (actions?.submit) allActions.push({ id: actions.submit.id || 'submit', label: actions.submit.label });\n if (actions?.cancel) allActions.push({ id: actions.cancel.id || 'cancel', label: actions.cancel.label });\n if (actions?.reset) allActions.push({ id: actions.reset.id || 'reset', label: actions.reset.label });\n if (actions?.custom?.length) {\n actions.custom.forEach((c: any) => allActions.push({ id: c.id || c.action || '', label: c.label }));\n }\n allActions\n .filter((a) => a.id)\n .forEach((a) => {\n const schema: FieldSchema = {\n name: `action:${a.id}`,\n label: a.label ? `[Ação] ${a.label}` : `[Ação] ${a.id}`,\n origin: 'action',\n type: FieldType.STRING,\n };\n combined[schema.name] = schema;\n byType.actions[a.id] = schema;\n });\n\n return { combined, byType };\n }\n\n private mapDataTypeToFieldType(dataType?: FieldDataType): FieldType {\n const mapping: Record<FieldDataType, FieldType> = {\n text: FieldType.STRING,\n number: FieldType.NUMBER,\n email: FieldType.EMAIL,\n date: FieldType.DATE,\n password: FieldType.STRING,\n file: FieldType.STRING,\n url: FieldType.URL,\n boolean: FieldType.BOOLEAN,\n json: FieldType.JSON,\n };\n return mapping[dataType ?? 'text'];\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n // Finalizar observables para evitar memory leaks\n this.isDirty$.complete();\n this.isValid$.complete();\n this.isBusy$.complete();\n }\n\n onLayoutSelect(event: any): void {\n if (event && event.type === 'column' && event.openEditor) {\n const column = this.editedConfig.sections[event.sectionIndex]?.rows[event.rowIndex]?.columns[event.columnIndex];\n this.openColumnEditor(column);\n }\n }\n\n private openColumnEditor(column: any): void {\n if (!column) return;\n import('../canvas/components/column-editor/column-editor.component').then((m) => {\n const { ColumnEditorComponent } = m as any;\n const ref = this.settingsPanel.open({\n id: `column.${this.formId || 'form'}.${column.id}`,\n title: 'Configurar Coluna',\n titleIcon: 'view_column',\n content: { component: ColumnEditorComponent, inputs: { column } },\n });\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe(() => this.cdr.detectChanges());\n });\n }\n\n // Cascatas: aplicar patch granular aos campos\n onCascadeApply(patch: Record<string, Partial<FieldDefinition>>): void {\n const fields = this.editedConfig.fieldMetadata || [];\n const next = fields.map((f) => ({ ...f }));\n let changed = false;\n for (let i = 0; i < next.length; i++) {\n const name = next[i].name;\n if (patch[name]) {\n Object.assign(next[i] as any, patch[name]);\n changed = true;\n }\n }\n if (changed) {\n this.editedConfig = { ...this.editedConfig, fieldMetadata: next };\n // Keep JSON editor view in sync when open\n try {\n this.jsonEditor?.updateJsonFromDocument(this.buildAuthoringDocument());\n } catch { }\n this.updateDirtyState();\n }\n }\n\n // --- Private helpers ---\n private stripLegacy(cfg: FormConfig): FormConfig {\n const copy = structuredClone(cfg);\n (copy as any).fieldMetadata = stripLegacyFieldMetadata(copy.fieldMetadata);\n // Normalize optional properties to avoid spurious dirty state\n if (Array.isArray((copy as any).formRules) && (copy as any).formRules.length === 0) {\n delete (copy as any).formRules;\n }\n if ((copy as any).formRulesState && isEmptyRuleBuilderState((copy as any).formRulesState)) {\n delete (copy as any).formRulesState;\n }\n return copy;\n }\n\n private computeRulesSignature(state?: RuleBuilderState): string | null {\n if (!state) return null;\n return JSON.stringify({\n nodes: state.nodes,\n rootNodes: state.rootNodes,\n currentJSON: state.currentJSON,\n currentDSL: state.currentDSL,\n validationErrors: state.validationErrors,\n mode: state.mode,\n });\n }\n\n // UI handlers\n restoreHintsDefaults(): void {\n try {\n const current = (this.editedConfig as any);\n // Defaults are injected by normalization on save/apply; keep a local reset to blank to let defaults win.\n current.hints = undefined;\n // Keep JSON editor in sync\n this.jsonEditor?.updateJsonFromDocument(this.buildAuthoringDocument());\n this.updateDirtyState('hints-restore');\n } catch { }\n }\n\n private async loadPrefsFromStorage(): Promise<void> {\n const key = this.componentKeyId || this.formId;\n if (!key) return;\n try {\n const hasDocumentPresentation =\n this.openedWithCanonicalDocument ||\n !!this.initialDocument.contextSnapshot?.presentation;\n const pres = hasDocumentPresentation\n ? null\n : await firstValueFrom(\n this.storage.loadConfig<any>(`form-pres:${key}:${this.editorMode}`),\n ).catch(() => null);\n if (pres) {\n this.presentationPrefs = {\n labelPosition: pres.labelPosition === 'left' ? 'left' : 'above',\n labelFontSize: pres.labelFontSize ?? null,\n valueFontSize: pres.valueFontSize ?? null,\n compact: !!pres.compact,\n density: pres.density || 'comfortable',\n labelWidth: pres.labelWidth ?? 140,\n labelAlign: pres.labelAlign || 'start',\n valueAlign: pres.valueAlign || 'start',\n };\n }\n\n const hasDocumentSchemaPrefs =\n this.openedWithCanonicalDocument ||\n !!this.initialDocument.contextSnapshot?.schemaPrefs;\n const prefs = hasDocumentSchemaPrefs\n ? null\n : await firstValueFrom(\n this.storage.loadConfig<any>(`form-schema-prefs:${key}`),\n ).catch(() => null);\n if (prefs && typeof prefs === 'object') {\n const allowed: any = {};\n const n = prefs.notifyIfOutdated;\n if (n === 'inline' || n === 'snackbar' || n === 'both' || n === 'none') {\n allowed.notifyIfOutdated = n;\n }\n if (typeof prefs.snoozeMs === 'number') allowed.snoozeMs = prefs.snoozeMs;\n if (typeof prefs.autoOpenSettingsOnOutdated === 'boolean') {\n allowed.autoOpenSettingsOnOutdated = prefs.autoOpenSettingsOnOutdated;\n }\n this.schemaPrefs = { ...this.schemaPrefs, ...allowed };\n }\n\n const schemaScopeKey = `form-schema-meta:${key}`;\n const schemaId = String(\n (this.editedConfig as any)?.metadata?.schemaId ||\n (this.initialConfig as any)?.metadata?.schemaId ||\n '',\n ).trim();\n const schemaMetaCandidates: string[] = [];\n if (schemaId) {\n schemaMetaCandidates.push(`${schemaScopeKey}:schema:${schemaId}`);\n }\n if (!schemaId) {\n const storedIds = await firstValueFrom(\n this.storage.loadConfig<string[]>(`${schemaScopeKey}:index`),\n ).catch(() => []);\n const ids = (Array.isArray(storedIds) ? storedIds : [])\n .map((item) => String(item || '').trim())\n .filter((item) => !!item);\n ids.forEach((id) => schemaMetaCandidates.push(`${schemaScopeKey}:schema:${id}`));\n }\n schemaMetaCandidates.push(schemaScopeKey); // legacy fallback\n\n let resolvedMeta: any | undefined;\n for (const candidate of Array.from(new Set(schemaMetaCandidates))) {\n const loaded = await firstValueFrom(\n this.storage.loadConfig<any>(candidate),\n ).catch(() => undefined);\n if (loaded && typeof loaded === 'object') {\n resolvedMeta = loaded;\n break;\n }\n }\n this.serverMeta = resolvedMeta || undefined;\n } catch { }\n this.cdr.detectChanges();\n }\n\n private normalizeMode(value?: string): 'create' | 'edit' | 'view' {\n if (value === 'edit' || value === 'view' || value === 'create') return value;\n return 'create';\n }\n\n private buildAuthoringDocument(): DynamicFormAuthoringDocument {\n const contextSnapshot = stripUndefinedContextSnapshot({\n backConfig: this.includeBackConfigBlock\n ? this.toBackConfigSnapshot()\n : undefined,\n presentation: this.includePresentationBlock\n ? this.toPresentationSnapshot()\n : undefined,\n schemaPrefs: this.includeSchemaPrefsBlock\n ? this.toSchemaPrefsSnapshot()\n : undefined,\n });\n return createDynamicFormAuthoringDocument({\n config: this.stripLegacy(this.editedConfig),\n bindings: this.includeBindingsBlock\n ? {\n mode: this.inputMode,\n }\n : undefined,\n contextSnapshot,\n });\n }\n\n private createBackConfigState(\n snapshot?: BackConfig,\n ): BackConfig {\n return (\n structuredClone(snapshot) ||\n ({ returnTo: '', confirmOnDirty: true } as BackConfig)\n );\n }\n\n private mergePresentationPrefs(\n snapshot?: DynamicFormPresentationSnapshot,\n ): typeof this.presentationPrefs {\n return {\n labelPosition: snapshot?.labelPosition === 'left' ? 'left' : 'above',\n labelFontSize: snapshot?.labelFontSize ?? null,\n valueFontSize: snapshot?.valueFontSize ?? null,\n compact: snapshot?.compact === true,\n density: snapshot?.density || 'comfortable',\n labelWidth: snapshot?.labelWidth ?? 140,\n labelAlign: snapshot?.labelAlign || 'start',\n valueAlign: snapshot?.valueAlign || 'start',\n };\n }\n\n private mergeSchemaPrefs(\n snapshot?: DynamicFormSchemaPrefsSnapshot,\n ): typeof this.schemaPrefs {\n return {\n notifyIfOutdated: snapshot?.notifyIfOutdated || 'both',\n snoozeMs: snapshot?.snoozeMs ?? 24 * 60 * 60 * 1000,\n autoOpenSettingsOnOutdated:\n snapshot?.autoOpenSettingsOnOutdated === true,\n };\n }\n\n private toPresentationSnapshot(): DynamicFormPresentationSnapshot {\n return {\n labelPosition: this.presentationPrefs.labelPosition,\n labelFontSize: this.presentationPrefs.labelFontSize ?? null,\n valueFontSize: this.presentationPrefs.valueFontSize ?? null,\n compact: this.presentationPrefs.compact === true,\n density: this.presentationPrefs.density,\n labelWidth: this.presentationPrefs.labelWidth ?? null,\n labelAlign: this.presentationPrefs.labelAlign,\n valueAlign: this.presentationPrefs.valueAlign,\n };\n }\n\n private toSchemaPrefsSnapshot(): DynamicFormSchemaPrefsSnapshot {\n return {\n notifyIfOutdated: this.schemaPrefs.notifyIfOutdated,\n snoozeMs: this.schemaPrefs.snoozeMs,\n autoOpenSettingsOnOutdated:\n this.schemaPrefs.autoOpenSettingsOnOutdated === true,\n };\n }\n\n private toBackConfigSnapshot(): BackConfig {\n return structuredClone(this.backConfig || { returnTo: '', confirmOnDirty: true }) as BackConfig;\n }\n}\n\n// --- Helpers ---\nfunction omit<T extends object>(\n obj: T,\n keys: ReadonlyArray<string | number | symbol>,\n): any {\n const out: any = {};\n const skip = new Set<string | number | symbol>(keys as any);\n for (const k of Object.keys(obj) as string[]) {\n if (!skip.has(k)) {\n out[k] = (obj as any)[k];\n }\n }\n return out;\n}\n\nfunction stripUndefinedContextSnapshot(\n snapshot: {\n backConfig?: BackConfig;\n presentation?: DynamicFormPresentationSnapshot;\n schemaPrefs?: DynamicFormSchemaPrefsSnapshot;\n },\n): DynamicFormAuthoringDocument['contextSnapshot'] | undefined {\n const result = Object.fromEntries(\n Object.entries(snapshot).filter(([, value]) => value !== undefined),\n );\n return Object.keys(result).length\n ? (result as DynamicFormAuthoringDocument['contextSnapshot'])\n : undefined;\n}\n\n// Nota: sanitiza apenas chaves legadas conhecidas para persistência canônica\nexport interface FormConfigLike { fieldMetadata?: FieldMetadata[] }\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction hasFieldMetadata(cfg: any): cfg is FormConfigLike {\n return cfg && Array.isArray(cfg.fieldMetadata);\n}\n\n// Strip legacy keys (e.g., endpoint) from FieldMetadata before persist/display\n// Mantém compatibilidade de leitura em outro ponto do pipeline.\n// Não muta o objeto original.\nexport function stripLegacyFieldMetadata(arr?: FieldMetadata[]): FieldMetadata[] | undefined {\n if (!arr) return arr;\n return arr.map((f) => omit(f as any, ['endpoint'])) as FieldMetadata[];\n}\n\n// Consider a RuleBuilderState \"empty\" when it contains no nodes and no roots (initial state)\nfunction isEmptyRuleBuilderState(state: any): boolean {\n try {\n const nodesEmpty = !state?.nodes || Object.keys(state.nodes).length === 0;\n const rootsEmpty = !state?.rootNodes || state.rootNodes.length === 0;\n return nodesEmpty && rootsEmpty;\n } catch {\n return false;\n }\n}\n\n// Debug helpers: collect a few diffs between two objects for console output\nfunction diffObjects(a: any, b: any, path: Array<string | number> = [], limit = 10, out: any[] = []): any[] {\n if (out.length >= limit) return out;\n const isObj = (v: any) => v && typeof v === 'object';\n if (!isObj(a) || !isObj(b)) {\n if (JSON.stringify(a) !== JSON.stringify(b)) out.push({ path: path.join('.') || '<root>', a, b });\n return out;\n }\n const keys = Array.from(new Set([...(Object.keys(a || {})), ...(Object.keys(b || {}))]));\n for (const k of keys) {\n if (out.length >= limit) break;\n const na = (a || {})[k];\n const nb = (b || {})[k];\n const p = [...path, k];\n // Shortcut: different array lengths\n if (Array.isArray(na) && Array.isArray(nb) && na.length !== nb.length) {\n out.push({ path: p.join('.'), aLen: na.length, bLen: nb.length });\n continue;\n }\n if (!isObj(na) || !isObj(nb)) {\n if (JSON.stringify(na) !== JSON.stringify(nb)) out.push({ path: p.join('.'), a: na, b: nb });\n } else {\n diffObjects(na, nb, p, limit, out);\n }\n }\n return out;\n}\n\n// Stable stringify to avoid false diffs from key ordering.\nfunction stableStringify(value: any): string {\n const seen = new WeakSet();\n const visit = (val: any): any => {\n if (val === null || typeof val !== 'object') return val;\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n if (Array.isArray(val)) return val.map(visit);\n const out: Record<string, any> = {};\n const keys = Object.keys(val).sort();\n for (const k of keys) {\n const v = (val as any)[k];\n if (typeof v === 'undefined') continue;\n out[k] = visit(v);\n }\n return out;\n };\n return JSON.stringify(visit(value));\n}\n","<mat-tab-group class=\"config-tabs\" data-testid=\"dynamic-form-config-editor-tabs\">\n <mat-tab label=\"Geral\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-geral\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Dados do formulário</h3>\n <p class=\"text-caption\">Defina o modo de dados e o contexto de edição.</p>\n </div>\n </div>\n <div class=\"form-grid\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Modo de dados</mat-label>\n <mat-select [(ngModel)]=\"inputMode\" (ngModelChange)=\"onInputModeChange()\">\n <mat-option value=\"create\">create</mat-option>\n <mat-option value=\"edit\">edit</mat-option>\n <mat-option value=\"view\">view</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"block-status\" [class.block-status--implicit]=\"!isBindingsBlockPersisted()\">\n <strong>Bindings</strong>\n <span *ngIf=\"isBindingsBlockPersisted(); else bindingsMissing\">`bindings.mode` será persistido no documento canônico.</span>\n <ng-template #bindingsMissing>Bloco ausente no documento canônico. O valor exibido é fallback visual e não será salvo até você editar este campo.</ng-template>\n </div>\n <div class=\"section-help\">\n <span class=\"section-help__label\">Entenda:</span>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'O mode controla o fluxo (create/edit/view). enableCustomization só libera edição do layout e não altera o mode.'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Verificação de Schema\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-schema\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Validação de schema</h3>\n <p class=\"text-caption\">Controle avisos quando o schema do servidor mudar.</p>\n </div>\n </div>\n <div class=\"form-grid\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Notificar quando desatualizado</mat-label>\n <mat-select [(ngModel)]=\"schemaPrefs.notifyIfOutdated\" (ngModelChange)=\"onSchemaPrefsChange('schema-prefs-notify')\">\n <mat-option value=\"both\">Banner + Snackbar</mat-option>\n <mat-option value=\"inline\">Somente Banner</mat-option>\n <mat-option value=\"snackbar\">Somente Snackbar</mat-option>\n <mat-option value=\"none\">Nenhum</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"form-row\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Intervalo de silêncio (ms)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"schemaPrefs.snoozeMs\" (ngModelChange)=\"onSchemaPrefsChange('schema-prefs-snooze')\" />\n </mat-form-field>\n </div>\n <div class=\"form-row\">\n <mat-slide-toggle [(ngModel)]=\"schemaPrefs.autoOpenSettingsOnOutdated\" (ngModelChange)=\"onSchemaPrefsChange('schema-prefs-auto-open')\">Abrir configurações\n automaticamente</mat-slide-toggle>\n </div>\n <div class=\"form-row\" *ngIf=\"serverMeta\">\n <div class=\"meta-card\">\n <div class=\"meta-row\">\n <span>Server hash</span>\n <strong>{{ serverMeta.serverHash || '—' }}</strong>\n </div>\n <div class=\"meta-row\">\n <span>Última verificação</span>\n <strong>{{ serverMeta.lastVerifiedAt || '—' }}</strong>\n </div>\n </div>\n </div>\n <div class=\"block-status\" [class.block-status--implicit]=\"!isSchemaPrefsBlockPersisted()\">\n <strong>Schema Prefs</strong>\n <span *ngIf=\"isSchemaPrefsBlockPersisted(); else schemaPrefsMissing\">`contextSnapshot.schemaPrefs` será persistido no documento canônico.</span>\n <ng-template #schemaPrefsMissing>Bloco ausente no documento canônico. Os controles exibem fallback visual e não serão salvos até você editar.</ng-template>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Layout\">\n <div class=\"tab-content tab-content--full\" data-testid=\"config-tab-panel-layout\">\n <div class=\"section-header section-header--compact\">\n <div>\n <h3>Layout do formulário</h3>\n <p class=\"text-caption\">Organize seções, linhas e campos com drag & drop.</p>\n </div>\n </div>\n <div class=\"section-body section-body--flex\">\n <praxis-layout-editor [config]=\"editedConfig\" (configChange)=\"onConfigChange($event)\"\n (select)=\"onLayoutSelect($event)\"></praxis-layout-editor>\n </div>\n </div>\n </mat-tab>\n <mat-tab label=\"Hooks\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-hooks\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Hooks de ciclo de vida</h3>\n <p class=\"text-caption\">Automatize ações nos eventos do formulário.</p>\n </div>\n </div>\n <praxis-hooks-editor [config]=\"editedConfig\" (configChange)=\"onConfigChange($event)\"></praxis-hooks-editor>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab *ngIf=\"isPresentationMode\" label=\"Modo Apresentação\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-presentation\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Modo Apresentação</h3>\n <p class=\"text-caption\">Configurações de exibição aplicadas somente ao modo apresentação.</p>\n </div>\n </div>\n\n <div class=\"presentation-layout\">\n <div class=\"presentation-controls\">\n <div class=\"block-status control-span\" [class.block-status--implicit]=\"!isPresentationBlockPersisted()\">\n <strong>Presentation</strong>\n <span *ngIf=\"isPresentationBlockPersisted(); else presentationMissing\">`contextSnapshot.presentation` será persistido no documento canônico.</span>\n <ng-template #presentationMissing>Bloco ausente no documento canônico. A pré-visualização usa fallback local e não será salva até você editar.</ng-template>\n </div>\n <div class=\"control\">\n <label class=\"control__label\">Posição do rótulo</label>\n <mat-button-toggle-group [(ngModel)]=\"presentationPrefs.labelPosition\" (ngModelChange)=\"onPresentationPrefsChange('presentation-label-position')\" aria-label=\"Posição do rótulo\"\n class=\"toggle-group\">\n <mat-button-toggle value=\"above\">\n <mat-icon>view_stream</mat-icon>\n <span class=\"sr-only\">Acima</span>\n </mat-button-toggle>\n <mat-button-toggle value=\"left\">\n <mat-icon>view_column</mat-icon>\n <span class=\"sr-only\">À esquerda</span>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"control\">\n <label class=\"control__label\">Densidade</label>\n <mat-button-toggle-group [(ngModel)]=\"presentationPrefs.density\" (ngModelChange)=\"onPresentationPrefsChange('presentation-density')\" aria-label=\"Densidade\"\n class=\"toggle-group\">\n <mat-button-toggle value=\"comfortable\">Confortável</mat-button-toggle>\n <mat-button-toggle value=\"cozy\">Intermediária</mat-button-toggle>\n <mat-button-toggle value=\"compact\">Compacta</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"control\">\n <label class=\"control__label\">Alinhamento do rótulo</label>\n <mat-button-toggle-group [(ngModel)]=\"presentationPrefs.labelAlign\" (ngModelChange)=\"onPresentationPrefsChange('presentation-label-align')\" aria-label=\"Alinhamento do rótulo\"\n class=\"toggle-group\">\n <mat-button-toggle value=\"start\"><mat-icon>format_align_left</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"center\"><mat-icon>format_align_center</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"end\"><mat-icon>format_align_right</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"control\">\n <label class=\"control__label\">Alinhamento do valor</label>\n <mat-button-toggle-group [(ngModel)]=\"presentationPrefs.valueAlign\" (ngModelChange)=\"onPresentationPrefsChange('presentation-value-align')\" aria-label=\"Alinhamento do valor\"\n class=\"toggle-group\">\n <mat-button-toggle value=\"start\"><mat-icon>format_align_left</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"center\"><mat-icon>format_align_center</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"end\"><mat-icon>format_align_right</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"control\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Tamanho do rótulo</mat-label>\n <input matInput type=\"number\" min=\"10\" [(ngModel)]=\"presentationPrefs.labelFontSize\" (ngModelChange)=\"onPresentationPrefsChange('presentation-label-font-size')\"\n placeholder=\"ex.: 12\" />\n <span matSuffix>px</span>\n </mat-form-field>\n </div>\n\n <div class=\"control\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Tamanho do valor</mat-label>\n <input matInput type=\"number\" min=\"10\" [(ngModel)]=\"presentationPrefs.valueFontSize\" (ngModelChange)=\"onPresentationPrefsChange('presentation-value-font-size')\"\n placeholder=\"ex.: 16\" />\n <span matSuffix>px</span>\n </mat-form-field>\n </div>\n\n <div class=\"control\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Largura do rótulo (label à esquerda)</mat-label>\n <input matInput type=\"number\" min=\"60\" [(ngModel)]=\"presentationPrefs.labelWidth\" (ngModelChange)=\"onPresentationPrefsChange('presentation-label-width')\"\n placeholder=\"ex.: 140\" />\n <span matSuffix>px</span>\n </mat-form-field>\n </div>\n\n <div class=\"control control--inline\">\n <mat-slide-toggle [(ngModel)]=\"presentationPrefs.compact\" (ngModelChange)=\"onPresentationPrefsChange('presentation-compact')\">\n Modo compacto\n </mat-slide-toggle>\n <mat-checkbox [(ngModel)]=\"truncatePreview\">\n Truncar valores\n </mat-checkbox>\n </div>\n </div>\n\n <div class=\"presentation-preview\">\n <h4>Pré‑visualização</h4>\n <div class=\"preview-card\">\n <div class=\"praxis-dynamic-form presentation-mode\" [ngClass]=\"{\n 'pres-compact': !!presentationPrefs.compact,\n 'pres-label-left': presentationPrefs.labelPosition === 'left',\n 'pres-label-above': presentationPrefs.labelPosition === 'above',\n 'pres-density-compact': presentationPrefs.density === 'compact',\n 'pres-density-cozy': presentationPrefs.density === 'cozy'\n }\" [style.--pfx-pres-label-size]=\"(presentationPrefs.labelFontSize || 12) + 'px'\"\n [style.--pfx-pres-value-size]=\"(presentationPrefs.valueFontSize || 16) + 'px'\"\n [style.--pfx-pres-label-width]=\"(presentationPrefs.labelWidth || 140) + 'px'\"\n [style.--pfx-pres-label-align]=\"presentationPrefs.labelAlign || 'start'\"\n [style.--pfx-pres-value-align]=\"presentationPrefs.valueAlign || 'start'\">\n <div class=\"preview-row\" *ngFor=\"let item of previewItems\">\n <span class=\"praxis-presentation__label\">{{ item.label }}</span>\n <span class=\"praxis-presentation__value\" [title]=\"truncatePreview ? item.value : null\"\n [style.maxWidth]=\"truncatePreview ? '280px' : null\"\n [style.overflow]=\"truncatePreview ? 'hidden' : null\"\n [style.textOverflow]=\"truncatePreview ? 'ellipsis' : null\"\n [style.whiteSpace]=\"truncatePreview ? 'nowrap' : 'normal'\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section-help\">\n <span class=\"section-help__label\">Entenda:</span>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Ajustes aplicam somente ao Modo Apresentação e são salvos por formulário (via CSS/Classes).'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Comportamento\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-comportamento\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Comportamento</h3>\n <p class=\"text-caption\">Ajuste validações e respostas do formulário.</p>\n </div>\n </div>\n <praxis-behavior-editor [config]=\"editedConfig\" (configChange)=\"onConfigChange($event)\"></praxis-behavior-editor>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Dicas e Tooltips\">\n <div class=\"tab-content tab-content--dense\" data-testid=\"config-tab-panel-hints\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Dicas dos modos</h3>\n <p class=\"text-caption\">Personalize textos de apoio para modos de dados e estados de UI.</p>\n </div>\n </div>\n <p class=\"text-caption\">Personalize os textos usados como tooltip/hint para modos de dados e modos globais de\n UI.</p>\n\n <div class=\"grid-2-cols grid-2-cols--compact\">\n <section>\n <h4>Modos de dados</h4>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Criar</mat-label>\n <input matInput [(ngModel)]=\"editedConfig.hints!.dataModes.create\"\n (ngModelChange)=\"updateDirtyState('hints-data-create')\" placeholder=\"Ex.: Preencha os campos obrigatórios.\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Editar</mat-label>\n <input matInput [(ngModel)]=\"editedConfig.hints!.dataModes.edit\"\n (ngModelChange)=\"updateDirtyState('hints-data-edit')\" placeholder=\"Ex.: Revise os dados antes de salvar.\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Visualizar</mat-label>\n <input matInput [(ngModel)]=\"editedConfig.hints!.dataModes.view\"\n (ngModelChange)=\"updateDirtyState('hints-data-view')\" placeholder=\"Ex.: Visualização somente leitura.\" />\n </mat-form-field>\n </section>\n\n <section>\n <h4>Modos de UI</h4>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Apresentação</mat-label>\n <textarea matInput rows=\"2\" [(ngModel)]=\"editedConfig.hints!.uiModes.presentation\"\n (ngModelChange)=\"updateDirtyState('hints-ui-presentation')\" placeholder=\"Ex.: Modo compacto para leitura rápida.\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Leitura (readonly)</mat-label>\n <textarea matInput rows=\"2\" [(ngModel)]=\"editedConfig.hints!.uiModes.readonly\"\n (ngModelChange)=\"updateDirtyState('hints-ui-readonly')\" placeholder=\"Ex.: Campos bloqueados para edição.\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Desabilitado</mat-label>\n <textarea matInput rows=\"2\" [(ngModel)]=\"editedConfig.hints!.uiModes.disabled\"\n (ngModelChange)=\"updateDirtyState('hints-ui-disabled')\" placeholder=\"Ex.: Função indisponível no momento.\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Visível</mat-label>\n <textarea matInput rows=\"2\" [(ngModel)]=\"editedConfig.hints!.uiModes.visible\"\n (ngModelChange)=\"updateDirtyState('hints-ui-visible')\" placeholder=\"Ex.: Campo exibido conforme permissões.\"></textarea>\n </mat-form-field>\n </section>\n </div>\n\n <div class=\"actions-row\">\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"restoreHintsDefaults()\">\n <mat-icon>restore</mat-icon>\n Restaurar padrões\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Ações\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-acoes\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Ações do formulário</h3>\n <p class=\"text-caption\">Configure botões padrão e ações customizadas.</p>\n </div>\n </div>\n <praxis-actions-editor [config]=\"editedConfig\" (configChange)=\"onConfigChange($event)\"></praxis-actions-editor>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Regras\">\n <div class=\"tab-content visual-builder-content\" data-testid=\"config-tab-panel-regras\">\n <div class=\"builder-header\">\n <div>\n <h3>Regras visuais</h3>\n <p class=\"text-caption\">Defina visibilidade, estilos e reações baseadas em condições.</p>\n </div>\n </div>\n <praxis-visual-builder [config]=\"ruleBuilderConfig\" [initialRules]=\"ruleBuilderState\"\n (rulesChanged)=\"onRulesChanged($event)\"></praxis-visual-builder>\n </div>\n </mat-tab>\n <mat-tab label=\"Cascatas\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-cascatas\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Dependências entre campos</h3>\n <p class=\"text-caption\">Configure cascatas e carregamento entre campos.</p>\n </div>\n </div>\n <praxis-cascade-manager-tab [fields]=\"editedConfig.fieldMetadata || []\"\n (apply)=\"onCascadeApply($event)\"></praxis-cascade-manager-tab>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Mensagens\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-mensagens\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Mensagens e feedback</h3>\n <p class=\"text-caption\">Padronize textos de sucesso, erro e confirmações.</p>\n </div>\n </div>\n <praxis-messages-editor [config]=\"editedConfig\" (configChange)=\"onConfigChange($event)\"></praxis-messages-editor>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Navegação\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-navegacao\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Navegação de retorno</h3>\n <p class=\"text-caption\">Defina o comportamento do botão Voltar em fluxos CRUD.</p>\n </div>\n </div>\n <div class=\"form-grid\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Rota de retorno</mat-label>\n <input matInput id=\"returnTo\" [(ngModel)]=\"backConfig!.returnTo\" (ngModelChange)=\"onBackConfigChange()\" placeholder=\"/funcionarios\" />\n </mat-form-field>\n </div>\n <div class=\"form-row\">\n <mat-slide-toggle [(ngModel)]=\"backConfig!.confirmOnDirty\" (ngModelChange)=\"onBackConfigChange()\">\n Confirmar ao sair com alterações\n </mat-slide-toggle>\n </div>\n <div class=\"block-status\" [class.block-status--implicit]=\"!isBackConfigBlockPersisted()\">\n <strong>Back Config</strong>\n <span *ngIf=\"isBackConfigBlockPersisted(); else backConfigMissing\">`contextSnapshot.backConfig` será persistido no documento canônico.</span>\n <ng-template #backConfigMissing>Bloco ausente no documento canônico. Os valores exibidos são fallback visual e não serão salvos até você editar.</ng-template>\n </div>\n </div>\n <div class=\"section-help\">\n <span class=\"section-help__label\">Observação:</span>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Afeta o fluxo de navegação do CRUD e pode ser sobreposto por metadados do recurso.'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"JSON\">\n <div class=\"tab-content\" data-testid=\"config-tab-panel-json\">\n <mat-card class=\"section-card\">\n <mat-card-content>\n <div class=\"section-header\">\n <div>\n <h3>Configuração JSON</h3>\n <p class=\"text-caption\">Edição avançada do documento canônico de autoria do formulário.</p>\n </div>\n </div>\n <form-json-config-editor [document]=\"jsonDocument\" (documentChange)=\"onJsonConfigChange($event)\"\n (validationChange)=\"onJsonValidationChange($event)\" (editorEvent)=\"onJsonEditorEvent($event)\">\n </form-json-config-editor>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n</mat-tab-group>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport {\n DynamicFormService,\n FieldMetadata,\n FormColumn,\n FormConfig,\n FormRow,\n FormSection,\n} from '@praxisui/core';\nimport { DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'praxis-filter-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, DynamicFieldLoaderDirective],\n templateUrl: './praxis-filter-form.html',\n styleUrls: ['./praxis-filter-form.scss'],\n})\nexport class PraxisFilterForm implements OnChanges, OnDestroy {\n @Input({ required: true }) config!: FormConfig;\n @Input() formId?: string;\n @Input() resourcePath?: string;\n @Input() mode?: string;\n\n @Output() formReady = new EventEmitter<{\n formGroup: FormGroup<Record<string, any>>;\n }>();\n @Output() valueChange = new EventEmitter<{\n formData: Record<string, any>;\n }>();\n @Output() submit = new EventEmitter<{\n formData: Record<string, any>;\n }>();\n @Output() requestSearch = this.submit;\n // Novo: estado de validade do formulário\n @Output() validityChange = new EventEmitter<boolean>();\n\n form: FormGroup<Record<string, any>> = new FormGroup<Record<string, any>>({});\n private valueChangesSub?: Subscription;\n private statusChangesSub?: Subscription;\n\n constructor(private dynamicForm: DynamicFormService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('config' in changes && this.config?.fieldMetadata) {\n this.buildForm();\n }\n }\n\n ngOnDestroy(): void {\n this.valueChangesSub?.unsubscribe();\n this.statusChangesSub?.unsubscribe();\n }\n\n private buildForm(): void {\n this.valueChangesSub?.unsubscribe();\n this.statusChangesSub?.unsubscribe();\n const fields = this.config.fieldMetadata || [];\n const previous = this.form.getRawValue?.() || {};\n this.form = this.dynamicForm.createFormGroupFromMetadata(\n fields,\n ) as FormGroup<Record<string, any>>;\n // Preserve previous values when possible\n this.form.patchValue(previous);\n this.formReady.emit({ formGroup: this.form });\n // Emitir estado inicial de validade e assinar mudanças\n this.validityChange.emit(this.form.valid);\n this.statusChangesSub = this.form.statusChanges.subscribe(() => {\n this.validityChange.emit(this.form.valid);\n });\n this.valueChangesSub = this.form.valueChanges.subscribe((val) => {\n this.valueChange.emit({ formData: val || {} });\n });\n }\n\n onFormSubmit(): void {\n this.submit.emit({ formData: this.form.getRawValue() });\n }\n\n getColumnFields(column: FormColumn): FieldMetadata[] {\n const metas = this.fieldMetadata;\n return metas.filter((m) => column.fields.includes(m.name));\n }\n\n get fieldMetadata(): FieldMetadata[] {\n return this.config?.fieldMetadata || [];\n }\n\n get hasLayout(): boolean {\n return (\n Array.isArray(this.config?.sections) && this.config.sections.length > 0\n );\n }\n\n // Mantém trackBy helpers se usados em outro lugar\n trackBySection(i: number, section: FormSection): string {\n return section.id ?? `section-${i}`;\n }\n trackByRow(i: number, _row: FormRow): string {\n return `row-${i}`;\n }\n trackByColumn(i: number, col: FormColumn): string {\n return `col-${i}-${col.fields.join(',')}`;\n }\n}\n","<form [formGroup]=\"form\" class=\"praxis-filter-form\" (ngSubmit)=\"onFormSubmit()\">\n @if (hasLayout) { @for (section of config.sections; track section?.id ??\n $index) {\n <div class=\"filter-section\">\n @if (section.title) {\n <h3>{{ section.title }}</h3>\n } @for (row of section.rows; track $index) {\n <div class=\"filter-row\">\n @for ( column of row.columns; track (column?.fields?.join(',') ?? $index)\n ) {\n <div class=\"filter-column\">\n <ng-container\n dynamicFieldLoader\n [fields]=\"getColumnFields(column)\"\n [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n ></ng-container>\n </div>\n }\n </div>\n }\n </div>\n } } @else {\n <div class=\"filter-row\">\n @for (field of fieldMetadata; track field?.name ?? $index) {\n <div class=\"filter-column\">\n <ng-container\n dynamicFieldLoader\n [fields]=\"[field]\"\n [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n ></ng-container>\n </div>\n }\n </div>\n }\n <!-- Botão de submit invisível para garantir submit ao pressionar Enter -->\n <button\n type=\"submit\"\n class=\"hidden-submit\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n ></button>\n</form>\n","import { ComponentDocMeta, ComponentMetadataRegistry, type PortContract } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { PraxisFilterForm } from './praxis-filter-form';\n\nconst PRAXIS_FILTER_FORM_PHASE1_PORTS: PortContract[] = [\n {\n id: 'config',\n label: 'Form Config',\n direction: 'input',\n semanticKind: 'config-fragment',\n description: 'Declarative filter form contract used to materialize sections and fields.',\n schema: {\n id: 'FormConfig',\n kind: 'ts-type',\n ref: 'FormConfig',\n },\n exposure: { public: true, group: 'config' },\n },\n {\n id: 'valueChange',\n label: 'Value Change',\n direction: 'output',\n semanticKind: 'event',\n description: 'Event emitted whenever the current form payload changes.',\n cardinality: 'stream',\n schema: {\n id: 'PraxisFilterFormValueChange',\n kind: 'structural-shape',\n ref: '{ formData: Record<string, unknown> }',\n },\n exposure: { public: true, group: 'events' },\n },\n {\n id: 'submit',\n label: 'Submit',\n direction: 'output',\n semanticKind: 'event',\n description: 'Event emitted when the user submits the filter form.',\n cardinality: 'stream',\n schema: {\n id: 'PraxisFilterFormSubmit',\n kind: 'structural-shape',\n ref: '{ formData: Record<string, unknown> }',\n },\n exposure: { public: true, group: 'events' },\n },\n {\n id: 'validityChange',\n label: 'Validity Change',\n direction: 'output',\n semanticKind: 'status',\n description: 'Status signal emitted when the form validity changes.',\n cardinality: 'stream',\n schema: {\n id: 'boolean',\n kind: 'ts-type',\n ref: 'boolean',\n },\n exposure: { public: true, group: 'status' },\n },\n];\n\n/** Metadata for PraxisFilterForm component */\nexport const PRAXIS_FILTER_FORM_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-filter-form',\n selector: 'praxis-filter-form',\n component: PraxisFilterForm,\n friendlyName: 'Praxis Filter Form',\n description: 'Filter form driven by FormConfig and fieldMetadata.',\n icon: 'filter_alt',\n inputs: [\n {\n name: 'config',\n type: 'FormConfig',\n label: 'Configuration',\n description: 'Filter form configuration (sections and fieldMetadata).',\n },\n {\n name: 'formId',\n type: 'string',\n label: 'Form ID',\n description: 'Key used for local persistence.',\n },\n {\n name: 'resourcePath',\n type: 'string',\n label: 'Resource',\n description: 'Resource path used by filter schema.',\n },\n {\n name: 'mode',\n type: 'string',\n label: 'Mode',\n description: 'Form mode (create, edit, view).',\n },\n ],\n outputs: [\n {\n name: 'formReady',\n type: '{ formGroup: FormGroup<Record<string, unknown>> }',\n label: 'Form Ready',\n description: 'Emitted when the form group is ready.',\n },\n {\n name: 'valueChange',\n type: '{ formData: Record<string, unknown> }',\n label: 'Value Change',\n description: 'Emitted when form values change.',\n },\n {\n name: 'submit',\n type: '{ formData: Record<string, unknown> }',\n label: 'Submit',\n description: 'Emitted on submit.',\n },\n {\n name: 'validityChange',\n type: 'boolean',\n label: 'Validity',\n description: 'Emitted when validity changes.',\n },\n ],\n tags: ['widget', 'form', 'filter', 'configurable'],\n lib: '@praxisui/dynamic-form',\n ports: PRAXIS_FILTER_FORM_PHASE1_PORTS,\n};\n\n/** Provider to register PraxisFilterForm metadata. */\nexport function providePraxisFilterFormMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_FILTER_FORM_COMPONENT_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { PraxisDynamicForm } from './praxis-dynamic-form';\n\n/** Metadata for PraxisDynamicForm component */\nexport const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-dynamic-form',\n selector: 'praxis-dynamic-form',\n // NOTE: component is reassigned at registration time to avoid early-evaluation\n // issues in some bundlers (ensures the symbol is initialized when registered)\n component: undefined as unknown as any,\n friendlyName: 'Praxis Dynamic Form',\n description:\n 'Formulário dinâmico com layout por seções/linhas/colunas e campos renderizados por metadados.',\n icon: 'dynamic_form',\n inputs: [\n { name: 'resourcePath', type: 'string', label: 'Recurso', description: 'Recurso base para CRUD/schemas' },\n { name: 'resourceId', type: 'string | number', label: 'ID do Registro', description: 'Identificador do registro' },\n { name: 'editorialContext', type: 'Record<string, unknown> | null', label: 'Contexto editorial', description: 'Contexto compartilhado usado para resolver bindings dos blocos editoriais hospedados no form' },\n { name: 'mode', type: \"'create' | 'edit' | 'view'\", default: 'create', label: 'Modo', description: 'Modo do formulário' },\n {\n name: 'config',\n type: 'FormConfig',\n label: 'Configuração',\n description: 'Configuração completa do formulário (layout, metadados, ações, regras e headers de seção com `sectionHeader` para ícone/avatar dinâmico e `headerActions` para ações contextuais).',\n },\n { name: 'schemaSource', type: \"'resource' | 'filter'\", default: 'resource', description: 'Fonte do schema de campos' },\n { name: 'enableCustomization', type: 'boolean', default: false, description: 'Habilita modo de customização do layout (canvas)'},\n { name: 'formId', type: 'string', description: 'Chave para persistência local da configuração' },\n { name: 'componentInstanceId', type: 'string', description: 'Identificador estável para instâncias múltiplas do formulário' },\n { name: 'layout', type: 'FormLayout', description: 'Layout opcional em vez do gerado' },\n { name: 'backConfig', type: 'BackConfig', description: 'Configuração de navegação/voltar (host CRUD)' },\n { name: 'hooks', type: 'FormHooksLayout', description: 'Declarações de hooks de ciclo de vida do formulário' },\n { name: 'removeEmptyContainersOnSave', type: 'boolean', default: false, description: 'Remove containers vazios ao salvar configuração' },\n { name: 'reactiveValidation', type: 'boolean | null', default: null, description: 'Ativa afterValidate reativo em valueChanges' },\n { name: 'reactiveValidationDebounceMs', type: 'number | null', default: null, description: 'Debounce (ms) para validação reativa' },\n { name: 'notifyIfOutdated', type: \"'inline' | 'snackbar' | 'both' | 'none'\", default: 'both', description: 'Canal de notificação para schema desatualizado' },\n { name: 'snoozeMs', type: 'number', default: '86400000', description: 'Duração do snooze para alertas (ms)' },\n { name: 'autoOpenSettingsOnOutdated', type: 'boolean', default: false, description: 'Abre editor automaticamente quando schema está desatualizado' },\n { name: 'readonlyModeGlobal', type: 'boolean | null', description: 'Trava global para campos em modo somente-leitura' },\n { name: 'disabledModeGlobal', type: 'boolean | null', description: 'Trava global para desabilitar campos' },\n { name: 'presentationModeGlobal', type: 'boolean | null', description: 'Modo de apresentação (sem edição)' },\n { name: 'visibleGlobal', type: 'boolean | null', description: 'Visibilidade global' },\n { name: 'customEndpoints', type: 'EndpointConfig', description: 'Endpoints customizados para operações CRUD' },\n ],\n outputs: [\n { name: 'formSubmit', type: 'FormSubmitEvent', label: 'Submit', description: 'Emite ao submeter o formulário' },\n { name: 'formCancel', type: 'void', description: 'Emite ao cancelar' },\n { name: 'formReset', type: 'void', description: 'Emite ao resetar' },\n { name: 'configChange', type: 'FormConfig', label: 'Configuração alterada', description: 'Emite quando a configuração do formulário muda' },\n { name: 'formReady', type: 'FormReadyEvent', label: 'Form pronto', description: 'Emite quando o formulário está pronto' },\n { name: 'valueChange', type: 'FormValueChangeEvent', label: 'Valor alterado', description: 'Emite quando valores mudam' },\n { name: 'syncCompleted', type: 'SyncResult', description: 'Emite quando a sincronização com metadados do servidor completa' },\n { name: 'initializationError', type: 'FormInitializationError', description: 'Emite erro de inicialização com contexto' },\n { name: 'enableCustomizationChange', type: 'boolean', label: 'Customização (toggle)', description: 'Emite quando o modo de customização de layout muda' },\n { name: 'customAction', type: 'FormCustomActionEvent', description: 'Emite quando uma ação customizada é executada' },\n { name: 'actionConfirmation', type: 'FormActionConfirmationEvent', description: 'Resultado de confirmações de ações' },\n { name: 'schemaStatusChange', type: '{ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string }', description: 'Emite quando o status do schema muda' },\n { name: 'widgetEvent', type: '{ placement: \"before\" | \"beforeActions\" | \"after\"; sourceId: string; output?: string; payload?: any }', label: 'Evento editorial', description: 'Reemite eventos dos widgets editoriais hospedados antes, antes das ações ou depois do formulário' },\n ],\n actions: [\n {\n id: 'submit',\n label: 'Enviar',\n icon: 'send',\n description: 'Emite evento ao submeter o formulário',\n emit: 'formSubmit',\n payloadSchema: {\n type: 'object',\n properties: {\n stage: { type: 'string', description: 'Etapa do submit' },\n formData: { type: 'object', description: 'Dados do formulário' },\n isValid: { type: 'boolean', description: 'Validade do formulário' },\n operation: { type: 'string', description: 'Operação executada' },\n },\n required: ['stage', 'formData', 'isValid', 'operation'],\n example: { stage: 'after', formData: {}, isValid: true, operation: 'create' },\n },\n scope: 'toolbar',\n },\n {\n id: 'cancel',\n label: 'Cancelar',\n icon: 'close',\n description: 'Emite evento ao cancelar o formulário',\n emit: 'formCancel',\n scope: 'toolbar',\n },\n {\n id: 'reset',\n label: 'Limpar',\n icon: 'restart_alt',\n description: 'Emite evento ao resetar o formulário',\n emit: 'formReset',\n scope: 'toolbar',\n },\n {\n id: 'custom-action',\n label: 'Ação customizada',\n icon: 'bolt',\n description: 'Emite evento de ação customizada',\n emit: 'customAction',\n payloadSchema: {\n type: 'object',\n properties: {\n actionId: { type: 'string', description: 'ID da ação customizada' },\n formData: { type: 'object', description: 'Dados do formulário' },\n isValid: { type: 'boolean', description: 'Validade do formulário' },\n source: { type: 'string', description: 'Origem da ação' },\n sectionId: { type: 'string', description: 'ID da seção quando a ação veio do header de uma seção' },\n },\n required: ['actionId', 'formData', 'isValid', 'source'],\n example: { actionId: 'help', formData: {}, isValid: true, source: 'section-header', sectionId: 'identification' },\n },\n scope: 'shell',\n },\n ],\n tags: ['widget', 'form', 'configurable', 'hasWizard', 'stable'],\n lib: '@praxisui/dynamic-form',\n};\n\n/** Provider para auto-registrar metadados do componente Dynamic Form. */\nexport function providePraxisDynamicFormMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n const meta: ComponentDocMeta = {\n ...PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA,\n component: PraxisDynamicForm,\n } as ComponentDocMeta;\n registry.register(meta);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import { FormLayoutRule } from '@praxisui/core';\nimport { DslParser, Specification } from '@praxisui/specification';\n\n/**\n * Evaluates whether a rule's condition is satisfied for the given data.\n * If no condition is defined, defaults to true.\n */\nconst parser = new DslParser<any>();\n\nexport function isRuleSatisfied(rule: FormLayoutRule, data: unknown): boolean {\n const { condition } = rule.effect;\n if (condition === null || condition === undefined) {\n return true;\n }\n\n try {\n let specification: Specification<any>;\n if (typeof condition === 'string') {\n specification = parser.parse(condition);\n } else {\n specification = condition as Specification<any>;\n }\n return specification.isSatisfiedBy(data);\n } catch {\n // If parsing fails, default to visible to avoid blocking the form\n return true;\n }\n}\n\n/**\n * Applies all visibility rules to the provided data and\n * returns a map of field name to visibility state.\n */\nexport function applyVisibilityRules(\n rules: FormLayoutRule[],\n data: any,\n): Record<string, boolean> {\n const result: Record<string, boolean> = {};\n for (const rule of rules) {\n if (rule.targetType !== 'field') continue;\n const visibleProps = isRuleSatisfied(rule, data)\n ? rule.effect.properties\n : rule.effect.propertiesWhenFalse;\n if (!visibleProps || visibleProps.visible === undefined) continue;\n for (const field of rule.targets || []) {\n result[field] = !!visibleProps.visible;\n }\n }\n return result;\n}\n","import { Provider } from '@angular/core';\nimport { GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT } from '@praxisui/settings-panel';\nimport { PraxisDynamicForm } from './praxis-dynamic-form';\n\n/**\n * Helper provider to wire the PraxisDynamicForm component into the Settings Panel\n * GlobalConfigEditor without creating a hard import cycle.\n */\nexport const SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER: Provider = {\n provide: GLOBAL_CONFIG_DYNAMIC_FORM_COMPONENT,\n useValue: PraxisDynamicForm,\n};\n\nexport function provideSettingsPanelDynamicForm(): Provider {\n return SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER;\n}\n","import type { PraxisI18nConfig } from '@praxisui/core';\n\nexport const SECTION_EDITOR_I18N_NAMESPACE = 'praxisDynamicFormSectionEditor';\n\nexport const SECTION_EDITOR_I18N_CONFIG: Partial<PraxisI18nConfig> = {\n namespaces: {\n [SECTION_EDITOR_I18N_NAMESPACE]: {\n 'pt-BR': {\n 'dynamicForm.sectionEditor.tabs.header': 'Cabecalho',\n 'dynamicForm.sectionEditor.tabs.avatar': 'Avatar',\n 'dynamicForm.sectionEditor.tabs.organization': 'Organizacao',\n 'dynamicForm.sectionEditor.header.tip.identity':\n 'Configure titulo, descricao e a identidade visual exibida no topo da secao.',\n 'dynamicForm.sectionEditor.header.tip.modes':\n 'O header pode usar icone estatico, foto vinda de um field do formulario ou iniciais derivadas de um field textual.',\n 'dynamicForm.sectionEditor.header.tip.emptyState':\n 'Em fluxos de inclusao, defina o comportamento de vazio para evitar um cabecalho sem referencia visual antes do preenchimento.',\n 'dynamicForm.sectionEditor.header.presets.title': 'Presets rápidos',\n 'dynamicForm.sectionEditor.header.presets.default': 'Padrão',\n 'dynamicForm.sectionEditor.header.presets.simple': 'Simples',\n 'dynamicForm.sectionEditor.header.presets.collapsible': 'Colapsável',\n 'dynamicForm.sectionEditor.header.fields.title': 'Título',\n 'dynamicForm.sectionEditor.header.fields.description': 'Descrição',\n 'dynamicForm.sectionEditor.header.fields.appearance': 'Aparência',\n 'dynamicForm.sectionEditor.header.fields.titleColor': 'Cor do título',\n 'dynamicForm.sectionEditor.header.fields.descriptionColor': 'Cor da descrição',\n 'dynamicForm.sectionEditor.header.fields.customColor': 'Cor personalizada (CSS)',\n 'dynamicForm.sectionEditor.header.fields.titleGapBottom': 'Gap do título (px)',\n 'dynamicForm.sectionEditor.header.fields.descriptionGapBottom': 'Gap da descrição (px)',\n 'dynamicForm.sectionEditor.header.fields.gapBottom': 'Gap abaixo da seção (px)',\n 'dynamicForm.sectionEditor.header.fields.collapsible': 'Colapsável',\n 'dynamicForm.sectionEditor.header.fields.collapsed': 'Iniciar recolhida',\n 'dynamicForm.sectionEditor.header.fields.headerTooltip': 'Tooltip do cabeçalho',\n 'dynamicForm.sectionEditor.header.placeholders.description': 'Resumo curto do conteúdo da seção',\n 'dynamicForm.sectionEditor.header.placeholders.customColor': 'ex.: #3366ff ou rgb(...)',\n 'dynamicForm.sectionEditor.header.placeholders.headerTooltip': 'Dica ao passar o mouse no título',\n 'dynamicForm.sectionEditor.header.options.titleColor.default': 'Padrão (on-surface)',\n 'dynamicForm.sectionEditor.header.options.titleColor.primary': 'Primária',\n 'dynamicForm.sectionEditor.header.options.titleColor.secondary': 'Secundária',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.default': 'Padrão (on-surface-variant)',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.primary': 'Primária',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.secondary': 'Secundária',\n 'headerActions.title': 'Ações do cabeçalho',\n 'headerActions.description':\n 'Adicione ícones acionáveis no canto direito do cabeçalho da seção para affordances contextuais como ajuda, refresh ou drill-down.',\n 'headerActions.add': 'Adicionar ação',\n 'headerActions.empty':\n 'Nenhuma ação configurada para este cabeçalho.',\n 'headerActions.item': 'Ação {{index}}',\n 'headerActions.remove': 'Remover ação',\n 'headerActions.moveUp': 'Mover ação para cima',\n 'headerActions.moveDown': 'Mover ação para baixo',\n 'headerActions.sections.identity': 'Identidade',\n 'headerActions.sections.identityDescription':\n 'Defina o identificador, o rótulo acessível e o ícone base da ação.',\n 'headerActions.sections.behavior': 'Comportamento',\n 'headerActions.sections.behaviorDescription':\n 'Escolha se a ação é livre ou vinculada ao catálogo global do app e configure o que será emitido.',\n 'headerActions.sections.state': 'Estado',\n 'headerActions.sections.stateDescription':\n 'Controle visibilidade, indisponibilidade e estado de loading sem remover a ação do contrato.',\n 'headerActions.sections.appearanceAdvanced':\n 'Aparência avançada',\n 'headerActions.sections.appearanceAdvancedDescription':\n 'Use apenas quando precisar refinar a apresentação do botão no header com cor, classe ou estilos adicionais.',\n 'headerActions.callout.globalTitle': 'Ação global do app',\n 'headerActions.preview.title': 'Prévia',\n 'headerActions.preview.defaultLabel': 'Prévia da ação',\n 'headerActions.preview.labelFallback':\n 'Label acessível da ação',\n 'headerActions.preview.caption':\n 'A prévia reflete cor e estilos extras do botão iconográfico.',\n 'headerActions.presets.title': 'Presets visuais',\n 'headerActions.presets.default': 'Padrão',\n 'headerActions.presets.softPill': 'Pill discreto',\n 'headerActions.presets.primaryPill': 'Pill primário',\n 'headerActions.presets.criticalPill': 'Pill crítico',\n 'headerActions.fields.id': 'ID',\n 'headerActions.fields.label': 'Label acessível',\n 'headerActions.fields.icon': 'Ícone',\n 'headerActions.actions.pickIcon': 'Escolher ícone da ação',\n 'headerActions.actions.clearIcon': 'Limpar ícone da ação',\n 'headerActions.actions.iconHelp':\n 'Use Material Symbols ou ícones Praxis já registrados no host.',\n 'headerActions.fields.action': 'Ação',\n 'headerActions.fields.customAction': 'Action customizada',\n 'headerActions.fields.actionParam': 'Parâmetro',\n 'headerActions.fields.tooltip': 'Tooltip',\n 'headerActions.fields.color': 'Cor',\n 'headerActions.fields.color.default': 'Padrão',\n 'headerActions.fields.color.basic': 'Basic',\n 'headerActions.fields.color.primary': 'Primária',\n 'headerActions.fields.color.accent': 'Accent',\n 'headerActions.fields.color.warn': 'Warn',\n 'headerActions.fields.visible': 'Visível',\n 'headerActions.fields.disabled': 'Desabilitada',\n 'headerActions.fields.loading': 'Loading',\n 'headerActions.fields.className': 'Classe CSS',\n 'headerActions.fields.style': 'Estilo (JSON)',\n 'headerActions.validation.invalidJson': 'JSON inválido.',\n 'headerActions.validation.objectJson':\n 'Informe um objeto JSON válido.',\n 'headerActions.placeholders.id': 'ex.: help',\n 'headerActions.placeholders.label': 'ex.: Ajuda da seção',\n 'headerActions.placeholders.icon': 'ex.: help_outline',\n 'headerActions.placeholders.action':\n 'Opcional. Se vazio, usa o ID',\n 'headerActions.options.action.custom': 'Customizada',\n 'headerActions.options.action.globalGroup': 'Ações globais',\n 'headerActions.help.actionResolver':\n 'Ações globais exigem executor no app (ActionResolver). Customizadas só emitem evento neste output.',\n 'headerActions.hints.actionParam':\n 'Use JSON quando a ação global exigir payload estruturado.',\n 'headerActions.validation.parameterRequired':\n 'Parâmetro obrigatório.',\n 'headerActions.placeholders.tooltip':\n 'Opcional. Se vazio, usa a label',\n 'headerActions.placeholders.className':\n 'ex.: section-help-action',\n 'headerActions.placeholders.style':\n '{\"marginLeft\":\"4px\"}',\n 'dynamicForm.sectionEditor.header.fields.baseIcon': 'Icone base da secao',\n 'dynamicForm.sectionEditor.header.fields.titleStyle': 'Fonte do titulo',\n 'dynamicForm.sectionEditor.header.fields.descriptionStyle': 'Fonte da descricao',\n 'dynamicForm.sectionEditor.header.fields.stepLabel': 'Rotulo do passo',\n 'dynamicForm.sectionEditor.header.fields.headerAlign': 'Alinhamento do cabecalho',\n 'dynamicForm.sectionEditor.header.fields.className': 'Classe CSS',\n 'dynamicForm.sectionEditor.header.fields.testId': 'Test ID',\n 'dynamicForm.sectionEditor.header.placeholders.baseIcon': 'ex.: info, settings, person',\n 'dynamicForm.sectionEditor.header.actions.pickIcon': 'Escolher icone',\n 'dynamicForm.sectionEditor.header.actions.clearIcon': 'Limpar icone',\n 'dynamicForm.sectionEditor.header.actions.iconHelp': 'Material Icons (ligatures)',\n 'dynamicForm.sectionEditor.header.options.appearance.card': 'Card',\n 'dynamicForm.sectionEditor.header.options.appearance.plain': 'Plain',\n 'dynamicForm.sectionEditor.header.options.appearance.step': 'Step',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleLarge': 'Titulo grande',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleMedium': 'Titulo medio',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleSmall': 'Titulo pequeno',\n 'dynamicForm.sectionEditor.header.options.titleStyle.headlineSmall': 'Headline',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodyLarge': 'Corpo grande',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodyMedium': 'Corpo medio',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodySmall': 'Corpo pequeno',\n 'dynamicForm.sectionEditor.header.options.headerAlign.start': 'Esquerda',\n 'dynamicForm.sectionEditor.header.options.headerAlign.center': 'Centro',\n 'dynamicForm.sectionEditor.header.options.titleColor.surfaceVariant': 'On surface variant',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.onSurface': 'On surface',\n 'dynamicForm.sectionEditor.organization.tip':\n 'Controle ordem e visibilidade basica da secao.',\n 'dynamicForm.sectionEditor.organization.fields.order': 'Ordem',\n 'dynamicForm.sectionEditor.organization.fields.hidden':\n 'Ocultar em {{bp}}',\n },\n 'en-US': {\n 'dynamicForm.sectionEditor.tabs.header': 'Header',\n 'dynamicForm.sectionEditor.tabs.avatar': 'Avatar',\n 'dynamicForm.sectionEditor.tabs.organization': 'Organization',\n 'dynamicForm.sectionEditor.header.tip.identity':\n 'Configure the title, description and visual identity shown at the top of the section.',\n 'dynamicForm.sectionEditor.header.tip.modes':\n 'The header can use a static icon, a photo from a form field or initials derived from a text field.',\n 'dynamicForm.sectionEditor.header.tip.emptyState':\n 'In create flows, define the empty behavior to avoid a header with no visual reference before data entry.',\n 'dynamicForm.sectionEditor.header.presets.title': 'Quick presets',\n 'dynamicForm.sectionEditor.header.presets.default': 'Default',\n 'dynamicForm.sectionEditor.header.presets.simple': 'Simple',\n 'dynamicForm.sectionEditor.header.presets.collapsible': 'Collapsible',\n 'dynamicForm.sectionEditor.header.fields.title': 'Title',\n 'dynamicForm.sectionEditor.header.fields.description': 'Description',\n 'dynamicForm.sectionEditor.header.fields.appearance': 'Appearance',\n 'dynamicForm.sectionEditor.header.fields.titleColor': 'Title color',\n 'dynamicForm.sectionEditor.header.fields.descriptionColor': 'Description color',\n 'dynamicForm.sectionEditor.header.fields.customColor': 'Custom color (CSS)',\n 'dynamicForm.sectionEditor.header.fields.titleGapBottom': 'Title gap (px)',\n 'dynamicForm.sectionEditor.header.fields.descriptionGapBottom': 'Description gap (px)',\n 'dynamicForm.sectionEditor.header.fields.gapBottom': 'Section bottom gap (px)',\n 'dynamicForm.sectionEditor.header.fields.collapsible': 'Collapsible',\n 'dynamicForm.sectionEditor.header.fields.collapsed': 'Start collapsed',\n 'dynamicForm.sectionEditor.header.fields.headerTooltip': 'Header tooltip',\n 'dynamicForm.sectionEditor.header.placeholders.description': 'Short summary of the section content',\n 'dynamicForm.sectionEditor.header.placeholders.customColor': 'e.g. #3366ff or rgb(...)',\n 'dynamicForm.sectionEditor.header.placeholders.headerTooltip': 'Hint shown when hovering the title',\n 'dynamicForm.sectionEditor.header.options.titleColor.default': 'Default (on-surface)',\n 'dynamicForm.sectionEditor.header.options.titleColor.primary': 'Primary',\n 'dynamicForm.sectionEditor.header.options.titleColor.secondary': 'Secondary',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.default': 'Default (on-surface-variant)',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.primary': 'Primary',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.secondary': 'Secondary',\n 'headerActions.title': 'Header actions',\n 'headerActions.description':\n 'Add clickable icons to the right side of the section header for contextual affordances such as help, refresh or drill-down.',\n 'headerActions.add': 'Add action',\n 'headerActions.empty': 'No actions configured for this header.',\n 'headerActions.item': 'Action {{index}}',\n 'headerActions.remove': 'Remove action',\n 'headerActions.moveUp': 'Move action up',\n 'headerActions.moveDown': 'Move action down',\n 'headerActions.sections.identity': 'Identity',\n 'headerActions.sections.identityDescription':\n 'Define the stable identifier, accessible label and base icon for this action.',\n 'headerActions.sections.behavior': 'Behavior',\n 'headerActions.sections.behaviorDescription':\n 'Choose whether the action is free-form or linked to the app global catalog and configure what will be emitted.',\n 'headerActions.sections.state': 'State',\n 'headerActions.sections.stateDescription':\n 'Control visibility, disabled state and loading without removing the action from the contract.',\n 'headerActions.sections.appearanceAdvanced':\n 'Advanced appearance',\n 'headerActions.sections.appearanceAdvancedDescription':\n 'Use only when you need to refine the header button presentation with color, CSS class or additional styles.',\n 'headerActions.callout.globalTitle': 'App global action',\n 'headerActions.preview.title': 'Preview',\n 'headerActions.preview.defaultLabel': 'Action preview',\n 'headerActions.preview.labelFallback':\n 'Accessible action label',\n 'headerActions.preview.caption':\n 'The preview reflects extra color and visual styles of the icon button.',\n 'headerActions.presets.title': 'Visual presets',\n 'headerActions.presets.default': 'Default',\n 'headerActions.presets.softPill': 'Soft pill',\n 'headerActions.presets.primaryPill': 'Primary pill',\n 'headerActions.presets.criticalPill': 'Critical pill',\n 'headerActions.fields.id': 'ID',\n 'headerActions.fields.label': 'Accessible label',\n 'headerActions.fields.icon': 'Icon',\n 'headerActions.actions.pickIcon': 'Pick action icon',\n 'headerActions.actions.clearIcon': 'Clear action icon',\n 'headerActions.actions.iconHelp':\n 'Use Material Symbols or Praxis icons already registered in the host.',\n 'headerActions.fields.action': 'Action',\n 'headerActions.fields.customAction': 'Custom action',\n 'headerActions.fields.actionParam': 'Parameter',\n 'headerActions.fields.tooltip': 'Tooltip',\n 'headerActions.fields.color': 'Color',\n 'headerActions.fields.color.default': 'Default',\n 'headerActions.fields.color.basic': 'Basic',\n 'headerActions.fields.color.primary': 'Primary',\n 'headerActions.fields.color.accent': 'Accent',\n 'headerActions.fields.color.warn': 'Warn',\n 'headerActions.fields.visible': 'Visible',\n 'headerActions.fields.disabled': 'Disabled',\n 'headerActions.fields.loading': 'Loading',\n 'headerActions.fields.className': 'CSS class',\n 'headerActions.fields.style': 'Style (JSON)',\n 'headerActions.validation.invalidJson': 'Invalid JSON.',\n 'headerActions.validation.objectJson':\n 'Provide a valid JSON object.',\n 'headerActions.placeholders.id': 'e.g. help',\n 'headerActions.placeholders.label': 'e.g. Section help',\n 'headerActions.placeholders.icon': 'e.g. help_outline',\n 'headerActions.placeholders.action':\n 'Optional. If empty, the ID is used',\n 'headerActions.options.action.custom': 'Custom',\n 'headerActions.options.action.globalGroup': 'Global actions',\n 'headerActions.help.actionResolver':\n 'Global actions require an app-side executor (ActionResolver). Custom actions only emit events on this output.',\n 'headerActions.hints.actionParam':\n 'Use JSON when the global action requires structured payload.',\n 'headerActions.validation.parameterRequired':\n 'Required parameter.',\n 'headerActions.placeholders.tooltip':\n 'Optional. If empty, the label is used',\n 'headerActions.placeholders.className':\n 'e.g. section-help-action',\n 'headerActions.placeholders.style':\n '{\"marginLeft\":\"4px\"}',\n 'dynamicForm.sectionEditor.header.fields.baseIcon': 'Section base icon',\n 'dynamicForm.sectionEditor.header.fields.titleStyle': 'Title font',\n 'dynamicForm.sectionEditor.header.fields.descriptionStyle': 'Description font',\n 'dynamicForm.sectionEditor.header.fields.stepLabel': 'Step label',\n 'dynamicForm.sectionEditor.header.fields.headerAlign': 'Header alignment',\n 'dynamicForm.sectionEditor.header.fields.className': 'CSS class',\n 'dynamicForm.sectionEditor.header.fields.testId': 'Test ID',\n 'dynamicForm.sectionEditor.header.placeholders.baseIcon': 'e.g. info, settings, person',\n 'dynamicForm.sectionEditor.header.actions.pickIcon': 'Pick icon',\n 'dynamicForm.sectionEditor.header.actions.clearIcon': 'Clear icon',\n 'dynamicForm.sectionEditor.header.actions.iconHelp': 'Material Icons (ligatures)',\n 'dynamicForm.sectionEditor.header.options.appearance.card': 'Card',\n 'dynamicForm.sectionEditor.header.options.appearance.plain': 'Plain',\n 'dynamicForm.sectionEditor.header.options.appearance.step': 'Step',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleLarge': 'Large title',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleMedium': 'Medium title',\n 'dynamicForm.sectionEditor.header.options.titleStyle.titleSmall': 'Small title',\n 'dynamicForm.sectionEditor.header.options.titleStyle.headlineSmall': 'Headline',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodyLarge': 'Large body',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodyMedium': 'Medium body',\n 'dynamicForm.sectionEditor.header.options.descriptionStyle.bodySmall': 'Small body',\n 'dynamicForm.sectionEditor.header.options.headerAlign.start': 'Left',\n 'dynamicForm.sectionEditor.header.options.headerAlign.center': 'Center',\n 'dynamicForm.sectionEditor.header.options.titleColor.surfaceVariant': 'On surface variant',\n 'dynamicForm.sectionEditor.header.options.descriptionColor.onSurface': 'On surface',\n 'dynamicForm.sectionEditor.organization.tip':\n 'Control the basic order and visibility of the section.',\n 'dynamicForm.sectionEditor.organization.fields.order': 'Order',\n 'dynamicForm.sectionEditor.organization.fields.hidden':\n 'Hide on {{bp}}',\n },\n },\n },\n};\n","import { Component, Inject, OnDestroy, OnInit, AfterViewInit, ViewChild, ElementRef, Input, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormBuilder,\n FormArray,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSelectModule } from '@angular/material/select';\nimport {\n FormSection,\n Breakpoint,\n FieldMetadata,\n FormSectionHeaderConfig,\n FormSectionHeaderAction,\n GLOBAL_ACTION_SPEC_CATALOG,\n PRAXIS_GLOBAL_ACTION_CATALOG,\n providePraxisI18nConfig,\n SurfaceOpenActionEditorComponent,\n type SurfaceOpenPayload,\n getGlobalActionCatalog,\n getGlobalActionUiSchema,\n type GlobalActionCatalogEntry,\n SURFACE_OPEN_I18N_CONFIG,\n SURFACE_OPEN_I18N_NAMESPACE,\n} from '@praxisui/core';\nimport { GLOBAL_ACTION_CATALOG } from '@praxisui/core';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n} from '@praxisui/settings-panel';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { IconPickerService, PraxisI18nService } from '@praxisui/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { normalizeSectionHeaderConfig } from '../../../utils/section-header.utils';\nimport {\n SECTION_EDITOR_I18N_CONFIG,\n SECTION_EDITOR_I18N_NAMESPACE,\n} from './section-editor.i18n';\nimport {\n type ActionCatalogOption,\n buildGlobalActionCatalog,\n getActionParamInfo,\n isRequiredParamMissing,\n normalizeSurfaceOpenPayload,\n parseActionValue,\n} from '../../../action-authoring/global-action-authoring.util';\n\ninterface EditableFormSection extends FormSection {\n sectionHeader?: FormSectionHeaderConfig;\n appearance?: 'card' | 'plain' | 'step';\n stepLabel?: string;\n collapsible?: boolean;\n collapsed?: boolean;\n order?: number;\n hidden?: {\n xs?: boolean;\n sm?: boolean;\n md?: boolean;\n lg?: boolean;\n xl?: boolean;\n };\n className?: string;\n testId?: string;\n gapBottom?: number;\n titleGapBottom?: number;\n descriptionGapBottom?: number;\n titleStyle?: string;\n descriptionStyle?: string;\n titleColor?: string;\n descriptionColor?: string;\n headerAlign?: 'start' | 'center';\n headerTooltip?: string;\n}\n\n@Component({\n selector: 'praxis-section-editor',\n standalone: true,\n providers: [\n providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG),\n providePraxisI18nConfig(SECTION_EDITOR_I18N_CONFIG),\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n MatButtonToggleModule,\n MatDividerModule,\n MatSelectModule,\n SurfaceOpenActionEditorComponent,\n ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <mat-tab-group>\n <mat-tab [label]=\"tx('dynamicForm.sectionEditor.tabs.header', 'Cabeçalho')\">\n <div class=\"tips\">\n <p>{{ tx('dynamicForm.sectionEditor.header.tip.identity', 'Configure titulo, descricao e a identidade visual exibida no topo da secao.') }}</p>\n <p>{{ tx('dynamicForm.sectionEditor.header.tip.modes', 'A aba Avatar concentra os modos de foto, iniciais e fallback visual do titulo da secao.') }}</p>\n </div>\n <form [formGroup]=\"form\" class=\"stack\">\n <div class=\"preset-row\">\n <span class=\"preset-title\">{{ tx('dynamicForm.sectionEditor.header.presets.title', 'Presets rápidos') }}</span>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('default')\">{{ tx('dynamicForm.sectionEditor.header.presets.default', 'Padrão') }}</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('simple')\">{{ tx('dynamicForm.sectionEditor.header.presets.simple', 'Simples') }}</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('collapsible')\">{{ tx('dynamicForm.sectionEditor.header.presets.collapsible', 'Colapsável') }}</button>\n </div>\n\n <div class=\"row-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.title', 'Título') }}</mat-label>\n <input matInput #titleInput formControlName=\"title\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.baseIcon', 'Section base icon') }}</mat-label>\n <span matPrefix *ngIf=\"form.value.icon\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"form.value.icon\"></mat-icon>\n </span>\n <input matInput formControlName=\"icon\" [placeholder]=\"tx('dynamicForm.sectionEditor.header.placeholders.baseIcon', 'e.g. info, settings, person')\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"pickIcon()\"\n [matTooltip]=\"tx('dynamicForm.sectionEditor.header.actions.pickIcon', 'Pick icon')\"\n [attr.aria-label]=\"tx('dynamicForm.sectionEditor.header.actions.pickIcon', 'Pick icon')\"\n data-testid=\"pick-icon\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button\n *ngIf=\"form.value.icon\"\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearIcon()\"\n [matTooltip]=\"tx('dynamicForm.sectionEditor.header.actions.clearIcon', 'Clear icon')\"\n [attr.aria-label]=\"tx('dynamicForm.sectionEditor.header.actions.clearIcon', 'Clear icon')\"\n data-testid=\"clear-icon\"\n >\n <mat-icon [praxisIcon]=\"'backspace'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"tx('dynamicForm.sectionEditor.header.actions.iconHelp', 'Material Icons (ligatures)')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.description', 'Descrição') }}</mat-label>\n <textarea matInput #descriptionInput formControlName=\"description\" [placeholder]=\"tx('dynamicForm.sectionEditor.header.placeholders.description', 'Resumo curto do conteúdo da seção')\"></textarea>\n </mat-form-field>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.appearance', 'Aparência') }}</mat-label>\n <mat-select formControlName=\"appearance\">\n <mat-option value=\"card\">{{ tx('dynamicForm.sectionEditor.header.options.appearance.card', 'Card') }}</mat-option>\n <mat-option value=\"plain\">{{ tx('dynamicForm.sectionEditor.header.options.appearance.plain', 'Plain') }}</mat-option>\n <mat-option value=\"step\">{{ tx('dynamicForm.sectionEditor.header.options.appearance.step', 'Step') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.titleStyle', 'Title font') }}</mat-label>\n <mat-select [value]=\"section.titleStyle || 'titleMedium'\" (valueChange)=\"onTitleStyleChange($event)\">\n <mat-option value=\"titleLarge\">{{ tx('dynamicForm.sectionEditor.header.options.titleStyle.titleLarge', 'Large title') }}</mat-option>\n <mat-option value=\"titleMedium\">{{ tx('dynamicForm.sectionEditor.header.options.titleStyle.titleMedium', 'Medium title') }}</mat-option>\n <mat-option value=\"titleSmall\">{{ tx('dynamicForm.sectionEditor.header.options.titleStyle.titleSmall', 'Small title') }}</mat-option>\n <mat-option value=\"headlineSmall\">{{ tx('dynamicForm.sectionEditor.header.options.titleStyle.headlineSmall', 'Headline') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.descriptionStyle', 'Description font') }}</mat-label>\n <mat-select [value]=\"section.descriptionStyle || 'bodyMedium'\" (valueChange)=\"onDescriptionStyleChange($event)\">\n <mat-option value=\"bodyLarge\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionStyle.bodyLarge', 'Large body') }}</mat-option>\n <mat-option value=\"bodyMedium\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionStyle.bodyMedium', 'Medium body') }}</mat-option>\n <mat-option value=\"bodySmall\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionStyle.bodySmall', 'Small body') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.stepLabel', 'Step label') }}</mat-label>\n <input matInput formControlName=\"stepLabel\" placeholder=\"ex.: 1, 2, A\" />\n </mat-form-field>\n </div>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.headerAlign', 'Header alignment') }}</mat-label>\n <mat-select formControlName=\"headerAlign\">\n <mat-option value=\"start\">{{ tx('dynamicForm.sectionEditor.header.options.headerAlign.start', 'Left') }}</mat-option>\n <mat-option value=\"center\">{{ tx('dynamicForm.sectionEditor.header.options.headerAlign.center', 'Center') }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-divider></mat-divider>\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.titleColor', 'Cor do título') }}</mat-label>\n <mat-select formControlName=\"titleColor\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.options.titleColor.default', 'Padrão (on-surface)') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-primary)\">{{ tx('dynamicForm.sectionEditor.header.options.titleColor.primary', 'Primária') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-secondary)\">{{ tx('dynamicForm.sectionEditor.header.options.titleColor.secondary', 'Secundária') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-on-surface-variant)\">{{ tx('dynamicForm.sectionEditor.header.options.titleColor.surfaceVariant', 'On surface variant') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.descriptionColor', 'Cor da descrição') }}</mat-label>\n <mat-select formControlName=\"descriptionColor\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionColor.default', 'Padrão (on-surface-variant)') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-primary)\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionColor.primary', 'Primária') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-secondary)\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionColor.secondary', 'Secundária') }}</mat-option>\n <mat-option value=\"var(--md-sys-color-on-surface)\">{{ tx('dynamicForm.sectionEditor.header.options.descriptionColor.onSurface', 'On surface') }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.customColor', 'Cor personalizada (CSS)') }}</mat-label>\n <input matInput [placeholder]=\"tx('dynamicForm.sectionEditor.header.placeholders.customColor', 'ex.: #3366ff ou rgb(...)')\" (input)=\"setCustomColors($any($event.target).value)\" />\n </mat-form-field>\n </div>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.titleGapBottom', 'Gap do título (px)') }}</mat-label>\n <input matInput type=\"number\" formControlName=\"titleGapBottom\" min=\"0\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.descriptionGapBottom', 'Gap da descrição (px)') }}</mat-label>\n <input matInput type=\"number\" formControlName=\"descriptionGapBottom\" min=\"0\" />\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.gapBottom', 'Gap abaixo da seção (px)') }}</mat-label>\n <input matInput type=\"number\" min=\"0\" formControlName=\"gapBottom\" />\n </mat-form-field>\n </div>\n\n <mat-divider></mat-divider>\n <div class=\"row-2\">\n <mat-slide-toggle formControlName=\"collapsible\">\n {{ tx('dynamicForm.sectionEditor.header.fields.collapsible', 'Colapsável') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle formControlName=\"collapsed\">\n {{ tx('dynamicForm.sectionEditor.header.fields.collapsed', 'Iniciar recolhida') }}\n </mat-slide-toggle>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.headerTooltip', 'Tooltip do cabeçalho') }}</mat-label>\n <input matInput formControlName=\"headerTooltip\" [placeholder]=\"tx('dynamicForm.sectionEditor.header.placeholders.headerTooltip', 'Dica ao passar o mouse no título')\" />\n </mat-form-field>\n\n <mat-divider></mat-divider>\n <div class=\"inline-section-header\">\n <div>\n <div class=\"inline-section-title\">{{ tx('headerActions.title', 'Ações do cabeçalho') }}</div>\n <p class=\"inline-section-description\">\n {{ tx('headerActions.description', 'Adicione ícones acionáveis no canto direito do cabeçalho da seção para affordances contextuais como ajuda, refresh ou drill-down.') }}\n </p>\n </div>\n <button mat-stroked-button type=\"button\" (click)=\"addHeaderAction()\">\n {{ tx('headerActions.add', 'Adicionar ação') }}\n </button>\n </div>\n\n @if (!headerActionsArray.length) {\n <p class=\"empty-inline-state\">\n {{ tx('headerActions.empty', 'Nenhuma ação configurada para este cabeçalho.') }}\n </p>\n }\n\n <div class=\"header-actions-list\" formArrayName=\"headerActions\">\n <div class=\"header-action-card\" *ngFor=\"let actionGroup of headerActionsArray.controls; let index = index\" [formGroupName]=\"index\">\n <div class=\"header-action-toolbar\">\n <div class=\"header-action-title\">\n {{ tx('headerActions.item', 'Ação {{index}}', { index: index + 1 }) }}\n </div>\n <div class=\"header-action-toolbar-buttons\">\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveHeaderActionUp(index)\"\n [disabled]=\"index === 0\"\n [attr.aria-label]=\"tx('headerActions.moveUp', 'Mover ação para cima')\"\n >\n <mat-icon [praxisIcon]=\"'arrow_upward'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"moveHeaderActionDown(index)\"\n [disabled]=\"index === headerActionsArray.length - 1\"\n [attr.aria-label]=\"tx('headerActions.moveDown', 'Mover ação para baixo')\"\n >\n <mat-icon [praxisIcon]=\"'arrow_downward'\"></mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n color=\"warn\"\n (click)=\"removeHeaderAction(index)\"\n [attr.aria-label]=\"tx('headerActions.remove', 'Remover ação')\"\n >\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"header-action-section\">\n <div class=\"header-action-section-title\">\n {{ tx('headerActions.sections.identity', 'Identidade') }}\n </div>\n <p class=\"header-action-section-description\">\n {{ tx('headerActions.sections.identityDescription', 'Defina o identificador, o rótulo acessível e o ícone base da ação.') }}\n </p>\n </div>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.id', 'ID') }}</mat-label>\n <input matInput formControlName=\"id\" [placeholder]=\"tx('headerActions.placeholders.id', 'ex.: help')\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.label', 'Label acessível') }}</mat-label>\n <input matInput formControlName=\"label\" [placeholder]=\"tx('headerActions.placeholders.label', 'ex.: Ajuda da seção')\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.icon', 'Ícone') }}</mat-label>\n <span matPrefix *ngIf=\"actionGroup.get('icon')?.value\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"actionGroup.get('icon')?.value\"></mat-icon>\n </span>\n <input matInput formControlName=\"icon\" [placeholder]=\"tx('headerActions.placeholders.icon', 'ex.: help_outline')\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"pickHeaderActionIcon(index)\"\n [matTooltip]=\"tx('headerActions.actions.pickIcon', 'Escolher ícone da ação')\"\n [attr.aria-label]=\"tx('headerActions.actions.pickIcon', 'Escolher ícone da ação')\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n @if (actionGroup.get('icon')?.value) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearHeaderActionIcon(index)\"\n [matTooltip]=\"tx('headerActions.actions.clearIcon', 'Limpar ícone da ação')\"\n [attr.aria-label]=\"tx('headerActions.actions.clearIcon', 'Limpar ícone da ação')\"\n >\n <mat-icon [praxisIcon]=\"'backspace'\"></mat-icon>\n </button>\n }\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"tx('headerActions.actions.iconHelp', 'Use Material Symbols ou ícones Praxis já registrados no host.')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n </div>\n\n <div class=\"header-action-section\">\n <div class=\"header-action-section-title\">\n {{ tx('headerActions.sections.behavior', 'Comportamento') }}\n </div>\n <p class=\"header-action-section-description\">\n {{ tx('headerActions.sections.behaviorDescription', 'Escolha se a ação é livre ou vinculada ao catálogo global do app e configure o que será emitido.') }}\n </p>\n </div>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.action', 'Ação') }}</mat-label>\n <mat-select\n [ngModel]=\"getHeaderActionSelectValue(actionGroup.get('action')?.value)\"\n (ngModelChange)=\"onHeaderActionSelectChange(index, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <mat-option [value]=\"customActionValue\">\n {{ tx('headerActions.options.action.custom', 'Customizada') }}\n </mat-option>\n <mat-optgroup [label]=\"tx('headerActions.options.action.globalGroup', 'Ações globais')\">\n @for (spec of globalActionCatalog; track spec.id) {\n <mat-option [value]=\"spec.id\">{{ getActionCatalogLabel(spec) }}</mat-option>\n }\n </mat-optgroup>\n </mat-select>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n [matTooltip]=\"tx('headerActions.help.actionResolver', 'Ações globais exigem executor no app (ActionResolver). Customizadas só emitem evento neste output.')\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n @if (getHeaderActionSelectValue(actionGroup.get('action')?.value) === customActionValue) {\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.customAction', 'Action customizada') }}</mat-label>\n <input\n matInput\n [ngModel]=\"getHeaderActionCustomValue(actionGroup.get('action')?.value)\"\n (ngModelChange)=\"onHeaderActionCustomChange(index, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"tx('headerActions.placeholders.action', 'Opcional. Se vazio, usa o ID')\"\n />\n </mat-form-field>\n } @else if (getHeaderActionSpecById(getHeaderActionSelectValue(actionGroup.get('action')?.value)); as actionSpec) {\n @if (getHeaderGlobalActionSchema(actionGroup.get('action')?.value); as schema) {\n @if (schema.editorMode === 'surface-open') {\n <div class=\"row-1\">\n <praxis-surface-open-action-editor\n [value]=\"getHeaderSurfaceOpenActionPayload(actionGroup.get('action')?.value)\"\n hostKind=\"form\"\n (valueChange)=\"onHeaderSurfaceOpenActionPayloadChange(index, $event)\"\n ></praxis-surface-open-action-editor>\n </div>\n } @else if (actionSpec.param) {\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ actionSpec.param.label || tx('headerActions.fields.actionParam', 'Parâmetro') }}</mat-label>\n <input\n matInput\n [ngModel]=\"getHeaderActionParam(actionGroup.get('action')?.value)\"\n (ngModelChange)=\"onHeaderActionParamChange(index, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"actionSpec.param.placeholder || ''\"\n [required]=\"!!actionSpec.param.required\"\n />\n @if (actionSpec.param.hint) {\n <mat-hint>{{ actionSpec.param.hint }}</mat-hint>\n }\n @if (actionSpec.param.required && isHeaderActionParamMissing(actionGroup.get('action')?.value)) {\n <mat-error>{{ tx('headerActions.validation.parameterRequired', 'Parâmetro obrigatório.') }}</mat-error>\n }\n </mat-form-field>\n }\n } @else if (actionSpec.param) {\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ actionSpec.param.label || tx('headerActions.fields.actionParam', 'Parâmetro') }}</mat-label>\n <input\n matInput\n [ngModel]=\"getHeaderActionParam(actionGroup.get('action')?.value)\"\n (ngModelChange)=\"onHeaderActionParamChange(index, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n [placeholder]=\"actionSpec.param.placeholder || ''\"\n [required]=\"!!actionSpec.param.required\"\n />\n @if (actionSpec.param.hint) {\n <mat-hint>{{ actionSpec.param.hint }}</mat-hint>\n }\n @if (actionSpec.param.required && isHeaderActionParamMissing(actionGroup.get('action')?.value)) {\n <mat-error>{{ tx('headerActions.validation.parameterRequired', 'Parâmetro obrigatório.') }}</mat-error>\n }\n </mat-form-field>\n }\n }\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.tooltip', 'Tooltip') }}</mat-label>\n <input matInput formControlName=\"tooltip\" [placeholder]=\"tx('headerActions.placeholders.tooltip', 'Opcional. Se vazio, usa a label')\" />\n </mat-form-field>\n </div>\n\n @if (getHeaderActionSelectValue(actionGroup.get('action')?.value) !== customActionValue) {\n <div class=\"header-action-callout\">\n <div class=\"header-action-callout-title\">\n {{ tx('headerActions.callout.globalTitle', 'Ação global do app') }}\n </div>\n <p class=\"header-action-callout-text\">\n {{ tx('headerActions.help.actionResolver', 'Ações globais exigem executor no app (ActionResolver). Customizadas só emitem evento neste output.') }}\n </p>\n </div>\n }\n\n <div class=\"header-action-section\">\n <div class=\"header-action-section-title\">\n {{ tx('headerActions.sections.state', 'Estado') }}\n </div>\n <p class=\"header-action-section-description\">\n {{ tx('headerActions.sections.stateDescription', 'Controle visibilidade, indisponibilidade e estado de loading sem remover a ação do contrato.') }}\n </p>\n </div>\n\n <div class=\"row-3\">\n <mat-slide-toggle formControlName=\"visible\">\n {{ tx('headerActions.fields.visible', 'Visível') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle formControlName=\"disabled\">\n {{ tx('headerActions.fields.disabled', 'Desabilitada') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle formControlName=\"loading\">\n {{ tx('headerActions.fields.loading', 'Loading') }}\n </mat-slide-toggle>\n </div>\n\n <details class=\"header-action-advanced\">\n <summary>{{ tx('headerActions.sections.appearanceAdvanced', 'Aparência avançada') }}</summary>\n <p class=\"header-action-section-description advanced\">\n {{ tx('headerActions.sections.appearanceAdvancedDescription', 'Use apenas quando precisar refinar a apresentação do botão no header com cor, classe ou estilos adicionais.') }}\n </p>\n <div class=\"header-action-preview\">\n <div class=\"header-action-preview-title\">\n {{ tx('headerActions.preview.title', 'Prévia') }}\n </div>\n <div class=\"header-action-preview-body\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"header-action-preview-button\"\n [ngStyle]=\"getHeaderActionPreviewStyles(index)\"\n [attr.aria-label]=\"actionGroup.get('label')?.value || tx('headerActions.preview.defaultLabel', 'Prévia da ação')\"\n >\n <mat-icon [praxisIcon]=\"actionGroup.get('icon')?.value || 'help_outline'\"></mat-icon>\n </button>\n <div class=\"header-action-preview-meta\">\n <div class=\"header-action-preview-label\">\n {{ actionGroup.get('label')?.value || tx('headerActions.preview.labelFallback', 'Label acessível da ação') }}\n </div>\n <div class=\"header-action-preview-caption\">\n {{ tx('headerActions.preview.caption', 'A prévia reflete cor e estilos extras do botão iconográfico.') }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"header-action-style-presets\">\n <div class=\"header-action-style-presets-title\">\n {{ tx('headerActions.presets.title', 'Presets visuais') }}\n </div>\n <div class=\"header-action-style-presets-buttons\">\n <button mat-stroked-button type=\"button\" (click)=\"applyHeaderActionStylePreset(index, 'default')\">\n {{ tx('headerActions.presets.default', 'Padrão') }}\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyHeaderActionStylePreset(index, 'soft-pill')\">\n {{ tx('headerActions.presets.softPill', 'Pill discreto') }}\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyHeaderActionStylePreset(index, 'primary-pill')\">\n {{ tx('headerActions.presets.primaryPill', 'Pill primário') }}\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyHeaderActionStylePreset(index, 'critical-pill')\">\n {{ tx('headerActions.presets.criticalPill', 'Pill crítico') }}\n </button>\n </div>\n </div>\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.color', 'Cor') }}</mat-label>\n <mat-select formControlName=\"color\">\n <mat-option value=\"\">{{ tx('headerActions.fields.color.default', 'Padrão') }}</mat-option>\n <mat-option value=\"basic\">{{ tx('headerActions.fields.color.basic', 'Basic') }}</mat-option>\n <mat-option value=\"primary\">{{ tx('headerActions.fields.color.primary', 'Primária') }}</mat-option>\n <mat-option value=\"accent\">{{ tx('headerActions.fields.color.accent', 'Accent') }}</mat-option>\n <mat-option value=\"warn\">{{ tx('headerActions.fields.color.warn', 'Warn') }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.className', 'Classe CSS') }}</mat-label>\n <input matInput formControlName=\"className\" [placeholder]=\"tx('headerActions.placeholders.className', 'ex.: section-help-action')\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('headerActions.fields.style', 'Estilo (JSON)') }}</mat-label>\n <textarea matInput rows=\"3\" formControlName=\"styleJson\" [placeholder]=\"getHeaderActionStylePlaceholder()\"></textarea>\n @if (actionGroup.get('styleJson')?.hasError('invalidJson')) {\n <mat-error>{{ tx('headerActions.validation.invalidJson', 'JSON inválido.') }}</mat-error>\n } @else if (actionGroup.get('styleJson')?.hasError('invalidObjectJson')) {\n <mat-error>{{ tx('headerActions.validation.objectJson', 'Informe um objeto JSON válido.') }}</mat-error>\n }\n </mat-form-field>\n </div>\n </details>\n </div>\n </div>\n\n <div class=\"row-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.className', 'CSS class') }}</mat-label>\n <input matInput formControlName=\"className\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fields.testId', 'Test ID') }}</mat-label>\n <input matInput formControlName=\"testId\" />\n </mat-form-field>\n </div>\n </form>\n </mat-tab>\n\n <mat-tab [label]=\"tx('dynamicForm.sectionEditor.tabs.avatar', 'Avatar')\">\n <ng-template matTabContent>\n <div class=\"tips\">\n <p>{{ tx('dynamicForm.sectionEditor.header.tip.modes', 'O header pode usar icone estatico, foto vinda de um field do formulario ou iniciais derivadas de um field textual.') }}</p>\n <p>{{ tx('dynamicForm.sectionEditor.header.tip.emptyState', 'Em fluxos de inclusao, defina o comportamento de vazio para evitar um cabecalho sem referencia visual antes do preenchimento.') }}</p>\n </div>\n <form [formGroup]=\"form\" class=\"stack\">\n <div formGroupName=\"sectionHeader\" class=\"stack\">\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.mode.label', 'Visual do cabecalho') }}</mat-label>\n <mat-select formControlName=\"mode\">\n <mat-option value=\"icon\">{{ tx('dynamicForm.sectionEditor.header.mode.icon', 'Icone estatico') }}</mat-option>\n <mat-option value=\"avatar-image\">{{ tx('dynamicForm.sectionEditor.header.mode.image', 'Avatar por imagem') }}</mat-option>\n <mat-option value=\"avatar-initials\">{{ tx('dynamicForm.sectionEditor.header.mode.initials', 'Avatar por iniciais') }}</mat-option>\n <mat-option value=\"auto\">{{ tx('dynamicForm.sectionEditor.header.mode.auto', 'Automatico') }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.sourceField.label', 'Campo da imagem') }}</mat-label>\n <mat-select formControlName=\"sourceField\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.sourceField.none', 'Nao usar') }}</mat-option>\n <mat-option *ngFor=\"let field of fieldOptions; trackBy: trackFieldOption\" [value]=\"field.value\">{{ field.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.initialsSourceField.label', 'Campo para iniciais') }}</mat-label>\n <mat-select formControlName=\"initialsSourceField\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.auto', 'Auto') }}</mat-option>\n <mat-option *ngFor=\"let field of fieldOptions; trackBy: trackFieldOption\" [value]=\"field.value\">{{ field.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"row-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.altField.label', 'Campo descritivo (alt)') }}</mat-label>\n <mat-select formControlName=\"altField\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.auto', 'Auto') }}</mat-option>\n <mat-option *ngFor=\"let field of fieldOptions; trackBy: trackFieldOption\" [value]=\"field.value\">{{ field.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.emptyState.label', 'Quando o valor estiver vazio') }}</mat-label>\n <mat-select formControlName=\"emptyState\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.emptyState.default', 'Placeholder neutro (padrao)') }}</mat-option>\n <mat-option value=\"fallback-icon\">{{ tx('dynamicForm.sectionEditor.header.emptyState.fallbackIcon', 'Mostrar icone') }}</mat-option>\n <mat-option value=\"placeholder-avatar\">{{ tx('dynamicForm.sectionEditor.header.emptyState.placeholder', 'Mostrar avatar placeholder') }}</mat-option>\n <mat-option value=\"none\">{{ tx('dynamicForm.sectionEditor.header.emptyState.none', 'Nao mostrar nada') }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.size.label', 'Tamanho do avatar') }}</mat-label>\n <mat-select formControlName=\"size\">\n <mat-option value=\"\">{{ tx('dynamicForm.sectionEditor.header.size.default', 'Médio (padrao)') }}</mat-option>\n <mat-option value=\"sm\">{{ tx('dynamicForm.sectionEditor.header.size.sm', 'Pequeno') }}</mat-option>\n <mat-option value=\"md\">{{ tx('dynamicForm.sectionEditor.header.size.md', 'Médio') }}</mat-option>\n <mat-option value=\"lg\">{{ tx('dynamicForm.sectionEditor.header.size.lg', 'Grande') }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.initialsMaxLength.label', 'Maximo de iniciais') }}</mat-label>\n <input matInput type=\"number\" formControlName=\"initialsMaxLength\" min=\"1\" max=\"4\" />\n </mat-form-field>\n </div>\n\n <div class=\"row-2\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.header.fallbackIcon.label', 'Icone de fallback') }}</mat-label>\n <span matPrefix *ngIf=\"form.get('sectionHeader.fallbackIcon')?.value\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"form.get('sectionHeader.fallbackIcon')?.value\"></mat-icon>\n </span>\n <input matInput formControlName=\"fallbackIcon\" placeholder=\"ex.: person\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"pickFallbackIcon()\"\n [matTooltip]=\"tx('dynamicForm.sectionEditor.header.fallbackIcon.pick', 'Escolher icone de fallback')\"\n [attr.aria-label]=\"tx('dynamicForm.sectionEditor.header.fallbackIcon.pick', 'Escolher icone de fallback')\"\n data-testid=\"pick-fallback-icon\"\n >\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n </button>\n <button\n *ngIf=\"form.get('sectionHeader.fallbackIcon')?.value\"\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearFallbackIcon()\"\n [matTooltip]=\"tx('dynamicForm.sectionEditor.header.fallbackIcon.clear', 'Limpar icone de fallback')\"\n [attr.aria-label]=\"tx('dynamicForm.sectionEditor.header.fallbackIcon.clear', 'Limpar icone de fallback')\"\n data-testid=\"clear-fallback-icon\"\n >\n <mat-icon [praxisIcon]=\"'backspace'\"></mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"avatar-guidance\">\n <p>{{ tx('dynamicForm.sectionEditor.header.guidance.formats', 'Imagem aceita URL, data URL, File, Blob e objetos com propriedades como url, base64 ou bytes.') }}</p>\n <p>{{ tx('dynamicForm.sectionEditor.header.guidance.auto', 'No modo automatico, o runtime tenta imagem, depois iniciais do campo configurado e por fim o estado vazio escolhido.') }}</p>\n <p>{{ tx('dynamicForm.sectionEditor.header.guidance.neutral', 'Se nenhum campo tiver valor ainda, o padrao e um placeholder neutro, adequado a qualquer dominio corporativo.') }}</p>\n </div>\n </div>\n </div>\n </form>\n </ng-template>\n </mat-tab>\n\n <mat-tab [label]=\"tx('dynamicForm.sectionEditor.tabs.organization', 'Organização')\">\n <div class=\"tips\">\n <p>{{ tx('dynamicForm.sectionEditor.organization.tip', 'Control the basic order and visibility of the section.') }}</p>\n </div>\n <form [formGroup]=\"form\" class=\"stack\">\n <mat-form-field appearance=\"fill\">\n <mat-label>{{ tx('dynamicForm.sectionEditor.organization.fields.order', 'Order') }}</mat-label>\n <input matInput type=\"number\" formControlName=\"order\" />\n </mat-form-field>\n\n <div formGroupName=\"hidden\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-slide-toggle [formControlName]=\"bp\">\n {{ tx('dynamicForm.sectionEditor.organization.fields.hidden', 'Hide on {{bp}}', { bp }) }}\n </mat-slide-toggle>\n </div>\n </div>\n </form>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n }\n .preset-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n margin-bottom: 12px;\n }\n .preset-title {\n font-weight: 600;\n color: var(--md-sys-color-on-surface-variant);\n }\n .bp-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin: 12px 0;\n }\n .inline-section-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n }\n .inline-section-title {\n font-size: 14px;\n font-weight: 700;\n color: var(--md-sys-color-on-surface);\n }\n .inline-section-description {\n margin: 4px 0 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--md-sys-color-on-surface-variant);\n max-width: 72ch;\n }\n .empty-inline-state {\n margin: 0;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-actions-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .header-action-card {\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 14px;\n padding: 12px;\n background: color-mix(in srgb, var(--md-sys-color-surface-container-low) 82%, white 18%);\n }\n .header-action-section {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .header-action-section-title {\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.02em;\n text-transform: uppercase;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-section-description {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-section-description.advanced {\n margin: 0 0 10px;\n }\n .header-action-callout {\n border-radius: 10px;\n padding: 10px 12px;\n background: color-mix(in srgb, var(--md-sys-color-primary) 8%, white);\n border: 1px solid color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent);\n }\n .header-action-callout-title {\n font-size: 12px;\n font-weight: 700;\n margin: 0 0 4px;\n color: var(--md-sys-color-on-surface);\n }\n .header-action-callout-text {\n margin: 0;\n font-size: 12px;\n line-height: 1.5;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-preview {\n border-radius: 10px;\n padding: 10px 12px;\n background: var(--md-sys-color-surface-container-lowest);\n border: 1px solid var(--md-sys-color-outline-variant);\n margin-bottom: 12px;\n }\n .header-action-preview-title {\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 8px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-preview-body {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .header-action-preview-button {\n border: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 70%, transparent);\n background: var(--md-sys-color-surface-container);\n }\n .header-action-preview-meta {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .header-action-preview-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n }\n .header-action-preview-caption {\n font-size: 12px;\n line-height: 1.5;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-style-presets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n }\n .header-action-style-presets-title {\n font-size: 12px;\n font-weight: 700;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-style-presets-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .header-action-advanced {\n border-top: 1px dashed var(--md-sys-color-outline-variant);\n padding-top: 12px;\n }\n .header-action-advanced summary {\n cursor: pointer;\n font-size: 13px;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n list-style: none;\n }\n .header-action-advanced summary::-webkit-details-marker {\n display: none;\n }\n .header-action-advanced summary::before {\n content: '▸';\n display: inline-block;\n margin-right: 8px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .header-action-advanced[open] summary::before {\n content: '▾';\n }\n .header-action-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n }\n .header-action-title {\n font-size: 13px;\n font-weight: 700;\n color: var(--md-sys-color-on-surface);\n }\n .header-action-toolbar-buttons {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n .stack { display: flex; flex-direction: column; gap: 12px; }\n .row-1 { display: grid; gap: 10px; }\n .row-2, .row-3 { display: grid; gap: 10px; align-items: start; }\n .row-2 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }\n .row-3 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }\n mat-form-field {\n width: 100%;\n margin-bottom: 12px;\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n .help-icon-button mat-icon {\n font-size: 18px;\n line-height: 18px;\n width: 18px;\n height: 18px;\n }\n .avatar-guidance {\n border-radius: 12px;\n padding: 12px 14px;\n background: color-mix(in srgb, var(--md-sys-color-primary) 6%, white);\n border: 1px solid color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent);\n }\n .avatar-guidance p {\n margin: 0 0 6px;\n font-size: 12px;\n line-height: 1.5;\n color: var(--md-sys-color-on-surface-variant);\n }\n .avatar-guidance p:last-child {\n margin-bottom: 0;\n }\n .tips p { margin: 0 0 6px; font-size: 13px; color: var(--md-sys-color-on-surface-variant); }\n `,\n ],\n})\nexport class SectionEditorComponent\n implements OnInit, AfterViewInit, OnDestroy, SettingsValueProvider\n{\n @Input() focusTarget?: 'title' | 'description';\n @Input() fieldMetadata: FieldMetadata[] = [];\n section: EditableFormSection;\n form!: FormGroup;\n breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\n fieldOptions: Array<{ value: string; label: string }> = [];\n\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private readonly globalActionCatalogSource =\n inject(GLOBAL_ACTION_CATALOG, { optional: true }) ?? [];\n private readonly i18n = inject(PraxisI18nService);\n readonly legacyActionSpecs = GLOBAL_ACTION_SPEC_CATALOG;\n readonly globalActionCatalog = buildGlobalActionCatalog({\n legacySpecs: this.legacyActionSpecs,\n injectedCatalog: getGlobalActionCatalog(this.globalActionCatalogSource),\n fallbackCatalog: PRAXIS_GLOBAL_ACTION_CATALOG,\n mapCatalogEntry: (entry) => this.mapCatalogEntryToActionSpec(entry),\n });\n readonly customActionValue = '__custom__';\n\n private destroy$ = new Subject<void>();\n @ViewChild('titleInput') titleInput?: ElementRef<HTMLInputElement>;\n @ViewChild('descriptionInput') descriptionInput?: ElementRef<HTMLTextAreaElement>;\n\n constructor(\n private fb: FormBuilder,\n @Inject(SETTINGS_PANEL_DATA) private data: { section: EditableFormSection; fieldMetadata?: FieldMetadata[] },\n private iconPicker: IconPickerService,\n ) {\n this.section = this.data.section;\n this.fieldMetadata = this.data.fieldMetadata || this.fieldMetadata;\n }\n\n ngOnInit(): void {\n this.fieldOptions = (this.fieldMetadata || []).map((field) => ({\n value: field.name,\n label: field.label ? `${field.label} (${field.name})` : field.name,\n }));\n const sectionHeader = this.section.sectionHeader || {};\n this.form = this.fb.group({\n title: [this.section.title, Validators.required],\n icon: [this.section.icon ?? ''],\n sectionHeader: this.fb.group({\n mode: [sectionHeader.mode ?? 'icon'],\n sourceField: [sectionHeader.sourceField ?? ''],\n initialsSourceField: [sectionHeader.initialsSourceField ?? ''],\n altField: [sectionHeader.altField ?? ''],\n fallbackIcon: [sectionHeader.fallbackIcon ?? ''],\n emptyState: [sectionHeader.emptyState ?? ''],\n size: [sectionHeader.size ?? ''],\n initialsMaxLength: [sectionHeader.initialsMaxLength ?? 2],\n }),\n description: [this.section.description],\n appearance: [this.section.appearance ?? 'card'],\n stepLabel: [this.section.stepLabel ?? ''],\n gapBottom: [this.section.gapBottom ?? 0],\n titleGapBottom: [this.section.titleGapBottom ?? 20],\n descriptionGapBottom: [this.section.descriptionGapBottom ?? 8],\n titleStyle: [this.section.titleStyle ?? 'titleMedium'],\n descriptionStyle: [this.section.descriptionStyle ?? 'bodyMedium'],\n titleColor: [this.section.titleColor ?? ''],\n descriptionColor: [this.section.descriptionColor ?? ''],\n headerAlign: [this.section.headerAlign ?? 'start'],\n collapsible: [this.section.collapsible ?? false],\n collapsed: [this.section.collapsed ?? false],\n order: [this.section.order ?? 0],\n hidden: this.fb.group({\n xs: [this.section.hidden?.xs ?? false],\n sm: [this.section.hidden?.sm],\n md: [this.section.hidden?.md],\n lg: [this.section.hidden?.lg],\n xl: [this.section.hidden?.xl],\n }),\n className: [this.section.className ?? ''],\n testId: [this.section.testId ?? ''],\n headerTooltip: [this.section.headerTooltip ?? ''],\n headerActions: this.fb.array(\n (this.normalizeHeaderActions(this.section.headerActions) ?? []).map((action) =>\n this.createHeaderActionGroup(action),\n ),\n ),\n });\n\n this.syncCollapsedControlState(!!this.form.get('collapsible')?.value);\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.applyNormalizedFormValue();\n this.isDirty$.next(true);\n this.isValid$.next(this.form.valid);\n });\n\n this.form.get('collapsible')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((canCollapse: boolean) => {\n this.syncCollapsedControlState(!!canCollapse);\n if (!canCollapse) {\n this.form.get('collapsed')?.setValue(false, { emitEvent: false });\n }\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.focusTarget === 'title') {\n this.titleInput?.nativeElement?.focus?.();\n } else if (this.focusTarget === 'description') {\n this.descriptionInput?.nativeElement?.focus?.();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getSettingsValue(): any {\n return this.normalizeSectionFormValue(this.form.getRawValue());\n }\n\n get headerActionsArray(): FormArray {\n return this.form.get('headerActions') as FormArray;\n }\n\n getHeaderActionStylePlaceholder(): string {\n return this.tx(\n 'headerActions.placeholders.style',\n '{\"marginLeft\":\"4px\"}',\n );\n }\n\n getActionCatalogLabel(spec: { label?: string }): string {\n const candidate = spec as { id?: string; label?: string };\n if (candidate.id === 'surface.open') {\n return this.i18n.t(\n 'action.surfaceOpen.label',\n undefined,\n candidate.label || '',\n SURFACE_OPEN_I18N_NAMESPACE,\n );\n }\n return candidate.label || '';\n }\n\n getHeaderActionSpecById(id: string): ActionCatalogOption | undefined {\n return this.globalActionCatalog.find((item) => item.id === id);\n }\n\n getHeaderActionSelectValue(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? parsed.id : this.customActionValue;\n }\n\n getHeaderActionParam(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? parsed.param : '';\n }\n\n getHeaderActionCustomValue(value?: string): string {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n return parsed.isGlobal ? '' : parsed.raw;\n }\n\n getHeaderGlobalActionSchema(value?: string) {\n const parsed = parseActionValue(value, this.globalActionCatalog, this.customActionValue);\n if (!parsed.isGlobal) return undefined;\n return getGlobalActionUiSchema(parsed.id);\n }\n\n getHeaderSurfaceOpenActionPayload(value?: string): SurfaceOpenPayload {\n const info = getActionParamInfo(value, this.globalActionCatalog, this.customActionValue);\n const payload =\n info.isJson && info.json && typeof info.json === 'object' && !Array.isArray(info.json)\n ? (info.json as SurfaceOpenPayload)\n : undefined;\n return normalizeSurfaceOpenPayload(payload);\n }\n\n isHeaderActionParamMissing(value?: string): boolean {\n return isRequiredParamMissing(value, this.globalActionCatalog, this.customActionValue);\n }\n\n onHeaderActionSelectChange(index: number, value: string): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n const currentValue = String(group.get('action')?.value || '');\n if (value === this.customActionValue) {\n const parsed = parseActionValue(currentValue, this.globalActionCatalog, this.customActionValue);\n if (parsed.isGlobal) {\n group.get('action')?.setValue('');\n }\n return;\n }\n const parsed = parseActionValue(currentValue, this.globalActionCatalog, this.customActionValue);\n const param = parsed.isGlobal && parsed.id === value ? parsed.param : '';\n group.get('action')?.setValue(param ? `${value}:${param}` : value);\n }\n\n onHeaderActionParamChange(index: number, value: string): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n const parsed = parseActionValue(\n String(group.get('action')?.value || ''),\n this.globalActionCatalog,\n this.customActionValue,\n );\n const id = parsed.isGlobal ? parsed.id : '';\n group.get('action')?.setValue(id ? (value ? `${id}:${value}` : id) : value);\n }\n\n onHeaderActionCustomChange(index: number, value: string): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n group.get('action')?.setValue(value);\n }\n\n async pickHeaderActionIcon(index: number): Promise<void> {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n const current = group.get('icon')?.value;\n const res = await this.iconPicker.openDialog({ value: current });\n if (res !== undefined) {\n group.get('icon')?.setValue(res);\n }\n }\n\n clearHeaderActionIcon(index: number): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n group.get('icon')?.setValue('');\n }\n\n applyHeaderActionStylePreset(\n index: number,\n preset: 'default' | 'soft-pill' | 'primary-pill' | 'critical-pill',\n ): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n switch (preset) {\n case 'default':\n group.patchValue({\n color: '',\n className: '',\n styleJson: '',\n });\n return;\n case 'soft-pill':\n group.patchValue({\n color: 'basic',\n styleJson: JSON.stringify({\n padding: '4px',\n borderRadius: '999px',\n background: 'var(--md-sys-color-surface-container-high)',\n }, null, 2),\n });\n return;\n case 'primary-pill':\n group.patchValue({\n color: 'primary',\n styleJson: JSON.stringify({\n padding: '4px',\n borderRadius: '999px',\n background: 'var(--md-sys-color-primary-container)',\n color: 'var(--md-sys-color-on-primary-container)',\n }, null, 2),\n });\n return;\n case 'critical-pill':\n group.patchValue({\n color: 'warn',\n styleJson: JSON.stringify({\n padding: '4px',\n borderRadius: '999px',\n background: 'var(--md-sys-color-error-container)',\n color: 'var(--md-sys-color-on-error-container)',\n }, null, 2),\n });\n return;\n }\n }\n\n getHeaderActionPreviewStyles(index: number): Record<string, any> | null {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return null;\n const style = this.parseHeaderActionStyle(group.get('styleJson')?.value);\n const color = String(group.get('color')?.value || '').trim();\n const toneStyles =\n color === 'primary'\n ? {\n color: 'var(--md-sys-color-primary)',\n }\n : color === 'accent'\n ? {\n color: 'var(--md-sys-color-secondary)',\n }\n : color === 'warn'\n ? {\n color: 'var(--md-sys-color-error)',\n }\n : {};\n const merged = {\n ...toneStyles,\n ...(style || {}),\n };\n return Object.keys(merged).length ? merged : null;\n }\n\n onHeaderSurfaceOpenActionPayloadChange(\n index: number,\n payload: SurfaceOpenPayload,\n ): void {\n const group = this.headerActionsArray.at(index) as FormGroup | null;\n if (!group) return;\n group.get('action')?.setValue(\n `surface.open:${JSON.stringify(normalizeSurfaceOpenPayload(payload))}`,\n );\n }\n\n async pickIcon(): Promise<void> {\n const current = this.form.value.icon;\n // Use dialog to avoid replacing the settings panel content.\n const res = await this.iconPicker.openDialog({\n value: current,\n });\n if (res !== undefined) {\n this.form.get('icon')?.setValue(res);\n }\n }\n\n clearIcon(): void {\n this.form.get('icon')?.setValue('');\n }\n\n async pickFallbackIcon(): Promise<void> {\n const current = this.form.get('sectionHeader.fallbackIcon')?.value;\n const res = await this.iconPicker.openDialog({\n value: current,\n });\n if (res !== undefined) {\n this.form.get('sectionHeader.fallbackIcon')?.setValue(res);\n }\n }\n\n clearFallbackIcon(): void {\n this.form.get('sectionHeader.fallbackIcon')?.setValue('');\n }\n\n addHeaderAction(): void {\n this.headerActionsArray.push(\n this.createHeaderActionGroup({\n id: '',\n label: '',\n icon: '',\n visible: true,\n disabled: false,\n }),\n );\n this.applyNormalizedFormValue();\n this.isDirty$.next(true);\n }\n\n removeHeaderAction(index: number): void {\n if (index < 0 || index >= this.headerActionsArray.length) return;\n this.headerActionsArray.removeAt(index);\n this.applyNormalizedFormValue();\n this.isDirty$.next(true);\n }\n\n moveHeaderActionUp(index: number): void {\n this.moveHeaderAction(index, index - 1);\n }\n\n moveHeaderActionDown(index: number): void {\n this.moveHeaderAction(index, index + 1);\n }\n\n private syncCollapsedControlState(canCollapse: boolean): void {\n const collapsedControl = this.form.get('collapsed');\n if (!collapsedControl) return;\n if (canCollapse) {\n collapsedControl.enable({ emitEvent: false });\n return;\n }\n collapsedControl.setValue(false, { emitEvent: false });\n collapsedControl.disable({ emitEvent: false });\n }\n\n applyPreset(key: 'default' | 'simple' | 'collapsible' | 'denseGrid'): void {\n const patch = (vals: Partial<EditableFormSection>) => {\n this.form.patchValue(vals);\n Object.assign(this.section, { ...this.section, ...vals });\n this.isDirty$.next(true);\n };\n switch (key) {\n case 'default':\n patch({\n gapBottom: 16,\n titleGapBottom: 20,\n descriptionGapBottom: 8,\n collapsible: false,\n collapsed: false,\n titleStyle: 'titleMedium',\n descriptionStyle: 'bodyMedium',\n titleColor: '',\n descriptionColor: '',\n headerAlign: 'start',\n });\n break;\n case 'simple':\n patch({\n description: '',\n gapBottom: 12,\n titleGapBottom: 12,\n descriptionGapBottom: 6,\n collapsible: false,\n collapsed: false,\n titleStyle: 'titleSmall',\n descriptionStyle: 'bodySmall',\n titleColor: '',\n descriptionColor: '',\n headerAlign: 'start',\n });\n break;\n case 'collapsible':\n patch({\n collapsible: true,\n collapsed: true,\n gapBottom: 16,\n titleGapBottom: 12,\n descriptionGapBottom: 6,\n titleStyle: 'titleMedium',\n descriptionStyle: 'bodyMedium',\n headerAlign: 'start',\n });\n break;\n case 'denseGrid':\n patch({\n gapBottom: 10,\n titleGapBottom: 10,\n descriptionGapBottom: 6,\n titleStyle: 'titleSmall',\n descriptionStyle: 'bodySmall',\n headerAlign: 'start',\n });\n break;\n }\n }\n\n setCustomColors(value: string): void {\n const v = (value || '').trim();\n if (!v) return;\n this.form.patchValue({ titleColor: v, descriptionColor: v });\n Object.assign(this.section, { titleColor: v, descriptionColor: v });\n this.isDirty$.next(true);\n }\n\n onTitleStyleChange(style: string): void {\n this.section.titleStyle = style as any;\n this.form.get('titleStyle')?.setValue(style);\n this.isDirty$.next(true);\n }\n\n onDescriptionStyleChange(style: string): void {\n this.section.descriptionStyle = style as any;\n this.form.get('descriptionStyle')?.setValue(style);\n this.isDirty$.next(true);\n }\n\n trackFieldOption(index: number, field: { value: string }): string {\n return field.value || String(index);\n }\n\n tx(\n key: string,\n fallback: string,\n params?: Record<string, string | number>,\n ): string {\n return this.i18n.t(\n key,\n params,\n fallback,\n SECTION_EDITOR_I18N_NAMESPACE,\n );\n }\n\n private applyNormalizedFormValue(): void {\n const normalized = this.normalizeSectionFormValue(this.form.getRawValue());\n const managedKeys: Array<keyof EditableFormSection | 'sectionHeader'> = [\n 'title',\n 'icon',\n 'sectionHeader',\n 'description',\n 'appearance',\n 'stepLabel',\n 'gapBottom',\n 'titleGapBottom',\n 'descriptionGapBottom',\n 'titleStyle',\n 'descriptionStyle',\n 'titleColor',\n 'descriptionColor',\n 'headerAlign',\n 'collapsible',\n 'collapsed',\n 'order',\n 'hidden',\n 'className',\n 'testId',\n 'headerTooltip',\n 'headerActions',\n ];\n for (const key of managedKeys) {\n const value = (normalized as any)[key];\n if (value === undefined) {\n delete (this.section as any)[key];\n } else {\n (this.section as any)[key] = value;\n }\n }\n }\n\n private normalizeSectionFormValue(raw: any): Partial<EditableFormSection> {\n const normalized: Partial<EditableFormSection> = {\n title: this.normalizeOptionalString(raw.title) || this.section.title || '',\n icon: this.normalizeOptionalString(raw.icon),\n sectionHeader: this.normalizeSectionHeader(raw.sectionHeader),\n description: this.normalizeOptionalString(raw.description),\n appearance: this.normalizeOptionalString(raw.appearance) as any,\n stepLabel: this.normalizeOptionalString(raw.stepLabel),\n gapBottom: this.normalizeOptionalNumber(raw.gapBottom),\n titleGapBottom: this.normalizeOptionalNumber(raw.titleGapBottom),\n descriptionGapBottom: this.normalizeOptionalNumber(raw.descriptionGapBottom),\n titleStyle: this.normalizeOptionalString(raw.titleStyle),\n descriptionStyle: this.normalizeOptionalString(raw.descriptionStyle),\n titleColor: this.normalizeOptionalString(raw.titleColor),\n descriptionColor: this.normalizeOptionalString(raw.descriptionColor),\n headerAlign: this.normalizeOptionalString(raw.headerAlign) as any,\n collapsible: !!raw.collapsible,\n collapsed: !!raw.collapsed,\n order: this.normalizeOptionalNumber(raw.order),\n hidden: raw.hidden || {},\n className: this.normalizeOptionalString(raw.className),\n testId: this.normalizeOptionalString(raw.testId),\n headerTooltip: this.normalizeOptionalString(raw.headerTooltip),\n headerActions: this.normalizeHeaderActions(raw.headerActions),\n };\n return normalized;\n }\n\n private normalizeSectionHeader(raw: any): FormSectionHeaderConfig | undefined {\n return normalizeSectionHeaderConfig(raw);\n }\n\n private createHeaderActionGroup(\n action?: Partial<FormSectionHeaderAction>,\n ): FormGroup {\n return this.fb.group({\n id: [action?.id ?? ''],\n label: [action?.label ?? ''],\n icon: [action?.icon ?? ''],\n action: [action?.action ?? ''],\n tooltip: [action?.tooltip ?? ''],\n color: [action?.color ?? ''],\n visible: [action?.visible ?? true],\n disabled: [action?.disabled ?? false],\n loading: [action?.loading ?? false],\n className: [action?.className ?? ''],\n styleJson: [\n this.stringifyHeaderActionStyle(action?.style),\n this.headerActionStyleValidator,\n ],\n });\n }\n\n private moveHeaderAction(fromIndex: number, toIndex: number): void {\n if (\n fromIndex < 0 ||\n fromIndex >= this.headerActionsArray.length ||\n toIndex < 0 ||\n toIndex >= this.headerActionsArray.length ||\n fromIndex === toIndex\n ) {\n return;\n }\n const control = this.headerActionsArray.at(fromIndex);\n this.headerActionsArray.removeAt(fromIndex);\n this.headerActionsArray.insert(toIndex, control);\n this.applyNormalizedFormValue();\n this.isDirty$.next(true);\n }\n\n private normalizeHeaderActions(\n raw: any,\n ): FormSectionHeaderAction[] | undefined {\n if (!Array.isArray(raw)) return undefined;\n const normalized: FormSectionHeaderAction[] = [];\n raw.forEach((item) => {\n const id = this.normalizeOptionalString(item?.id);\n const icon = this.normalizeOptionalString(item?.icon);\n const label = this.normalizeOptionalString(item?.label) || id;\n if (!id || !icon || !label) return;\n const color = this.normalizeOptionalString(item?.color);\n const nextAction: FormSectionHeaderAction = {\n id,\n label,\n icon,\n };\n const action = this.normalizeOptionalString(item?.action);\n const tooltip = this.normalizeOptionalString(item?.tooltip);\n const normalizedColor =\n color === 'primary' ||\n color === 'accent' ||\n color === 'warn' ||\n color === 'basic'\n ? color\n : undefined;\n const className = this.normalizeOptionalString(item?.className);\n const style = this.parseHeaderActionStyle(item?.styleJson ?? item?.style);\n\n if (action !== undefined) nextAction.action = action;\n if (tooltip !== undefined) nextAction.tooltip = tooltip;\n if (normalizedColor !== undefined) nextAction.color = normalizedColor;\n if (item?.visible === false) nextAction.visible = false;\n if (item?.disabled === true) nextAction.disabled = true;\n if (item?.loading === true) nextAction.loading = true;\n if (className !== undefined) nextAction.className = className;\n if (style !== undefined) nextAction.style = style;\n\n normalized.push(nextAction);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private mapCatalogEntryToActionSpec(\n entry: GlobalActionCatalogEntry,\n ): ActionCatalogOption {\n const hasPayloadSchema = !!entry.payloadSchema;\n return {\n id: entry.id,\n label: this.getActionCatalogLabel(entry),\n description: this.getActionCatalogDescription(entry),\n param: hasPayloadSchema\n ? {\n label: this.tx('headerActions.fields.actionParam', 'Parâmetro'),\n placeholder: entry.payloadSchema?.example\n ? JSON.stringify(entry.payloadSchema.example)\n : '{ }',\n hint: this.tx(\n 'headerActions.hints.actionParam',\n 'Use JSON quando a ação global exigir payload estruturado.',\n ),\n required: !!entry.payloadSchema?.required?.length,\n }\n : undefined,\n };\n }\n\n private getActionCatalogDescription(spec: { id?: string; description?: string }): string {\n if (spec?.id === 'surface.open') {\n return this.i18n.t(\n 'action.surfaceOpen.description',\n undefined,\n spec.description || '',\n SURFACE_OPEN_I18N_NAMESPACE,\n );\n }\n return spec?.description || '';\n }\n\n private headerActionStyleValidator = (\n control: import('@angular/forms').AbstractControl,\n ) => {\n const rawValue = control.value;\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return null;\n }\n try {\n const parsed =\n typeof rawValue === 'string' ? JSON.parse(rawValue) : rawValue;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { invalidObjectJson: true };\n }\n return null;\n } catch {\n return { invalidJson: true };\n }\n };\n\n private stringifyHeaderActionStyle(\n value: Record<string, any> | undefined,\n ): string {\n if (!value || !Object.keys(value).length) return '';\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return '';\n }\n }\n\n private parseHeaderActionStyle(\n value: unknown,\n ): Record<string, any> | undefined {\n if (value === null || value === undefined || value === '') return undefined;\n if (typeof value === 'object' && !Array.isArray(value)) {\n return Object.keys(value as Record<string, any>).length\n ? (value as Record<string, any>)\n : undefined;\n }\n if (typeof value !== 'string') return undefined;\n try {\n const parsed = JSON.parse(value);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return undefined;\n }\n return Object.keys(parsed).length ? parsed : undefined;\n } catch {\n return undefined;\n }\n }\n\n private normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.trim();\n return normalized ? normalized : undefined;\n }\n\n private normalizeOptionalNumber(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') return undefined;\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormRow, Breakpoint } from '@praxisui/core';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n} from '@praxisui/settings-panel';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\ninterface EditableFormRow extends FormRow {\n order?: number;\n gap?: number;\n rowGap?: number;\n wrap?: boolean;\n hidden?: {\n xs?: boolean;\n sm?: boolean;\n md?: boolean;\n lg?: boolean;\n xl?: boolean;\n };\n className?: string;\n testId?: string;\n}\n\n@Component({\n selector: 'praxis-row-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTabsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSlideToggleModule,\n MatButtonModule,\n MatButtonToggleModule,\n MatTooltipModule,\n ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <div class=\"header\">\n <div class=\"state-pill\" matTooltip=\"Ordem da linha na seção\">\n Ordem: {{ displayValue(form.value.order, 'auto') }}\n </div>\n <div class=\"state-pill\" matTooltip=\"Espaço entre colunas desta linha\">\n Colunas: {{ displayPxValue(form.value.gap) }}\n </div>\n <div class=\"state-pill\" matTooltip=\"Espaço entre campos (rowGap)\">\n Campos: {{ displayPxValue(form.value.rowGap) }}\n </div>\n </div>\n\n <mat-tab-group class=\"row-editor-tabs\">\n <mat-tab label=\"Layout\">\n <div class=\"tips\">\n <p>\n A linha usa grade de 12 colunas. Distribua os spans das colunas (ex.: 6/6, 4/8, 3/9). Se passar de 12, as colunas quebram para baixo.\n </p>\n </div>\n\n <form [formGroup]=\"form\">\n <div class=\"preset-row\">\n <span class=\"preset-title\">Presets rápidos</span>\n <div class=\"preset-group\">\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('full')\" matTooltip=\"Uma coluna ocupando 100%\">100%</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('half')\" matTooltip=\"Duas colunas iguais 50/50\">50 / 50</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('thirds')\" matTooltip=\"Três colunas iguais\">33 / 33 / 33</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('thirdTwoThird')\" matTooltip=\"1/3 e 2/3\">1/3 · 2/3</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('twoThirdThird')\" matTooltip=\"2/3 e 1/3\">2/3 · 1/3</button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('autoBalance')\" matTooltip=\"Balanceia spans das colunas existentes\">Auto-balance</button>\n </div>\n </div>\n\n <div class=\"controls-row\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Ordem</mat-label>\n <input matInput type=\"number\" formControlName=\"order\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Gap entre colunas</mat-label>\n <input matInput type=\"number\" formControlName=\"gap\" placeholder=\"Padrão\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Espaço entre campos</mat-label>\n <input matInput type=\"number\" formControlName=\"rowGap\" placeholder=\"Padrão\" />\n </mat-form-field>\n </div>\n\n <mat-slide-toggle formControlName=\"wrap\" matTooltip=\"Permite quebrar colunas quando a soma passa de 12\">Wrap</mat-slide-toggle>\n </form>\n </mat-tab>\n\n <mat-tab label=\"Visibilidade\">\n <div class=\"tips\">\n <p>Controle se a linha aparece em cada breakpoint.</p>\n </div>\n <form [formGroup]=\"form\">\n <div formGroupName=\"hidden\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-slide-toggle [formControlName]=\"bp\" [matTooltip]=\"(form.get(['hidden', bp])?.value ? 'Oculta' : 'Visível') + ' em ' + bp\">\n {{ bp }}: {{ form.get(['hidden', bp])?.value ? 'Oculta' : 'Visível' }}\n </mat-slide-toggle>\n </div>\n </div>\n\n <div class=\"presets\">\n <span class=\"preset-subtitle\">Ocultar linha</span>\n <mat-button-toggle-group\n [value]=\"hiddenMode\"\n (valueChange)=\"setHiddenMode($event)\"\n class=\"hide-toggle\"\n >\n <mat-button-toggle value=\"none\" matTooltip=\"Visível em todos breakpoints\">Visível</mat-button-toggle>\n <mat-button-toggle value=\"mobile\" matTooltip=\"Ocultar em xs/sm\">Ocultar mobile</mat-button-toggle>\n <mat-button-toggle value=\"desktop\" matTooltip=\"Ocultar lg/xl\">Ocultar desktop</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </form>\n </mat-tab>\n\n <mat-tab label=\"Avançado\">\n <form [formGroup]=\"form\" class=\"advanced-form\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Class Name</mat-label>\n <input matInput formControlName=\"className\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Test ID</mat-label>\n <input matInput formControlName=\"testId\" />\n </mat-form-field>\n </form>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n }\n .editor-container {\n padding: 16px;\n width: 100%;\n }\n .header {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 10px;\n }\n .state-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: 10px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface);\n font-size: 12px;\n }\n .bp-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin: 12px 0;\n }\n .preset-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n margin-bottom: 12px;\n }\n .preset-group { display: flex; flex-wrap: wrap; gap: 6px; }\n .preset-title, .preset-subtitle {\n font-weight: 600;\n color: var(--md-sys-color-on-surface-variant);\n }\n mat-form-field { width: 100%; }\n .presets,\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 16px;\n }\n .controls-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px,1fr)); gap: 10px; }\n .hide-toggle { margin-left: 8px; }\n .hint {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .advanced-form { display: grid; gap: 12px; }\n .row-editor-tabs {\n margin-top: 6px;\n width: 100%;\n }\n :host ::ng-deep .row-editor-tabs .mat-mdc-tab-header {\n background: var(--md-sys-color-surface);\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n }\n :host ::ng-deep .row-editor-tabs .mdc-tab__text-label {\n color: var(--md-sys-color-on-surface);\n }\n :host ::ng-deep .row-editor-tabs .mat-mdc-tab-body-wrapper {\n min-height: 240px;\n }\n `,\n ],\n})\nexport class RowEditorComponent\n implements OnInit, OnDestroy, SettingsValueProvider\n{\n form!: FormGroup;\n breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\n row: EditableFormRow;\n hiddenMode: 'none' | 'mobile' | 'desktop' = 'none';\n\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n private destroy$ = new Subject<void>();\n private initialValueSig = '';\n\n constructor(\n private fb: FormBuilder,\n @Inject(SETTINGS_PANEL_DATA) private data: { row: EditableFormRow },\n ) {\n this.row = data.row;\n }\n\n ngOnInit(): void {\n const r = this.data.row;\n this.form = this.fb.group({\n order: [r.order ?? null],\n gap: [r.gap ?? null],\n rowGap: [r.rowGap ?? null],\n wrap: [r.wrap ?? true],\n hidden: this.fb.group({\n xs: [r.hidden?.xs ?? false],\n sm: [r.hidden?.sm ?? false],\n md: [r.hidden?.md ?? false],\n lg: [r.hidden?.lg ?? false],\n xl: [r.hidden?.xl ?? false],\n }),\n className: [r.className ?? ''],\n testId: [r.testId ?? ''],\n });\n\n this.hiddenMode = this.resolveHiddenMode(r);\n\n try {\n this.initialValueSig = JSON.stringify(this.form.getRawValue());\n } catch { }\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n Object.assign(this.data.row, this.form.value);\n let dirty = true;\n try {\n const nowSig = JSON.stringify(this.form.getRawValue());\n dirty = nowSig !== this.initialValueSig;\n } catch { }\n this.isDirty$.next(dirty);\n this.isValid$.next(this.form.valid);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getSettingsValue(): any {\n return this.form.value;\n }\n\n displayValue(value: number | null | undefined, fallback: string): string | number {\n if (value === null || value === undefined) return fallback;\n return value;\n }\n\n displayPxValue(value: number | null | undefined): string {\n if (value === null || value === undefined) return 'padrão';\n return `${value} px`;\n }\n\n private setColumns(spans: number[]): void {\n if (!Array.isArray(this.row.columns)) return;\n const cols = this.row.columns;\n const target = spans.length;\n // Ajustar quantidade de colunas\n if (cols.length < target) {\n for (let i = cols.length; i < target; i++) {\n cols.push({ id: `col-${Date.now()}-${i}`, fields: [] });\n }\n } else if (cols.length > target) {\n const extras = cols.slice(target).flatMap((c) => c.fields || []);\n this.row.columns = cols.slice(0, target);\n if (extras.length) {\n this.row.columns[target - 1].fields.push(...extras);\n }\n }\n // Aplicar spans em md e herdar para xs/sm; manter lg/xl iguais ao md\n for (let i = 0; i < target; i++) {\n const md = spans[i];\n const col = this.row.columns[i];\n col.span = { xs: 12, sm: 12, md, lg: md, xl: md };\n }\n }\n\n applyPreset(preset: 'full' | 'half' | 'thirds' | 'thirdTwoThird' | 'twoThirdThird' | 'autoBalance'): void {\n switch (preset) {\n case 'full':\n this.setColumns([12]);\n break;\n case 'half':\n this.setColumns([6, 6]);\n break;\n case 'thirds':\n this.setColumns([4, 4, 4]);\n break;\n case 'thirdTwoThird':\n this.setColumns([4, 8]);\n break;\n case 'twoThirdThird':\n this.setColumns([8, 4]);\n break;\n case 'autoBalance': {\n const colCount = Math.max(1, this.row.columns?.length || 1);\n const base = Math.floor(12 / colCount);\n const remainder = 12 - base * colCount;\n const spans = Array(colCount).fill(base) as number[];\n for (let i = 0; i < remainder; i++) spans[i] += 1;\n this.setColumns(spans);\n break;\n }\n }\n this.isDirty$.next(true);\n }\n\n private resolveHiddenMode(row: EditableFormRow): 'none' | 'mobile' | 'desktop' {\n const hidden = row.hidden || {};\n const mobile = hidden.xs || hidden.sm;\n const desktop = hidden.lg || hidden.xl;\n if (mobile && !desktop) return 'mobile';\n if (desktop && !mobile) return 'desktop';\n return 'none';\n }\n\n setHiddenMode(mode: 'none' | 'mobile' | 'desktop'): void {\n this.hiddenMode = mode;\n const hidden = { xs: false, sm: false, md: false, lg: false, xl: false };\n if (mode === 'mobile') {\n hidden.xs = true; hidden.sm = true;\n } else if (mode === 'desktop') {\n hidden.lg = true; hidden.xl = true;\n }\n const current = this.form.get('hidden')?.value || {};\n const same =\n current.xs === hidden.xs &&\n current.sm === hidden.sm &&\n current.md === hidden.md &&\n current.lg === hidden.lg &&\n current.xl === hidden.xl;\n if (same) return;\n this.form.get('hidden')?.patchValue(hidden);\n Object.assign(this.row, { hidden });\n }\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Breakpoint, FormColumn, resolveSpan, resolveOffset, resolveOrder, resolveHidden } from '@praxisui/core';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n} from '@praxisui/settings-panel';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'praxis-column-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatSlideToggleModule,\n MatTabsModule,\n MatButtonModule,\n MatTooltipModule,\n MatIconModule,\n ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <div class=\"header\">\n <div class=\"state-pill\">\n <strong>BP:</strong> {{ previewBreakpoint }}\n </div>\n <div class=\"state-pill\">\n <strong>Span/Offset:</strong> {{ getSpan(previewBreakpoint) }}/12 · off {{ getOffset(previewBreakpoint) }}\n </div>\n <div class=\"state-pill\" *ngIf=\"isHidden(previewBreakpoint)\">\n <mat-icon>visibility_off</mat-icon>\n Oculta em {{ previewBreakpoint }}\n </div>\n </div>\n <mat-tab-group>\n <mat-tab label=\"Layout\">\n <form [formGroup]=\"form\" class=\"layout-form\">\n <div class=\"toolbar\">\n <span class=\"toolbar-title\">Breakpoint</span>\n <div\n class=\"bp-toggle\"\n role=\"group\"\n aria-label=\"Selecionar breakpoint\"\n matTooltip=\"Escolha o breakpoint que quer editar; spans/offsets são por faixa\"\n >\n <button\n *ngFor=\"let bp of breakpoints\"\n type=\"button\"\n mat-stroked-button\n class=\"bp-toggle__btn\"\n [class.active]=\"previewBreakpoint === bp\"\n (click)=\"onBreakpointChange(bp)\"\n >\n {{ bp }}\n </button>\n </div>\n <span class=\"span-summary\">Span {{ getSpan(previewBreakpoint) }}/12</span>\n <span class=\"offset-summary\">Off {{ getOffset(previewBreakpoint) }}</span>\n </div>\n\n <div class=\"preset-row\" aria-label=\"Presets de layout\">\n <span class=\"preset-title\">Presets rápidos</span>\n <div class=\"preset-group\">\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('full')\">\n Full (12)\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('half')\">\n 1/2 (6)\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('third')\">\n 1/3 (4)\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('twoThird')\">\n 2/3 (8)\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('centered')\">\n Centralizada (8 + off 2)\n </button>\n </div>\n <div class=\"preset-group\">\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('narrowSidebar')\">\n Sidebar estreita\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('wideContent')\">\n Conteúdo largo\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('stackMobile')\">\n Empilhar no mobile\n </button>\n </div>\n </div>\n\n <div class=\"controls-row\">\n <div class=\"control-block\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Span ({{ previewBreakpoint }})</mat-label>\n <button mat-icon-button matPrefix type=\"button\" (click)=\"adjustSpan(-1)\" matTooltip=\"Reduzir span\"><mat-icon>remove</mat-icon></button>\n <input matInput type=\"number\" [value]=\"getSpan(previewBreakpoint)\" (input)=\"setSpan(($any($event.target)).value)\" min=\"1\" max=\"12\" />\n <button mat-icon-button matSuffix type=\"button\" (click)=\"adjustSpan(1)\" matTooltip=\"Aumentar span\"><mat-icon>add</mat-icon></button>\n </mat-form-field>\n <div class=\"control-help\">\n <span class=\"control-help__label\">Entenda:</span>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n matTooltip=\"Grade de 12 colunas; offset máximo ajusta automaticamente.\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"control-block\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Offset ({{ previewBreakpoint }})</mat-label>\n <button mat-icon-button matPrefix type=\"button\" (click)=\"adjustOffset(-1)\" matTooltip=\"Reduzir offset\"><mat-icon>chevron_left</mat-icon></button>\n <input matInput type=\"number\" [value]=\"getOffset(previewBreakpoint)\" (input)=\"setOffset(($any($event.target)).value)\" min=\"0\" />\n <button mat-icon-button matSuffix type=\"button\" (click)=\"adjustOffset(1)\" matTooltip=\"Aumentar offset\"><mat-icon>chevron_right</mat-icon></button>\n </mat-form-field>\n </div>\n <div class=\"control-block\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Ordem ({{ previewBreakpoint }})</mat-label>\n <input matInput type=\"number\" [value]=\"getOrder(previewBreakpoint)\" (input)=\"setOrder(($any($event.target)).value)\" />\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"copy-row\">\n <button mat-stroked-button type=\"button\" (click)=\"copyToLarger()\" matTooltip=\"Copia span/offset/ordem/hidden do breakpoint atual para os maiores\">\n Copiar para breakpoints maiores\n </button>\n <button mat-button type=\"button\" (click)=\"resetResponsive()\" matTooltip=\"Zera valores responsivos mantendo o breakpoint atual\">\n Reset responsivo\n </button>\n </div>\n\n <div class=\"fields-list\">\n <span class=\"preset-title\">Campos nesta coluna</span>\n <div class=\"field-chip\" *ngFor=\"let field of column.fields\">{{ field }}</div>\n </div>\n </form>\n </mat-tab>\n\n <mat-tab label=\"Comportamento\">\n <div class=\"behavior-pane\">\n <div class=\"visibility-grid\">\n <span class=\"preset-title\">Visibilidade por breakpoint</span>\n <mat-slide-toggle *ngFor=\"let bp of breakpoints\"\n [checked]=\"!isHidden(bp)\"\n (change)=\"toggleHiddenBp(bp)\"\n [matTooltip]=\"isHidden(bp) ? 'Exibir em ' + bp : 'Ocultar em ' + bp\">\n {{ bp }}: {{ isHidden(bp) ? 'Oculta' : 'Visível' }}\n </mat-slide-toggle>\n </div>\n <div class=\"preset-group\">\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('hideMobile')\">\n Ocultar em mobile\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"applyPreset('desktopOnly')\">\n Somente desktop\n </button>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Estilo\">\n <form [formGroup]=\"form\" class=\"style-form\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Padding</mat-label>\n <input\n matInput\n type=\"number\"\n formControlName=\"padding\"\n min=\"0\"\n max=\"32\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Alinhamento</mat-label>\n <mat-select formControlName=\"align\">\n <mat-option value=\"start\">start</mat-option>\n <mat-option value=\"center\">center</mat-option>\n <mat-option value=\"end\">end</mat-option>\n <mat-option value=\"stretch\">stretch</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Class Name</mat-label>\n <input matInput formControlName=\"className\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Test ID</mat-label>\n <input matInput formControlName=\"testId\" />\n </mat-form-field>\n </form>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n }\n .header {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 8px;\n }\n .state-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: 10px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface);\n font-size: 12px;\n }\n .layout-form { display: flex; flex-direction: column; gap: 12px; }\n mat-tab-group { margin-top: 6px; }\n .preset-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n }\n .preset-group { display: flex; flex-wrap: wrap; gap: 6px; }\n .preset-title {\n font-weight: 600;\n color: var(--md-sys-color-on-surface-variant);\n }\n .toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n }\n .toolbar-title { font-weight: 600; color: var(--md-sys-color-on-surface-variant); }\n .bp-toggle {\n display: inline-flex;\n gap: 4px;\n }\n .bp-toggle__btn {\n min-width: 34px;\n height: 30px;\n line-height: 30px;\n padding: 0 8px;\n text-transform: uppercase;\n }\n .bp-toggle__btn.active {\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n .span-summary, .offset-summary {\n background: var(--md-sys-color-surface-variant);\n padding: 4px 8px;\n border-radius: 8px;\n font-size: 12px;\n }\n .hidden-pill {\n background: var(--md-sys-color-error-container);\n color: var(--md-sys-color-on-error-container);\n border: 1px dashed var(--md-sys-color-error);\n padding: 4px 8px;\n border-radius: 8px;\n font-size: 12px;\n }\n .controls-row {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 12px;\n align-items: start;\n }\n .control-block {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .number-stepper {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n .number-stepper input {\n width: 80px;\n }\n .control-help {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .control-help__label { font-weight: 500; }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .hidden-toggle {\n justify-content: center;\n }\n .copy-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n }\n mat-form-field {\n width: 100%;\n }\n .fields-list { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }\n .field-chip {\n padding: 4px 8px;\n border-radius: 10px;\n background: var(--md-sys-color-surface-variant);\n color: var(--md-sys-color-on-surface);\n font-size: 12px;\n }\n .behavior-pane { display: flex; flex-direction: column; gap: 12px; }\n .visibility-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 8px; }\n .style-form { display: grid; gap: 12px; }\n `,\n ],\n})\nexport class ColumnEditorComponent\n implements OnInit, OnDestroy, SettingsValueProvider\n{\n form!: FormGroup;\n breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\n previewBreakpoint: Breakpoint = 'md';\n column: FormColumn;\n\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n private destroy$ = new Subject<void>();\n private _previewTimer: any;\n\n constructor(\n private fb: FormBuilder,\n @Inject(SETTINGS_PANEL_DATA) private data: { column: FormColumn },\n ) {\n this.column = data.column;\n }\n\n ngOnInit(): void {\n const col = this.data.column;\n this.form = this.fb.group({\n span: this.fb.group({\n xs: [col.span?.xs ?? 12],\n sm: [col.span?.sm],\n md: [col.span?.md],\n lg: [col.span?.lg],\n xl: [col.span?.xl],\n }),\n offset: this.fb.group({\n xs: [col.offset?.xs ?? 0],\n sm: [col.offset?.sm],\n md: [col.offset?.md],\n lg: [col.offset?.lg],\n xl: [col.offset?.xl],\n }),\n order: this.fb.group({\n xs: [col.order?.xs ?? 0],\n sm: [col.order?.sm],\n md: [col.order?.md],\n lg: [col.order?.lg],\n xl: [col.order?.xl],\n }),\n hidden: this.fb.group({\n xs: [col.hidden?.xs ?? false],\n sm: [col.hidden?.sm],\n md: [col.hidden?.md],\n lg: [col.hidden?.lg],\n xl: [col.hidden?.xl],\n }),\n align: [col.align ?? 'stretch'],\n padding: [col.padding ?? 0],\n className: [col.className ?? ''],\n testId: [col.testId ?? ''],\n });\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n // Evita NG0100: agendar a mutação para o próximo macrotask,\n // fora do ciclo de detecção atual, mantendo o preview ao vivo.\n if (this._previewTimer) {\n clearTimeout(this._previewTimer);\n }\n this._previewTimer = setTimeout(() => {\n this.applyChanges();\n this.isDirty$.next(true);\n this.isValid$.next(this.form.valid);\n this._previewTimer = null;\n }, 0);\n });\n }\n\n ngOnDestroy(): void {\n if (this._previewTimer) {\n clearTimeout(this._previewTimer);\n this._previewTimer = null;\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private applyChanges(): void {\n Object.assign(this.data.column, this.form.value);\n }\n\n getSettingsValue(): any {\n return this.form.value;\n }\n\n onBreakpointChange(bp: Breakpoint): void {\n this.previewBreakpoint = bp;\n }\n\n private getControl(group: 'span' | 'offset' | 'order' | 'hidden', bp: Breakpoint) {\n return this.form.get([group, bp]);\n }\n\n getSpan(bp: Breakpoint): number {\n return resolveSpan(this.form.value.span)[bp];\n }\n\n setSpan(value: number | string): void {\n const v = Math.min(12, Math.max(1, Number(value) || 1));\n this.getControl('span', this.previewBreakpoint)?.setValue(v);\n // Clamp offset to avoid overflow\n const maxOffset = Math.max(0, 12 - v);\n const off = Math.min(maxOffset, this.getOffset(this.previewBreakpoint));\n this.getControl('offset', this.previewBreakpoint)?.setValue(off);\n }\n\n adjustSpan(delta: number): void {\n this.setSpan(this.getSpan(this.previewBreakpoint) + delta);\n }\n\n getOffset(bp: Breakpoint): number {\n const offset = resolveOffset(this.form.value.offset)[bp];\n const span = this.getSpan(bp);\n return Math.min(offset, Math.max(0, 12 - span));\n }\n\n setOffset(value: number | string): void {\n const span = this.getSpan(this.previewBreakpoint);\n const max = Math.max(0, 12 - span);\n const v = Math.min(max, Math.max(0, Number(value) || 0));\n this.getControl('offset', this.previewBreakpoint)?.setValue(v);\n }\n\n adjustOffset(delta: number): void {\n this.setOffset(this.getOffset(this.previewBreakpoint) + delta);\n }\n\n getOrder(bp: Breakpoint): number {\n return resolveOrder(this.form.value.order)[bp];\n }\n\n setOrder(value: number | string): void {\n const v = Number(value);\n if (Number.isNaN(v)) return;\n this.getControl('order', this.previewBreakpoint)?.setValue(v);\n }\n\n isHidden(bp: Breakpoint): boolean {\n return resolveHidden(this.form.value.hidden)[bp];\n }\n\n toggleHidden(): void {\n const current = this.isHidden(this.previewBreakpoint);\n this.getControl('hidden', this.previewBreakpoint)?.setValue(!current);\n }\n\n copyToLarger(): void {\n const src = this.previewBreakpoint;\n const order = ['xs', 'sm', 'md', 'lg', 'xl'] as Breakpoint[];\n const srcIdx = order.indexOf(src);\n if (srcIdx < 0) return;\n const span = this.getSpan(src);\n const offset = this.getOffset(src);\n const ord = this.getOrder(src);\n const hidden = this.isHidden(src);\n for (let i = srcIdx + 1; i < order.length; i++) {\n const bp = order[i];\n this.getControl('span', bp)?.setValue(span);\n this.getControl('offset', bp)?.setValue(offset);\n this.getControl('order', bp)?.setValue(ord);\n this.getControl('hidden', bp)?.setValue(hidden);\n }\n }\n\n resetResponsive(): void {\n const baseSpan = this.getSpan(this.previewBreakpoint);\n const baseOffset = this.getOffset(this.previewBreakpoint);\n const baseOrder = this.getOrder(this.previewBreakpoint);\n const baseHidden = this.isHidden(this.previewBreakpoint);\n this.breakpoints.forEach((bp) => {\n if (bp === this.previewBreakpoint) return;\n this.getControl('span', bp)?.setValue(baseSpan);\n this.getControl('offset', bp)?.setValue(baseOffset);\n this.getControl('order', bp)?.setValue(baseOrder);\n this.getControl('hidden', bp)?.setValue(baseHidden);\n });\n }\n\n applyPreset(\n key:\n | 'full'\n | 'half'\n | 'third'\n | 'twoThird'\n | 'centered'\n | 'narrowSidebar'\n | 'wideContent'\n | 'stackMobile'\n | 'hideMobile'\n | 'desktopOnly',\n ): void {\n const patchSpan = (values: Partial<Record<Breakpoint, number>>) => {\n this.form.get('span')?.patchValue(values);\n };\n const patchOffset = (values: Partial<Record<Breakpoint, number>>) => {\n this.form.get('offset')?.patchValue(values);\n };\n const patchHidden = (values: Partial<Record<Breakpoint, boolean>>) => {\n this.form.get('hidden')?.patchValue(values);\n };\n switch (key) {\n case 'full':\n patchSpan({ xs: 12, sm: 12, md: 12, lg: 12, xl: 12 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n patchHidden({ xs: false, sm: false, md: false, lg: false, xl: false });\n break;\n case 'half':\n patchSpan({ xs: 12, sm: 12, md: 6, lg: 6, xl: 6 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n patchHidden({ xs: false, sm: false, md: false, lg: false, xl: false });\n break;\n case 'third':\n patchSpan({ xs: 12, sm: 12, md: 4, lg: 4, xl: 4 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n patchHidden({ xs: false, sm: false, md: false, lg: false, xl: false });\n break;\n case 'twoThird':\n patchSpan({ xs: 12, sm: 12, md: 8, lg: 8, xl: 8 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n patchHidden({ xs: false, sm: false, md: false, lg: false, xl: false });\n break;\n case 'centered':\n patchSpan({ xs: 12, sm: 12, md: 8, lg: 8, xl: 8 });\n patchOffset({ xs: 0, sm: 0, md: 2, lg: 2, xl: 2 });\n patchHidden({ xs: false, sm: false, md: false, lg: false, xl: false });\n break;\n case 'narrowSidebar':\n patchSpan({ xs: 12, sm: 12, md: 6, lg: 3, xl: 3 });\n patchOffset({ lg: 1, xl: 1, md: 0, sm: 0, xs: 0 });\n this.form.get('align')?.setValue('start');\n this.form.get('padding')?.setValue(8);\n break;\n case 'wideContent':\n patchSpan({ xs: 12, sm: 12, md: 9, lg: 9, xl: 9 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n break;\n case 'stackMobile':\n patchSpan({ xs: 12, sm: 12 });\n patchHidden({ xs: false, sm: false });\n break;\n case 'hideMobile':\n patchHidden({ xs: true, sm: true, md: false, lg: false, xl: false });\n break;\n case 'desktopOnly':\n patchHidden({ xs: true, sm: true, md: true, lg: false, xl: false });\n patchSpan({ lg: 12, xl: 12, md: 12, sm: 12, xs: 12 });\n patchOffset({ xs: 0, sm: 0, md: 0, lg: 0, xl: 0 });\n break;\n }\n this.isDirty$.next(true);\n }\n\n toggleHiddenBp(bp: Breakpoint): void {\n const current = this.isHidden(bp);\n this.getControl('hidden', bp)?.setValue(!current);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldMetadata } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-field-editor',\n standalone: true,\n imports: [CommonModule],\n template: `<h2>Editor de Campo</h2>`\n})\nexport class FieldEditorComponent {\n @Input() field: FieldMetadata | null = null;\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-actions-editor',\n standalone: true,\n imports: [CommonModule],\n template: `<h2>Editor de Ações</h2>`\n})\nexport class ActionsEditorComponent {\n @Input() actions: any;\n}\n","/**\n * Component-level capabilities for form components and dialog hosts.\n * Paths assume a wrapper shape: { inputs: {...}, outputs: {...} }.\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 inputs: true;\n outputs: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS = {\n mode: ['create', 'edit', 'view'],\n schemaSource: ['resource', 'filter'],\n notifyIfOutdated: ['inline', 'snackbar', 'both', 'none'],\n labelPosition: ['above', 'left'],\n density: ['comfortable', 'cozy', 'compact'],\n align: ['start', 'center', 'end'],\n backStrategy: ['auto', 'close', 'navigate'],\n};\n\nexport const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.1',\n enums: ENUMS,\n targets: [\n 'praxis-dynamic-form',\n 'praxis-filter-form',\n 'praxis-filter-form-dialog-host',\n 'praxis-dynamic-form-dialog-host',\n ],\n notes: [\n 'Este catalogo descreve inputs e outputs do componente.',\n 'O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).',\n 'inputs.config.presentation e uma extensao de runtime aplicada pelo componente.',\n 'Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).',\n 'Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.',\n 'widgets editoriais hospedados pelo form podem ser renderizados em tres slots semanticos: before, beforeActions e after.',\n ],\n capabilities: [\n // =============================================================================\n // INPUTS (component)\n // =============================================================================\n {\n path: 'inputs.resourcePath',\n category: 'inputs',\n valueKind: 'string',\n description: 'Caminho do recurso para carregar/salvar dados via CRUD.',\n intentExamples: ['definir recurso como /api/employees'],\n },\n {\n path: 'inputs.resourceId',\n category: 'inputs',\n valueKind: 'string',\n description: 'ID do registro atual (string ou number).',\n },\n {\n path: 'inputs.mode',\n category: 'inputs',\n valueKind: 'enum',\n allowedValues: ENUMS.mode,\n description: 'Modo do formulario (create/edit/view).',\n intentExamples: ['abrir em modo view', 'editar registro'],\n },\n {\n path: 'inputs.config',\n category: 'inputs',\n valueKind: 'object',\n description: 'Configuracao completa do formulario (FormConfig).',\n critical: true,\n },\n {\n path: 'inputs.schemaSource',\n category: 'inputs',\n valueKind: 'enum',\n allowedValues: ENUMS.schemaSource,\n description: 'Fonte de schema para construcao automatica (resource/filter).',\n },\n {\n path: 'inputs.enableCustomization',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Habilita a edicao de layout/configuracao no editor.',\n },\n {\n path: 'inputs.formId',\n category: 'inputs',\n valueKind: 'string',\n description: 'ID persistente para salvar configuracoes e preferencias.',\n },\n {\n path: 'inputs.editorialContext',\n category: 'inputs',\n valueKind: 'object',\n description: 'Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.',\n safetyNotes: 'Trate como objeto imutavel; trocar a referencia ao atualizar valores.',\n },\n {\n path: 'inputs.layout',\n category: 'inputs',\n valueKind: 'object',\n description: 'Layout legado (FormLayout). Preferir inputs.config + sections.',\n safetyNotes: 'Use apenas para formularios antigos baseados em fieldsets.',\n },\n {\n path: 'inputs.backConfig',\n category: 'inputs',\n valueKind: 'object',\n description: 'Configuracao de navegacao/retorno (BackConfig).',\n },\n {\n path: 'inputs.backConfig.strategy',\n category: 'inputs',\n valueKind: 'enum',\n allowedValues: ENUMS.backStrategy,\n description: 'Estrategia de retorno (auto/close/navigate).',\n },\n {\n path: 'inputs.backConfig.returnTo',\n category: 'inputs',\n valueKind: 'string',\n description: 'Rota para retornar quando strategy=navigate.',\n },\n {\n path: 'inputs.backConfig.confirmOnDirty',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Solicita confirmacao ao sair com mudancas nao salvas.',\n },\n {\n path: 'inputs.hooks',\n category: 'inputs',\n valueKind: 'object',\n description: 'Declaracoes de hooks fornecidas diretamente ao componente.',\n },\n {\n path: 'inputs.hooks.beforeInit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados antes da inicializacao.',\n },\n {\n path: 'inputs.hooks.afterInit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados apos a inicializacao.',\n },\n {\n path: 'inputs.hooks.beforeValidate[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados antes da validacao.',\n },\n {\n path: 'inputs.hooks.afterValidate[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados apos a validacao.',\n },\n {\n path: 'inputs.hooks.beforeSubmit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados antes do submit.',\n },\n {\n path: 'inputs.hooks.afterSubmit[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados apos o submit.',\n },\n {\n path: 'inputs.hooks.onError[]',\n category: 'hooks',\n valueKind: 'array',\n description: 'Hooks executados em erros de submit/validacao.',\n },\n {\n path: 'inputs.removeEmptyContainersOnSave',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Remove containers vazios ao salvar configuracao.',\n },\n {\n path: 'inputs.reactiveValidation',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Ativa validacao reativa (afterValidate em valueChanges).',\n },\n {\n path: 'inputs.reactiveValidationDebounceMs',\n category: 'inputs',\n valueKind: 'number',\n description: 'Debounce em ms para validacao reativa.',\n },\n {\n path: 'inputs.notifyIfOutdated',\n category: 'inputs',\n valueKind: 'enum',\n allowedValues: ENUMS.notifyIfOutdated,\n description: 'Canal de notificacao para schema desatualizado.',\n },\n {\n path: 'inputs.snoozeMs',\n category: 'inputs',\n valueKind: 'number',\n description: 'Duracao do snooze para alertas de schema.',\n },\n {\n path: 'inputs.autoOpenSettingsOnOutdated',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Abre automaticamente o editor ao detectar schema desatualizado.',\n },\n {\n path: 'inputs.readonlyModeGlobal',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Forca modo somente leitura global.',\n },\n {\n path: 'inputs.disabledModeGlobal',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Forca modo desabilitado global.',\n },\n {\n path: 'inputs.presentationModeGlobal',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Ativa modo de apresentacao global (somente view).',\n },\n {\n path: 'inputs.visibleGlobal',\n category: 'inputs',\n valueKind: 'boolean',\n description: 'Forca visibilidade global dos campos.',\n },\n {\n path: 'inputs.customEndpoints',\n category: 'inputs',\n valueKind: 'object',\n description: 'Override de endpoints CRUD (EndpointConfig).',\n },\n {\n path: 'inputs.customEndpoints.getAll',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para listar registros.',\n },\n {\n path: 'inputs.customEndpoints.getById',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para obter registro por ID.',\n },\n {\n path: 'inputs.customEndpoints.create',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para criar registro.',\n },\n {\n path: 'inputs.customEndpoints.update',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para atualizar registro.',\n },\n {\n path: 'inputs.customEndpoints.delete',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para deletar registro.',\n },\n {\n path: 'inputs.customEndpoints.filter',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para filtro.',\n },\n {\n path: 'inputs.customEndpoints.schema',\n category: 'inputs',\n valueKind: 'string',\n description: 'Endpoint customizado para schemas.',\n },\n\n // =============================================================================\n // INPUTS - PRESENTATION EXTENSION (config.presentation)\n // =============================================================================\n {\n path: 'inputs.config.presentation',\n category: 'appearance',\n valueKind: 'object',\n description: 'Preferencias visuais persistidas no config.',\n },\n {\n path: 'inputs.config.presentation.labelFontSize',\n category: 'appearance',\n valueKind: 'number',\n description: 'Tamanho da fonte do label (px).',\n },\n {\n path: 'inputs.config.presentation.valueFontSize',\n category: 'appearance',\n valueKind: 'number',\n description: 'Tamanho da fonte do valor (px).',\n },\n {\n path: 'inputs.config.presentation.labelPosition',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.labelPosition,\n description: 'Posicionamento do label (above/left).',\n },\n {\n path: 'inputs.config.presentation.compact',\n category: 'appearance',\n valueKind: 'boolean',\n description: 'Modo compacto de apresentacao.',\n },\n {\n path: 'inputs.config.presentation.density',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.density,\n description: 'Densidade visual global.',\n },\n {\n path: 'inputs.config.presentation.labelWidth',\n category: 'appearance',\n valueKind: 'number',\n description: 'Largura do label (px).',\n },\n {\n path: 'inputs.config.presentation.labelAlign',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.align,\n description: 'Alinhamento do label.',\n },\n {\n path: 'inputs.config.presentation.valueAlign',\n category: 'appearance',\n valueKind: 'enum',\n allowedValues: ENUMS.align,\n description: 'Alinhamento do valor.',\n },\n\n // =============================================================================\n // OUTPUTS (events)\n // =============================================================================\n {\n path: 'outputs.formSubmit',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido no submit do formulario.',\n },\n {\n path: 'outputs.formCancel',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido ao cancelar.',\n },\n {\n path: 'outputs.formReset',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido ao resetar o formulario.',\n },\n {\n path: 'outputs.configChange',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando a configuracao muda.',\n },\n {\n path: 'outputs.formReady',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando o formulario esta pronto.',\n },\n {\n path: 'outputs.valueChange',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando o valor do formulario muda.',\n },\n {\n path: 'outputs.syncCompleted',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido ao completar sincronizacao com schema.',\n },\n {\n path: 'outputs.initializationError',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando ocorre erro na inicializacao.',\n },\n {\n path: 'outputs.enableCustomizationChange',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando o modo de customizacao muda.',\n },\n {\n path: 'outputs.customAction',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido ao disparar acao customizada.',\n },\n {\n path: 'outputs.actionConfirmation',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando acao requer confirmacao.',\n },\n {\n path: 'outputs.schemaStatusChange',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento emitido quando o status do schema muda.',\n },\n {\n path: 'outputs.widgetEvent',\n category: 'outputs',\n valueKind: 'object',\n description: 'Evento reemitido a partir dos widgets editoriais hospedados no form.',\n },\n {\n path: 'outputs.widgetEvent.placement',\n category: 'outputs',\n valueKind: 'enum',\n allowedValues: ['before', 'beforeActions', 'after'],\n description: 'Posicao do widget editorial no host do form.',\n },\n {\n path: 'outputs.widgetEvent.sourceId',\n category: 'outputs',\n valueKind: 'string',\n description: 'ID do widget que originou o evento.',\n },\n {\n path: 'outputs.widgetEvent.output',\n category: 'outputs',\n valueKind: 'string',\n description: 'Nome do output emitido pelo widget editorial, quando aplicavel.',\n },\n {\n path: 'outputs.widgetEvent.payload',\n category: 'outputs',\n valueKind: 'object',\n description: 'Payload original reemitido pelo widget editorial.',\n },\n ],\n};\n","/*\n * Public API Surface of praxis-dynamic-form\n */\n\nexport * from './lib/praxis-dynamic-form';\nexport * from './lib/config-editor';\nexport * from './lib/json-config-editor/json-config-editor.component';\nexport * from './lib/components/praxis-form-actions/praxis-form-actions.component';\n\n// Filter form component\nexport * from './lib/filter-form/praxis-filter-form';\nexport * from './lib/filter-form/praxis-filter-form.metadata';\n\n// Layout editor components\nexport * from './lib/layout-editor/layout-editor.component';\nexport * from './lib/layout-editor/row-configurator.component';\nexport * from './lib/layout-editor/field-configurator.component';\nexport * from './lib/layout-editor/layout-prefs.service';\n\n// Services\nexport * from './lib/services/form-config.service';\nexport * from './lib/praxis-dynamic-form.metadata';\nexport {\n PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA,\n providePraxisDynamicFormMetadata,\n} from './lib/praxis-dynamic-form.metadata';\nexport * from './lib/services/form-layout.service';\nexport * from './lib/services/form-context.service';\nexport * from './lib/services/dynamic-form-layout.service';\n\n// Utilities\nexport * from './lib/utils/form-rule.utils';\nexport * from './lib/utils/rule-converters';\nexport * from './lib/utils/normalize-date-arrays';\nexport * from './lib/settings-panel.providers';\nexport * from './lib/dynamic-form-editor-document.model';\nexport * from './lib/dynamic-form-editor-capability';\n\n// Canvas exports\nexport * from './lib/canvas/services/canvas-state.service';\nexport * from './lib/canvas/models/canvas.models';\nexport * from './lib/canvas/components/canvas-toolbar/canvas-toolbar.component';\nexport * from './lib/canvas/components/section-editor/section-editor.component';\nexport * from './lib/canvas/components/row-editor/row-editor.component';\nexport * from './lib/canvas/components/column-editor/column-editor.component';\nexport * from './lib/canvas/components/field-editor/field-editor.component';\nexport * from './lib/canvas/components/actions-editor/actions-editor.component';\nexport * from './lib/ai/form-ai-capabilities';\nexport {\n FORM_COMPONENT_AI_CAPABILITIES,\n} from './lib/ai/form-component-ai-capabilities';\nexport type {\n Capability as FormComponentCapability,\n CapabilityCatalog as FormComponentCapabilityCatalog,\n CapabilityCategory as FormComponentCapabilityCategory,\n ValueKind as FormComponentValueKind,\n} from './lib/ai/form-component-ai-capabilities';\nexport * from './lib/ai/form-ai-catalog';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","ENUMS","coreNormalizeFormConfig","stripLegacyFieldMetadata","isEmptyRuleBuilderState","normalizeTargets","isScopedSectionHeaderActionTarget","isUnscopedSectionHeaderActionTarget","normalizeFormConfig","i9.CanvasStateService","i10.DynamicFormLayoutService","i12","i13","i16","debounceTime","takeUntil","i1.FormConfigService","i6","i8","i2.SectionPresetRegistry","i7","i10","i11","ActionsEditorComponent","i9","i14","i15"],"mappings":"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"}