@praxisui/dynamic-form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +166 -0
- package/fesm2022/praxisui-dynamic-form.mjs +11135 -0
- package/fesm2022/praxisui-dynamic-form.mjs.map +1 -0
- package/index.d.ts +1104 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
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/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.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/normalize-form-config.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/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/services/form-layout.service.ts","../../../projects/praxis-dynamic-form/src/lib/services/form-context.service.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/filter-form/praxis-filter-form.ts","../../../projects/praxis-dynamic-form/src/lib/filter-form/praxis-filter-form.html","../../../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/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/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 { 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';\n\nexport interface JsonValidationResult {\n isValid: boolean;\n error?: string;\n config?: FormConfig;\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 todas as\n configurações do formulário diretamente em JSON.\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 </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(--mat-sys-surface-container-low);\n border-left: 4px solid var(--mat-sys-primary);\n }\n .educational-card .mat-mdc-card-header {\n padding-bottom: 8px;\n }\n .card-icon {\n background-color: var(--mat-sys-primary-container);\n color: var(--mat-sys-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(--mat-sys-on-surface);\n }\n .educational-card .mat-mdc-card-content {\n color: var(--mat-sys-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(--mat-sys-surface-container-low);\n border-radius: 8px;\n border: 1px solid var(--mat-sys-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(--mat-sys-outline-variant); }\n .badge.ok { background: color-mix(in srgb, var(--mat-sys-primary), transparent 85%); }\n .badge.err { background: color-mix(in srgb, var(--mat-sys-error), transparent 85%); }\n .badge.warn { background: color-mix(in srgb, var(--mat-sys-secondary), transparent 85%); }\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(--mat-sys-primary) !important;\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 @Output() configChange = new EventEmitter<FormConfig>();\n @Output() validationChange = new EventEmitter<JsonValidationResult>();\n @Output() editorEvent = new EventEmitter<JsonEditorEvent>();\n\n jsonText = '';\n isValidJson = true;\n jsonError = '';\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 cfg = this.config || this.configService.currentConfig;\n try {\n this.jsonText = JSON.stringify(cfg, null, 2);\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 newConfig = JSON.parse(this.jsonText) as FormConfig;\n this.configService.loadConfig(newConfig);\n this.configChange.emit(newConfig);\n this.editorEvent.emit({\n type: 'apply',\n payload: { isValid: true, config: newConfig },\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 this.jsonText = JSON.stringify(parsed, null, 2);\n this.editorEvent.emit({\n type: 'format',\n payload: { isValid: true, config: parsed as FormConfig },\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.jsonText = JSON.stringify(config, null, 2);\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 cfg = this.config || this.configService.currentConfig;\n this.updateJsonFromConfig(cfg);\n }\n\n getCurrentConfig(): FormConfig | null {\n if (!this.isValidJson) {\n return null;\n }\n try {\n return JSON.parse(this.jsonText) as FormConfig;\n } catch {\n return null;\n }\n }\n\n hasChanges(): boolean {\n if (!this.config) {\n return false;\n }\n const currentConfig = this.getCurrentConfig();\n if (!currentConfig) {\n return false;\n }\n return JSON.stringify(this.config) !== JSON.stringify(currentConfig);\n }\n\n private validateJson(text: string): void {\n const result: JsonValidationResult = { isValid: false };\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 if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('Configuração deve ser um objeto');\n }\n const errors = this.configService.validateConfig(parsed as FormConfig);\n if (errors.length > 0) {\n result.error = errors.join('; ');\n } else {\n result.isValid = true;\n result.config = parsed as FormConfig;\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.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 ComponentDocMeta,\n ComponentMetadataRegistry,\n FieldControlType,\n FieldMetadata,\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, #f5f7fa);\n --pdx-outline: var(--md-sys-color-outline-variant, rgba(0,0,0,0.18));\n /* Category hues (inherit from theme) */\n --pdx-cat-text: var(--md-sys-color-primary, #3f51b5);\n --pdx-cat-select: var(--md-sys-color-secondary, #009688);\n --pdx-cat-number: var(--md-sys-color-tertiary, #7b1fa2);\n --pdx-cat-datetime: var(--md-sys-color-primary, #3f51b5);\n --pdx-cat-boolean: var(--md-sys-color-secondary, #009688);\n --pdx-cat-slider: var(--md-sys-color-tertiary, #7b1fa2);\n --pdx-cat-file: var(--md-sys-color-primary, #3f51b5);\n --pdx-cat-color: var(--md-sys-color-secondary, #009688);\n --pdx-cat-id: var(--md-sys-color-secondary, #009688);\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: 0 5px 10px rgba(0, 0, 0, 0.2);\n border: 1px solid color-mix(in srgb, var(--pdx-cat-text) 40%, var(--pdx-surface));\n background: color-mix(in srgb, var(--pdx-surface) 70%, 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, #7b8794);\n }\n /* Cores por categoria (tema-aware, com fallback dark/light) */\n .field-item.text-type { border-left-color: color-mix(in srgb, var(--pdx-cat-text) 34%, var(--pdx-surface)); }\n .field-item.text-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-text) 60%, var(--pdx-surface)); }\n\n .field-item.date-type { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 36%, var(--pdx-surface)); }\n .field-item.date-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 62%, var(--pdx-surface)); }\n\n .field-item.numeric-type { border-left-color: color-mix(in srgb, var(--pdx-cat-number) 36%, var(--pdx-surface)); }\n .field-item.numeric-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-number) 62%, var(--pdx-surface)); }\n\n .field-item.select-type { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 36%, var(--pdx-surface)); }\n .field-item.select-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 62%, var(--pdx-surface)); }\n\n .field-item.boolean-type { border-left-color: color-mix(in srgb, var(--pdx-cat-boolean) 30%, var(--pdx-surface)); }\n .field-item.boolean-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-boolean) 56%, var(--pdx-surface)); }\n\n .field-item.slider-type { border-left-color: color-mix(in srgb, var(--pdx-cat-slider) 30%, var(--pdx-surface)); }\n .field-item.slider-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-slider) 56%, var(--pdx-surface)); }\n\n .field-item.file-type { border-left-color: color-mix(in srgb, var(--pdx-cat-file) 30%, var(--pdx-surface)); }\n .field-item.file-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-file) 56%, var(--pdx-surface)); }\n\n .field-item.color-type { border-left-color: color-mix(in srgb, var(--pdx-cat-color) 30%, var(--pdx-surface)); }\n .field-item.color-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-color) 56%, var(--pdx-surface)); }\n\n .field-item.id-type { border-left-color: color-mix(in srgb, var(--pdx-cat-id) 30%, var(--pdx-surface)); }\n .field-item.id-type .field-icon { color: color-mix(in srgb, var(--pdx-cat-id) 56%, var(--pdx-surface)); }\n\n .field-item.unknown-type { border-left-color: var(--md-sys-color-outline, #2a3036); }\n .field-item.unknown-type .field-icon { color: var(--md-sys-color-outline, #2a3036); }\n\n /* Diferenciação por componente (variações sutis por tipo) */\n /* Texto */\n .field-item.ft-input { border-left-color: color-mix(in srgb, var(--pdx-cat-text) 26%, var(--pdx-surface)); }\n .field-item.ft-input .field-icon { color: color-mix(in srgb, var(--pdx-cat-text) 46%, var(--pdx-surface)); }\n .field-item.ft-textarea { border-left-color: color-mix(in srgb, var(--pdx-cat-text) 30%, var(--pdx-surface)); }\n .field-item.ft-textarea .field-icon { color: color-mix(in srgb, var(--pdx-cat-text) 50%, var(--pdx-surface)); }\n .field-item.ft-email { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 26%, var(--pdx-surface)); }\n .field-item.ft-email .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 46%, var(--pdx-surface)); }\n .field-item.ft-password { border-left-color: color-mix(in srgb, var(--pdx-cat-number) 26%, var(--pdx-surface)); }\n .field-item.ft-password .field-icon { color: color-mix(in srgb, var(--pdx-cat-number) 46%, var(--pdx-surface)); }\n .field-item.ft-url { border-left-color: color-mix(in srgb, var(--pdx-cat-text) 22%, var(--pdx-surface)); }\n .field-item.ft-url .field-icon { color: color-mix(in srgb, var(--pdx-cat-text) 42%, var(--pdx-surface)); }\n .field-item.ft-search { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 20%, var(--pdx-surface)); }\n .field-item.ft-search .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 40%, var(--pdx-surface)); }\n .field-item.ft-phone { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 30%, var(--pdx-surface)); }\n .field-item.ft-phone .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 50%, var(--pdx-surface)); }\n .field-item.ft-chip-input { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 34%, var(--pdx-surface)); }\n .field-item.ft-chip-input .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 54%, var(--pdx-surface)); }\n\n /* Numérico */\n .field-item.ft-numeric-text-box { border-left-color: color-mix(in srgb, var(--pdx-cat-number) 30%, var(--pdx-surface)); }\n .field-item.ft-numeric-text-box .field-icon { color: color-mix(in srgb, var(--pdx-cat-number) 50%, var(--pdx-surface)); }\n .field-item.ft-currency { border-left-color: color-mix(in srgb, var(--pdx-cat-number) 36%, var(--pdx-surface)); }\n .field-item.ft-currency .field-icon { color: color-mix(in srgb, var(--pdx-cat-number) 56%, var(--pdx-surface)); }\n .field-item.ft-year { border-left-color: color-mix(in srgb, var(--pdx-cat-number) 24%, var(--pdx-surface)); }\n .field-item.ft-year .field-icon { color: color-mix(in srgb, var(--pdx-cat-number) 44%, var(--pdx-surface)); }\n .field-item.ft-cpf-cnpj { border-left-color: color-mix(in srgb, var(--pdx-cat-id) 28%, var(--pdx-surface)); }\n .field-item.ft-cpf-cnpj .field-icon { color: color-mix(in srgb, var(--pdx-cat-id) 48%, var(--pdx-surface)); }\n\n /* Seleção */\n .field-item.ft-select { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 32%, var(--pdx-surface)); }\n .field-item.ft-select .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 52%, var(--pdx-surface)); }\n .field-item.ft-multi-select { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 26%, var(--pdx-surface)); }\n .field-item.ft-multi-select .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 46%, var(--pdx-surface)); }\n .field-item.ft-auto-complete { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 22%, var(--pdx-surface)); }\n .field-item.ft-auto-complete .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 42%, var(--pdx-surface)); }\n .field-item.ft-selection-list { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 20%, var(--pdx-surface)); }\n .field-item.ft-selection-list .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 40%, var(--pdx-surface)); }\n .field-item.ft-tree-select { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 34%, var(--pdx-surface)); }\n .field-item.ft-tree-select .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 54%, var(--pdx-surface)); }\n .field-item.ft-multi-select-tree { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 38%, var(--pdx-surface)); }\n .field-item.ft-multi-select-tree .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 58%, var(--pdx-surface)); }\n .field-item.ft-transfer-list { border-left-color: color-mix(in srgb, var(--pdx-cat-text) 20%, var(--pdx-surface)); }\n .field-item.ft-transfer-list .field-icon { color: color-mix(in srgb, var(--pdx-cat-text) 40%, var(--pdx-surface)); }\n\n /* Data & Hora */\n .field-item.ft-date-input { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 28%, var(--pdx-surface)); }\n .field-item.ft-date-input .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 48%, var(--pdx-surface)); }\n .field-item.ft-date { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 34%, var(--pdx-surface)); }\n .field-item.ft-date .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 54%, var(--pdx-surface)); }\n .field-item.ft-date-range { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 40%, var(--pdx-surface)); }\n .field-item.ft-date-range .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 60%, var(--pdx-surface)); }\n .field-item.ft-date-time-local { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 24%, var(--pdx-surface)); }\n .field-item.ft-date-time-local .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 44%, var(--pdx-surface)); }\n .field-item.ft-time { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 22%, var(--pdx-surface)); }\n .field-item.ft-time .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 42%, var(--pdx-surface)); }\n .field-item.ft-time-picker { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 26%, var(--pdx-surface)); }\n .field-item.ft-time-picker .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 46%, var(--pdx-surface)); }\n .field-item.ft-time-range { border-left-color: color-mix(in srgb, var(--pdx-cat-datetime) 30%, var(--pdx-surface)); }\n .field-item.ft-time-range .field-icon { color: color-mix(in srgb, var(--pdx-cat-datetime) 50%, var(--pdx-surface)); }\n .field-item.ft-month { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 18%, var(--pdx-surface)); }\n .field-item.ft-month .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 38%, var(--pdx-surface)); }\n .field-item.ft-week { border-left-color: color-mix(in srgb, var(--pdx-cat-select) 22%, var(--pdx-surface)); }\n .field-item.ft-week .field-icon { color: color-mix(in srgb, var(--pdx-cat-select) 42%, var(--pdx-surface)); }\n\n /* Booleanos */\n .field-item.ft-checkbox { border-left-color: color-mix(in srgb, var(--pdx-cat-boolean) 28%, var(--pdx-surface)); }\n .field-item.ft-checkbox .field-icon { color: color-mix(in srgb, var(--pdx-cat-boolean) 48%, var(--pdx-surface)); }\n .field-item.ft-radio { border-left-color: color-mix(in srgb, var(--pdx-cat-boolean) 32%, var(--pdx-surface)); }\n .field-item.ft-radio .field-icon { color: color-mix(in srgb, var(--pdx-cat-boolean) 52%, var(--pdx-surface)); }\n .field-item.ft-toggle { border-left-color: color-mix(in srgb, var(--pdx-cat-boolean) 36%, var(--pdx-surface)); }\n .field-item.ft-toggle .field-icon { color: color-mix(in srgb, var(--pdx-cat-boolean) 56%, var(--pdx-surface)); }\n\n /* Slider */\n .field-item.ft-slider { border-left-color: color-mix(in srgb, var(--pdx-cat-slider) 22%, var(--pdx-surface)); }\n .field-item.ft-slider .field-icon { color: color-mix(in srgb, var(--pdx-cat-slider) 42%, var(--pdx-surface)); }\n .field-item.ft-range-slider { border-left-color: color-mix(in srgb, var(--pdx-cat-slider) 28%, var(--pdx-surface)); }\n .field-item.ft-range-slider .field-icon { color: color-mix(in srgb, var(--pdx-cat-slider) 48%, var(--pdx-surface)); }\n\n /* Cor & Arquivo */\n .field-item.ft-color { border-left-color: color-mix(in srgb, var(--pdx-cat-color) 30%, var(--pdx-surface)); }\n .field-item.ft-color .field-icon { color: color-mix(in srgb, var(--pdx-cat-color) 50%, var(--pdx-surface)); }\n .field-item.ft-color-picker { border-left-color: color-mix(in srgb, var(--pdx-cat-color) 36%, var(--pdx-surface)); }\n .field-item.ft-color-picker .field-icon { color: color-mix(in srgb, var(--pdx-cat-color) 56%, var(--pdx-surface)); }\n .field-item.ft-upload { border-left-color: color-mix(in srgb, var(--pdx-cat-file) 22%, var(--pdx-surface)); }\n .field-item.ft-upload .field-icon { color: color-mix(in srgb, var(--pdx-cat-file) 42%, var(--pdx-surface)); }\n `,\n ],\n})\nexport class FieldConfiguratorComponent {\n private readonly registry = inject(ComponentMetadataRegistry);\n\n @Input() field!: FieldMetadata;\n\n private readonly controlTypeMap: Partial<Record<FieldControlType, string>> = {\n [FieldControlType.INPUT]: 'pdx-text-input',\n [FieldControlType.NUMERIC_TEXT_BOX]: 'pdx-number-input',\n [FieldControlType.SELECT]: 'pdx-material-select',\n // outros tipos podem ser adicionados quando componentes existirem no registry\n } as const;\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 } as const;\n\n // Fallback de ícones/rótulos por tipo\n private readonly fallbackInfo: Partial<Record<FieldControlType, { icon: string; label: string }>> = {\n [FieldControlType.INPUT]: { icon: 'text_fields', label: 'Texto' },\n [FieldControlType.TEXTAREA]: { icon: 'subject', label: 'Texto longo' },\n [FieldControlType.EMAIL_INPUT]: { icon: 'mail', label: 'E-mail' },\n [FieldControlType.PASSWORD]: { icon: 'key', label: 'Senha' },\n [FieldControlType.URL_INPUT]: { icon: 'link', label: 'URL' },\n [FieldControlType.SEARCH_INPUT]: { icon: 'search', label: 'Busca' },\n [FieldControlType.PHONE]: { icon: 'call', label: 'Telefone' },\n [FieldControlType.CHIP_INPUT]: { icon: 'sell', label: 'Chips' },\n\n [FieldControlType.NUMERIC_TEXT_BOX]: { icon: '123', label: 'Numérico' },\n [FieldControlType.CURRENCY_INPUT]: { icon: 'attach_money', label: 'Moeda' },\n [FieldControlType.YEAR_INPUT]: { icon: 'calendar_today', label: 'Ano' },\n [FieldControlType.CPF_CNPJ_INPUT]: { icon: 'badge', label: 'CPF/CNPJ' },\n\n [FieldControlType.SELECT]: { icon: 'arrow_drop_down', label: 'Select' },\n [FieldControlType.MULTI_SELECT]: { icon: 'select_check_box', label: 'Multiseleção' },\n [FieldControlType.AUTO_COMPLETE]: { icon: 'search', label: 'Auto-completar' },\n [FieldControlType.SELECTION_LIST]: { icon: 'checklist', label: 'Lista de seleção' },\n [FieldControlType.TREE_SELECT]: { icon: 'account_tree', label: 'Árvore' },\n [FieldControlType.MULTI_SELECT_TREE]: { icon: 'account_tree', label: 'Árvore múltipla' },\n [FieldControlType.TRANSFER_LIST]: { icon: 'swap_horiz', label: 'Transferência' },\n\n [FieldControlType.RADIO]: { icon: 'radio_button_checked', label: 'Opções' },\n [FieldControlType.CHECKBOX]: { icon: 'check_box', label: 'Caixas' },\n [FieldControlType.TOGGLE]: { icon: 'toggle_on', label: 'Toggle' },\n\n [FieldControlType.SLIDER]: { icon: 'tune', label: 'Slider' },\n [FieldControlType.RANGE_SLIDER]: { icon: 'tune', label: 'Slider (intervalo)' },\n\n [FieldControlType.DATE_INPUT]: { icon: 'calendar_month', label: 'Data (input)' },\n [FieldControlType.DATE_PICKER]: { icon: 'calendar_month', label: 'Data' },\n [FieldControlType.DATE_RANGE]: { icon: 'date_range', label: 'Intervalo de data' },\n [FieldControlType.DATETIME_LOCAL_INPUT]: { icon: 'event', label: 'Data e hora' },\n [FieldControlType.TIME_INPUT]: { icon: 'schedule', label: 'Hora' },\n [FieldControlType.TIME_PICKER]: { icon: 'schedule', label: 'Hora (Picker)' },\n [FieldControlType.TIME_RANGE]: { icon: 'schedule', label: 'Intervalo de hora' },\n [FieldControlType.MONTH_INPUT]: { icon: 'calendar_view_month', label: 'Mês' },\n [FieldControlType.WEEK_INPUT]: { icon: 'calendar_view_week', label: 'Semana' },\n\n [FieldControlType.COLOR_INPUT]: { icon: 'palette', label: 'Cor (input)' },\n [FieldControlType.COLOR_PICKER]: { icon: 'palette', label: 'Cor (Picker)' },\n [FieldControlType.FILE_UPLOAD]: { icon: 'upload_file', label: 'Upload' },\n } as const;\n\n get meta(): ComponentDocMeta | undefined {\n const id = this.controlTypeMap[this.field.controlType];\n return id ? this.registry.get(id) : undefined;\n }\n\n get icon(): string {\n const id = this.controlTypeMap[this.field.controlType];\n const meta = id ? this.registry.get(id) : undefined;\n return meta?.icon ?? this.fallbackInfo[this.field.controlType]?.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 const id = this.controlTypeMap[this.field.controlType];\n const meta = id ? this.registry.get(id) : undefined;\n return meta?.friendlyName ?? this.fallbackInfo[this.field.controlType]?.label ?? '';\n }\n\n get tooltip(): string {\n return this.meta?.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 } as const;\n}\n","import { Component, EventEmitter, Input, Output } 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 } from '@praxisui/core';\nimport { resolveSpan } 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 { produce } from 'immer';\n\n@Component({\n selector: 'praxis-row-configurator',\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n FieldConfiguratorComponent,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatMenuModule,\n ],\n templateUrl: './row-configurator.component.html',\n styles: [\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: 56px; /* wider gutter for aligned actions */\n border-radius: 6px;\n transition: box-shadow 0.2s ease;\n }\n .row:focus { outline: none; box-shadow: 0 0 0 2px color-mix(in oklab, var(--md-sys-color-primary) 35%, transparent); }\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 color-mix(in oklab, var(--md-sys-color-primary) 30%, transparent);\n }\n .row-label {\n position: absolute;\n left: -4px;\n top: -10px;\n transform: translateY(-100%);\n background: color-mix(in oklab, var(--md-sys-color-surface-variant) 80%, transparent);\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 .column {\n position: relative;\n flex: 1;\n display: grid; /* predictable spacing for children */\n align-content: start; /* stick items to the top */\n gap: 6px; /* consistent vertical gap between fields */\n border: 1px dashed var(--md-sys-color-outline-variant);\n margin: 4px;\n padding: 6px;\n min-height: 50px;\n background: var(--md-sys-color-surface-container);\n transition:\n background-color 0.2s ease,\n border-color 0.2s ease;\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 color-mix(in oklab, var(--md-sys-color-primary) 35%, transparent); }\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 color-mix(in oklab, var(--md-sys-color-primary) 30%, transparent);\n }\n .column.cdk-drop-list-receiving {\n animation: columnHighlight 0.3s ease-in-out;\n }\n .column-label {\n position: absolute;\n top: -8px;\n left: 8px;\n transform: translateY(-100%);\n background: color-mix(in oklab, var(--md-sys-color-surface-variant) 80%, transparent);\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 .column:hover .column-label, .column.selected .column-label { opacity: 1; }\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 .column-toolbar {\n position: absolute;\n top: 8px;\n right: 8px; /* inside the column */\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n .column:hover .column-toolbar,\n .column:focus .column-toolbar,\n .column.selected .column-toolbar { opacity: 1; }\n .column-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--md-sys-color-on-surface-variant);\n height: 100%;\n text-align: center;\n }\n .row-actions {\n position: absolute;\n right: 8px; /* inside the row */\n top: 8px;\n transform: none;\n display: flex;\n flex-direction: column;\n gap: 6px;\n align-items: center;\n pointer-events: auto;\n opacity: 0;\n transition: opacity 0.15s ease;\n z-index: 3;\n }\n .row-container:hover .row-actions,\n .row.selected + .row-actions,\n .row-actions:focus-within {\n opacity: 1;\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 color-mix(in oklab, var(--md-sys-color-primary) 30%, transparent);\n }\n .row-empty-placeholder {\n flex: 1;\n border: 1px dashed var(--md-sys-color-outline-variant);\n margin: 4px;\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 `,\n ],\n})\nexport class RowConfiguratorComponent {\n @Input() row!: FormRow;\n @Input() fieldMetadata: FieldMetadata[] = [];\n @Input() sectionIndex!: number;\n @Input() rowIndex!: number;\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 @Output() rowChange = new EventEmitter<FormRow>();\n @Output() remove = new EventEmitter<void>();\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\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 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 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 const connected = this.connectedDropListIds.filter(\n (id) => id !== this.getColumnId(index),\n );\n\n if (this.availableFieldsListId) {\n connected.unshift(this.availableFieldsListId);\n }\n\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 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 } as any;\n }\n });\n this.rowChange.emit(updated);\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 getSpanMd(column: any): number {\n const { md } = resolveSpan(column?.span);\n return md;\n }\n}\n","<div class=\"row-container\">\n <ng-container *ngIf=\"row.columns.length > 0; else emptyRow\">\n <div\n class=\"row grid-12\"\n cdkDropListGroup\n (click)=\"selectRow()\"\n [class.selected]=\"isRowSelected()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Linha ' + (rowIndex + 1)\"\n [attr.aria-selected]=\"isRowSelected()\"\n [style.--pfx-grid-gap.px]=\"row.gap || null\"\n [style.marginBottom.px]=\"row.rowGap || null\"\n >\n <div class=\"row-label\" aria-hidden=\"true\">Linha {{ rowIndex + 1 }}</div>\n <div\n *ngFor=\"let column of row.columns; let i = index\"\n class=\"column\"\n [id]=\"getColumnId(i)\"\n cdkDropList\n [cdkDropListData]=\"column.fields\"\n [cdkDropListConnectedTo]=\"connectedColumns(i)\"\n (cdkDropListDropped)=\"drop($event)\"\n (cdkDropListEntered)=\"onDropEnter(i)\"\n (cdkDropListExited)=\"onDropExit(i)\"\n (click)=\"selectColumn(i, $event)\"\n [class.drop-active]=\"activeDropIndex === i\"\n [class.selected]=\"isColumnSelected(i)\"\n [ngClass]=\"getSpanClasses(column)\"\n [style.grid-column]=\"'span ' + getSpanMd(column)\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Coluna ' + (i + 1) + ' de Linha ' + (rowIndex + 1) + '; Largura ' + getSpanMd(column)\"\n [attr.aria-selected]=\"isColumnSelected(i)\"\n >\n <div class=\"column-label\" aria-hidden=\"true\">\n Coluna {{ i + 1 }} • md={{ getSpanMd(column) }}\n </div>\n <div class=\"column-toolbar\">\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"removeColumn(i)\"\n matTooltip=\"Remover coluna\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <ng-container *ngIf=\"column.fields.length > 0; else emptyColumn\">\n <div *ngFor=\"let fieldName of column.fields\" (click)=\"selectField(fieldName, $event)\" [class.selected]=\"isFieldSelected(fieldName)\">\n <praxis-field-configurator\n [field]=\"getFieldByName(fieldName)\"\n ></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 apague.</span>\n </div>\n </ng-template>\n </div>\n </div>\n <div class=\"row-actions\">\n <button mat-icon-button [matMenuTriggerFor]=\"rowMenu\" matTooltip=\"Opções da linha\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\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 — 1/2</span></button>\n <button mat-menu-item (click)=\"applyPreset([4,8])\"><mat-icon>view_column</mat-icon><span>1/3 — 2/3</span></button>\n <button mat-menu-item (click)=\"applyPreset([8,4])\"><mat-icon>view_column</mat-icon><span>2/3 — 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 — 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 — 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 </mat-menu>\n </div>\n </ng-container>\n <ng-template #emptyRow>\n <div class=\"row-empty-placeholder\">\n <span>Linha vazia — crie colunas ou apague.</span>\n <div class=\"row-placeholder-actions\">\n <button\n mat-stroked-button\n (click)=\"addColumn()\"\n matTooltip=\"Adicionar coluna\"\n >\n <mat-icon>add</mat-icon> Add coluna\n </button>\n <button\n mat-stroked-button\n color=\"warn\"\n (click)=\"removeRow()\"\n matTooltip=\"Remover linha\"\n >\n <mat-icon>delete</mat-icon> Apagar 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\n// Side-effect registration\nexport function registerDefaultSectionPresets(): void {\n const registry = inject(SectionPresetRegistry);\n PRESETS.forEach((p) => registry.register(p));\n}\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, #1f2937); }\n .dialog-title { margin: 4px 0 8px; font-weight: 600; color: var(--md-sys-color-on-surface, #1f2937); }\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, #cfd5de);\n border-radius: 10px; padding: 12px 12px;\n background: var(--md-sys-color-surface-container, #f4f6fb);\n color: var(--md-sys-color-on-surface, #1f2937);\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, #145ea8); }\n .preset-btn .name { font-weight: 600; letter-spacing: .2px; }\n .preset-btn:hover {\n background: color-mix(in srgb, var(--md-sys-color-primary, #145ea8) 8%, var(--md-sys-color-surface-container, #f4f6fb));\n border-color: color-mix(in srgb, var(--md-sys-color-primary, #145ea8) 30%, var(--md-sys-color-outline-variant, #cfd5de));\n transform: translateY(-1px);\n box-shadow: 0 2px 10px rgba(0,0,0,.15);\n cursor: pointer;\n }\n .preset-btn:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--md-sys-color-primary, #145ea8) 40%, transparent);\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, #cfd5de);\n background: var(--md-sys-color-surface, transparent);\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 { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\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 { TextFieldModule } from '@angular/cdk/text-field';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\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';\n\n@Component({\n selector: 'praxis-section-configurator',\n standalone: true,\n imports: [\n CommonModule,\n DragDropModule,\n RowConfiguratorComponent,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatCardModule,\n MatTooltipModule,\n MatDialogModule,\n MatMenuModule,\n TextFieldModule,\n MatDividerModule,\n MatExpansionModule,\n ],\n templateUrl: './section-configurator.component.html',\n styleUrls: ['./section-configurator.component.scss'],\n})\nexport class SectionConfiguratorComponent {\n @Input() section!: FormSection;\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 @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\n constructor(private dialog: MatDialog, private presetRegistry: SectionPresetRegistry) {\n // ensure defaults are registered in DI context\n try { registerDefaultSectionPresets(); } catch {}\n }\n\n // Emit only on blur to avoid focus loss during typing\n onTitleBlur(): void {\n this.onSectionUpdated();\n }\n onDescriptionBlur(): void {\n this.onSectionUpdated();\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 this.onSectionUpdated({ rows });\n }\n\n onSectionUpdated(changes: Partial<FormSection> = {}): void {\n this.sectionChange.emit({\n ...this.section,\n ...changes,\n });\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 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 // Style controls\n onTitleStyleChange(style: string): void {\n this.onSectionUpdated({ titleStyle: style } as Partial<FormSection> as FormSection);\n }\n onDescriptionStyleChange(style: string): void {\n this.onSectionUpdated({ descriptionStyle: style } as Partial<FormSection> as FormSection);\n }\n onTitleGapChange(value: number): void {\n this.onSectionUpdated({ titleGapBottom: value } as Partial<FormSection> as FormSection);\n }\n onDescriptionGapChange(value: number): void {\n this.onSectionUpdated({ descriptionGapBottom: value } as Partial<FormSection> as FormSection);\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 (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 <mat-form-field class=\"title-field\" appearance=\"outline\">\n <mat-label>Título da Seção</mat-label>\n <mat-icon matPrefix>edit_note</mat-icon>\n <input\n matInput\n [(ngModel)]=\"section.title\"\n (blur)=\"onTitleBlur()\"\n />\n </mat-form-field>\n <button\n *ngIf=\"!section.description\"\n mat-icon-button\n class=\"add-desc-btn\"\n (click)=\"section.description = ''; onSectionUpdated()\"\n matTooltip=\"Adicionar descrição\"\n aria-label=\"Adicionar descrição\"\n >\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n </mat-card-title>\n <button\n mat-icon-button\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 <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>\n <mat-expansion-panel class=\"section-style\" hideToggle=\"false\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon style=\"margin-right:6px\" aria-hidden=\"true\" [praxisIcon]=\"'format_paint'\"></mat-icon>\n Estilo da seção\n </mat-panel-title>\n <mat-panel-description>Tipografia e espaçamento</mat-panel-description>\n </mat-expansion-panel-header>\n\n <div class=\"typography-controls\" aria-label=\"Controle de tipografia e espaçamento\">\n <mat-form-field appearance=\"outline\" class=\"typo-field\">\n <mat-label>Fonte do título</mat-label>\n <mat-select [value]=\"section.titleStyle || 'titleMedium'\" (valueChange)=\"onTitleStyleChange($event)\">\n <mat-option value=\"titleLarge\">Título grande</mat-option>\n <mat-option value=\"titleMedium\">Título médio</mat-option>\n <mat-option value=\"titleSmall\">Título pequeno</mat-option>\n <mat-option value=\"headlineSmall\">Headline</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"gap-field\">\n <mat-label>Gap do título (px)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"section.titleGapBottom\" (blur)=\"onTitleBlur()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"typo-field\">\n <mat-label>Fonte da descrição</mat-label>\n <mat-select [value]=\"section.descriptionStyle || 'bodyMedium'\" (valueChange)=\"onDescriptionStyleChange($event)\">\n <mat-option value=\"bodyLarge\">Corpo grande</mat-option>\n <mat-option value=\"bodyMedium\">Corpo médio</mat-option>\n <mat-option value=\"bodySmall\">Corpo pequeno</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"gap-field\">\n <mat-label>Gap da descrição (px)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"section.descriptionGapBottom\" (blur)=\"onDescriptionBlur()\" />\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-form-field\n *ngIf=\"section.description !== null && section.description !== undefined\"\n class=\"description-field full-width\"\n appearance=\"outline\"\n >\n <mat-label>Descrição da Seção</mat-label>\n <mat-icon matPrefix [praxisIcon]=\"'article'\"></mat-icon>\n <textarea\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Resumo curto do conteúdo da seção\"\n [(ngModel)]=\"section.description\"\n (blur)=\"onDescriptionBlur()\"\n ></textarea>\n <button mat-icon-button matSuffix type=\"button\" aria-label=\"Remover descrição\" (click)=\"section.description = undefined; onSectionUpdated()\">\n <mat-icon [praxisIcon]=\"'clear'\"></mat-icon>\n </button>\n </mat-form-field>\n\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 [selected]=\"selected\"\n [availableFieldsListId]=\"availableFieldsListId\"\n [connectedDropListIds]=\"columnDropListIds\"\n (rowChange)=\"onRowUpdated(i, $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';\n import { MatButtonModule } from '@angular/material/button';\n import { MatIconModule } from '@angular/material/icon';\n import { MatTooltipModule } from '@angular/material/tooltip';\n import { MatFormFieldModule } from '@angular/material/form-field';\n import { MatInputModule } from '@angular/material/input';\n import { FormsModule } from '@angular/forms';\n import { 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 MatFormFieldModule,\n MatInputModule,\n FormsModule,\n ],\n template: `\n <div class=\"layout-editor-wrapper\" cdkDropListGroup [class.no-available-fields]=\"!availableFields.length\">\n <div class=\"editor-toolbar\" aria-label=\"Preferências do layout\">\n <mat-form-field appearance=\"outline\" class=\"gap-control\" matTooltip=\"Aplicar gap abaixo (px) em todas as seções\">\n <mat-label>Gap abaixo (todas) (px)</mat-label>\n <input matInput type=\"number\" min=\"0\" [(ngModel)]=\"bulkSectionGapBottom\" />\n </mat-form-field>\n <button mat-stroked-button type=\"button\" (click)=\"applyGapBottomToAll()\" [disabled]=\"bulkSectionGapBottom == null\">\n Aplicar a todas\n </button>\n </div>\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 <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\"\n [section]=\"section\"\n [sectionIndex]=\"i\"\n [allSections]=\"config.sections\"\n [fieldMetadata]=\"config.fieldMetadata || []\"\n [selected]=\"selected\"\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 // Bulk apply control for section gapBottom (px)\n bulkSectionGapBottom: number | null = null;\n\n applyGapBottomToAll(): void {\n const px = this.bulkSectionGapBottom ?? 0;\n const sections = this.config.sections.map((s) => ({ ...s, gapBottom: px }));\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 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 this.config.fieldMetadata.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 // Selection helpers\n onSelect(sel: any): void {\n this.selected = 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 = {\n id: `section_${Date.now()}`,\n title: 'Nova Seção',\n rows: [],\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 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","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 { 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 ],\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 </div>\n `,\n styles: [\n `\n .behavior-editor-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\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","import { Component, EventEmitter, Input, Output, OnChanges } 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} from '@praxisui/core';\n\n@Component({\n selector: 'praxis-actions-editor',\n standalone: true,\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 ],\n template: `\n <mat-tab-group>\n <mat-tab label=\"Botões Padrão\">\n <div class=\"editor-container\">\n <mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n Botão de Submeter (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 >Visível</mat-slide-toggle\n >\n <mat-form-field>\n <mat-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>Ícone</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>Variante</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\">Elevado (raised)</mat-option>\n <mat-option value=\"stroked\">Contornado (stroked)</mat-option>\n <mat-option value=\"flat\">Plano (flat)</mat-option>\n <mat-option value=\"fab\">Flutuante (fab)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Cor</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>Atalho de Teclado</mat-label>\n <input\n matInput\n placeholder=\"Ex.: 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 Botão de Cancelar (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 >Visível</mat-slide-toggle\n >\n <mat-form-field>\n <mat-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>Ícone</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>Variante</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\">Elevado (raised)</mat-option>\n <mat-option value=\"stroked\">Contornado (stroked)</mat-option>\n <mat-option value=\"flat\">Plano (flat)</mat-option>\n <mat-option value=\"fab\">Flutuante (fab)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Cor</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>Atalho de Teclado</mat-label>\n <input\n matInput\n placeholder=\"Ex.: 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 Botão de Limpar (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 >Visível</mat-slide-toggle\n >\n <mat-form-field>\n <mat-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>Ícone</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>Variante</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\">Elevado (raised)</mat-option>\n <mat-option value=\"stroked\">Contornado (stroked)</mat-option>\n <mat-option value=\"flat\">Plano (flat)</mat-option>\n <mat-option value=\"fab\">Flutuante (fab)</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Cor</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>Atalho de Teclado</mat-label>\n <input\n matInput\n placeholder=\"Ex.: 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=\"Botões Customizados\">\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> Adicionar Botão\n </button>\n <mat-accordion multi>\n @for (\n customAction of actions.custom;\n track customAction;\n let i = $index\n ) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n {{ customAction.label || 'Novo Botão Customizado' }}\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 >Visível</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>ID da Ação</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>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>Ícone</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>Cor</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 </div>\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"removeCustomButton(i)\"\n matTooltip=\"Remover este botão\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </ng-template>\n </mat-expansion-panel>\n }\n </mat-accordion>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Layout\">\n <div class=\"editor-container action-fields\">\n <mat-form-field>\n <mat-label>Posição estrutural</mat-label>\n <mat-select [value]=\"actions.placement || 'insideLastSection'\" (selectionChange)=\"updateLayout('placement', $event.value)\">\n <mat-option value=\"insideLastSection\">Dentro da última seção</mat-option>\n <mat-option value=\"afterSections\">Após as seções</mat-option>\n <mat-option value=\"top\">Antes das seções</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Alinhamento dos Botões</mat-label>\n <mat-select\n [value]=\"actions.position\"\n (selectionChange)=\"updateLayout('position', $event.value)\"\n >\n <mat-option value=\"left\">Esquerda</mat-option>\n <mat-option value=\"center\">Centro</mat-option>\n <mat-option value=\"right\">Direita</mat-option>\n <mat-option value=\"justified\">Justificado</mat-option>\n <mat-option value=\"split\">Separado</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Orientação</mat-label>\n <mat-select\n [value]=\"actions.orientation\"\n (selectionChange)=\"updateLayout('orientation', $event.value)\"\n >\n <mat-option value=\"horizontal\">Horizontal</mat-option>\n <mat-option value=\"vertical\">Vertical</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Espaçamento</mat-label>\n <mat-select\n [value]=\"actions.spacing\"\n (selectionChange)=\"updateLayout('spacing', $event.value)\"\n >\n <mat-option value=\"compact\">Compacto</mat-option>\n <mat-option value=\"normal\">Normal</mat-option>\n <mat-option value=\"spacious\">Espaçado</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Classe do container</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>Estilos do container (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 >Barra de Ações Fixa (Sticky)</mat-slide-toggle\n >\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n Configurações Mobile\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 >Colapsar em menu no mobile</mat-slide-toggle\n >\n <mat-form-field>\n <mat-label>Alinhamento (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\">Padrão</mat-option>\n <mat-option value=\"left\">Esquerda</mat-option>\n <mat-option value=\"center\">Centro</mat-option>\n <mat-option value=\"right\">Direita</mat-option>\n <mat-option value=\"justified\">Justificado</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Orientação (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\">Padrão</mat-option>\n <mat-option value=\"horizontal\">Horizontal</mat-option>\n <mat-option value=\"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 .add-button {\n margin-bottom: 16px;\n align-self: flex-start;\n }\n `,\n ],\n})\nexport class ActionsEditorComponent implements OnChanges {\n @Input() config!: FormConfig;\n @Output() configChange = new EventEmitter<FormConfig>();\n containerStylesText = '';\n\n get actions(): FormActionsLayout {\n const base: FormActionsLayout = {\n submit: { visible: true, label: 'Submit', 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 placement: 'insideLastSection',\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 }\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 updateAction(\n button: 'submit' | 'cancel' | 'reset',\n key: keyof FormActionButton,\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: keyof FormActionButton,\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 }\n\n addCustomButton() {\n const newButton: FormActionButton = {\n id: `custom_${Date.now()}`,\n label: 'Novo Botão',\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 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","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 #eee;\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 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],\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(--mat-sys-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 { 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 });\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 { FormLayoutRule } from '@praxisui/core';\nimport {\n RuleBuilderState,\n RuleNode,\n FieldConditionConfig,\n} from '@praxisui/visual-builder';\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\n for (const rootId of state.rootNodes) {\n const rootNode = state.nodes[rootId];\n const rule = ruleNodeToFormLayoutRule(rootNode, state.nodes);\n if (rule) {\n rules.push(rule);\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 { rootNode, conditionNode } = formLayoutRuleToNodes(rule);\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 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 if (node.type === 'visibleIf' || node.type === 'requiredIf') {\n const config: any = node.config || {};\n const targetField = config.targetField;\n let conditionString: string | null = null;\n\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 if (!targetField || !conditionString) {\n return null;\n }\n\n const context = node.type === 'visibleIf' ? 'visibility' : 'validation';\n return {\n id: node.id,\n name: node.label || node.id,\n context,\n targetFields: [targetField],\n description: node.metadata?.description,\n effect: { condition: conditionString },\n };\n }\n\n return null;\n}\n\nfunction buildDslFromCondition(\n node: RuleNode | undefined,\n allNodes: Record<string, RuleNode>,\n): string | null {\n if (!node) {\n return null;\n }\n\n if (node.type === 'fieldCondition') {\n const cfg = node.config as FieldConditionConfig;\n const value = JSON.stringify(cfg.value);\n return `${cfg.fieldName} ${cfg.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 formLayoutRuleToNodes(rule: FormLayoutRule): {\n rootNode: RuleNode;\n conditionNode?: RuleNode;\n} {\n const type = rule.context === 'visibility' ? 'visibleIf' : 'requiredIf';\n const rootId = rule.id || generateId();\n let conditionNode: RuleNode | undefined;\n const condition = rule.effect?.condition;\n\n if (typeof condition === 'string') {\n conditionNode = parseSimpleCondition(condition);\n }\n\n const config: any = {\n type,\n validatorType: type,\n targetField: rule.targetFields?.[0],\n };\n if (conditionNode) {\n config.conditionNodeId = conditionNode.id;\n }\n\n const rootNode: RuleNode = {\n id: rootId,\n type: type as any,\n label: rule.name,\n config,\n };\n\n return { rootNode, conditionNode };\n}\n\nfunction parseSimpleCondition(condition: string): RuleNode | undefined {\n const match = condition\n .trim()\n .match(\n /^([\\w.]+)\\s+(eq|neq|lt|lte|gt|gte|contains|startsWith|endsWith|in)\\s+(.+)$/,\n );\n if (!match) {\n return undefined;\n }\n const [, fieldName, operator, valueRaw] = match;\n let value: any = valueRaw;\n try {\n value = JSON.parse(valueRaw);\n } catch {\n // treat as string without quotes\n value = valueRaw.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","import {\n Component,\n ViewChild,\n Inject,\n Optional,\n OnInit,\n OnDestroy,\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 { 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 { FormConfig, FieldMetadata, FieldDefinition } from '@praxisui/core';\nimport type { BackConfig } from '@praxisui/core';\nimport type { FieldDataType } from '@praxisui/core';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\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 { CONFIG_STORAGE, ConfigStorage } 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';\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 MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatCheckboxModule,\n MatSlideToggleModule,\n MatButtonToggleModule,\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{\n @ViewChild(JsonConfigEditorComponent) jsonEditor?: JsonConfigEditorComponent;\n\n editedConfig: FormConfig;\n ruleBuilderConfig!: RuleBuilderConfig;\n ruleBuilderState?: RuleBuilderState;\n private initialConfig: FormConfig;\n backConfig?: BackConfig;\n formId?: string;\n // Input patch: controls like mode (dados)\n inputMode: 'create' | 'edit' | 'view' = 'create';\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 // 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 // Read-only current server meta (if any)\n serverMeta?: { serverHash?: string; lastVerifiedAt?: string };\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\n constructor(\n @Inject(CONFIG_STORAGE) private storage: ConfigStorage,\n private configService: FormConfigService,\n @Optional() @Inject(SETTINGS_PANEL_DATA) injectedData?: any,\n ) {\n const data = injectedData as any;\n const formCfg: FormConfig = data?.formConfig || injectedData;\n this.backConfig = data?.backConfig;\n this.formId = data?.formId;\n this.inputMode = (data?.mode as any) || 'create';\n // Flag de contexto do host (praxis-dynamic-form)\n this.isPresentationMode = !!data?.presentationMode;\n this.initialConfig = this.stripLegacy(normalizeFormConfig(formCfg));\n try {\n console.debug('[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 if (!this.backConfig) {\n this.backConfig = { returnTo: '', confirmOnDirty: true } as BackConfig;\n }\n this.editedConfig = structuredClone(this.initialConfig) as any;\n this.configService.loadConfig(structuredClone(this.initialConfig));\n\n // Load presentation preferences from storage\n if (this.formId) {\n const pres = this.storage.loadConfig<any>(`form-pres:${this.formId}`);\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 // Load schema verification preferences and current server meta\n try {\n const prefs = this.storage.loadConfig<any>(`form-schema-prefs:${this.formId}`);\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') allowed.notifyIfOutdated = n;\n if (typeof prefs.snoozeMs === 'number') allowed.snoozeMs = prefs.snoozeMs;\n if (typeof prefs.autoOpenSettingsOnOutdated === 'boolean') allowed.autoOpenSettingsOnOutdated = prefs.autoOpenSettingsOnOutdated;\n this.schemaPrefs = { ...this.schemaPrefs, ...allowed };\n }\n } catch {}\n try {\n this.serverMeta = this.storage.loadConfig<any>(`form-schema-meta:${this.formId}`) || undefined;\n } catch {}\n }\n }\n\n ngOnInit(): void {\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n this.editedConfig.fieldMetadata || [],\n );\n this.ruleBuilderState =\n (this.editedConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(this.editedConfig.formRules || []);\n // Inicializar estado de validação - assumir válido por padrão\n this.isValid$.next(true);\n this.updateDirtyState('init');\n }\n\n reset(): void {\n this.isBusy$.next(true);\n\n try {\n this.editedConfig = structuredClone(this.initialConfig);\n try { console.debug('[FormConfigEditor] reset()'); } catch {}\n this.jsonEditor?.updateJsonFromConfig(this.editedConfig);\n this.ruleBuilderState =\n (this.editedConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(this.editedConfig.formRules || []);\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 private updateDirtyState(reason: string = 'unknown'): void {\n // Verificar se há alterações em relação à configuração inicial\n const a = this.stripLegacy(structuredClone(this.initialConfig));\n const b = this.stripLegacy(structuredClone(this.editedConfig));\n const hasChanges = JSON.stringify(a) !== JSON.stringify(b);\n this.isDirty$.next(hasChanges);\n try {\n if (hasChanges) {\n const diffs = diffObjects(a as any, b as any, [], 12);\n console.debug('[FormConfigEditor] dirty=true', { reason, diffs });\n } else {\n console.debug('[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 sanitized = this.stripLegacy(this.editedConfig);\n try { console.debug('[FormConfigEditor] getSettingsValue()', { sections: sanitized.sections?.length || 0 }); } catch {}\n return {\n formConfig: sanitized,\n backConfig: this.backConfig,\n presentation: this.presentationPrefs,\n inputsPatch: { mode: this.inputMode },\n schemaPrefs: this.schemaPrefs,\n };\n }\n\n onSave(): any {\n this.isBusy$.next(true);\n\n try {\n const sanitized = this.stripLegacy(this.editedConfig);\n try { console.debug('[FormConfigEditor] onSave()', { sections: sanitized.sections?.length || 0 }); } catch {}\n return {\n formConfig: sanitized,\n backConfig: this.backConfig,\n presentation: this.presentationPrefs,\n inputsPatch: { mode: this.inputMode },\n schemaPrefs: this.schemaPrefs,\n };\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(newConfig: FormConfig): void {\n this.editedConfig = this.stripLegacy(newConfig);\n try { console.debug('[FormConfigEditor] onJsonConfigChange()', { sections: this.editedConfig.sections?.length || 0 }); } catch {}\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n newConfig.fieldMetadata || [],\n );\n this.ruleBuilderState =\n (newConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(newConfig.formRules || []);\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 this.updateDirtyState('json-validate');\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 try { console.debug('[FormConfigEditor] onConfigChange()', { sections: newConfig.sections?.length || 0 }); } catch {}\n // Potentially update rule builder config if fields change\n if (\n JSON.stringify(newConfig.fieldMetadata) !==\n JSON.stringify(this.ruleBuilderConfig.fieldSchemas)\n ) {\n this.ruleBuilderConfig = this.createRuleBuilderConfig(\n newConfig.fieldMetadata || [],\n );\n }\n this.ruleBuilderState =\n (newConfig.formRulesState as RuleBuilderState | undefined) ||\n formLayoutRulesToBuilderState(newConfig.formRules || []);\n this.updateDirtyState('layout-change');\n }\n\n onRulesChanged(state: RuleBuilderState): void {\n const rules = ruleBuilderStateToFormLayoutRules(state);\n try { console.debug('[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.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.updateDirtyState('rules-change');\n }\n\n private createRuleBuilderConfig(\n fieldMetadata: FieldMetadata[],\n ): RuleBuilderConfig {\n return {\n fieldSchemas: this.mapMetadataToSchema(fieldMetadata),\n // Add any other necessary configurations for the visual builder here\n };\n }\n\n private mapMetadataToSchema(\n metadata: FieldMetadata[],\n ): Record<string, FieldSchema> {\n const schemas: Record<string, FieldSchema> = {};\n for (const field of metadata) {\n schemas[field.name] = {\n name: field.name,\n label: field.label,\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 }\n return schemas;\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 // Finalizar observables para evitar memory leaks\n this.isDirty$.complete();\n this.isValid$.complete();\n this.isBusy$.complete();\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?.updateJsonFromConfig(this.editedConfig);\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\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\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"," <mat-tab-group class=\"config-tabs\">\n <mat-tab label=\"Geral\">\n <div class=\"tab-content\">\n <mat-card>\n <mat-card-content>\n <div class=\"form-grid\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"fill\" class=\"w-100\">\n <mat-label>Modo do formulário (dados)</mat-label>\n <mat-select [(ngModel)]=\"inputMode\">\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 <p class=\"hint\">\n O <b>mode</b> controla o comportamento de dados (create/edit/view). Já o <b>editModeEnabled</b> controla apenas a\n customização do layout (canvas) e é independente do <b>mode</b>.\n </p>\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\">\n <mat-card>\n <mat-card-content>\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\">\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>Soneca (ms)</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"schemaPrefs.snoozeMs\" />\n </mat-form-field>\n </div>\n <div class=\"form-row\">\n <mat-slide-toggle [(ngModel)]=\"schemaPrefs.autoOpenSettingsOnOutdated\">Abrir configurações automaticamente</mat-slide-toggle>\n </div>\n <div class=\"form-row\" *ngIf=\"serverMeta\">\n <div class=\"hint\">\n <div><b>Server Hash:</b> {{ serverMeta.serverHash || '—' }}</div>\n <div><b>Última verificação:</b> {{ serverMeta.lastVerifiedAt || '—' }}</div>\n </div>\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\">\n <praxis-layout-editor\n [config]=\"editedConfig\"\n (configChange)=\"onConfigChange($event)\"\n ></praxis-layout-editor>\n </div>\n </mat-tab>\n <mat-tab label=\"Hooks\">\n <div class=\"tab-content\">\n <praxis-hooks-editor\n [config]=\"editedConfig\"\n (configChange)=\"onConfigChange($event)\"\n ></praxis-hooks-editor>\n </div>\n </mat-tab>\n <mat-tab *ngIf=\"isPresentationMode\" label=\"Modo Apresentação\">\n <div class=\"tab-content\">\n <mat-card>\n <mat-card-content>\n <h3>Modo Apresentação</h3>\n <p class=\"text-caption\">Configurações de exibição aplicadas somente ao modo apresentação.</p>\n\n <div class=\"presentation-layout\">\n <div class=\"presentation-controls\">\n <div class=\"control\">\n <label class=\"control__label\">Posição do rótulo</label>\n <mat-button-toggle-group\n [(ngModel)]=\"presentationPrefs.labelPosition\"\n aria-label=\"Posição do rótulo\"\n class=\"toggle-group\"\n >\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\n [(ngModel)]=\"presentationPrefs.density\"\n aria-label=\"Densidade\"\n class=\"toggle-group\"\n >\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\n [(ngModel)]=\"presentationPrefs.labelAlign\"\n aria-label=\"Alinhamento do rótulo\"\n class=\"toggle-group\"\n >\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\n [(ngModel)]=\"presentationPrefs.valueAlign\"\n aria-label=\"Alinhamento do valor\"\n class=\"toggle-group\"\n >\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\" 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\" 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\" 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\">\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\"\n [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 }\"\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\"\n [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 <p class=\"hint\">\n Estas configurações afetam apenas o Modo Apresentação. São salvas por formulário\n e aplicadas no runtime através de variáveis CSS e classes.\n </p>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"Comportamento\">\n <div class=\"tab-content\">\n <praxis-behavior-editor\n [config]=\"editedConfig\"\n (configChange)=\"onConfigChange($event)\"\n ></praxis-behavior-editor>\n </div>\n </mat-tab>\n <mat-tab label=\"Ações\">\n <div class=\"tab-content\">\n <praxis-actions-editor\n [config]=\"editedConfig\"\n (configChange)=\"onConfigChange($event)\"\n ></praxis-actions-editor>\n </div>\n </mat-tab>\n <mat-tab label=\"Regras\">\n <div class=\"tab-content visual-builder-content\">\n <praxis-visual-builder\n [config]=\"ruleBuilderConfig\"\n [initialRules]=\"ruleBuilderState\"\n (rulesChanged)=\"onRulesChanged($event)\"\n ></praxis-visual-builder>\n </div>\n </mat-tab>\n <mat-tab label=\"Cascatas\">\n <div class=\"tab-content\">\n <praxis-cascade-manager-tab\n [fields]=\"editedConfig.fieldMetadata || []\"\n (apply)=\"onCascadeApply($event)\"\n ></praxis-cascade-manager-tab>\n </div>\n </mat-tab>\n <mat-tab label=\"Mensagens\">\n <div class=\"tab-content\">\n <praxis-messages-editor\n [config]=\"editedConfig\"\n (configChange)=\"onConfigChange($event)\"\n ></praxis-messages-editor>\n </div>\n </mat-tab>\n <mat-tab label=\"Navegação\">\n <div class=\"tab-content\">\n <mat-card>\n <mat-card-content>\n <p>\n Configure o comportamento do botão Voltar quando este formulário\n for aberto via CRUD (rota ou modal).\n </p>\n <div class=\"form-row\">\n <label for=\"returnTo\">Rota de retorno (returnTo)</label>\n <input\n id=\"returnTo\"\n type=\"text\"\n class=\"text-input\"\n [(ngModel)]=\"backConfig!.returnTo\"\n placeholder=\"/funcionarios\"\n />\n </div>\n <div class=\"form-row\">\n <label>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"backConfig!.confirmOnDirty\"\n />\n Confirmar ao sair com alterações\n </label>\n </div>\n <p class=\"hint\">\n Observação: estas configurações afetam o fluxo de navegação do\n CRUD e podem ser sobrepostas por metadados do recurso.\n </p>\n </mat-card-content>\n </mat-card>\n </div>\n </mat-tab>\n <mat-tab label=\"JSON\">\n <div class=\"tab-content\">\n <form-json-config-editor\n [config]=\"editedConfig\"\n (configChange)=\"onJsonConfigChange($event)\"\n (validationChange)=\"onJsonValidationChange($event)\"\n (editorEvent)=\"onJsonEditorEvent($event)\"\n >\n </form-json-config-editor>\n </div>\n </mat-tab>\n </mat-tab-group>\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 // 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. */\n @HostListener('document:keydown', ['$event'])\n onGlobalKeydown(ev: KeyboardEvent): void {\n if (ev.key === 'Escape' || ev.key === 'Esc') {\n this.requestClose.emit();\n }\n }\n}\n","<div class=\"canvas-toolbar-container\" role=\"toolbar\" aria-label=\"Toolbar de configuração do canvas\">\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","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 { 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 ],\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 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\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 };\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 extra ? { ...base, [extra]: true } : base;\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: 'Submit',\n visible: true,\n type: 'submit',\n color: 'primary',\n },\n ];\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 || 'Submit',\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;\n }\n\n getVisibleButtons(): FormActionButton[] {\n return this.getActionButtons().slice(0, 1);\n }\n\n getCollapsedButtons(): FormActionButton[] {\n return this.getActionButtons().slice(1);\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 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","<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 @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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\"\n [matTooltip]=\"button.tooltip\"\n (click)=\"onActionButtonClick(button, $event)\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</mat-icon> }\n <span>{{ button.label }}</span>\n </button>\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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\">\n @if (button.icon) { <mat-icon>{{ button.icon }}</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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\">\n @if (button.icon) { <mat-icon>{{ 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]=\"isSubmitting || button.disabled || (button.type === 'submit' && !formIsValid)\" [matTooltip]=\"button.tooltip\" (click)=\"onActionButtonClick(button, $event)\" [attr.aria-label]=\"button.label\">\n @if (button.icon) { <mat-icon>{{ 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]=\"button.disabled\"\n >\n @if (button.icon) {\n <mat-icon>{{ button.icon }}</mat-icon>\n }\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","import { Injectable, Inject, Optional } from '@angular/core';\nimport { FormLayout, ConfigStorage, CONFIG_STORAGE } from '@praxisui/core';\n\n@Injectable({ providedIn: 'root' })\nexport class FormLayoutService {\n constructor(\n @Optional() @Inject(CONFIG_STORAGE) private storage?: ConfigStorage,\n ) {}\n\n loadLayout(formId: string): FormLayout | null {\n return (\n this.storage?.loadConfig<FormLayout>(`praxis-layout-${formId}`) ?? null\n );\n }\n\n saveLayout(formId: string, layout: FormLayout): void {\n this.storage?.saveConfig(`praxis-layout-${formId}`, layout);\n }\n\n clearLayout(formId: string): void {\n this.storage?.clearConfig(`praxis-layout-${formId}`);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { FieldMetadata } from '@praxisui/core';\nimport { FormLayoutRule, FormRuleContext } 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 getFormRulesByContext(ruleContext: FormRuleContext): FormLayoutRule[] {\n const rules = this.formRulesByContext.get(this.currentContext.value) || [];\n return rules.filter(r => r.context === ruleContext);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormLayoutRule } from '@praxisui/core';\nimport { DslParser } from '@praxisui/specification';\nimport type { ValidatorOptions } from '@praxisui/core';\n\n/**\n * The result of applying a set of rules against a form's data.\n */\nexport interface RuleEvaluationResult {\n /**\n * A map where the key is the field name and the value is a boolean\n * indicating if the field should be visible.\n */\n visibility: { [fieldName: string]: boolean };\n /**\n * A map where the key is the field name and the value is a boolean\n * indicating if the field should be required.\n */\n required: { [fieldName: string]: boolean };\n /**\n * A map where the key is the field name and the value is a boolean\n * indicating if the field should be read-only (disabled but visible).\n */\n readonly?: { [fieldName: string]: boolean };\n /**\n * Optional validator overrides computed from rules for each field.\n */\n metaUpdates?: { [fieldName: string]: Partial<ValidatorOptions> };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormRulesService {\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(\n formGroup: FormGroup,\n formRules: FormLayoutRule[]\n ): RuleEvaluationResult {\n const evaluationResult: RuleEvaluationResult = {\n visibility: {},\n required: {},\n readonly: {},\n metaUpdates: {},\n };\n\n if (!formRules || formRules.length === 0) {\n return evaluationResult;\n }\n\n const formData = formGroup.value;\n\n for (const rule of formRules) {\n if (!rule.effect?.condition || !rule.targetFields?.length) {\n continue;\n }\n\n try {\n let isSatisfied: boolean;\n\n if (typeof rule.effect.condition === 'string') {\n // Parse DSL string\n const parser = new DslParser<any>();\n const spec = parser.parse(rule.effect.condition);\n isSatisfied = spec.isSatisfiedBy(formData);\n } else if (rule.effect.condition && typeof rule.effect.condition === 'object') {\n // Already a Specification object\n isSatisfied = rule.effect.condition.isSatisfiedBy(formData);\n } else {\n // Skip if condition is null or invalid\n continue;\n }\n\n for (const fieldName of rule.targetFields) {\n if (rule.context === 'visibility') {\n evaluationResult.visibility[fieldName] = isSatisfied;\n } else if (rule.context === 'validation') {\n // Required shortcut\n evaluationResult.required[fieldName] = isSatisfied;\n // Apply validator overrides if provided\n const overrides = rule.effect.validatorOverrides;\n if (overrides && isSatisfied) {\n evaluationResult.metaUpdates![fieldName] = {\n ...(evaluationResult.metaUpdates?.[fieldName] || {}),\n ...overrides,\n } as Partial<ValidatorOptions>;\n }\n } else if (rule.context === 'readOnly') {\n evaluationResult.readonly![fieldName] = isSatisfied;\n }\n }\n } catch (error) {\n console.error(\n `[FormRulesService] Error evaluating rule \"${rule.name || rule.id}\":`,\n error\n );\n // If a rule fails, we don't apply any effect for it.\n }\n }\n\n return evaluationResult;\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 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 const columns: FormColumn[] = rowFields.map((field) => ({\n id: this.genId('col'),\n fields: [field.name],\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} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n AbstractControl,\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n ValidationErrors,\n} from '@angular/forms';\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 } from 'rxjs/operators';\nimport {\n GenericCrudService,\n FieldMetadata,\n mapFieldDefinitionsToMetadata,\n EndpointConfig,\n DynamicFormService,\n ErrorMessageService,\n getTextTransformer,\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, 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 syncWithServerMetadata,\n SyncResult,\n FormLayout,\n FormSubmitEvent,\n FormReadyEvent,\n FormValueChangeEvent,\n FormInitializationError,\n FormSection,\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 { CONFIG_STORAGE, ConfigStorage, CONNECTION_STORAGE, ConnectionStorage } from '@praxisui/core';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { EmptyStateCardComponent, ResourceQuickConnectComponent, PraxisIconDirective } from '@praxisui/core';\nimport { normalizeDateArrays } from './utils/normalize-date-arrays';\nimport { PraxisDynamicFormConfigEditor } from './config-editor';\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';\n\n@Component({\n selector: 'praxis-dynamic-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DynamicFieldLoaderDirective,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n MatDialogModule,\n MatSnackBarModule,\n MatBadgeModule,\n PraxisIconDirective,\n CanvasToolbarComponent,\n PraxisFormActionsComponent,\n EmptyStateCardComponent,\n ],\n templateUrl: './praxis-dynamic-form.html',\n styleUrls: ['./praxis-dynamic-form.scss'],\n})\nexport class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {\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 @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\" [editModeEnabled]=\"true\">\n *\n * // Formulário em modo EDIT de dados + customização DESABILITADA\n * <praxis-dynamic-form mode=\"edit\" [editModeEnabled]=\"false\">\n */\n @Input() editModeEnabled = false;\n /** Identifier for persisting layouts */\n @Input() formId?: 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 in edit mode) */\n @Input() notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none' = 'both';\n /** Snooze duration for schema outdated notifications (ms), only in edit mode */\n @Input() snoozeMs = 24 * 60 * 60 * 1000; // 24h\n /** Auto open settings when schema is detected as outdated (only in edit mode) */\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 /** 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() editModeEnabledChange = 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\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 fieldVisibility: { [fieldName: string]: boolean } = {};\n private pendingEntityId: string | number | null = null;\n private loadedEntityId: 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 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 reactiveValidate$?: Subject<void>;\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 true;\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 // Global CSS var for default section gap (px)\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(CONFIG_STORAGE) private configStorage: ConfigStorage,\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 @Optional() private hooksRegistry?: FormHooksRegistry,\n @Optional() @Inject(FORM_HOOKS_PRESETS) private hookPresets?: FormHookPreset[] | null,\n ) {\n this.form = this.fb.group({});\n console.debug('[PDF] ctor inputs', {\n formId: this.formId,\n resourcePath: this.resourcePath,\n mode: this.mode,\n });\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 // editModeEnabled é 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 ngOnInit(): void {\n console.debug('[PDF] ngOnInit gating', {\n formId: this.formId,\n resourcePath: this.resourcePath,\n });\n\n // Load persisted connection if not provided via input\n if (!this.resourcePath && this.formId) {\n const saved = this.connectionStorage.loadConnection(this.connectionKey());\n if (saved?.resourcePath) {\n this.resourcePath = saved.resourcePath;\n }\n }\n\n // Load persisted input preferences (e.g., mode) by formId\n try {\n if (this.formId) {\n const inputsPref = this.configStorage.loadConfig<any>(`form-inputs:${this.formId}`);\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 } catch {}\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 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.initializeForm();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['editModeEnabled'] && changes['editModeEnabled'].previousValue === true && changes['editModeEnabled'].currentValue === false) {\n // When edit mode 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 console.debug(\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.initializeForm();\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\n if (changes['resourceId']) {\n console.debug('[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 if (changes['config']?.currentValue) {\n this.config = normalizeFormConfig(changes['config'].currentValue);\n }\n this.applyPresentationVars();\n // On external config changes, if we have base and resourcePath configured, verify in background\n if (this.resourcePath && (this.config?.sections?.length ?? 0) > 0 && this.formId) {\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 console.debug('[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 // Hooks: beforeInit\n await this.runHooks('beforeInit');\n\n try {\n // Step 1: Check for local saved config (with migration from legacy key)\n const configKey = `praxis-form-config-${this.formId}`;\n let localConfig = this.configStorage.loadConfig<FormConfig>(configKey);\n\n // Migration: load legacy key (form-config:{formId}) once and re-save\n if (!localConfig) {\n const legacyKey = `form-config:${this.formId}`;\n const legacy = this.configStorage.loadConfig<FormConfig>(legacyKey);\n if (legacy) {\n try {\n this.persistFormConfig(configKey, legacy);\n this.configStorage.clearConfig(legacyKey);\n localConfig = legacy;\n console.debug('[PDF] initializeForm:migrated-config', { from: legacyKey, to: configKey });\n } catch {}\n }\n }\n console.debug(\n '[PDF] initializeForm:flow',\n localConfig ? 'LOCAL_CONFIG_SYNC' : '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 // 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 console.debug('[PDF] initializeForm:buildForm');\n // Build the form\n this.buildFormFromConfig();\n\n // Load entity data if needed\n if (this.pendingEntityId != null) {\n this.loadEntity();\n }\n\n console.debug('[PDF] initializeForm:success');\n // Hooks: afterInit\n await this.runHooks('afterInit');\n this.initializationStatus = 'success';\n this.isInitialized = true;\n this.applyPresentationVars();\n this.cdr.detectChanges();\n } catch (error) {\n console.error('[PDF] initializeForm:error', error);\n this.handleInitializationError('form-build', error as Error, {\n formId: this.formId,\n resourcePath: this.resourcePath,\n hasLocalConfig:\n this.configStorage.loadConfig(`praxis-form-config-${this.formId}`) !==\n null,\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 console.error(\n `[PraxisDynamicForm] Initialization error at ${stage}:`,\n error,\n );\n this.initializationError.emit(formError);\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, cfg: FormConfig): void {\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 (console.log || console.debug)('[PDF] persistFormConfig: begin', { key, sections, fields, fieldNames });\n \n } catch {}\n this.configStorage.saveConfig(key, toSave);\n try { (console.log || console.debug)('[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\n this.config =\n this.dynamicLayout.generateFormConfigFromMetadata(fieldMetadata);\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 = `praxis-form-config-${this.formId}`;\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 = `praxis-form-config-${this.formId}`;\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 console.debug('[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 console.debug('[PDF] loadEntity:repatch', { id: this.pendingEntityId });\n } else {\n console.debug('[PDF] loadEntity:duplicate', {\n id: this.pendingEntityId,\n });\n }\n return;\n }\n\n this.loadedEntityId = this.pendingEntityId;\n\n this.crud\n .getById(this.pendingEntityId)\n .pipe(takeUntil(this.destroy$))\n .subscribe((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 console.debug('[PDF] loadEntity:success', {\n id: this.pendingEntityId,\n });\n } else {\n console.warn('Invalid entity data received:', data);\n }\n });\n }\n\n private buildFormFromConfig(): void {\n const fieldMetadata = this.config.fieldMetadata || [];\n this.fieldVisibility = {}; // Reset visibility state\n\n // Construção do formulário via serviço dinâmico\n try { console.debug('[PDF] buildFormFromConfig: field count', fieldMetadata.length); } catch {}\n this.form = this.dynamicForm.createFormGroupFromMetadata(fieldMetadata);\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 console.debug('[PDF] buildForm:done', {\n fields: this.config.fieldMetadata?.length,\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 connectionKey(): string {\n return `conn:form:${this.formId || 'default'}`;\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 const prev = this.connectionStorage.loadConnection(key);\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 });\n }\n\n disconnect(): void {\n try {\n this.connectionStorage.clearConnection(this.connectionKey());\n } catch {}\n this.resourcePath = '';\n this.initializationStatus = 'idle';\n this.currentErrorMessage = '';\n this.isRecoverable = 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 return;\n }\n\n const result = this.rulesService.applyRules(\n this.form,\n this.config.formRules,\n );\n\n // Visibilidade e enable/disable\n for (const fieldName in result.visibility) {\n if (Object.prototype.hasOwnProperty.call(result.visibility, fieldName)) {\n const isVisible = result.visibility[fieldName];\n this.fieldVisibility[fieldName] = isVisible;\n const control = this.form.get(fieldName);\n if (control) {\n if (isVisible && control.disabled) {\n control.enable({ emitEvent: false });\n } else if (!isVisible && control.enabled) {\n control.disable({ emitEvent: false });\n }\n }\n }\n }\n\n // Read-only: manter visível, mas desabilitar quando true\n if ((result as any).readonly) {\n for (const fieldName in (result as any).readonly) {\n if (\n Object.prototype.hasOwnProperty.call(\n (result as any).readonly,\n fieldName,\n )\n ) {\n const control = this.form.get(fieldName);\n if (!control) continue;\n const isReadonly = (result as any).readonly[fieldName];\n const isVisible = this.fieldVisibility[fieldName] !== false;\n if (isReadonly) {\n if (control.enabled) control.disable({ emitEvent: false });\n } else {\n // Só reabilita se estiver visível e não marcado como readonly\n if (isVisible && control.disabled)\n control.enable({ emitEvent: false });\n }\n }\n }\n }\n\n // Obrigatoriedade via metadados (reconstrói validators daquele controle)\n for (const fieldName in result.required) {\n if (Object.prototype.hasOwnProperty.call(result.required, fieldName)) {\n const control = this.form.get(fieldName);\n if (!control) continue;\n const meta = (this.config.fieldMetadata || []).find(\n (m) => m.name === fieldName,\n );\n if (!meta) continue;\n const nextMeta = {\n ...meta,\n validators: {\n ...(meta.validators || {}),\n required: result.required[fieldName],\n },\n } as FieldMetadata;\n this.dynamicForm.updateControlFromMetadata(this.form, nextMeta, {\n emitEvent: false,\n });\n }\n }\n\n // Aplicar overrides de validação vindos das regras\n const updates = (result as any).metaUpdates as\n | { [k: string]: any }\n | undefined;\n if (updates) {\n for (const fieldName of Object.keys(updates)) {\n const control = this.form.get(fieldName);\n if (!control) continue;\n const meta = (this.config.fieldMetadata || []).find(\n (m) => m.name === fieldName,\n );\n if (!meta) continue;\n const nextMeta = {\n ...meta,\n validators: {\n ...(meta.validators || {}),\n ...(updates[fieldName] || {}),\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 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 .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) ordered.push(meta);\n }\n this.columnFieldsCache.set(key, { signature: visibleNames, value: ordered });\n return ordered;\n }\n\n getColumnClasses(column: FormColumn): string[] {\n const classes = [\n ...this.getColumnSpanClasses(column),\n ...this.getColumnOffsetClasses(column),\n ...this.getColumnOrderClasses(column),\n ...this.getColumnHiddenClasses(column),\n ];\n if (column.align) {\n classes.push(`align-${column.align}`);\n }\n if (column.className) {\n classes.push(column.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 // 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 private _getConfirmationMessage(actionId: string): string | undefined {\n const messages = this.config.messages;\n if (!messages) return undefined;\n\n // Priority: customActions > confirmations\n const customMessage = messages.customActions?.[actionId]?.confirmation;\n if (customMessage) return customMessage;\n\n return messages.confirmations?.[actionId];\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 });\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 // Se não houver backConfig (host do CRUD), respeitar confirmOnUnsavedChanges local\n const needsConfirm = this.config.behavior?.confirmOnUnsavedChanges;\n if (!this.backConfig && needsConfirm && this.form.dirty) {\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 });\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 = 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 try {\n (this as any).router?.navigateByUrl?.(behavior.redirectAfterSave);\n } catch {}\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 = 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 /**\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.editModeEnabled;\n this.editModeEnabledChange.emit(newValue);\n this.cdr.detectChanges();\n }\n\n openConfigEditor(): void {\n const initialConfig = normalizeFormConfig(this.config as FormConfig);\n const ref = this.settingsPanel.open({\n id: `form.${this.formId}`,\n title: 'Configuração do Formulário',\n content: {\n component: PraxisDynamicFormConfigEditor,\n inputs: {\n formConfig: initialConfig,\n backConfig: this.backConfig,\n formId: this.formId,\n mode: this.mode,\n },\n },\n });\n\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe((cfg: any) => {\n try { console.debug('[PDF] settingsPanel.applied$', { hasCfg: !!cfg }); } catch {}\n if (cfg) {\n const formCfg: any = (cfg as any).formConfig || cfg;\n const backCfg: BackConfig | undefined = (cfg as any).backConfig;\n const presCfg: any | undefined = (cfg as any).presentation;\n const inputsPatch: any | undefined = (cfg as any).inputsPatch;\n const schemaPrefs: any | undefined = (cfg as any).schemaPrefs;\n this.config = normalizeFormConfig(formCfg as FormConfig);\n if (this.formId && backCfg) {\n this.configStorage.saveConfig(`crud-back:${this.formId}`, backCfg);\n this.backConfig = backCfg;\n }\n if (this.formId && presCfg) {\n this.configStorage.saveConfig(`form-pres:${this.formId}`, presCfg);\n // Aplicar imediatamente as preferências de apresentação no formulário\n this.applyPresentationVars();\n }\n if (this.formId && schemaPrefs) {\n this.configStorage.saveConfig(`form-schema-prefs:${this.formId}`, schemaPrefs);\n this.resolveSchemaPrefs();\n }\n if (inputsPatch && typeof inputsPatch === 'object') {\n if (typeof inputsPatch.mode === 'string') {\n const mv = (inputsPatch.mode as string);\n if (mv === 'create' || mv === 'edit' || mv === 'view') {\n this.mode = mv;\n if (this.formId) {\n const prev = this.configStorage.loadConfig<any>(`form-inputs:${this.formId}`) || {};\n this.configStorage.saveConfig(`form-inputs:${this.formId}`, { ...prev, mode: mv });\n }\n }\n }\n }\n this.configChange.emit(this.config);\n this.buildFormFromConfig();\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 { console.debug('[PDF] settingsPanel.reset$'); } catch {}\n try {\n if (this.formId) {\n this.configStorage.clearConfig(`praxis-form-config-${this.formId}`);\n this.configStorage.clearConfig(`form-config:${this.formId}`);\n }\n } catch {}\n });\n\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe((cfg: any) => {\n try { console.debug('[PDF] settingsPanel.saved$', { hasCfg: !!cfg }); } catch {}\n if (cfg) {\n const formCfg: any = (cfg as any).formConfig || cfg;\n const backCfg: BackConfig | undefined = (cfg as any).backConfig;\n const presCfg: any | undefined = (cfg as any).presentation;\n const inputsPatch: any | undefined = (cfg as any).inputsPatch;\n const schemaPrefs: any | undefined = (cfg as any).schemaPrefs;\n this.config = normalizeFormConfig(formCfg as FormConfig);\n if (this.formId) {\n // Persist using canonical key (migrates away from legacy form-config:{formId})\n const key = `praxis-form-config-${this.formId}`;\n this.persistFormConfig(key, this.config);\n if (backCfg) {\n this.configStorage.saveConfig(`crud-back:${this.formId}`, backCfg);\n this.backConfig = backCfg;\n }\n if (presCfg) {\n this.configStorage.saveConfig(`form-pres:${this.formId}`, presCfg);\n // Aplicar imediatamente as preferências de apresentação no formulário\n this.applyPresentationVars();\n }\n if (schemaPrefs) {\n this.configStorage.saveConfig(`form-schema-prefs:${this.formId}`, schemaPrefs);\n this.resolveSchemaPrefs();\n }\n if (inputsPatch && typeof inputsPatch === 'object') {\n if (typeof inputsPatch.mode === 'string') {\n const mv = (inputsPatch.mode as string);\n if (mv === 'create' || mv === 'edit' || mv === 'view') {\n this.mode = mv;\n const prev = this.configStorage.loadConfig<any>(`form-inputs:${this.formId}`) || {};\n this.configStorage.saveConfig(`form-inputs:${this.formId}`, { ...prev, mode: mv });\n }\n }\n }\n }\n this.configChange.emit(this.config);\n this.buildFormFromConfig();\n }\n });\n\n ref.reset$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n try { console.debug('[PDF] settingsPanel.reset$ (second handler)'); } catch {}\n this.config = initialConfig;\n this.configChange.emit(this.config);\n this.buildFormFromConfig();\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.editModeEnabled) 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.editModeEnabled) 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.editModeEnabled) 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 editing 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.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {}) as { serverHash?: string };\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: (this.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {}).lastVerifiedAt, formId: this.formId });\n this.cdr.markForCheck();\n }\n onSnoozeOutdated(): void {\n const meta = (this.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {}) as { serverHash?: string };\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: (this.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {}).lastVerifiedAt, formId: this.formId });\n this.cdr.markForCheck();\n }\n\n // =============================\n // Schema verification (ETag) + persistence helpers\n // =============================\n private getSchemaMetaKey(): string {\n const id = this.formId || 'default';\n return `form-schema-meta:${id}`;\n }\n private getPrefsKey(): string {\n const id = this.formId || 'default';\n return `form-schema-prefs:${id}`;\n }\n private getOutdatedIgnoreKey(serverHash: string): string {\n const id = this.formId || 'default';\n return `schemaIgnore:${id}:${serverHash}`;\n }\n private getOutdatedSnoozeKey(serverHash: string): string {\n const id = this.formId || 'default';\n return `schemaSnooze:${id}:${serverHash}`;\n }\n private getOutdatedNotifiedKey(serverHash: string): string {\n const id = this.formId || 'default';\n return `schemaNotified:${id}:${serverHash}`;\n }\n private isOutdatedIgnored(serverHash?: string): boolean {\n if (!serverHash) return false;\n try { return !!this.configStorage.loadConfig<boolean>(this.getOutdatedIgnoreKey(serverHash)); } catch { return false; }\n }\n private getOutdatedSnoozeUntil(serverHash?: string): number | undefined {\n if (!serverHash) return undefined;\n try {\n const v = this.configStorage.loadConfig<string>(this.getOutdatedSnoozeKey(serverHash));\n if (!v) return undefined;\n const t = Date.parse(v);\n return isNaN(t) ? undefined : t;\n } catch { return undefined; }\n }\n private setOutdatedSnooze(serverHash?: string, until?: Date): void {\n if (!serverHash) return;\n try {\n if (!until) this.configStorage.clearConfig(this.getOutdatedSnoozeKey(serverHash));\n else this.configStorage.saveConfig(this.getOutdatedSnoozeKey(serverHash), until.toISOString());\n } catch {}\n }\n private setOutdatedIgnore(serverHash?: string, val = true): void {\n if (!serverHash) return;\n try {\n if (!val) this.configStorage.clearConfig(this.getOutdatedIgnoreKey(serverHash));\n else this.configStorage.saveConfig(this.getOutdatedIgnoreKey(serverHash), true);\n } catch {}\n }\n private setOutdatedNotified(serverHash?: string): void {\n if (!serverHash) return;\n try { this.configStorage.saveConfig(this.getOutdatedNotifiedKey(serverHash), true); } catch {}\n }\n private wasOutdatedNotified(serverHash?: string): boolean {\n if (!serverHash) return false;\n try { return !!this.configStorage.loadConfig<boolean>(this.getOutdatedNotifiedKey(serverHash)); } catch { return false; }\n }\n\n private resolveSchemaPrefs(): 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 if (this.formId) {\n const w = this.configStorage.loadConfig<any>(this.getPrefsKey());\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.editModeEnabled) return false;\n if (this.resolvedPrefs.notifyIfOutdated === 'none') return false;\n const serverHash = (this.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {})?.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.editModeEnabled) return;\n if (this.resolvedPrefs.notifyIfOutdated === 'none') return;\n const serverHash = (this.configStorage.loadConfig<any>(this.getSchemaMetaKey()) || {})?.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 || !this.formId) 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 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 persistedMeta = (() => { try { return this.configStorage.loadConfig<any>(this.getSchemaMetaKey()); } catch { return undefined; } })();\n const previousHash = (persistedMeta?.serverHash as string | undefined) || this.lastSchemaMeta?.serverHash;\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.lastVerifiedAt = nowIso;\n\n if (res.status === 304) {\n try { this.configStorage.saveConfig(this.getSchemaMetaKey(), metaToSave); } catch {}\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.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 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 try { this.configStorage.saveConfig(this.getSchemaMetaKey(), metaToSave); } catch {}\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.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 was a previous base and we are in edit mode\n const hadBase = (this.config?.sections?.length ?? 0) > 0 || !!previousHash;\n this.schemaOutdated = !!(this.editModeEnabled && hadBase);\n this.schemaStatusChange.emit({ outdated: this.schemaOutdated, serverHash: newHash, lastVerifiedAt: metaToSave.lastVerifiedAt, formId: this.formId });\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 { (console.log || console.debug)('[PDF] openFieldMetadataEditor(): start'); } 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 ctU = String(controlType || '').toUpperCase();\n const seed: any = {\n name: fieldMeta.name,\n label: fieldMeta.label,\n placeholder: (fieldMeta as any).placeholder,\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 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 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 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 (console.log || console.debug)('[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 (console.log || console.debug)('[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) seed.resourcePath = fmAny.resourcePath;\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 (console.log || console.debug)('[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) seed.resourcePath = fmAny.resourcePath;\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 (console.log || console.debug)('[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) seed.resourcePath = fmAny.resourcePath;\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 }\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 (console.log || console.debug)('[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) seed.resourcePath = fmAny.resourcePath;\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 (console.log || console.debug)('[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 (console.log || console.debug)('[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 { (console.log || console.debug)('[PDF] @praxisui/metadata-editor loaded'); } catch {}\n this.openFieldMetadataEditorInternal(FieldMetadataEditorComponent, controlType, seed, fieldName);\n })\n .catch((err) => { try { console.error('[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 { (console.log || console.debug)('[PDF] settingsPanel.open(FieldMetadataEditor)', { fieldName, composedTitle }); } 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 { console.debug('[PDF] hostBridge.applyPatch invoked', { fieldName, keys: p && typeof p === 'object' ? Object.keys(p) : undefined }); } catch {} handlePatch(p); } } },\n },\n });\n try {\n if (String(controlType).toUpperCase() === 'RATING') {\n console.debug('[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 console.debug('[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 { console.debug('[PDF] FieldMetadataEditor patch received', { fieldName, controlType, patch }); } catch {}\n this.applyFieldMetadataPatch(fieldName, patch);\n };\n\n // Wire subscriptions for Apply/Save events from Settings Panel\n try { console.debug('[PDF] Subscribing to SettingsPanel events for FieldMetadataEditor', { fieldName }); } catch {}\n ref.applied$.pipe(takeUntil(this.destroy$)).subscribe((v) => { try { console.debug('[PDF] settingsPanel.applied$ payload', { fieldName, keys: v && typeof v === 'object' ? Object.keys(v) : undefined }); } catch {} handlePatch(v); });\n // Persist changes when user clicks Save as well\n ref.saved$.pipe(takeUntil(this.destroy$)).subscribe((v) => { try { console.debug('[PDF] settingsPanel.saved$ payload', { fieldName, keys: v && typeof v === 'object' ? Object.keys(v) : undefined }); } catch {} handlePatch(v); });\n // Log close reason to detect save paths without payload\n ref.closed$.pipe(takeUntil(this.destroy$)).subscribe((reason: any) => {\n try { console.debug('[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 private openSectionEditor(section: any): 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: { component: SectionEditorComponent, inputs: { section } },\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 getControlTypeIcon(controlType: any): string {\n const ct = String(controlType || '').toUpperCase();\n // First try a direct lookup by id in the metadata registry (supports host-provided custom types)\n try {\n const directMeta = (this as any).componentMetaRegistry?.get?.(String(controlType));\n if (directMeta?.icon) return directMeta.icon;\n } catch {}\n // Try metadata registry first for authoritative icon\n try {\n const controlTypeToMetaId: Partial<Record<string, string>> = {\n INPUT: 'pdx-text-input',\n TEXTAREA: 'pdx-material-textarea',\n NUMERIC_TEXT_BOX: 'pdx-number-input',\n CURRENCY_INPUT: 'pdx-material-currency',\n EMAIL_INPUT: 'pdx-email-input',\n PASSWORD: 'pdx-password-input',\n URL_INPUT: 'pdx-url-input',\n SEARCH_INPUT: 'pdx-search-input',\n PHONE: 'pdx-phone-input',\n SELECT: 'pdx-material-select',\n MULTI_SELECT: 'pdx-material-multi-select',\n AUTO_COMPLETE: 'pdx-material-autocomplete',\n 'SEARCHABLE-SELECT': 'pdx-material-searchable-select',\n 'ASYNC-SELECT': 'pdx-material-async-select',\n SELECTION_LIST: 'pdx-material-selection-list',\n TREE_SELECT: 'pdx-material-tree-select',\n MULTI_SELECT_TREE: 'pdx-material-tree-select',\n RADIO: 'pdx-material-radio-group',\n BUTTON_TOGGLE: 'pdx-material-button-toggle',\n BUTTON: 'pdx-material-button',\n CHECKBOX: 'pdx-material-checkbox-group',\n TOGGLE: 'pdx-material-slide-toggle',\n SLIDER: 'pdx-material-slider',\n RANGE_SLIDER: 'pdx-material-range-slider',\n PRICE_RANGE: 'pdx-material-price-range',\n DATE_INPUT: 'pdx-date-input',\n DATE_PICKER: 'pdx-material-datepicker',\n DATE_RANGE: 'pdx-material-date-range',\n DATETIME_LOCAL_INPUT: 'pdx-datetime-local-input',\n TIME_INPUT: 'pdx-time-input',\n TIME_PICKER: 'pdx-material-timepicker',\n TIME_RANGE: 'pdx-material-time-range',\n MONTH_INPUT: 'pdx-month-input',\n WEEK_INPUT: 'pdx-week-input',\n YEAR_INPUT: 'pdx-year-input',\n COLOR_INPUT: 'pdx-color-input',\n COLOR_PICKER: 'pdx-material-colorpicker',\n RATING: 'pdx-material-rating',\n CHIP_INPUT: 'pdx-material-chips',\n CHIP_LIST: 'pdx-material-chips',\n TRANSFER_LIST: 'pdx-material-transfer-list',\n CPF_CNPJ_INPUT: 'pdx-material-cpf-cnpj-input',\n FILE_UPLOAD: 'pdx-material-file-upload',\n };\n const id = (controlTypeToMetaId as any)[ct] as string | undefined;\n if (id) {\n const meta = (this as any).componentMetaRegistry?.get?.(id);\n if (meta?.icon) return meta.icon;\n }\n } catch {}\n\n const map: Record<string, string> = {\n INPUT: 'text_fields',\n TEXTAREA: 'subject',\n NUMERIC_TEXT_BOX: 'numbers',\n CURRENCY_INPUT: 'attach_money',\n EMAIL_INPUT: 'email',\n PASSWORD: 'password',\n BUTTON: 'smart_button',\n URL_INPUT: 'link',\n SEARCH_INPUT: 'search',\n 'SEARCHABLE-SELECT': 'search',\n 'ASYNC-SELECT': 'cloud_download',\n PHONE: 'phone',\n SELECT: 'arrow_drop_down',\n MULTI_SELECT: 'playlist_add_check',\n AUTO_COMPLETE: 'list',\n SELECTION_LIST: 'list',\n TREE_SELECT: 'account_tree',\n MULTI_SELECT_TREE: 'account_tree',\n RADIO: 'radio_button_checked',\n BUTTON_TOGGLE: 'toggle_on',\n CHECKBOX: 'check_box',\n TOGGLE: 'toggle_on',\n SLIDER: 'tune',\n RANGE_SLIDER: 'tune',\n PRICE_RANGE: 'price_change',\n DATE_INPUT: 'calendar_today',\n DATE_PICKER: 'calendar_today',\n DATE_RANGE: 'date_range',\n DATETIME_LOCAL_INPUT: 'schedule',\n TIME_INPUT: 'access_time',\n TIME_PICKER: 'access_time',\n TIME_RANGE: 'schedule',\n MONTH_INPUT: 'calendar_view_month',\n WEEK_INPUT: 'calendar_view_week',\n YEAR_INPUT: 'event',\n COLOR_INPUT: 'palette',\n COLOR_PICKER: 'colorize',\n RATING: 'star',\n CHIP_INPUT: 'sell',\n CHIP_LIST: 'sell',\n TRANSFER_LIST: 'compare_arrows',\n CPF_CNPJ_INPUT: 'fingerprint',\n FILE_UPLOAD: 'upload_file',\n };\n return map[ct] || 'text_fields';\n }\n\n /**\n * Friendly control type name resolved from ComponentMetadataRegistry when available.\n * Falls back to a local map only when there is no registered metadata.\n */\n private getControlTypeName(controlType: any): string {\n const ct = String(controlType || '').toUpperCase();\n // First try a direct lookup by id in the metadata registry (supports host-provided custom types)\n try {\n const directMeta = (this as any).componentMetaRegistry?.get?.(String(controlType));\n if (directMeta?.friendlyName) return directMeta.friendlyName;\n } catch {}\n // Map controlType -> ComponentDocMeta.id where available\n const controlTypeToMetaId: Partial<Record<string, string>> = {\n INPUT: 'pdx-text-input',\n TEXTAREA: 'pdx-material-textarea',\n NUMERIC_TEXT_BOX: 'pdx-number-input',\n CURRENCY_INPUT: 'pdx-material-currency',\n EMAIL_INPUT: 'pdx-email-input',\n PASSWORD: 'pdx-password-input',\n BUTTON: 'pdx-material-button',\n URL_INPUT: 'pdx-url-input',\n SEARCH_INPUT: 'pdx-search-input',\n 'SEARCHABLE-SELECT': 'pdx-material-searchable-select',\n 'ASYNC-SELECT': 'pdx-material-async-select',\n PHONE: 'pdx-phone-input',\n SELECT: 'pdx-material-select',\n MULTI_SELECT: 'pdx-material-multi-select',\n AUTO_COMPLETE: 'pdx-material-autocomplete',\n SELECTION_LIST: 'pdx-material-selection-list',\n TREE_SELECT: 'pdx-material-tree-select',\n MULTI_SELECT_TREE: 'pdx-material-tree-select',\n RADIO: 'pdx-material-radio-group',\n BUTTON_TOGGLE: 'pdx-material-button-toggle',\n CHECKBOX: 'pdx-material-checkbox-group',\n TOGGLE: 'pdx-material-slide-toggle',\n SLIDER: 'pdx-material-slider',\n RANGE_SLIDER: 'pdx-material-range-slider',\n PRICE_RANGE: 'pdx-material-price-range',\n DATE_INPUT: 'pdx-date-input',\n DATE_PICKER: 'pdx-material-datepicker',\n DATE_RANGE: 'pdx-material-date-range',\n DATETIME_LOCAL_INPUT: 'pdx-datetime-local-input',\n TIME_INPUT: 'pdx-time-input',\n TIME_PICKER: 'pdx-material-timepicker',\n TIME_RANGE: 'pdx-material-time-range',\n MONTH_INPUT: 'pdx-month-input',\n WEEK_INPUT: 'pdx-week-input',\n YEAR_INPUT: 'pdx-year-input',\n COLOR_INPUT: 'pdx-color-input',\n COLOR_PICKER: 'pdx-material-colorpicker',\n CHIP_INPUT: 'pdx-material-chips',\n CHIP_LIST: 'pdx-material-chips',\n TRANSFER_LIST: 'pdx-material-transfer-list',\n CPF_CNPJ_INPUT: 'pdx-material-cpf-cnpj-input',\n FILE_UPLOAD: 'pdx-material-file-upload',\n };\n\n try {\n const id = (controlTypeToMetaId as any)[ct] as string | undefined;\n if (id) {\n const meta = (this as any).componentMetaRegistry?.get?.(id);\n if (meta?.friendlyName) return meta.friendlyName;\n }\n } catch {}\n\n // Fallback labels when registry lookup is not available\n const fallback: Record<string, string> = {\n INPUT: 'Texto',\n TEXTAREA: 'Texto (área)',\n NUMERIC_TEXT_BOX: 'Número',\n CURRENCY_INPUT: 'Moeda',\n EMAIL_INPUT: 'E-mail',\n PASSWORD: 'Senha',\n BUTTON: 'Botão',\n URL_INPUT: 'URL',\n SEARCH_INPUT: 'Busca',\n 'SEARCHABLE-SELECT': 'Select (buscável)',\n 'ASYNC-SELECT': 'Select (assíncrono)',\n PHONE: 'Telefone',\n SELECT: 'Seleção',\n MULTI_SELECT: 'Seleção (Múltipla)',\n AUTO_COMPLETE: 'Auto-completar',\n SELECTION_LIST: 'Lista de Seleção',\n TREE_SELECT: 'Seleção em Árvore',\n MULTI_SELECT_TREE: 'Seleção em Árvore (Múltipla)',\n RADIO: 'Opções (Rádio)',\n BUTTON_TOGGLE: 'Alternador (Botão)',\n CHECKBOX: 'Checkbox',\n TOGGLE: 'Alternador',\n SLIDER: 'Deslizador',\n RANGE_SLIDER: 'Faixa (Deslizador)',\n CHIP_INPUT: 'Chips',\n CHIP_LIST: 'Chips (lista)',\n DATE_INPUT: 'Data',\n DATE_PICKER: 'Data (Material)',\n DATE_RANGE: 'Período (Data)',\n DATETIME_LOCAL_INPUT: 'Data/Hora',\n TIME_INPUT: 'Hora',\n TIME_PICKER: 'Hora (Material)',\n TIME_RANGE: 'Período (Hora)',\n MONTH_INPUT: 'Mês',\n WEEK_INPUT: 'Semana',\n YEAR_INPUT: 'Ano',\n COLOR_INPUT: 'Cor',\n COLOR_PICKER: 'Seletor de Cor',\n RATING: 'Avaliação',\n TRANSFER_LIST: 'Transferência',\n CPF_CNPJ_INPUT: 'Documento (CPF/CNPJ)',\n FILE_UPLOAD: 'Upload de Arquivo',\n };\n return fallback[ct] || ct;\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: Partial<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 (console.log || console.debug)('[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 try { console.debug('[PDF] fm.isExtensible(before-map)', { extensible: Object.isExtensible(fm) }); } catch {}\n const prevControlType = String(fm.controlType || '').toUpperCase();\n try {\n const nextCtUpperPre = String(((patch as any).controlType ?? fm.controlType) || '').toUpperCase();\n (console.log || console.debug)('[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 console.debug('[DynamicForm] textTransform has no functional transformer (CSS variant):', { fieldName, tName, tApply });\n } else {\n console.debug('[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 console.debug('[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 // 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 ((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: any = (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 if ((patch as any).resourcePath !== undefined) (fm as any).resourcePath = (patch as any).resourcePath;\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).maxSelections !== undefined)\n (fm as any).maxSelections = toNum((patch as any).maxSelections) as any;\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 = String((fm as any).controlType || '').toUpperCase();\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 // 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).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).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 // 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).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 = String((fm as any).controlType || '').toUpperCase();\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 = String((fm as any).controlType || '').toUpperCase();\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 console.debug('[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 { console.debug('[PDF] RATING patch applied', { before, patch, after }); } catch {}\n }\n } catch (e) { try { console.warn('[PDF] RATING mapping error', e); } catch {} }\n\n (console.log || console.debug)('[PDF] applyFieldMetadataPatch:after-mapping', { fieldName });\n } catch (err) {\n try { console.error('[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 = String(((patch as any).controlType ?? fm.controlType) || '').toUpperCase();\n if (ct === 'RATING') {\n fm = withRatingMetadata(fm, patch);\n try { console.debug('[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 { console.debug('[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 = String((fm as any).controlType || '').toUpperCase();\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 } 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 }\n // Reapply metadata on the live component instance when possible\n const loader = this.findLoaderForField(fieldName);\n try { console.debug('[PDF] hot-update: loader lookup', { fieldName, found: !!loader }); } catch {}\n if (loader) {\n try {\n const comp = (loader as any).getComponent?.(fieldName);\n try { console.debug('[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 console.debug('[PDF] Applying setInputMetadata on live instance', { fieldName, hasFn: true });\n try { console.debug('[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 console.warn('[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 console.debug('[PDF] Using metadata.set on live instance', { fieldName });\n inst.metadata.set(fm);\n } catch (e) {\n console.warn('[PDF] metadata.set failed; refreshing loader', e);\n loader.refresh();\n }\n } else {\n // No hot path available; refresh the column's loader\n console.warn('[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 console.warn('[PDF] Component not found; refreshing loader', { fieldName });\n loader.refresh();\n }\n } catch (e) {\n console.warn('[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 console.warn('[PDF] Loader not found; rebuilding form');\n this.buildFormFromConfig();\n }\n }\n\n this.cdr.detectChanges();\n\n // Persist updated config locally so editor changes survive reloads\n try {\n if (this.formId) {\n const key = `praxis-form-config-${this.formId}`;\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 console.debug('[PDF] field-metadata:persist-preview', { key, fieldName, index: idx, preview });\n } catch {}\n this.persistFormConfig(key, this.config);\n console.debug('[PDF] field-metadata:persisted', { key, fieldName });\n } else {\n console.warn('[PDF] field-metadata:cannot-persist (missing formId)');\n }\n } catch (e) {\n console.warn('[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 console.warn('[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.editModeEnabled) 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.editModeEnabled) return;\n this.canvasState.setHoveredElement(null);\n }\n\n onFieldClick(payload: { field: FieldMetadata; element: HTMLElement }): void {\n if (!this.editModeEnabled) 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.editModeEnabled) return;\n const correlationId = this.genCorrelationId();\n this.currentDnD = { id: correlationId, snapshot: this.config };\n if (this.debugDnD) {\n console.debug(`[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 console.debug(`[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 console.debug(`[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.editModeEnabled || 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 console.warn(`[PDF:DND] ${correlationId} invalid section drop`, {\n fromId,\n toIndex,\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 this.cdr.detectChanges();\n if (this.debugDnD) {\n console.debug(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n console.warn(`[PDF:DND] ${correlationId} rollback`, error);\n this.config = snapshot;\n this.buildFormFromConfig();\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onRowDrop(event: CdkDragDrop<any>): void {\n if (\n !this.editModeEnabled ||\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 console.warn(`[PDF:DND] ${correlationId} invalid row drop`, {\n fromIds,\n toIds,\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 this.cdr.detectChanges();\n if (this.debugDnD) {\n console.debug(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n console.warn(`[PDF:DND] ${correlationId} rollback`, error);\n this.config = snapshot;\n this.buildFormFromConfig();\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onColumnDrop(event: CdkDragDrop<any>): void {\n if (\n !this.editModeEnabled ||\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 console.warn(`[PDF:DND] ${correlationId} invalid column drop`, {\n fromIds,\n toIds,\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 this.cdr.detectChanges();\n if (this.debugDnD) {\n console.debug(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n console.warn(`[PDF:DND] ${correlationId} rollback`, error);\n this.config = snapshot;\n this.buildFormFromConfig();\n this.cdr.detectChanges();\n } finally {\n this.currentDnD = undefined;\n }\n }\n\n onFieldDrop(event: CdkDragDrop<any>): void {\n if (\n !this.editModeEnabled ||\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 console.warn(`[PDF:DND] ${correlationId} invalid drop ids`, {\n fromIds,\n toIds,\n });\n }\n return;\n }\n if (this.debugDnD) {\n console.debug(`[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 this.cdr.detectChanges();\n if (this.debugDnD) {\n console.debug(`[PDF:DND] ${correlationId} result`, result.op);\n }\n } catch (error) {\n console.warn(`[PDF:DND] ${correlationId} rollback`, error);\n this.config = snapshot;\n this.buildFormFromConfig();\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(); // 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 }\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 // 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.initializationStatus = 'idle';\n this.initializeForm();\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\n const basePath = (this.crud.schemaUrl() || '').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 = this.crud.getSchemasFilteredBaseUrl();\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 console.debug('[PDF] schema:fromCache');\n return this.schemaCache;\n }\n const ctx = this.buildSchemaContext();\n try {\n const url = this.crud.schemaUrl?.();\n console.debug('[PDF] schema:fetching', { url, mode: ctx.schemaType });\n } catch {}\n\n const client = new SchemaMetadataClient(new LocalStorageCacheAdapter({ ttlMs: 30 * 60 * 1000, maxEntries: 200 }));\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(ctx);\n this.lastSchemaMeta = { schemaId, serverHash: entry.schemaHash, context: ctx };\n\n this.schemaCache = defs;\n // Persist meta for future ETag verifications\n try {\n if (this.formId) {\n const nowIso = new Date().toISOString();\n this.configStorage.saveConfig(this.getSchemaMetaKey(), { serverHash: entry.schemaHash, lastVerifiedAt: nowIso });\n }\n } catch {}\n return defs;\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 debugLog(message: string, ...args: any[]): void {\n if (this.DEBUG) {\n console.log(`[PraxisDynamicForm] ${message}`, ...args);\n }\n }\n\n private applyPresentationVars(): void {\n try {\n if (!this.formId) return;\n const pres = this.configStorage.loadConfig<any>(\n `form-pres:${this.formId}`,\n );\n if (!pres) return;\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 } catch {}\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 in edit mode) -->\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 && editModeEnabled) {\n<div class=\"form-config-controls\">\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"openConfigEditor()\"\n [disabled]=\"isLoading\"\n class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\"\n [matBadgeHidden]=\"!schemaOutdated\"\n matBadgeColor=\"warn\" matBadgeSize=\"small\" matBadgePosition=\"above after\"\n [matTooltip]=\"schemaOutdated ? 'Schema do servidor mudou — Reconciliar' : 'Configurar formulário'\"\n >\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"disconnect()\"\n matTooltip=\"Desconectar da fonte de dados\"\n [disabled]=\"isLoading\"\n >\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\n icon=\"link\"\n [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) }\"\n ></praxis-empty-state-card>\n}\n<form\n #formHost\n (ngSubmit)=\"onSubmit()\"\n [attr.aria-busy]=\"submitting ? 'true' : null\"\n [attr.aria-label]=\"'Formulário ' + (config.metadata?.version || '')\"\n [class.canvas-mode-enabled]=\"editModeEnabled\"\n [class.presentation-mode]=\"!!presentationModeGlobal\"\n [class.readonly-mode]=\"!!readonlyModeGlobal\"\n [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\"\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 class=\"praxis-dynamic-form\"\n>\n <praxis-canvas-toolbar\n (editMetadata)=\"openSelectedElementEditor()\"\n (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\"\n (moveDown)=\"onToolbarMove('down')\"\n (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\"\n (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\"\n (requestClose)=\"onToolbarRequestClose()\"\n *ngIf=\"editModeEnabled && selectedElement\"\n [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"\n ></praxis-canvas-toolbar>\n\n @if ((config.actions?.placement || 'insideLastSection') === 'top' && !(presentationModeGlobal || readonlyModeGlobal)) {\n <praxis-form-actions\n [actions]=\"config.actions\"\n [isSubmitting]=\"submitting\"\n [formIsValid]=\"form.valid\"\n [submitError]=\"submitError\"\n [formId]=\"formId\"\n (action)=\"onFormAction($event)\"\n ></praxis-form-actions>\n }\n\n @for (section of config.sections; track (section.id ?? $index); let sectionIndex = $index;\n let last = $last) {\n <div\n class=\"section-drop-wrapper\"\n [attr.data-section-id]=\"section.id\"\n >\n <div\n #sectionEl\n class=\"form-section canvas-element\"\n data-canvas-type=\"section\"\n [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\"\n (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [style.marginBottom.px]=\"!last ? (section.gapBottom || null) : null\"\n >\n @if (section.title) {\n <h3\n class=\"section-title\"\n [class.title-large]=\"section.titleStyle === 'titleLarge'\"\n [class.title-medium]=\"section.titleStyle === 'titleMedium'\"\n [class.title-small]=\"section.titleStyle === 'titleSmall'\"\n [class.headline-small]=\"section.titleStyle === 'headlineSmall'\"\n [style.marginBottom.px]=\"section.titleGapBottom || null\"\n >\n @if (section.icon) {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"section.icon\"></mat-icon>\n }\n {{ section.title }}\n </h3>\n } @if (section.description) {\n <p\n class=\"section-description\"\n [class.body-large]=\"section.descriptionStyle === 'bodyLarge'\"\n [class.body-medium]=\"section.descriptionStyle === 'bodyMedium'\"\n [class.body-small]=\"section.descriptionStyle === 'bodySmall'\"\n [style.marginBottom.px]=\"section.descriptionGapBottom || null\"\n >\n {{ section.description }}\n </p>\n } @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n <div\n class=\"row-drop-wrapper\"\n [attr.data-section-id]=\"section.id\"\n >\n <div\n #rowEl\n class=\"form-row grid-12 canvas-element\"\n data-canvas-type=\"row\"\n [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\"\n [attr.data-row-id]=\"row.id\"\n [style.--pfx-grid-gap.px]=\"row.gap || null\"\n [style.marginBottom.px]=\"row.rowGap || null\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\"\n [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\"\n >\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div\n class=\"column-drop-wrapper\"\n [attr.data-section-id]=\"section.id\"\n [attr.data-row-id]=\"row.id\"\n >\n <div\n #colEl\n class=\"form-column canvas-element\"\n [ngClass]=\"getColumnClasses(column)\"\n [style.padding.px]=\"column.padding\"\n [attr.data-testid]=\"column.testId || null\"\n data-canvas-type=\"column\"\n [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\"\n [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\"\n (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\"\n >\n <ng-container\n dynamicFieldLoader\n [fields]=\"getColumnFields(column)\"\n [formGroup]=\"form\"\n [readonlyMode]=\"readonlyModeGlobal === null ? null : readonlyModeGlobal\"\n [disabledMode]=\"disabledModeGlobal === null ? null : disabledModeGlobal\"\n [presentationMode]=\"presentationModeGlobal === null ? null : presentationModeGlobal\"\n [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"editModeEnabled\"\n (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\"\n (canvasClick)=\"onFieldClick($event)\"\n >\n </ng-container>\n </div>\n </div>\n } }\n </div>\n </div>\n\n }\n @if ((config.actions?.placement || 'insideLastSection') === 'insideLastSection' && last && !(presentationModeGlobal || readonlyModeGlobal)) {\n <praxis-form-actions\n [actions]=\"config.actions\"\n [isSubmitting]=\"submitting\"\n [formIsValid]=\"form.valid\"\n [submitError]=\"submitError\"\n [formId]=\"formId\"\n (action)=\"onFormAction($event)\"\n ></praxis-form-actions>\n }\n <!-- Overlay de bloqueio durante submissão -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner\n diameter=\"40\"\n color=\"primary\"\n ></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n </div>\n\n @if (editModeEnabled && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button\n mat-fab\n color=\"primary\"\n aria-label=\"Adicionar nova seção\"\n (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova seção aqui\"\n >\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n } }\n @if ((config.actions?.placement || 'insideLastSection') === 'afterSections' && !(presentationModeGlobal || readonlyModeGlobal)) {\n <praxis-form-actions\n [actions]=\"config.actions\"\n [isSubmitting]=\"submitting\"\n [formIsValid]=\"form.valid\"\n [submitError]=\"submitError\"\n [formId]=\"formId\"\n (action)=\"onFormAction($event)\"\n ></praxis-form-actions>\n }\n</form>\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 // 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.config.fieldMetadata || [];\n return metas.filter((m) => column.fields.includes(m.name));\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 (config.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>","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: 'mode', type: \"'create' | 'edit' | 'view'\", default: 'create', label: 'Modo', description: 'Modo do formulário' },\n { name: 'config', type: 'FormConfig', label: 'Configuração', description: 'Configuração completa do formulário (layout, metadados, ações, regras)' },\n { name: 'schemaSource', type: \"'resource' | 'filter'\", default: 'resource', description: 'Fonte do schema de campos' },\n { name: 'editModeEnabled', type: 'boolean', default: false, description: 'Habilita modo de edição do layout (canvas)'},\n { name: 'formId', type: 'string', description: 'Chave para persistência local da configuração' },\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: 'removeEmptyContainersOnSave', type: 'boolean', default: false, description: 'Remove containers vazios ao salvar configuração' },\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: 'editModeEnabledChange', type: 'boolean', label: 'Edição (toggle)', description: 'Emite quando o modo de ediçã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 ],\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) {\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.context !== 'visibility') {\n continue;\n }\n const visible = isRuleSatisfied(rule, data);\n for (const field of rule.targetFields) {\n result[field] = visible;\n }\n }\n return result;\n}\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormBuilder,\n FormGroup,\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 { FormSection, Breakpoint } from '@praxisui/core';\nimport {\n SETTINGS_PANEL_DATA,\n SettingsValueProvider,\n} from '@praxisui/settings-panel';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { IconPickerService } from '@praxisui/core';\nimport { takeUntil } from 'rxjs/operators';\n\ninterface EditableFormSection extends FormSection {\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}\n\n@Component({\n selector: 'praxis-section-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatTabsModule,\n MatSlideToggleModule,\n MatButtonModule,\n MatIconModule,\n PraxisIconDirective,\n MatTooltipModule,\n ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <mat-tab-group>\n <mat-tab label=\"Organização\">\n <div class=\"tips\">\n <p>\n Uma Seção agrupa linhas relacionadas (título, descrição, regras de\n visibilidade).\n </p>\n <p>\n Use Seções para mudar o contexto (ex.: Dados Pessoais, Endereço,\n Financeiro).\n </p>\n <p>Seções podem ser colapsáveis e ordenadas.</p>\n </div>\n\n <form [formGroup]=\"form\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Título da Seção</mat-label>\n <input matInput formControlName=\"title\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Ícone (Material Icons)</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=\"ex.: info, settings, person\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"pickIcon()\"\n matTooltip=\"Escolher ícone\"\n aria-label=\"Escolher ícone\"\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=\"Limpar ícone\"\n aria-label=\"Limpar ícone\"\n data-testid=\"clear-icon\"\n >\n <mat-icon [praxisIcon]=\"'backspace'\"></mat-icon>\n </button>\n <mat-hint>Use nomes do Material Icons (ligatures)</mat-hint>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Descrição</mat-label>\n <textarea matInput formControlName=\"description\"></textarea>\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Espaço abaixo da seção (px)</mat-label>\n <input matInput type=\"number\" min=\"0\" formControlName=\"gapBottom\" />\n </mat-form-field>\n\n <mat-slide-toggle formControlName=\"collapsible\">\n Colapsável\n </mat-slide-toggle>\n\n <mat-slide-toggle formControlName=\"collapsed\">\n Iniciar recolhida\n </mat-slide-toggle>\n\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 <div formGroupName=\"hidden\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-slide-toggle [formControlName]=\"bp\">\n Hidden {{ bp }}\n </mat-slide-toggle>\n </div>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Classe CSS</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\n <div class=\"presets\">\n <button mat-stroked-button type=\"button\">Seção Padrão</button>\n <button mat-stroked-button type=\"button\">Seção Simples</button>\n <button mat-stroked-button type=\"button\">Seção Colapsável</button>\n <button mat-stroked-button type=\"button\">\n Seção com Grid Apertado\n </button>\n </div>\n\n <div class=\"actions\">\n <button mat-stroked-button type=\"button\">Adicionar Linha</button>\n <button mat-stroked-button type=\"button\">Duplicar Seção</button>\n <button mat-stroked-button color=\"warn\" type=\"button\">\n Remover Seção\n </button>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n }\n .bp-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin: 12px 0;\n }\n mat-form-field {\n width: 100%;\n margin-bottom: 12px;\n }\n .presets,\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 16px;\n }\n `,\n ],\n})\nexport class SectionEditorComponent\n implements OnInit, OnDestroy, SettingsValueProvider\n{\n section: EditableFormSection;\n form!: FormGroup;\n breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\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\n constructor(\n private fb: FormBuilder,\n @Inject(SETTINGS_PANEL_DATA) private data: { section: EditableFormSection },\n private iconPicker: IconPickerService,\n ) {\n this.section = this.data.section;\n }\n\n ngOnInit(): void {\n this.form = this.fb.group({\n title: [this.section.title, Validators.required],\n icon: [this.section.icon ?? ''],\n description: [this.section.description],\n gapBottom: [this.section.gapBottom ?? 0],\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 });\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n Object.assign(this.section, this.form.value);\n this.isDirty$.next(true);\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 async pickIcon(): Promise<void> {\n const current = this.form.value.icon;\n const res = await this.iconPicker.openPanel({\n id: this.section.id,\n title: 'Escolher ícone da seção',\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","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 { 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 ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <mat-tab-group>\n <mat-tab label=\"Organização\">\n <div class=\"tips\">\n <p>\n A Linha é uma grade de 12 colunas. Cada coluna tem span por\n breakpoint.\n </p>\n <p>\n Para colocar fields lado a lado, distribua os spans das colunas\n nesta linha (ex.: 6/6, 4/8, 3/9).\n </p>\n <p>\n Se a soma de spans passar de 12, as colunas quebram para a próxima\n linha visual.\n </p>\n </div>\n\n <form [formGroup]=\"form\">\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</mat-label>\n <input matInput type=\"number\" formControlName=\"gap\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Row Gap</mat-label>\n <input matInput type=\"number\" formControlName=\"rowGap\" />\n </mat-form-field>\n\n <mat-slide-toggle formControlName=\"wrap\">Wrap</mat-slide-toggle>\n\n <div formGroupName=\"hidden\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-slide-toggle [formControlName]=\"bp\">\n Hidden {{ bp }}\n </mat-slide-toggle>\n </div>\n </div>\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\n <div class=\"presets\">\n <button mat-stroked-button type=\"button\">100%</button>\n <button mat-stroked-button type=\"button\">50/50</button>\n <button mat-stroked-button type=\"button\">33/33/33</button>\n <button mat-stroked-button type=\"button\">3/9</button>\n <button mat-stroked-button type=\"button\">4/8</button>\n <button mat-stroked-button type=\"button\">Auto-balance</button>\n </div>\n\n <div class=\"actions\">\n <button mat-stroked-button type=\"button\">Adicionar Coluna</button>\n <button mat-stroked-button type=\"button\">Duplicar Linha</button>\n <button mat-stroked-button color=\"warn\" type=\"button\">\n Remover Linha\n </button>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n }\n .bp-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin: 12px 0;\n }\n mat-form-field {\n width: 100px;\n margin-right: 8px;\n }\n .presets,\n .actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 16px;\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\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\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 ?? 0],\n gap: [r.gap ?? 0],\n rowGap: [r.rowGap ?? 0],\n wrap: [r.wrap ?? true],\n hidden: this.fb.group({\n xs: [r.hidden?.xs ?? false],\n sm: [r.hidden?.sm],\n md: [r.hidden?.md],\n lg: [r.hidden?.lg],\n xl: [r.hidden?.xl],\n }),\n className: [r.className ?? ''],\n testId: [r.testId ?? ''],\n });\n\n this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n Object.assign(this.data.row, this.form.value);\n this.isDirty$.next(true);\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","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 { Breakpoint, FormColumn } 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 ],\n template: `\n <div class=\"editor-container\" *ngIf=\"form\">\n <mat-tab-group>\n <mat-tab label=\"Layout\">\n <form [formGroup]=\"form\">\n <div formGroupName=\"span\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Span {{ bp }}</mat-label>\n <input\n matInput\n type=\"number\"\n [formControlName]=\"bp\"\n min=\"1\"\n max=\"12\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <div formGroupName=\"offset\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Offset {{ bp }}</mat-label>\n <input\n matInput\n type=\"number\"\n [formControlName]=\"bp\"\n min=\"0\"\n max=\"11\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <div formGroupName=\"order\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-form-field appearance=\"fill\">\n <mat-label>Order {{ bp }}</mat-label>\n <input matInput type=\"number\" [formControlName]=\"bp\" />\n </mat-form-field>\n </div>\n </div>\n\n <div formGroupName=\"hidden\" class=\"bp-group\">\n <div *ngFor=\"let bp of breakpoints\">\n <mat-slide-toggle [formControlName]=\"bp\">\n Hidden {{ bp }}\n </mat-slide-toggle>\n </div>\n </div>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Align</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>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>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\n <mat-tab label=\"Organização\">\n <div class=\"tips\">\n <p>\n Nesta coluna os fields ficam empilhados (um por linha). Para\n colocar lado a lado, use duas colunas na mesma linha e ajuste o\n Span.\n </p>\n <p>\n A linha usa uma grade de 12. Ex.: xs:12 empilha no mobile; md:6\n divide em duas colunas no desktop.\n </p>\n </div>\n\n <div class=\"fields-list\">\n <div *ngFor=\"let field of column.fields\" class=\"field-chip\">\n {{ field }}\n </div>\n <button mat-stroked-button type=\"button\">Adicionar Field...</button>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .editor-container {\n padding: 16px;\n }\n .bp-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n mat-form-field {\n width: 100px;\n }\n `,\n ],\n})\nexport class ColumnEditorComponent\n implements OnInit, OnDestroy, SettingsValueProvider\n{\n form!: FormGroup;\n breakpoints: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl'];\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","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 * 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';\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';\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FormConfigService","i3","i4","i1","i2","i6","i2.SectionPresetRegistry","i5","i10","i11","i13","i14","i16","i8","i7","ActionsEditorComponent","coreNormalizeFormConfig","i9","takeUntil","normalizeFormConfig","debounceTime","i3.FormLayoutService","i4.FormContextService","i5.FormRulesService","i15"],"mappings":"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"}
|