@praxisui/page-builder 3.0.0-beta.4 → 3.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"praxisui-page-builder.mjs","sources":["../../../projects/praxis-page-builder/src/lib/shim.ts","../../../projects/praxis-page-builder/src/lib/editor/confirm-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/editor/tile-toolbar.component.ts","../../../projects/praxis-page-builder/src/lib/editor/floating-toolbar.component.ts","../../../projects/praxis-page-builder/src/lib/editor/component-palette-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-builder.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-builder.component.html","../../../projects/praxis-page-builder/src/lib/editor/widget-shell-editor.component.ts","../../../projects/praxis-page-builder/src/lib/editor/dynamic-page-config-editor.component.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-capabilities.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.tokens.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.providers.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/edge-router.util.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/drag-connect.directive.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/graph-mapper.service.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/connection-graph.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor.component.html","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/page-config-editor/page-config-editor.component.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai.adapter.ts","../../../projects/praxis-page-builder/src/lib/dynamic-gridster-page.component.ts","../../../projects/praxis-page-builder/src/public-api.ts","../../../projects/praxis-page-builder/src/praxisui-page-builder.ts"],"sourcesContent":["export const PLACEHOLDER = 1;\n\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nexport interface ConfirmDialogData {\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n icon?: string;\n}\n\n@Component({\n selector: 'praxis-confirm-dialog',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule, PraxisIconDirective],\n template: `\n <h2 mat-dialog-title>\n <mat-icon class=\"dlg-icon\" aria-hidden=\"true\" [praxisIcon]=\"data.icon || 'warning'\"></mat-icon>\n {{ data.title || 'Confirmar ação' }}\n </h2>\n <div mat-dialog-content>\n <p>{{ data.message || 'Tem certeza que deseja prosseguir?' }}</p>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>{{ data.cancelLabel || 'Cancelar' }}</button>\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"true\">{{ data.confirmLabel || 'Excluir' }}</button>\n </div>\n `,\n styles: [\n `\n :host { color: var(--md-sys-color-on-surface); }\n .dlg-icon { vertical-align: middle; margin-right: 8px; color: var(--md-sys-color-error); }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogData,\n public ref: MatDialogRef<ConfirmDialogComponent, boolean>,\n ) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-tile-toolbar',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, PraxisIconDirective],\n template: `\n <div class=\"pdx-tile-toolbar\" [class.always-visible]=\"selected\" role=\"toolbar\" aria-label=\"Ações do widget\">\n <button\n mat-mini-fab\n (click)=\"settings.emit()\"\n [matTooltip]=\"'Configurar widget'\"\n aria-label=\"Configurar widget\"\n >\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n (click)=\"shell.emit()\"\n [matTooltip]=\"'Configurar card'\"\n aria-label=\"Configurar card\"\n >\n <mat-icon [praxisIcon]=\"'view_headline'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n color=\"primary\"\n class=\"pdx-drag-handle\"\n [matTooltip]=\"'Arrastar tile'\"\n aria-label=\"Arrastar tile\"\n >\n <mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n color=\"warn\"\n (click)=\"remove.emit()\"\n [matTooltip]=\"'Excluir widget'\"\n aria-label=\"Excluir widget\"\n >\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n `,\n styles: [\n `\n :host { position: absolute; inset: 0; pointer-events: none; }\n .pdx-tile-toolbar {\n position: absolute;\n right: 6px;\n top: -18px; /* half outside to keep clear of tile content, but close enough to not lose hover */\n display: flex;\n gap: 6px;\n z-index: 5;\n opacity: 0;\n transition: opacity 120ms ease-in-out;\n pointer-events: auto; /* enabled when visible via parent rule */\n background: var(--md-sys-color-surface-container-low);\n backdrop-filter: blur(4px);\n border-radius: 999px;\n padding: 4px;\n box-shadow: var(--mat-elevation-level3);\n }\n .pdx-tile-toolbar.always-visible { opacity: 1; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TileToolbarComponent {\n @Input() selected = false;\n @Input() widgetType: string | null = null;\n @Output() remove = new EventEmitter<void>();\n @Output() settings = new EventEmitter<void>();\n @Output() shell = new EventEmitter<void>();\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-floating-toolbar',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, PraxisIconDirective],\n template: `\n <div class=\"pdx-floating-toolbar\" *ngIf=\"visible\">\n <button mat-fab color=\"primary\" class=\"pdx-fab\" [matTooltip]=\"'Ações rápidas'\">\n <mat-icon [praxisIcon]=\"'build'\"></mat-icon>\n </button>\n <div class=\"pdx-actions\">\n <button mat-mini-fab color=\"primary\" (click)=\"add.emit()\" [matTooltip]=\"'Inserir componente'\" aria-label=\"Inserir componente\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connections.emit()\" [matTooltip]=\"'Visualizar conexões (Diagrama)'\" aria-label=\"Visualizar conexões (Diagrama)\">\n <mat-icon [praxisIcon]=\"'device_hub'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connectionsVisual.emit()\" [matTooltip]=\"'Editor Visual (beta)'\" aria-label=\"Editor Visual (beta)\">\n <mat-icon [praxisIcon]=\"'schema'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connectionsEdit.emit()\" [matTooltip]=\"'Editar conexões (Builder)'\" aria-label=\"Editar conexões (Builder)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-mini-fab color=\"accent\" (click)=\"save.emit()\" [matTooltip]=\"'Salvar página'\" aria-label=\"Salvar página\">\n <mat-icon [praxisIcon]=\"'save'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"undo.emit()\" [disabled]=\"!canUndo\" [matTooltip]=\"'Desfazer'\" aria-label=\"Desfazer\">\n <mat-icon [praxisIcon]=\"'undo'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"redo.emit()\" [disabled]=\"!canRedo\" [matTooltip]=\"'Refazer'\" aria-label=\"Refazer\">\n <mat-icon [praxisIcon]=\"'redo'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"settings.emit()\" [matTooltip]=\"'Configurações da página'\" aria-label=\"Configurações da página\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"preview.emit()\" [matTooltip]=\"'Pré-visualizar'\" aria-label=\"Pré-visualizar\">\n <mat-icon [praxisIcon]=\"'visibility'\"></mat-icon>\n </button>\n <ng-content select=\"[pdx-toolbar-extra]\"></ng-content>\n </div>\n </div>\n `,\n styles: [\n `\n :host { position: absolute; inset: 0; pointer-events: none; }\n .pdx-floating-toolbar { position: absolute; right: 16px; bottom: 16px; display: flex; gap: 8px; align-items: center; pointer-events: auto; }\n .pdx-actions { display: flex; gap: 8px; }\n .pdx-fab { box-shadow: var(--mat-elevation-level4); }\n @media (max-width: 720px) {\n .pdx-actions { gap: 6px; }\n .pdx-floating-toolbar { right: 12px; bottom: 12px; }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FloatingToolbarComponent {\n @Input() visible = false;\n @Input() canUndo = false;\n @Input() canRedo = false;\n\n @Output() add = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() settings = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() connections = new EventEmitter<void>();\n @Output() connectionsEdit = new EventEmitter<void>();\n @Output() connectionsVisual = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, OnInit, computed, effect, signal } from '@angular/core';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { ComponentDocMeta } from '@praxisui/core';\n\nexport interface ComponentPaletteData {\n title?: string;\n allowedWidgetIds?: string[];\n allowedWidgetTags?: string[];\n predicate?: (m: ComponentDocMeta) => boolean;\n}\n\n@Component({\n selector: 'praxis-component-palette-dialog',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule, PraxisIconDirective],\n template: `\n <h2 mat-dialog-title>\n <div class=\"dlg-title\">\n <mat-icon class=\"dlg-icon\" [praxisIcon]=\"'widgets'\"></mat-icon>\n <div class=\"dlg-texts\">\n <div class=\"dlg-head\">{{ data?.title || 'Inserir componente' }}</div>\n <div class=\"dlg-sub\">Escolha um componente para adicionar à página · {{ filtered().length }} disponíveis</div>\n </div>\n </div>\n </h2>\n <div mat-dialog-content class=\"pdx-palette-content\">\n <div [class]=\"'pdx-grid ' + density()\" *ngIf=\"filtered().length; else emptyState\">\n <div\n *ngFor=\"let m of filtered(); trackBy: trackById\"\n class=\"pdx-card mat-elevation-z2\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Adicionar ' + (m.friendlyName || m.id)\"\n (click)=\"select(m.id)\"\n (keydown.enter)=\"select(m.id)\"\n (keydown.space)=\"select(m.id)\"\n >\n <div class=\"pdx-card-icon\">\n <mat-icon [praxisIcon]=\"m.icon || 'widgets'\"></mat-icon>\n </div>\n <div class=\"pdx-card-body\">\n <div class=\"pdx-card-title\">{{ m.friendlyName || m.id }}</div>\n <div class=\"pdx-card-desc\">{{ m.description || m.selector }}</div>\n </div>\n </div>\n </div>\n\n <ng-template #emptyState>\n <div class=\"pdx-empty\">\n <mat-icon [praxisIcon]=\"'sentiment_dissatisfied'\"></mat-icon>\n <div>Nenhum componente disponível</div>\n </div>\n </ng-template>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancelar</button>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n h2[mat-dialog-title] {\n margin: 0;\n padding: 12px 24px 10px 24px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n }\n .dlg-title { display: flex; align-items: center; gap: 10px; }\n .dlg-icon { color: var(--md-sys-color-primary); }\n .dlg-head { font-size: 18px; font-weight: 600; line-height: 1.2; }\n .dlg-sub { font-size: 12px; opacity: 0.85; color: var(--md-sys-color-on-surface-variant); }\n .pdx-palette-content { min-width: 480px; max-width: 920px; padding-top: 8px; }\n .pdx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }\n .pdx-grid.dense { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }\n .pdx-grid.roomy { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }\n .pdx-card {\n position: relative;\n display: grid;\n grid-template-columns: 44px 1fr;\n grid-template-rows: auto auto;\n gap: 10px;\n padding: 14px;\n border: 1px solid transparent;\n border-radius: 14px;\n cursor: pointer;\n outline: none;\n min-height: 92px;\n background: var(--md-sys-color-surface);\n border-color: var(--md-sys-color-outline-variant);\n transition: box-shadow .2s ease, background .25s ease, transform .06s ease;\n }\n .pdx-grid.dense .pdx-card { padding: 10px; border-radius: 12px; min-height: 84px; }\n .pdx-grid.roomy .pdx-card { padding: 16px; border-radius: 16px; min-height: 100px; }\n .pdx-card:focus, .pdx-card:hover {\n box-shadow: var(--mat-elevation-level4);\n background: var(--md-sys-color-surface-container-low);\n border-color: var(--md-sys-color-primary);\n }\n .pdx-card:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n .pdx-card:active { transform: translateY(1px); }\n .pdx-card-icon { grid-row: span 2; display: flex; align-items: center; justify-content: center; color: var(--md-sys-color-primary); }\n .pdx-card-title { font-weight: 600; line-height: 1.2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .pdx-card-desc { color: var(--md-sys-color-on-surface-variant); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; word-break: break-word; }\n .pdx-empty { padding: 24px; display: grid; place-items: center; color: var(--md-sys-color-on-surface-variant); gap: 8px; }\n @media (max-width: 600px) { .pdx-palette-content { min-width: 320px; } .pdx-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComponentPaletteDialogComponent implements OnInit {\n query = '';\n private all = signal<ComponentDocMeta[]>([]);\n filtered = computed(() => this.applyFilters());\n density = computed(() => {\n const n = this.filtered().length;\n if (n <= 4) return 'roomy';\n if (n > 12) return 'dense';\n return 'normal';\n });\n\n constructor(\n private dialogRef: MatDialogRef<ComponentPaletteDialogComponent, string>,\n private registry: ComponentMetadataRegistry,\n @Inject(MAT_DIALOG_DATA) public data?: ComponentPaletteData,\n ) {}\n\n ngOnInit(): void {\n this.all.set(this.registry.getAll());\n }\n\n select(id: string): void {\n this.dialogRef.close(id);\n }\n\n trackById = (_: number, m: ComponentDocMeta) => m.id;\n\n getPreview(m: ComponentDocMeta): string {\n return (m.description || m.selector || m.friendlyName || m.id || '').toString();\n }\n\n // Create effect in injection context (field initializer is allowed)\n private _adjustSizeEffect = effect(() => {\n const n = this.filtered().length;\n let width = '720px';\n if (n <= 4) width = '560px';\n else if (n <= 8) width = '680px';\n const container: any = (this.dialogRef as any)._containerInstance;\n if (container && container._config) {\n container._config.width = width;\n }\n });\n\n private applyFilters(): ComponentDocMeta[] {\n const list = (this.all() || []);\n const q = (this.query || '').toLowerCase();\n const allowIds = new Set((this.data?.allowedWidgetIds || []).map((s) => s.toLowerCase()));\n const allowTags = new Set((this.data?.allowedWidgetTags || []).map((s) => s.toLowerCase()));\n return list.filter((m) => {\n if (q) {\n const hay = `${m.id} ${m.friendlyName || ''} ${m.description || ''} ${m.selector || ''}`.toLowerCase();\n if (!hay.includes(q)) return false;\n }\n if (allowIds.size > 0 && !allowIds.has((m.id || '').toLowerCase())) return false;\n if (allowTags.size > 0 && !m.tags?.some(t => allowTags.has(t.toLowerCase()))) return false;\n if (typeof this.data?.predicate === 'function' && !this.data.predicate(m)) return false;\n return true;\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, computed, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-connection-builder',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatButtonModule, MatIconModule, MatListModule, MatDialogModule, MatAutocompleteModule, MatMenuModule, MatTabsModule, MatTooltipModule, MatProgressBarModule, MatCheckboxModule, MatSnackBarModule, ScrollingModule, PraxisIconDirective],\n templateUrl: './connection-builder.component.html',\n styleUrls: ['./connection-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionBuilderComponent implements OnInit, OnChanges {\n @Input() page?: GridPageDefinition | string;\n @Input() widgets?: GridWidgetInstance[];\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n // State\n private originalSnapshot = '';\n showOnlyIssues = false;\n showFriendly = true;\n filterText = '';\n groupBy: 'none' | 'from' | 'to' | 'event' = 'none';\n sortBy: 'from' | 'to' = 'from';\n // Move braces-containing placeholder into TS (AGENTS.md policy)\n mapPlaceholder = 'payload | payload.id | ${payload.id}';\n\n // Signals\n connections = signal<WidgetConnection[]>([]);\n selectedIndex = signal<number>(-1);\n\n // Derived lists\n readonly filteredConnections = computed(() => this.applyFilters(this.connections()));\n readonly groupedConnections = computed(() => this.applyGrouping(this.filteredConnections()));\n\n constructor(private dialog: MatDialog, private registry: ComponentMetadataRegistry, private snack: MatSnackBar) {}\n\n ngOnInit(): void {\n const p = this.parsePage(this.page);\n const ws = this.widgets || p?.widgets || [];\n this.widgets = ws;\n const conns = [...(p?.connections || [])];\n this.connections.set(conns);\n this.originalSnapshot = JSON.stringify(conns);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['widgets']) {\n const p = this.parsePage(this.page);\n this.widgets = this.widgets || p?.widgets || [];\n const next = [...(p?.connections || [])];\n this.connections.set(next);\n this.originalSnapshot = JSON.stringify(next);\n }\n }\n\n // UI helpers\n isExpanded(i: number): boolean { return i === this.selectedIndex(); }\n toggleExpanded(i: number, ev?: Event): void { if (ev) ev.stopPropagation(); this.selectedIndex.set(this.selectedIndex() === i ? -1 : i); }\n setSortBy(v: 'from' | 'to'): void { this.sortBy = v; this.connections.set(this.sortList([...this.connections()])); }\n onGroupByChange(): void {}\n toggleShowOnlyIssues(): void { this.showOnlyIssues = !this.showOnlyIssues; }\n toggleFriendly(): void { this.showFriendly = !this.showFriendly; }\n trackByIndex = (i: number) => i;\n\n // Labels\n fromLabel(c: WidgetConnection): string { return `${c.from.widget}.${c.from.output}`; }\n toLabel(c: WidgetConnection): string { return `${c.to.widget}.${c.to.input}`; }\n fromFriendly(c: WidgetConnection): string { return `${this.widgetFriendlyNameForKey(c.from.widget)}.${c.from.output}`; }\n toFriendly(c: WidgetConnection): string { return `${this.widgetFriendlyNameForKey(c.to.widget)}.${c.to.input}`; }\n outputDescription(c: WidgetConnection): string { return this.registry.get(this.widgetTypeByKey(c.from.widget))?.outputs?.find(o => o.name === c.from.output)?.description || ''; }\n inputDescription(c: WidgetConnection): string { return this.registry.get(this.widgetTypeByKey(c.to.widget))?.inputs?.find(i => i.name === c.to.input)?.description || ''; }\n widgetFriendlyNameForKey(key: string): string { const id = this.widgetTypeByKey(key); return this.registry.get(id)?.friendlyName || id; }\n componentIconForKey(key: string): string { const id = this.widgetTypeByKey(key); return this.registry.get(id)?.icon || 'widgets'; }\n private widgetTypeByKey(key: string): string { return this.widgets?.find(w => w.key === key)?.definition?.id || key; }\n\n private applyFilters(list: WidgetConnection[]): WidgetConnection[] {\n const q = (this.filterText || '').toLowerCase();\n const arr = list.filter((c) => {\n if (this.showOnlyIssues && this.connectionStatus(c) === 'ok') return false;\n if (!q) return true;\n const hay = `${c.from.widget}.${c.from.output} ${c.to.widget}.${c.to.input} ${c.map || ''}`.toLowerCase();\n return hay.includes(q);\n });\n return this.sortList(arr);\n }\n\n private applyGrouping(list: WidgetConnection[]): Array<{ label: string; list: WidgetConnection[] }>\n {\n switch (this.groupBy) {\n case 'from': return this.groupByKey(list, c => `${c.from.widget}.${c.from.output}`);\n case 'to': return this.groupByKey(list, c => `${c.to.widget}.${c.to.input}`);\n case 'event': return this.groupByKey(list, c => `${c.from.output}`);\n default: return [{ label: 'Todas', list }];\n }\n }\n\n private groupByKey(list: WidgetConnection[], keyFn: (c: WidgetConnection) => string): Array<{ label: string; list: WidgetConnection[] }>\n {\n const map = new Map<string, WidgetConnection[]>();\n for (const c of list) { const k = keyFn(c); const arr = map.get(k) || []; arr.push(c); map.set(k, arr); }\n return Array.from(map.entries()).map(([k, v]) => ({ label: k, list: v }));\n }\n\n private sortList(list: WidgetConnection[]): WidgetConnection[] {\n return [...list].sort((a, b) => {\n if (this.sortBy === 'from') return this.fromLabel(a).localeCompare(this.fromLabel(b));\n return this.toLabel(a).localeCompare(this.toLabel(b));\n });\n }\n\n // Editing\n createNew(): void {\n const fromKey = this.widgets?.[0]?.key || '';\n const toKey = this.widgets?.[1]?.key || '';\n const conn: WidgetConnection = { from: { widget: fromKey, output: 'submit' }, to: { widget: toKey, input: 'context' } } as any;\n this.connections.set([conn, ...this.connections()]);\n }\n startEdit(index: number, _c: WidgetConnection): void { this.selectedIndex.set(index); }\n startEditByConn(c: WidgetConnection): void { const i = this.connections().indexOf(c); if (i >= 0) this.startEdit(i, c); }\n duplicateConnection(index: number): void { const next = [...this.connections()]; const c = next[index]; if (!c) return; next.splice(index + 1, 0, { ...c }); this.connections.set(next); }\n removeConnection(index: number): void { const next = [...this.connections()]; if (index < 0 || index >= next.length) return; next.splice(index, 1); this.connections.set(next); }\n\n // Validation\n connectionStatus(c: WidgetConnection): 'ok' | 'warn' | 'err' {\n if (!c.from?.widget || !c.from?.output || !c.to?.widget || !c.to?.input) return 'err';\n const wFrom = this.widgetTypeByKey(c.from.widget);\n const wTo = this.widgetTypeByKey(c.to.widget);\n const outOk = !!this.registry.get(wFrom)?.outputs?.some(o => o.name === c.from.output);\n const inOk = !!this.registry.get(wTo)?.inputs?.some(i => i.name === c.to.input);\n if (!outOk || !inOk) return 'warn';\n return 'ok';\n }\n\n // Persist/apply\n onSave(): void {\n const p = this.parsePage(this.page) || ({} as GridPageDefinition);\n const next: GridPageDefinition = { ...(p as any), connections: this.connections() };\n this.page = next;\n this.pageChange.emit(next);\n this.snack.open('Conexões salvas', undefined, { duration: 1000 });\n this.originalSnapshot = JSON.stringify(this.connections());\n }\n\n // Diagram helpers\n openDiagramFor(_c: WidgetConnection): void {\n import('./connection-graph/connection-graph.component').then(m => {\n this.dialog.open((m as any).ConnectionGraphComponent as any, { width: '95vw', height: '80vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog' });\n });\n }\n openDiagramFullscreen(): void {\n import('./connection-graph/connection-graph.component').then(m => {\n this.dialog.open((m as any).ConnectionGraphComponent as any, { width: '95vw', height: '95vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog', autoFocus: false, restoreFocus: false });\n });\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n}\n","<div class=\"pdx-conn-root\" role=\"region\" aria-label=\"Construtor de Conexões\">\n <div class=\"pdx-conn-head\">\n <span class=\"pdx-conn-title\">Conexões</span>\n <span class=\"pdx-conn-count\" aria-label=\"Conexões filtradas e total\">{{ filteredConnections().length }} / {{ connections().length }}</span>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-search\">\n <mat-label>Buscar</mat-label>\n <input matInput [(ngModel)]=\"filterText\" placeholder=\"Origem, Destino, Input, Map...\" />\n <button mat-icon-button matSuffix *ngIf=\"filterText\" (click)=\"filterText='';\" aria-label=\"Limpar busca\"><mat-icon [praxisIcon]=\"'close'\"></mat-icon></button>\n </mat-form-field>\n <span class=\"pdx-spacer\"></span>\n <button mat-button (click)=\"toggleShowOnlyIssues()\" [color]=\"showOnlyIssues ? 'primary': undefined\" aria-label=\"Somente avisos/erros\"><mat-icon [praxisIcon]=\"'report_problem'\"></mat-icon> Alertas</button>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-select\">\n <mat-label>Ordenar por</mat-label>\n <mat-select [(ngModel)]=\"sortBy\" (ngModelChange)=\"setSortBy($event)\">\n <mat-option value=\"from\">Origem</mat-option>\n <mat-option value=\"to\">Destino</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-group\">\n <mat-label>Agrupar por</mat-label>\n <mat-select [(ngModel)]=\"groupBy\" (ngModelChange)=\"onGroupByChange()\">\n <mat-option value=\"none\">Nenhum</mat-option>\n <mat-option value=\"from\">Origem</mat-option>\n <mat-option value=\"to\">Destino</mat-option>\n <mat-option value=\"event\">Evento</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button [color]=\"showFriendly ? 'primary' : undefined\" (click)=\"toggleFriendly()\" aria-label=\"Alternar nome amigável/técnico\"><mat-icon [praxisIcon]=\"'translate'\"></mat-icon></button>\n <button mat-stroked-button (click)=\"createNew()\" aria-label=\"Nova conexão\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon> Nova conexão</button>\n <button mat-flat-button color=\"accent\" class=\"pdx-diagram-cta\" (click)=\"openDiagramFullscreen()\" aria-label=\"Abrir diagrama em tela cheia\" matTooltip=\"Visualizar conexões em grafo\"><mat-icon [praxisIcon]=\"'schema'\"></mat-icon><span>Diagrama</span></button>\n </div>\n\n <div class=\"pdx-conn-grid\">\n <!-- Left: read-only list -->\n <div class=\"pdx-conn-list\" role=\"list\" aria-label=\"Lista de conexões\" cdkScrollable>\n <mat-list *ngIf=\"filteredConnections().length; else noConns\">\n <ng-container *ngIf=\"groupBy!=='none'; else flatList\">\n <div class=\"group-block\" *ngFor=\"let g of groupedConnections(); let gi = index\">\n <div class=\"group-header\">\n <span class=\"group-title\">{{ g.label }}</span>\n <span class=\"group-count\">{{ g.list.length }}</span>\n </div>\n <mat-divider></mat-divider>\n <div class=\"group-list\">\n <ng-container *ngFor=\"let c of g.list; let i = index\">\n <mat-list-item role=\"listitem\" (click)=\"startEdit(i, c)\" [class.selected]=\"selectedIndex()===i\">\n <div class=\"card-head\" matListItemTitle [matTooltip]=\"showFriendly ? (c.from.widget + '.' + c.from.output + ' → ' + (c.to.widget + '.' + c.to.input)) : ''\">\n <mat-icon class=\"comp-icon from\" [matTooltip]=\"widgetFriendlyNameForKey(c.from.widget)\">{{ componentIconForKey(c.from.widget) }}</mat-icon>\n <span class=\"pdx-badge from\" aria-hidden=\"true\"></span>\n <span class=\"from\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</span>\n <span class=\"arrow\">→</span>\n <mat-icon class=\"comp-icon to\" [matTooltip]=\"widgetFriendlyNameForKey(c.to.widget)\">{{ componentIconForKey(c.to.widget) }}</mat-icon>\n <span class=\"pdx-badge to\" aria-hidden=\"true\"></span>\n <span class=\"to\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</span>\n <span class=\"spacer\"></span>\n <span class=\"status-pill\" [class.ok]=\"connectionStatus(c)==='ok'\" [class.warn]=\"connectionStatus(c)==='warn'\" [class.err]=\"connectionStatus(c)==='err'\">\n <mat-icon *ngIf=\"connectionStatus(c)==='ok'\">check_circle</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='warn'\">warning</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='err'\">error</mat-icon>\n </span>\n <button mat-icon-button class=\"expand-btn\" [attr.aria-expanded]=\"isExpanded(i)\" (click)=\"toggleExpanded(i, $event)\" [matTooltip]=\"isExpanded(i) ? 'Recolher detalhes' : 'Expandir detalhes'\">\n <mat-icon>{{ isExpanded(i) ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n <div class=\"meta\" *ngIf=\"showFriendly\" matListItemLine>\n <span class=\"hint\">{{ outputDescription(c) }}</span>\n <span class=\"sep\" *ngIf=\"outputDescription(c) && inputDescription(c)\">•</span>\n <span class=\"hint\">{{ inputDescription(c) }}</span>\n </div>\n <div class=\"map-chip\" *ngIf=\"c.map\" [matTooltip]=\"c.map || ''\" matListItemLine (click)=\"startEditByConn(c)\" title=\"Clique para editar Map\">\n <span class=\"pdx-badge map\" aria-hidden=\"true\"></span>\n <mat-icon class=\"map-icon\" inline>bolt</mat-icon>\n <span class=\"mono\">{{ c.map }}</span>\n </div>\n <div class=\"card-actions\" matListItemLine (click)=\"$event.stopPropagation()\">\n <span class=\"action-group\">\n <button mat-icon-button (click)=\"startEdit(i, c)\" matTooltip=\"Editar\"><mat-icon>settings</mat-icon></button>\n <button mat-icon-button (click)=\"duplicateConnection(i)\" matTooltip=\"Duplicar\"><mat-icon>content_copy</mat-icon></button>\n </span>\n <span class=\"action-group\">\n <button mat-stroked-button color=\"primary\" (click)=\"openDiagramFor(c)\" matTooltip=\"Ver relação no diagrama\"><mat-icon>schema</mat-icon><span>Diagrama</span></button>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"action-group\">\n <button mat-icon-button color=\"warn\" (click)=\"removeConnection(i)\" matTooltip=\"Remover\"><mat-icon>delete</mat-icon></button>\n </span>\n </div>\n <div class=\"card-details\" matListItemLine [class.expanded]=\"isExpanded(i)\" [style.maxHeight]=\"isExpanded(i) ? '240px' : '0px'\" [style.opacity]=\"isExpanded(i) ? 1 : 0\" [style.pointerEvents]=\"isExpanded(i) ? 'auto' : 'none'\">\n <div class=\"stepper\">\n <div class=\"step from-step\">\n <div class=\"dot from\"></div>\n <div class=\"content\">\n <div class=\"label\">De</div>\n <div class=\"value\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step to-step\">\n <div class=\"dot to\"></div>\n <div class=\"content\">\n <div class=\"label\">Para</div>\n <div class=\"value\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step map-step\" *ngIf=\"c.map\">\n <div class=\"dot map\"></div>\n <div class=\"content\">\n <div class=\"label\">Map</div>\n <div class=\"value mono\">{{ c.map }}</div>\n </div>\n </div>\n </div>\n </div>\n </mat-list-item>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #flatList>\n <ng-container *ngFor=\"let c of filteredConnections(); let i = index\">\n <mat-list-item role=\"listitem\" (click)=\"startEdit(i, c)\" [class.selected]=\"selectedIndex()===i\">\n <div class=\"card-head\" matListItemTitle [matTooltip]=\"showFriendly ? (c.from.widget + '.' + c.from.output + ' → ' + (c.to.widget + '.' + c.to.input)) : ''\">\n <mat-icon class=\"comp-icon from\" [matTooltip]=\"widgetFriendlyNameForKey(c.from.widget)\">{{ componentIconForKey(c.from.widget) }}</mat-icon>\n <span class=\"pdx-badge from\" aria-hidden=\"true\"></span>\n <span class=\"from\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</span>\n <span class=\"arrow\">→</span>\n <mat-icon class=\"comp-icon to\" [matTooltip]=\"widgetFriendlyNameForKey(c.to.widget)\">{{ componentIconForKey(c.to.widget) }}</mat-icon>\n <span class=\"pdx-badge to\" aria-hidden=\"true\"></span>\n <span class=\"to\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</span>\n <span class=\"spacer\"></span>\n <span class=\"status-pill\" [class.ok]=\"connectionStatus(c)==='ok'\" [class.warn]=\"connectionStatus(c)==='warn'\" [class.err]=\"connectionStatus(c)==='err'\">\n <mat-icon *ngIf=\"connectionStatus(c)==='ok'\">check_circle</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='warn'\">warning</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='err'\">error</mat-icon>\n </span>\n <button mat-icon-button class=\"expand-btn\" [attr.aria-expanded]=\"isExpanded(i)\" (click)=\"toggleExpanded(i, $event)\" [matTooltip]=\"isExpanded(i) ? 'Recolher detalhes' : 'Expandir detalhes'\">\n <mat-icon>{{ isExpanded(i) ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n <div class=\"meta\" *ngIf=\"showFriendly\" matListItemLine>\n <span class=\"hint\">{{ outputDescription(c) }}</span>\n <span class=\"sep\" *ngIf=\"outputDescription(c) && inputDescription(c)\">•</span>\n <span class=\"hint\">{{ inputDescription(c) }}</span>\n </div>\n <div class=\"map-chip\" *ngIf=\"c.map\" [matTooltip]=\"c.map || ''\" matListItemLine (click)=\"startEditByConn(c)\" title=\"Clique para editar Map\">\n <span class=\"pdx-badge map\" aria-hidden=\"true\"></span>\n <mat-icon class=\"map-icon\" inline>bolt</mat-icon>\n <span class=\"mono\">{{ c.map }}</span>\n </div>\n <div class=\"card-actions\" matListItemLine (click)=\"$event.stopPropagation()\">\n <span class=\"action-group\">\n <button mat-icon-button (click)=\"startEdit(i, c)\" matTooltip=\"Editar\"><mat-icon>settings</mat-icon></button>\n <button mat-icon-button (click)=\"duplicateConnection(i)\" matTooltip=\"Duplicar\"><mat-icon>content_copy</mat-icon></button>\n </span>\n <span class=\"action-group\">\n <button mat-stroked-button color=\"primary\" (click)=\"openDiagramFor(c)\" matTooltip=\"Ver relação no diagrama\"><mat-icon>schema</mat-icon><span>Diagrama</span></button>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"action-group\">\n <button mat-icon-button color=\"warn\" (click)=\"removeConnection(i)\" matTooltip=\"Remover\"><mat-icon>delete</mat-icon></button>\n </span>\n </div>\n <div class=\"card-details\" matListItemLine [class.expanded]=\"isExpanded(i)\" [style.maxHeight]=\"isExpanded(i) ? '240px' : '0px'\" [style.opacity]=\"isExpanded(i) ? 1 : 0\" [style.pointerEvents]=\"isExpanded(i) ? 'auto' : 'none'\">\n <div class=\"stepper\">\n <div class=\"step from-step\">\n <div class=\"dot from\"></div>\n <div class=\"content\">\n <div class=\"label\">De</div>\n <div class=\"value\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step to-step\">\n <div class=\"dot to\"></div>\n <div class=\"content\">\n <div class=\"label\">Para</div>\n <div class=\"value\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step map-step\" *ngIf=\"c.map\">\n <div class=\"dot map\"></div>\n <div class=\"content\">\n <div class=\"label\">Map</div>\n <div class=\"value mono\">{{ c.map }}</div>\n </div>\n </div>\n </div>\n </div>\n </mat-list-item>\n </ng-container>\n </ng-template>\n </mat-list>\n <ng-template #noConns>\n <div class=\"pdx-empty-list\" role=\"status\" aria-live=\"polite\">\n <mat-icon>link_off</mat-icon>\n <div>Nenhuma conexão definida. Use \"Nova conexão\".</div>\n </div>\n </ng-template>\n </div>\n\n <!-- Right: editor form -->\n <div class=\"pdx-conn-editor\" role=\"form\" aria-label=\"Editor de conexão\">\n <ng-container *ngIf=\"selectedIndex() >= 0; else emptyEditor\">\n <div class=\"form-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Origem (widget.key)</mat-label>\n <input matInput [(ngModel)]=\"connections()[selectedIndex()].from.widget\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Evento (output)</mat-label>\n <input matInput [(ngModel)]=\"connections()[selectedIndex()].from.output\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Destino (widget.key)</mat-label>\n <input matInput [(ngModel)]=\"connections()[selectedIndex()].to.widget\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Input</mat-label>\n <input matInput [(ngModel)]=\"connections()[selectedIndex()].to.input\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-span\">\n <mat-label>Map (opcional)</mat-label>\n <input matInput [(ngModel)]=\"connections()[selectedIndex()].map\" [placeholder]=\"mapPlaceholder\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Ex.: payload.id ou ${payload.id}.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"full-span\">\n <button mat-flat-button color=\"primary\" (click)=\"onSave()\"><mat-icon [praxisIcon]=\"'save'\"></mat-icon>Salvar</button>\n </div>\n </div>\n </ng-container>\n <ng-template #emptyEditor>\n <div class=\"pdx-empty-editor\">Selecione uma conexão para editar.</div>\n </ng-template>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BehaviorSubject } from 'rxjs';\nimport { BUILTIN_SHELL_PRESETS, ComponentDocMeta, ComponentMetadataRegistry, PraxisIconDirective, WidgetShellAction, WidgetShellConfig } from '@praxisui/core';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype ShellInputs = {\n shell?: WidgetShellConfig | null;\n widgetKey?: string;\n widgetType?: string;\n presets?: Record<string, WidgetShellConfig['appearance']> | null;\n pagePreset?: string | null;\n};\n\ntype ShellEditorResult = {\n shell: WidgetShellConfig | null;\n applyToAll?: boolean;\n pagePreset?: string;\n};\n\ntype AvailableShellAction = {\n kind: 'action' | 'command';\n id: string;\n label: string;\n icon?: string;\n scope?: NonNullable<ComponentDocMeta['actions']>[number]['scope'] | 'any';\n emit?: string;\n command?: string;\n description?: string;\n payloadExample?: any;\n};\n\ntype SetInputValueOption = {\n label: string;\n value: any;\n icon?: string;\n};\n\ntype SetInputPreset = {\n input: string;\n label: string;\n icon?: string;\n values: SetInputValueOption[];\n};\n\nconst BUILTIN_PRESET_OPTIONS: Array<{ id: string; label: string }> = [\n { id: 'dark-glass', label: 'Dark Glass' },\n { id: 'light-neutral', label: 'Light Neutral' },\n { id: 'graphite', label: 'Graphite' },\n];\n\nconst BUILTIN_PRESET_MAP = BUILTIN_SHELL_PRESETS;\n\nconst SET_INPUT_PRESETS: Record<string, SetInputPreset[]> = {\n 'praxis-dynamic-form': [\n {\n input: 'mode',\n label: 'Modo',\n icon: 'toggle_on',\n values: [\n { label: 'Visualização', value: 'view', icon: 'visibility' },\n { label: 'Edição', value: 'edit', icon: 'edit' },\n { label: 'Criação', value: 'create', icon: 'add' },\n ],\n },\n {\n input: 'schemaSource',\n label: 'Fonte do schema',\n icon: 'schema',\n values: [\n { label: 'Recurso', value: 'resource' },\n { label: 'Filtro', value: 'filter' },\n ],\n },\n {\n input: 'notifyIfOutdated',\n label: 'Notificação de schema',\n icon: 'notification_important',\n values: [\n { label: 'Inline', value: 'inline' },\n { label: 'Snackbar', value: 'snackbar' },\n { label: 'Ambos', value: 'both' },\n { label: 'Nenhum', value: 'none' },\n ],\n },\n {\n input: 'removeEmptyContainersOnSave',\n label: 'Remover containers vazios',\n icon: 'cleaning_services',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'autoOpenSettingsOnOutdated',\n label: 'Abrir editor automático',\n icon: 'open_in_new',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'readonlyModeGlobal',\n label: 'Somente leitura global',\n icon: 'lock',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'disabledModeGlobal',\n label: 'Desabilitar global',\n icon: 'block',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'presentationModeGlobal',\n label: 'Modo apresentação',\n icon: 'slideshow',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'visibleGlobal',\n label: 'Visibilidade global',\n icon: 'visibility',\n values: [\n { label: 'Exibir', value: true },\n { label: 'Ocultar', value: false },\n ],\n },\n ],\n 'praxis-table': [\n {\n input: 'showToolbar',\n label: 'Toolbar',\n icon: 'toolbar',\n values: [\n { label: 'Exibir', value: true },\n { label: 'Ocultar', value: false },\n ],\n },\n {\n input: 'toolbarV2',\n label: 'Toolbar v2',\n icon: 'view_compact',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'autoDelete',\n label: 'Auto delete',\n icon: 'delete_forever',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'dense',\n label: 'Modo compacto',\n icon: 'compress',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n ],\n 'praxis-stepper': [\n {\n input: 'inputs.config.orientation',\n label: 'Orientação',\n icon: 'swap_vert',\n values: [\n { label: 'Horizontal', value: 'horizontal' },\n { label: 'Vertical', value: 'vertical' },\n ],\n },\n {\n input: 'inputs.config.headerPosition',\n label: 'Posição do cabeçalho',\n icon: 'vertical_align_top',\n values: [\n { label: 'Topo', value: 'top' },\n { label: 'Base', value: 'bottom' },\n ],\n },\n {\n input: 'inputs.config.linear',\n label: 'Modo linear',\n icon: 'linear_scale',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'inputs.config.navigation.variant',\n label: 'Navegação (variante)',\n icon: 'tune',\n values: [\n { label: 'Basic', value: 'basic' },\n { label: 'Flat', value: 'flat' },\n { label: 'Stroked', value: 'stroked' },\n { label: 'Raised', value: 'raised' },\n ],\n },\n {\n input: 'inputs.config.navigation.align',\n label: 'Navegação (alinhamento)',\n icon: 'format_align_center',\n values: [\n { label: 'Início', value: 'start' },\n { label: 'Centro', value: 'center' },\n { label: 'Fim', value: 'end' },\n { label: 'Espaçado', value: 'space-between' },\n ],\n },\n {\n input: 'labelPosition',\n label: 'Posição do rótulo',\n icon: 'format_align_center',\n values: [\n { label: 'Abaixo', value: 'bottom' },\n { label: 'Ao lado', value: 'end' },\n ],\n },\n {\n input: 'density',\n label: 'Densidade',\n icon: 'density_small',\n values: [\n { label: 'Padrão', value: 'default' },\n { label: 'Confortável', value: 'comfortable' },\n { label: 'Compacto', value: 'compact' },\n ],\n },\n ],\n 'praxis-expansion': [\n {\n input: 'strictValidation',\n label: 'Validação estrita',\n icon: 'rule',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n ],\n};\n\n@Component({\n selector: 'praxis-widget-shell-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDividerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n PraxisIconDirective,\n ],\n template: `\n <div class=\"shell-editor\">\n <div class=\"shell-head\">\n <div>\n <div class=\"shell-title\">Configurar Card</div>\n <div class=\"shell-subtitle\">Defina título, ícone e ações do cabeçalho.</div>\n </div>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n <div class=\"shell-section\">Geral</div>\n <div class=\"shell-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo de card</mat-label>\n <mat-select [formControl]=\"form.controls.kind\">\n <mat-option value=\"dashboard-card\">Dashboard Card</mat-option>\n <mat-option value=\"none\">Sem shell</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Preset</mat-label>\n <mat-select [formControl]=\"form.controls.preset\">\n <mat-option value=\"\">Nenhum</mat-option>\n <mat-option *ngIf=\"pagePreset\" [value]=\"pagePreset\">Usar preset da página ({{ pagePreset }})</mat-option>\n <mat-option *ngFor=\"let p of presetOptions\" [value]=\"p.id\">{{ p.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"shell-hint\" *ngIf=\"!form.controls.preset.value && pagePreset\">\n Preset da página: {{ pagePreset }}\n </div>\n <mat-checkbox [formControl]=\"form.controls.applyToAll\" *ngIf=\"form.controls.preset.value\">\n Aplicar preset como padrão da página\n </mat-checkbox>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [formControl]=\"form.controls.icon\" placeholder=\"ex: badge\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [formControl]=\"form.controls.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitle\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mostrar cabeçalho</mat-label>\n <mat-select [formControl]=\"form.controls.showHeader\">\n <mat-option value=\"auto\">Automático</mat-option>\n <mat-option value=\"true\">Sempre</mat-option>\n <mat-option value=\"false\">Nunca</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"shell-section\">Controles de janela</div>\n <div class=\"shell-flags\">\n <mat-checkbox [formControl]=\"form.controls.collapsible\">Permitir recolher</mat-checkbox>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"shell-section\">Aparência</div>\n <div class=\"shell-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do card</mat-label>\n <input matInput [formControl]=\"form.controls.cardBg\" placeholder=\"ex: #0b1220\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da borda</mat-label>\n <input matInput [formControl]=\"form.controls.cardBorder\" placeholder=\"ex: rgba(255,255,255,0.12)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Raio da borda</mat-label>\n <input matInput [formControl]=\"form.controls.cardRadius\" placeholder=\"ex: 14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [formControl]=\"form.controls.cardShadow\" placeholder=\"ex: 0 10px 30px rgba(0,0,0,0.2)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do cabeçalho</mat-label>\n <input matInput [formControl]=\"form.controls.headerBg\" placeholder=\"ex: linear-gradient(...)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Borda do cabeçalho</mat-label>\n <input matInput [formControl]=\"form.controls.headerBorder\" placeholder=\"ex: rgba(255,255,255,0.08)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleColor\" placeholder=\"ex: #e6edf3\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitleColor\" placeholder=\"ex: #9fb0c4\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do ícone</mat-label>\n <input matInput [formControl]=\"form.controls.iconColor\" placeholder=\"ex: #8ab4ff\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyBg\" placeholder=\"ex: transparent\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do texto do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyColor\" placeholder=\"ex: #e6edf3\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyPadding\" placeholder=\"ex: 10px 12px 12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleSize\" placeholder=\"ex: 14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleWeight\" placeholder=\"ex: 600\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitleSize\" placeholder=\"ex: 12px\" />\n </mat-form-field>\n </div>\n\n <div class=\"shell-preview\" [ngStyle]=\"previewVars()\">\n <div class=\"shell-preview-card\" [class.no-shell]=\"form.controls.kind.value === 'none'\" [class.expanded]=\"previewExpanded\">\n <div class=\"shell-preview-header\" *ngIf=\"previewShowHeader()\">\n <div class=\"shell-preview-title\">\n <mat-icon *ngIf=\"form.controls.icon.value\" [praxisIcon]=\"form.controls.icon.value\"></mat-icon>\n <div class=\"shell-preview-text\">\n <div class=\"shell-preview-title-text\">{{ previewTitle() }}</div>\n <div class=\"shell-preview-subtitle\">{{ previewSubtitle() }}</div>\n </div>\n </div>\n <div class=\"shell-preview-actions\">\n <button\n *ngFor=\"let action of previewHeaderActions()\"\n type=\"button\"\n [disabled]=\"action.disabled\"\n [ngClass]=\"action.variant === 'outlined' ? 'pdx-preview-outlined' : 'pdx-preview-text'\"\n mat-button\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n <span class=\"pdx-preview-label\">{{ action.label || action.id }}</span>\n </button>\n <button\n *ngIf=\"previewOverflowCount()\"\n mat-icon-button\n type=\"button\"\n aria-label=\"Mais ações\"\n >\n <mat-icon>more_horiz</mat-icon>\n </button>\n <button\n *ngFor=\"let action of previewWindowActions()\"\n mat-icon-button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.label || action.id\"\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n </button>\n <button mat-icon-button type=\"button\" (click)=\"togglePreviewCollapse()\" aria-label=\"Recolher\">\n <mat-icon>{{ previewCollapsed ? 'unfold_more' : 'unfold_less' }}</mat-icon>\n </button>\n <button mat-icon-button type=\"button\" (click)=\"togglePreviewExpand()\" aria-label=\"Expandir\">\n <mat-icon>{{ previewExpanded ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"shell-preview-body\" [class.hidden]=\"previewCollapsed\">Conteudo do widget</div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"shell-section\" *ngIf=\"hasAvailableActions\">Ações disponíveis</div>\n <div class=\"shell-available\" *ngIf=\"hasAvailableActions; else noAvailableActions\">\n <div class=\"shell-available-toolbar\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Buscar ação</mat-label>\n <input matInput [formControl]=\"actionQuery\" placeholder=\"ex: export, editar, submit\" />\n </mat-form-field>\n <div class=\"shell-available-filters\">\n <mat-checkbox [(ngModel)]=\"showScopeShell\">Shell</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeAny\">Any</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeToolbar\">Toolbar</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeContext\">Context</mat-checkbox>\n </div>\n </div>\n <div class=\"shell-available-list\">\n <div class=\"shell-available-item\" *ngFor=\"let action of filteredAvailableActions()\">\n <div class=\"shell-available-main\">\n <div class=\"shell-available-title\">\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n <div class=\"shell-available-text\">\n <div class=\"shell-available-label\">{{ action.label }}</div>\n <div class=\"shell-available-meta\">\n <span class=\"shell-badge\">{{ action.kind === 'command' ? 'Comando' : 'Ação' }}</span>\n <span class=\"shell-badge\">{{ scopeLabel(action.scope) }}</span>\n <span class=\"shell-code\">id: {{ action.id }}</span>\n <span *ngIf=\"action.emit\" class=\"shell-code\">emit: {{ action.emit }}</span>\n <span *ngIf=\"action.command\" class=\"shell-code\">command: {{ action.command }}</span>\n </div>\n </div>\n </div>\n <div class=\"shell-available-desc\" *ngIf=\"action.description\">{{ action.description }}</div>\n <div class=\"shell-available-payload\" *ngIf=\"action.payloadExample !== undefined\">\n <span class=\"shell-code\">payload: {{ stringifyPayload(action.payloadExample) }}</span>\n </div>\n <div class=\"shell-available-warning\" *ngIf=\"action.scope === 'context'\">\n Essa ação depende de item/linha selecionado; payload fixo pode não funcionar.\n </div>\n </div>\n <div class=\"shell-available-actions\">\n <button\n mat-stroked-button\n type=\"button\"\n [color]=\"isActionSelected(action) ? 'warn' : 'primary'\"\n (click)=\"toggleAvailableAction(action)\"\n >\n {{ isActionSelected(action) ? 'Remover' : 'Adicionar' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noAvailableActions>\n <div class=\"shell-empty\">Nenhuma ação registrada para este componente.</div>\n </ng-template>\n\n <mat-divider *ngIf=\"hasAvailableActions\"></mat-divider>\n\n <div class=\"shell-section\" *ngIf=\"setInputPresets.length\">Ações rápidas (inputs)</div>\n <div class=\"shell-quick-inputs\" *ngIf=\"setInputPresets.length\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Input</mat-label>\n <mat-select [formControl]=\"setInputTarget\">\n <mat-option *ngFor=\"let preset of setInputPresets\" [value]=\"preset.input\">\n <mat-icon *ngIf=\"preset.icon\" [praxisIcon]=\"preset.icon\"></mat-icon>\n {{ preset.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"shell-input-path\" *ngIf=\"setInputTarget.value\">\n Input: {{ displayInputPath(setInputTarget.value) }}\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Valor</mat-label>\n <mat-select [formControl]=\"setInputValue\">\n <mat-option *ngFor=\"let option of currentSetInputValues()\" [value]=\"option.value\">\n <mat-icon *ngIf=\"option.icon\" [praxisIcon]=\"option.icon\"></mat-icon>\n {{ option.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addSetInputAction()\">\n Adicionar ação\n </button>\n </div>\n\n <div class=\"shell-section shell-actions-head\">\n <div>Ações do cabeçalho</div>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addAction()\">Adicionar ação</button>\n </div>\n\n <div class=\"shell-actions\" *ngIf=\"actions.controls.length; else emptyActions\">\n <div class=\"shell-action\" *ngFor=\"let action of actions.controls; let i = index\" [formGroup]=\"action\">\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput formControlName=\"id\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Label</mat-label>\n <input matInput formControlName=\"label\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput formControlName=\"icon\" />\n </mat-form-field>\n </div>\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select formControlName=\"variant\">\n <mat-option value=\"text\">Texto</mat-option>\n <mat-option value=\"outlined\">Outlined</mat-option>\n <mat-option value=\"icon\">Ícone</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <mat-select formControlName=\"placement\">\n <mat-option value=\"header\">Cabeçalho</mat-option>\n <mat-option value=\"window\">Janela</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Emit</mat-label>\n <input matInput formControlName=\"emit\" placeholder=\"ex: editar\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tooltip</mat-label>\n <input matInput formControlName=\"tooltip\" />\n </mat-form-field>\n </div>\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Command</mat-label>\n <input matInput formControlName=\"command\" placeholder=\"ex: add-item\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Payload (JSON)</mat-label>\n <textarea matInput rows=\"2\" formControlName=\"payload\" placeholder='ex: {\"foo\":\"bar\"}'></textarea>\n </mat-form-field>\n <mat-checkbox formControlName=\"visible\">Visível</mat-checkbox>\n <mat-checkbox formControlName=\"disabled\">Desabilitado</mat-checkbox>\n </div>\n <div class=\"shell-action-hint\" *ngIf=\"showActionInputPath(action.value)\">\n Input: {{ displayInputPath(extractActionInput(action.value)) }}\n </div>\n <div class=\"shell-action-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\" (click)=\"removeAction(i)\">Remover</button>\n </div>\n </div>\n </div>\n\n <ng-template #emptyActions>\n <div class=\"shell-empty\">Nenhuma ação configurada.</div>\n </ng-template>\n </div>\n `,\n styles: [\n `\n .shell-editor {\n display: grid;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .shell-head { display: flex; align-items: center; gap: 12px; }\n .shell-title { font-weight: 600; }\n .shell-subtitle { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-section { font-weight: 600; margin-top: 8px; }\n .shell-grid {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n .shell-flags { display: flex; gap: 16px; align-items: center; }\n .shell-actions-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .shell-available { display: grid; gap: 12px; }\n .shell-available-toolbar { display: grid; gap: 12px; grid-template-columns: minmax(200px, 1fr); }\n .shell-available-filters { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\n .shell-available-list { display: grid; gap: 10px; }\n .shell-available-item { display: grid; gap: 8px; grid-template-columns: 1fr auto; border: 1px solid var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; background: var(--md-sys-color-surface-container-low); }\n .shell-available-title { display: flex; align-items: center; gap: 10px; }\n .shell-available-text { display: grid; gap: 4px; }\n .shell-available-label { font-weight: 600; }\n .shell-available-meta { display: flex; gap: 8px; flex-wrap: wrap; font-size: 11px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-desc { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-payload { font-size: 11px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-warning { font-size: 11px; color: var(--md-sys-color-error); }\n .shell-available-actions { display: flex; align-items: flex-start; justify-content: flex-end; }\n .shell-badge { padding: 2px 6px; border-radius: 999px; border: 1px solid var(--md-sys-color-outline-variant); font-size: 10px; }\n .shell-code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; }\n .shell-actions { display: grid; gap: 12px; }\n .shell-action { border: 1px solid var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; display: grid; gap: 8px; }\n .shell-action-row { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }\n .shell-action-actions { display: flex; justify-content: flex-end; }\n .shell-action-hint { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-empty { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-hint { align-self: center; font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-quick-inputs { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); align-items: end; }\n .shell-input-path { font-size: 12px; color: var(--md-sys-color-on-surface-variant); align-self: center; }\n .shell-editor .mat-mdc-form-field { width: 100%; }\n .shell-preview { border: 1px dashed var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; }\n .shell-preview-card {\n background: var(--pdx-shell-card-bg, var(--md-sys-color-surface));\n border: 1px solid var(--pdx-shell-card-border, var(--md-sys-color-outline-variant));\n border-radius: var(--pdx-shell-card-radius, 14px);\n box-shadow: var(--pdx-shell-card-shadow, var(--mat-elevation-level2));\n overflow: hidden;\n }\n .shell-preview-card.no-shell { background: transparent; border: none; box-shadow: none; }\n .shell-preview-card.expanded { box-shadow: var(--pdx-shell-card-shadow, 0 16px 34px rgba(0,0,0,0.32)); transform: scale(1.01); }\n .shell-preview-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px 8px 12px;\n border-bottom: 1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));\n background: var(--pdx-shell-header-bg, var(--md-sys-color-surface-container));\n }\n .shell-preview-title { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1; color: var(--pdx-shell-title-color, inherit); }\n .shell-preview-title mat-icon { color: var(--pdx-shell-icon-color, currentColor); }\n .shell-preview-text { min-width: 0; }\n .shell-preview-title-text { font-weight: var(--pdx-shell-title-weight, 600); font-size: var(--pdx-shell-title-size, 14px); line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shell-preview-subtitle { font-size: var(--pdx-shell-subtitle-size, 12px); opacity: 0.75; color: var(--pdx-shell-subtitle-color, currentColor); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shell-preview-actions { display: flex; align-items: center; gap: 6px; }\n .pdx-preview-text { padding: 0 8px; }\n .pdx-preview-outlined {\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 999px;\n padding: 0 10px;\n }\n .pdx-preview-label { font-size: 12px; font-weight: 500; }\n .shell-preview-body { padding: var(--pdx-shell-body-padding, 10px 12px 12px 12px); background: var(--pdx-shell-body-bg, transparent); color: var(--pdx-shell-body-color, inherit); font-size: 12px; }\n .shell-preview-body.hidden { display: none; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetShellEditorComponent implements SettingsValueProvider {\n form = new FormGroup({\n kind: new FormControl<'dashboard-card' | 'none'>('dashboard-card', { nonNullable: true }),\n preset: new FormControl<string>('', { nonNullable: true }),\n applyToAll: new FormControl<boolean>(false, { nonNullable: true }),\n title: new FormControl<string>('', { nonNullable: true }),\n subtitle: new FormControl<string>('', { nonNullable: true }),\n icon: new FormControl<string>('', { nonNullable: true }),\n showHeader: new FormControl<'auto' | 'true' | 'false'>('auto', { nonNullable: true }),\n collapsible: new FormControl<boolean>(true, { nonNullable: true }),\n cardBg: new FormControl<string>('', { nonNullable: true }),\n cardBorder: new FormControl<string>('', { nonNullable: true }),\n cardRadius: new FormControl<string>('', { nonNullable: true }),\n cardShadow: new FormControl<string>('', { nonNullable: true }),\n headerBg: new FormControl<string>('', { nonNullable: true }),\n headerBorder: new FormControl<string>('', { nonNullable: true }),\n titleColor: new FormControl<string>('', { nonNullable: true }),\n subtitleColor: new FormControl<string>('', { nonNullable: true }),\n iconColor: new FormControl<string>('', { nonNullable: true }),\n bodyBg: new FormControl<string>('', { nonNullable: true }),\n bodyColor: new FormControl<string>('', { nonNullable: true }),\n bodyPadding: new FormControl<string>('', { nonNullable: true }),\n titleSize: new FormControl<string>('', { nonNullable: true }),\n titleWeight: new FormControl<string>('', { nonNullable: true }),\n subtitleSize: new FormControl<string>('', { nonNullable: true }),\n actions: new FormArray<FormGroup>([]),\n });\n\n private readonly initialShell = new BehaviorSubject<WidgetShellConfig | null>(null);\n private readonly dirtySubject = new BehaviorSubject<boolean>(false);\n private readonly validSubject = new BehaviorSubject<boolean>(true);\n private readonly busySubject = new BehaviorSubject<boolean>(false);\n\n isDirty$ = this.dirtySubject.asObservable();\n isValid$ = this.validSubject.asObservable();\n isBusy$ = this.busySubject.asObservable();\n\n private snapshot = '';\n presetOptions: Array<{ id: string; label: string }> = [...BUILTIN_PRESET_OPTIONS];\n private presets: Record<string, WidgetShellConfig['appearance']> = { ...BUILTIN_PRESET_MAP };\n availableActions: AvailableShellAction[] = [];\n actionQuery = new FormControl<string>('', { nonNullable: true });\n showScopeShell = true;\n showScopeAny = true;\n showScopeToolbar = false;\n showScopeContext = false;\n setInputPresets: SetInputPreset[] = [];\n setInputTarget = new FormControl<string>('', { nonNullable: true });\n setInputValue = new FormControl<any>(null);\n previewCollapsed = false;\n previewExpanded = false;\n pagePreset: string | null = null;\n constructor(\n @Optional() @Inject(SETTINGS_PANEL_DATA) data?: ShellInputs | null,\n @Optional() private registry?: ComponentMetadataRegistry | null,\n ) {\n const customPresets = data?.presets || {};\n const customOptions = Object.keys(customPresets).map((id) => ({ id, label: id }));\n this.presetOptions = [...BUILTIN_PRESET_OPTIONS, ...customOptions];\n this.presets = { ...BUILTIN_PRESET_MAP, ...customPresets };\n this.pagePreset = data?.pagePreset || null;\n const shell = data?.shell || null;\n this.initialShell.next(shell);\n this.applyShell(shell);\n this.loadAvailableActions(data?.widgetType || null);\n this.loadSetInputPresets(data?.widgetType || null);\n\n this.form.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.validSubject.next(this.form.valid);\n const current = this.snapshotValue();\n this.dirtySubject.next(current !== this.snapshot);\n });\n\n this.form.controls.preset.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n if (!value && this.form.controls.applyToAll.value) {\n this.form.controls.applyToAll.setValue(false, { emitEvent: false });\n }\n });\n\n this.setInputTarget.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n const next = this.currentSetInputValues()[0];\n if (next) this.setInputValue.setValue(next.value, { emitEvent: false });\n });\n }\n\n get actions(): FormArray<FormGroup> {\n return this.form.controls.actions;\n }\n\n get hasAvailableActions(): boolean {\n return !!this.availableActions.length;\n }\n\n addAction(seed?: Partial<WidgetShellAction>): void {\n this.actions.push(this.createActionGroup(seed));\n }\n\n removeAction(index: number): void {\n this.actions.removeAt(index);\n }\n\n getSettingsValue(): ShellEditorResult {\n return this.buildResult();\n }\n\n onSave(): ShellEditorResult {\n return this.buildResult();\n }\n\n reset(): void {\n const shell = this.initialShell.value;\n this.applyShell(shell);\n }\n\n private applyShell(shell: WidgetShellConfig | null): void {\n const showHeader = shell?.showHeader == null ? 'auto' : shell.showHeader ? 'true' : 'false';\n const window = shell?.windowActions || {};\n const appearance = shell?.appearance || {};\n const card = appearance.card || {};\n const header = appearance.header || {};\n const body = appearance.body || {};\n const typography = appearance.typography || {};\n this.form.setControl('actions', new FormArray<FormGroup>(\n (shell?.actions || []).map((a) => this.createActionGroup(a)),\n ));\n this.form.setValue(\n {\n kind: shell?.kind === 'none' ? 'none' : 'dashboard-card',\n preset: shell?.preset || '',\n applyToAll: false,\n title: shell?.title || '',\n subtitle: shell?.subtitle || '',\n icon: shell?.icon || '',\n showHeader,\n collapsible: window.collapsible !== false,\n cardBg: card.background || '',\n cardBorder: card.borderColor || '',\n cardRadius: card.borderRadius || '',\n cardShadow: card.shadow || '',\n headerBg: header.background || '',\n headerBorder: header.borderColor || '',\n titleColor: header.titleColor || '',\n subtitleColor: header.subtitleColor || '',\n iconColor: header.iconColor || '',\n bodyBg: body.background || '',\n bodyColor: body.textColor || '',\n bodyPadding: body.padding || '',\n titleSize: typography.titleSize || '',\n titleWeight: typography.titleWeight || '',\n subtitleSize: typography.subtitleSize || '',\n actions: this.actions.value,\n },\n { emitEvent: false },\n );\n this.snapshot = this.snapshotValue();\n this.dirtySubject.next(false);\n this.validSubject.next(this.form.valid);\n }\n\n private loadAvailableActions(widgetType: string | null): void {\n if (!widgetType || !this.registry) {\n this.availableActions = [];\n return;\n }\n const meta = this.registry.get(widgetType);\n const actions = (meta?.actions || []).map((action) => ({\n kind: 'action',\n id: action.id,\n label: action.label || action.id,\n icon: action.icon,\n scope: action.scope || 'any',\n emit: action.emit,\n command: action.command,\n description: action.description,\n payloadExample: action.payloadSchema?.example,\n })) as AvailableShellAction[];\n const commands = (meta?.commands || []).map((command) => ({\n kind: 'command',\n id: command.name,\n label: command.label || command.name,\n icon: command.icon,\n scope: 'any',\n command: command.name,\n description: command.description,\n payloadExample: command.payloadSchema?.example,\n })) as AvailableShellAction[];\n this.availableActions = [...actions, ...commands];\n }\n\n private createActionGroup(seed?: Partial<WidgetShellAction>): FormGroup {\n return new FormGroup({\n id: new FormControl<string>(seed?.id || '', { nonNullable: true, validators: [Validators.required] }),\n label: new FormControl<string>(seed?.label || '', { nonNullable: true }),\n icon: new FormControl<string>(seed?.icon || '', { nonNullable: true }),\n variant: new FormControl<WidgetShellAction['variant']>(seed?.variant || 'text', { nonNullable: true }),\n placement: new FormControl<WidgetShellAction['placement']>(seed?.placement || 'header', { nonNullable: true }),\n emit: new FormControl<string>(seed?.emit || '', { nonNullable: true }),\n tooltip: new FormControl<string>(seed?.tooltip || '', { nonNullable: true }),\n command: new FormControl<string>(seed?.command || '', { nonNullable: true }),\n payload: new FormControl<string>(seed?.payload != null ? JSON.stringify(seed.payload) : '', { nonNullable: true }),\n visible: new FormControl<boolean>(seed?.visible !== false, { nonNullable: true }),\n disabled: new FormControl<boolean>(!!seed?.disabled, { nonNullable: true }),\n });\n }\n\n private buildShell(): WidgetShellConfig | null {\n const raw = this.form.getRawValue();\n if (raw.kind === 'none') {\n return { kind: 'none' };\n }\n\n const shell: WidgetShellConfig = {};\n if (raw.preset) shell.preset = raw.preset;\n if (raw.title.trim()) shell.title = raw.title.trim();\n if (raw.subtitle.trim()) shell.subtitle = raw.subtitle.trim();\n if (raw.icon.trim()) shell.icon = raw.icon.trim();\n if (raw.showHeader !== 'auto') shell.showHeader = raw.showHeader === 'true';\n\n const windowActions: WidgetShellConfig['windowActions'] = {};\n if (!raw.collapsible) windowActions.collapsible = false;\n if (Object.keys(windowActions).length) shell.windowActions = windowActions;\n\n const actions = (raw.actions || [])\n .map((a) => this.normalizeAction(a))\n .filter((a) => a.id);\n if (actions.length) shell.actions = actions;\n\n const appearance = this.buildAppearance(raw);\n if (appearance) shell.appearance = appearance;\n\n return shell;\n }\n\n private buildResult(): ShellEditorResult {\n const raw = this.form.getRawValue();\n const shell = this.buildShell();\n const applyToAll = !!raw.applyToAll && !!raw.preset;\n return {\n shell,\n applyToAll,\n pagePreset: applyToAll ? raw.preset : undefined,\n };\n }\n\n private buildAppearance(raw: any): WidgetShellConfig['appearance'] | undefined {\n const card: NonNullable<WidgetShellConfig['appearance']>['card'] = {};\n const header: NonNullable<WidgetShellConfig['appearance']>['header'] = {};\n const body: NonNullable<WidgetShellConfig['appearance']>['body'] = {};\n const typography: NonNullable<WidgetShellConfig['appearance']>['typography'] = {};\n\n if (raw.cardBg) card.background = raw.cardBg.trim();\n if (raw.cardBorder) card.borderColor = raw.cardBorder.trim();\n if (raw.cardRadius) card.borderRadius = raw.cardRadius.trim();\n if (raw.cardShadow) card.shadow = raw.cardShadow.trim();\n\n if (raw.headerBg) header.background = raw.headerBg.trim();\n if (raw.headerBorder) header.borderColor = raw.headerBorder.trim();\n if (raw.titleColor) header.titleColor = raw.titleColor.trim();\n if (raw.subtitleColor) header.subtitleColor = raw.subtitleColor.trim();\n if (raw.iconColor) header.iconColor = raw.iconColor.trim();\n\n if (raw.bodyBg) body.background = raw.bodyBg.trim();\n if (raw.bodyColor) body.textColor = raw.bodyColor.trim();\n if (raw.bodyPadding) body.padding = raw.bodyPadding.trim();\n\n if (raw.titleSize) typography.titleSize = raw.titleSize.trim();\n if (raw.titleWeight) typography.titleWeight = raw.titleWeight.trim();\n if (raw.subtitleSize) typography.subtitleSize = raw.subtitleSize.trim();\n\n const appearance: WidgetShellConfig['appearance'] = {};\n if (Object.keys(card).length) appearance.card = card;\n if (Object.keys(header).length) appearance.header = header;\n if (Object.keys(body).length) appearance.body = body;\n if (Object.keys(typography).length) appearance.typography = typography;\n\n return Object.keys(appearance).length ? appearance : undefined;\n }\n\n previewVars(): Record<string, string | null> {\n const appearance = this.buildPreviewAppearance();\n return {\n '--pdx-shell-card-bg': appearance?.card?.background || null,\n '--pdx-shell-card-border': appearance?.card?.borderColor || null,\n '--pdx-shell-card-radius': appearance?.card?.borderRadius || null,\n '--pdx-shell-card-shadow': appearance?.card?.shadow || null,\n '--pdx-shell-header-bg': appearance?.header?.background || null,\n '--pdx-shell-header-border': appearance?.header?.borderColor || null,\n '--pdx-shell-title-color': appearance?.header?.titleColor || null,\n '--pdx-shell-subtitle-color': appearance?.header?.subtitleColor || null,\n '--pdx-shell-icon-color': appearance?.header?.iconColor || null,\n '--pdx-shell-body-bg': appearance?.body?.background || null,\n '--pdx-shell-body-color': appearance?.body?.textColor || null,\n '--pdx-shell-body-padding': appearance?.body?.padding || null,\n '--pdx-shell-title-size': appearance?.typography?.titleSize || null,\n '--pdx-shell-title-weight': appearance?.typography?.titleWeight || null,\n '--pdx-shell-subtitle-size': appearance?.typography?.subtitleSize || null,\n };\n }\n\n previewShowHeader(): boolean {\n const raw = this.form.getRawValue();\n if (raw.kind === 'none') return false;\n if (raw.showHeader === 'true') return true;\n if (raw.showHeader === 'false') return false;\n return !!(raw.title || raw.subtitle || raw.icon);\n }\n\n previewTitle(): string {\n const title = this.form.controls.title.value.trim();\n return title || 'Titulo do card';\n }\n\n previewSubtitle(): string {\n const subtitle = this.form.controls.subtitle.value.trim();\n return subtitle || 'Subtitulo opcional';\n }\n\n private buildPreviewAppearance(): WidgetShellConfig['appearance'] | undefined {\n const raw = this.form.getRawValue();\n const presetId = raw.preset || this.pagePreset || '';\n const base = presetId ? this.presets[presetId] : undefined;\n const override = this.buildAppearance(raw);\n return this.mergeAppearance(base, override);\n }\n\n private mergeAppearance(\n base?: WidgetShellConfig['appearance'],\n override?: WidgetShellConfig['appearance'],\n ): WidgetShellConfig['appearance'] | undefined {\n if (!base && !override) return undefined;\n const out: WidgetShellConfig['appearance'] = {};\n const mergeSection = <T extends object>(key: keyof NonNullable<WidgetShellConfig['appearance']>) => {\n const a = (base && base[key]) || undefined;\n const b = (override && override[key]) || undefined;\n if (!a && !b) return;\n out[key] = { ...(a || {}), ...(b || {}) } as any;\n };\n mergeSection('card');\n mergeSection('header');\n mergeSection('body');\n mergeSection('typography');\n return out;\n }\n\n togglePreviewCollapse(): void {\n this.previewCollapsed = !this.previewCollapsed;\n }\n\n togglePreviewExpand(): void {\n this.previewExpanded = !this.previewExpanded;\n }\n\n previewHeaderActions(): WidgetShellAction[] {\n const actions = this.previewActions().filter((a) => (a.placement || 'header') === 'header');\n return actions.slice(0, 3);\n }\n\n previewOverflowCount(): number {\n const actions = this.previewActions().filter((a) => (a.placement || 'header') === 'header');\n return Math.max(0, actions.length - 3);\n }\n\n previewWindowActions(): WidgetShellAction[] {\n return this.previewActions().filter((a) => (a.placement || 'header') === 'window');\n }\n\n private normalizeAction(raw: any): WidgetShellAction {\n const action: WidgetShellAction = { id: String(raw.id || '').trim() };\n const label = String(raw.label || '').trim();\n const icon = String(raw.icon || '').trim();\n const emit = String(raw.emit || '').trim();\n const tooltip = String(raw.tooltip || '').trim();\n const command = String(raw.command || '').trim();\n if (label) action.label = label;\n if (icon) action.icon = icon;\n if (emit) action.emit = emit;\n if (tooltip) action.tooltip = tooltip;\n if (command) action.command = command;\n if (raw.variant && raw.variant !== 'text') action.variant = raw.variant;\n if (raw.placement && raw.placement !== 'header') action.placement = raw.placement;\n if (raw.visible === false) action.visible = false;\n if (raw.disabled === true) action.disabled = true;\n const payload = this.tryParsePayload(raw.payload);\n if (payload !== undefined) action.payload = payload;\n return action;\n }\n\n private tryParsePayload(raw: any): any {\n const value = String(raw || '').trim();\n if (!value) return undefined;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n\n private snapshotValue(): string {\n try {\n return JSON.stringify(this.buildResult());\n } catch {\n return '';\n }\n }\n\n filteredAvailableActions(): AvailableShellAction[] {\n const query = this.actionQuery.value.trim().toLowerCase();\n const scopes = new Set<string>();\n if (this.showScopeShell) scopes.add('shell');\n if (this.showScopeAny) scopes.add('any');\n if (this.showScopeToolbar) scopes.add('toolbar');\n if (this.showScopeContext) scopes.add('context');\n return this.availableActions.filter((action) => {\n const scope = action.scope || 'any';\n if (!scopes.has(scope)) return false;\n if (!query) return true;\n const hay = [\n action.label,\n action.id,\n action.description,\n action.emit,\n action.command,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n return hay.includes(query);\n });\n }\n\n isActionSelected(action: AvailableShellAction): boolean {\n return this.findActionIndex(action) >= 0;\n }\n\n toggleAvailableAction(action: AvailableShellAction): void {\n const idx = this.findActionIndex(action);\n if (idx >= 0) {\n this.removeAction(idx);\n return;\n }\n this.addAction({\n id: action.id,\n label: action.label,\n icon: action.icon,\n emit: action.emit,\n command: action.command,\n payload: action.payloadExample,\n });\n }\n\n scopeLabel(scope?: string): string {\n const value = scope || 'any';\n if (value === 'shell') return 'Shell';\n if (value === 'toolbar') return 'Toolbar';\n if (value === 'context') return 'Context';\n return 'Any';\n }\n\n stringifyPayload(payload: any): string {\n if (payload === null) return 'null';\n if (payload === undefined) return 'undefined';\n if (typeof payload === 'string') return payload;\n try {\n return JSON.stringify(payload);\n } catch {\n return String(payload);\n }\n }\n\n displayInputPath(path: string): string {\n const trimmed = String(path || '').trim();\n if (!trimmed) return '';\n return trimmed.replace(/^inputs\\./, '');\n }\n\n extractActionInput(actionValue: any): string {\n const payload = this.tryParsePayload(actionValue?.payload);\n const input = typeof payload?.input === 'string' ? payload.input.trim() : '';\n return input;\n }\n\n showActionInputPath(actionValue: any): boolean {\n const command = String(actionValue?.command || '').trim();\n if (command !== 'pdx:set-input') return false;\n return !!this.extractActionInput(actionValue);\n }\n\n currentSetInputValues(): SetInputValueOption[] {\n const preset = this.setInputPresets.find((p) => p.input === this.setInputTarget.value);\n return preset?.values || [];\n }\n\n addSetInputAction(): void {\n const preset = this.setInputPresets.find((p) => p.input === this.setInputTarget.value);\n if (!preset) return;\n const selected = this.currentSetInputValues().find((v) => v.value === this.setInputValue.value);\n if (!selected) return;\n const label = `${preset.label}: ${selected.label}`;\n const payload = { input: preset.input, value: selected.value };\n this.addAction({\n id: `set-${preset.input}-${String(selected.value)}`,\n label,\n icon: selected.icon || preset.icon,\n command: 'pdx:set-input',\n payload,\n variant: 'text',\n placement: 'header',\n });\n }\n\n private findActionIndex(action: AvailableShellAction): number {\n const values = this.actions.getRawValue();\n return values.findIndex((a) => {\n if (a.id !== action.id) return false;\n if (action.command && a.command) return a.command === action.command;\n if (action.emit && a.emit) return a.emit === action.emit;\n return true;\n });\n }\n\n private previewActions(): WidgetShellAction[] {\n return (this.actions.getRawValue() || [])\n .map((a) => this.normalizeAction(a))\n .filter((a) => a.id && a.visible !== false);\n }\n\n private loadSetInputPresets(widgetType: string | null): void {\n if (!widgetType) {\n this.setInputPresets = [];\n return;\n }\n this.setInputPresets = SET_INPUT_PRESETS[widgetType] || [];\n const first = this.setInputPresets[0];\n if (first) {\n this.setInputTarget.setValue(first.input, { emitEvent: false });\n const firstValue = first.values[0];\n if (firstValue) this.setInputValue.setValue(firstValue.value, { emitEvent: false });\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { WidgetPageDefinition, WidgetPageLayout, WidgetPageOrientation, WidgetShellConfig } from '@praxisui/core';\n\ntype DynamicPageEditorInputs = {\n page?: WidgetPageDefinition | null; // Full page definition\n layout?: WidgetPageLayout | null;\n presets?: Record<string, WidgetShellConfig['appearance']> | null;\n pagePreset?: string | null;\n};\n\n// We extend the result to optionally include the full page if edited via JSON\ntype DynamicPageEditorResult = {\n layout: WidgetPageLayout | null;\n pagePreset: string;\n fullPage?: WidgetPageDefinition;\n};\n\nconst BUILTIN_PRESET_OPTIONS: Array<{ id: string; label: string }> = [\n { id: 'dark-glass', label: 'Dark Glass' },\n { id: 'light-neutral', label: 'Light Neutral' },\n { id: 'graphite', label: 'Graphite' },\n];\n\n@Component({\n selector: 'praxis-dynamic-page-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatIconModule,\n MatTabsModule\n ],\n template: `\n <div class=\"page-config\">\n <div class=\"page-head\">\n <div class=\"page-title\">Configurações da Página</div>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use os botões do painel para aplicar ou salvar.'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <span class=\"spacer\"></span>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n <mat-tab-group\n animationDuration=\"0ms\"\n class=\"config-tabs\"\n (selectedIndexChange)=\"onTabChange($event)\"\n >\n <mat-tab label=\"Layout\">\n <div class=\"tab-content\">\n <div class=\"page-section\">Layout</div>\n <form class=\"page-form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Preset da página</mat-label>\n <mat-select [formControl]=\"form.controls.pagePreset\">\n <mat-option value=\"\">Sem preset</mat-option>\n <mat-option *ngFor=\"let p of presetOptions\" [value]=\"p.id\">{{ p.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Orientação</mat-label>\n <mat-select [formControl]=\"form.controls.orientation\">\n <mat-option value=\"vertical\">Vertical</mat-option>\n <mat-option value=\"columns\">Colunas</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.columns\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap</mat-label>\n <input matInput [formControl]=\"form.controls.gap\" placeholder=\"ex: 16px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>SM (>= 640px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpSm\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>MD (>= 960px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpMd\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>LG (>= 1280px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpLg\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>XL (>= 1536px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpXl\" />\n </mat-form-field>\n </form>\n </div>\n </mat-tab>\n \n <mat-tab label=\"JSON (Avançado)\">\n <div class=\"tab-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mat-button (click)=\"formatJson()\" [disabled]=\"!jsonControl.valid\" type=\"button\">\n <mat-icon>format_align_left</mat-icon> Formatar\n </button>\n <span class=\"spacer\"></span>\n <span class=\"validation-status\" [class.valid]=\"jsonControl.valid\" [class.invalid]=\"jsonControl.invalid\">\n {{ jsonControl.valid ? 'JSON Válido' : 'JSON Inválido' }}\n </span>\n </div>\n \n <div class=\"json-editor-wrapper\">\n <textarea\n [formControl]=\"jsonControl\"\n spellcheck=\"false\"\n placeholder=\"Cole aqui a configuração completa da página...\"\n ></textarea>\n </div>\n \n <div class=\"json-error\" *ngIf=\"jsonControl.errors?.['invalidJson']\">\n Erro de sintaxe JSON\n </div>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .page-config {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n height: 100%;\n box-sizing: border-box;\n }\n .page-head {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .page-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .page-section {\n font-weight: 600;\n margin-top: 8px;\n }\n .page-form {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n }\n .page-config .mat-mdc-form-field {\n width: 100%;\n }\n \n .config-tabs {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n ::ng-deep .config-tabs .mat-mdc-tab-body-wrapper {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n ::ng-deep .mat-mdc-tab-body,\n ::ng-deep .mat-mdc-tab-body-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .tab-content {\n padding-top: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n height: 100%;\n box-sizing: border-box;\n overflow-y: auto;\n }\n \n .json-editor-container {\n display: flex;\n flex-direction: column;\n height: 100%; /* Ensure container takes full height of tab-content */\n flex: 1; /* Allow it to grow in flex parent */\n gap: 8px;\n overflow: hidden; /* Prevent double scrollbars */\n }\n .json-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n .json-editor-wrapper {\n flex: 1;\n width: 100%;\n height: 100%;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 4px;\n overflow: hidden;\n background-color: var(--md-sys-color-surface);\n }\n .json-editor-wrapper textarea {\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n resize: none;\n padding: 12px;\n box-sizing: border-box;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.4;\n background: transparent;\n color: var(--md-sys-color-on-surface);\n white-space: pre;\n }\n .json-editor-wrapper textarea:focus {\n background-color: var(--md-sys-color-surface-container-low);\n }\n .json-error {\n color: var(--md-sys-color-error);\n font-size: 12px;\n padding: 0 8px;\n flex-shrink: 0;\n }\n\n .validation-status {\n font-size: 12px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n }\n .validation-status.valid { color: var(--md-sys-color-primary); background: var(--md-sys-color-primary-container); }\n .validation-status.invalid { color: var(--md-sys-color-error); background: var(--md-sys-color-error-container); }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicPageConfigEditorComponent implements SettingsValueProvider {\n form = new FormGroup({\n pagePreset: new FormControl<string>('', { nonNullable: true }),\n orientation: new FormControl<WidgetPageOrientation>('vertical', { nonNullable: true }),\n columns: new FormControl<number>(2, { nonNullable: true, validators: [Validators.min(1)] }),\n gap: new FormControl<string>('16px', { nonNullable: true }),\n bpSm: new FormControl<number>(1, { nonNullable: true, validators: [Validators.min(1)] }),\n bpMd: new FormControl<number>(2, { nonNullable: true, validators: [Validators.min(1)] }),\n bpLg: new FormControl<number>(3, { nonNullable: true, validators: [Validators.min(1)] }),\n bpXl: new FormControl<number>(3, { nonNullable: true, validators: [Validators.min(1)] }),\n });\n\n jsonControl = new FormControl<string>('', {\n nonNullable: true,\n validators: [(control) => {\n try {\n JSON.parse(control.value);\n return null;\n } catch {\n return { invalidJson: true };\n }\n }]\n });\n\n private readonly initialLayout = new BehaviorSubject<WidgetPageLayout | null>(null);\n private readonly dirtySubject = new BehaviorSubject<boolean>(false);\n private readonly validSubject = new BehaviorSubject<boolean>(true);\n private readonly busySubject = new BehaviorSubject<boolean>(false);\n\n isDirty$ = this.dirtySubject.asObservable();\n isValid$ = this.validSubject.asObservable();\n isBusy$ = this.busySubject.asObservable();\n\n private snapshot = '';\n presetOptions: Array<{ id: string; label: string }> = [...BUILTIN_PRESET_OPTIONS];\n private pagePreset = '';\n private currentFullConfig: WidgetPageDefinition = { widgets: [] };\n private activeTab = 0; // 0 = Layout, 1 = JSON\n\n constructor(@Optional() @Inject(SETTINGS_PANEL_DATA) data?: DynamicPageEditorInputs | null) {\n const layout = data?.layout || null;\n const customPresets = data?.presets || {};\n const customOptions = Object.keys(customPresets).map((id) => ({ id, label: this.formatPresetLabel(id) }));\n this.presetOptions = [...BUILTIN_PRESET_OPTIONS, ...customOptions];\n this.pagePreset = data?.pagePreset || '';\n \n // Initialize full config from input if available, or build a skeleton\n if (data?.page) {\n this.currentFullConfig = JSON.parse(JSON.stringify(data.page));\n } else {\n // Fallback: construct from partial layout\n this.currentFullConfig = {\n widgets: [],\n layout: layout || undefined,\n context: { ui: { shell: { preset: this.pagePreset } } }\n };\n }\n\n this.initialLayout.next(layout);\n this.applyLayoutToForm(layout, this.pagePreset);\n this.syncJsonFromState(); // Init JSON text\n\n // Form -> State Sync\n this.form.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this.activeTab === 0) {\n this.updateStateFromForm();\n }\n this.updateValidity();\n });\n\n this.form.controls.orientation.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n this.toggleGridControls(value);\n });\n \n // JSON -> State Sync (debounced by user typing speed naturally, but logic runs on change)\n this.jsonControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this.activeTab === 1 && this.jsonControl.valid) {\n try {\n const parsed = JSON.parse(this.jsonControl.value);\n this.currentFullConfig = parsed;\n // We also need to update the Form to reflect JSON changes so if user switches back, it's consistent\n this.applyLayoutToForm(parsed.layout || null, this.extractPreset(parsed));\n } catch {}\n }\n this.updateValidity();\n });\n }\n \n onTabChange(index: number): void {\n this.activeTab = index;\n if (index === 0) {\n // Switching to Layout: Form is already updated via subscription, but ensure consistency\n this.applyLayoutToForm(this.currentFullConfig.layout || null, this.extractPreset(this.currentFullConfig));\n } else {\n // Switching to JSON: Update text from current state\n this.syncJsonFromState();\n }\n }\n\n getSettingsValue(): DynamicPageEditorResult {\n // If we are in JSON tab, currentFullConfig is the source of truth\n // If in Layout tab, form -> currentFullConfig has already happened\n const layout = this.currentFullConfig.layout || null;\n const pagePreset = this.extractPreset(this.currentFullConfig);\n \n return { \n layout, \n pagePreset,\n fullPage: this.currentFullConfig \n };\n }\n \n formatJson(): void {\n if (this.jsonControl.valid) {\n try {\n const parsed = JSON.parse(this.jsonControl.value);\n this.jsonControl.setValue(JSON.stringify(parsed, null, 2));\n } catch {}\n }\n }\n\n onSave(): DynamicPageEditorResult {\n return this.getSettingsValue();\n }\n\n reset(): void {\n const layout = this.initialLayout.value;\n this.currentFullConfig.layout = layout || undefined;\n this.applyLayoutToForm(layout, this.pagePreset);\n this.syncJsonFromState();\n this.snapshot = this.snapshotValue();\n this.dirtySubject.next(false);\n }\n\n private updateValidity(): void {\n const isValid = this.activeTab === 0 ? this.form.valid : this.jsonControl.valid;\n this.validSubject.next(isValid);\n \n const current = this.snapshotValue();\n this.dirtySubject.next(current !== this.snapshot);\n }\n\n private updateStateFromForm(): void {\n const orientation = this.form.controls.orientation.value;\n const columns = Number(this.form.controls.columns.value);\n const gap = (this.form.controls.gap.value || '').trim();\n const pagePreset = (this.form.controls.pagePreset.value || '').trim();\n \n const layout: WidgetPageLayout = {\n orientation,\n gap: gap || undefined,\n };\n if (orientation === 'columns') {\n layout.columns = Math.max(1, Number.isFinite(columns) ? columns : 2);\n layout.breakpoints = {\n sm: Math.max(1, Number(this.form.controls.bpSm.value)),\n md: Math.max(1, Number(this.form.controls.bpMd.value)),\n lg: Math.max(1, Number(this.form.controls.bpLg.value)),\n xl: Math.max(1, Number(this.form.controls.bpXl.value)),\n };\n }\n \n // Update internal state\n this.currentFullConfig.layout = layout;\n \n // Update preset in context\n if (!this.currentFullConfig.context) this.currentFullConfig.context = {};\n if (!this.currentFullConfig.context.ui) this.currentFullConfig.context.ui = {};\n if (!this.currentFullConfig.context.ui.shell) this.currentFullConfig.context.ui.shell = {};\n \n if (pagePreset) {\n this.currentFullConfig.context.ui.shell.preset = pagePreset;\n } else {\n delete this.currentFullConfig.context.ui.shell.preset;\n }\n }\n\n private applyLayoutToForm(layout: WidgetPageLayout | null, preset: string): void {\n const orientation = layout?.orientation || 'vertical';\n const columns = layout?.columns ?? 2;\n const gap = layout?.gap || '16px';\n const defaults = {\n sm: 1,\n md: Math.min(2, columns),\n lg: Math.min(3, columns),\n xl: columns,\n };\n const bp = layout?.breakpoints || {};\n const presetValue = (preset || '').trim();\n const allowed = new Set(this.presetOptions.map((p) => p.id));\n \n this.form.patchValue({\n orientation,\n columns,\n gap,\n bpSm: bp.sm ?? defaults.sm,\n bpMd: bp.md ?? defaults.md,\n bpLg: bp.lg ?? defaults.lg,\n bpXl: bp.xl ?? defaults.xl,\n pagePreset: presetValue && allowed.has(presetValue) ? presetValue : ''\n }, { emitEvent: false }); // Do not trigger updateStateFromForm to avoid loops\n\n this.toggleGridControls(orientation);\n \n // Update snapshot on first load or reset\n if (!this.snapshot) {\n this.snapshot = this.snapshotValue();\n }\n }\n \n private toggleGridControls(orientation: string): void {\n if (orientation === 'vertical') {\n this.form.controls.columns.disable({ emitEvent: false });\n this.form.controls.bpSm.disable({ emitEvent: false });\n this.form.controls.bpMd.disable({ emitEvent: false });\n this.form.controls.bpLg.disable({ emitEvent: false });\n this.form.controls.bpXl.disable({ emitEvent: false });\n } else {\n this.form.controls.columns.enable({ emitEvent: false });\n this.form.controls.bpSm.enable({ emitEvent: false });\n this.form.controls.bpMd.enable({ emitEvent: false });\n this.form.controls.bpLg.enable({ emitEvent: false });\n this.form.controls.bpXl.enable({ emitEvent: false });\n }\n }\n \n private syncJsonFromState(): void {\n const json = JSON.stringify(this.currentFullConfig, null, 2);\n this.jsonControl.setValue(json, { emitEvent: false });\n }\n\n private extractPreset(page: WidgetPageDefinition): string {\n return (page.context as any)?.ui?.shell?.preset || '';\n }\n\n private snapshotValue(): string {\n return JSON.stringify(this.getSettingsValue());\n }\n\n private formatPresetLabel(id: string): string {\n return id\n .replace(/[_-]+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n }\n}\n","/**\n * Capabilities catalog for Dynamic Gridster Page (GridPageDefinition + inputs).\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n page: true;\n widgets: true;\n connections: true;\n context: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nexport const PAGE_BUILDER_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: {},\n targets: [\n 'page-builder',\n 'layout-renderer',\n 'dynamic-page',\n 'praxis-dynamic-page',\n 'praxis-dynamic-grid-page',\n 'praxis-dynamic-gridster-page',\n ],\n notes: [\n 'page segue o modelo GridPageDefinition (widgets, connections, options, context).',\n 'pageIdentity identifica o escopo de persistência e não pertence ao objeto page.',\n ],\n capabilities: [\n // --- Component inputs ---\n { path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página (GridPageDefinition).' },\n { path: 'context', category: 'context', valueKind: 'object', description: 'Contexto extra mesclado ao page.context.' },\n { path: 'enableCustomization', category: 'behavior', valueKind: 'boolean', description: 'Habilita modo de edicao.' },\n { path: 'showSettingsButton', category: 'behavior', valueKind: 'boolean', description: 'Exibe botao de settings.' },\n { path: 'strictValidation', category: 'behavior', valueKind: 'boolean', description: 'Validação estrita do widget loader.' },\n { path: 'gridsterOptions', category: 'layout', valueKind: 'object', description: 'Opcoes do Gridster (Partial<GridsterConfig>).', safetyNotes: 'Objeto amplo; revisar com a doc do Gridster.' },\n { path: 'pageIdentity', category: 'identity', valueKind: 'object', description: 'Identidade de persistência da página.' },\n { path: 'pageIdentity.appId', category: 'identity', valueKind: 'string', description: 'App id (opcional).' },\n { path: 'pageIdentity.tenantId', category: 'identity', valueKind: 'string', description: 'Tenant id.' },\n { path: 'pageIdentity.userId', category: 'identity', valueKind: 'string', description: 'User id.' },\n { path: 'pageIdentity.routePath', category: 'identity', valueKind: 'string', description: 'Rota base da página.' },\n { path: 'pageIdentity.locale', category: 'identity', valueKind: 'string', description: 'Locale.' },\n\n // --- Page options ---\n { path: 'page.options', category: 'layout', valueKind: 'object', description: 'Opções do grid (cols/rowHeight/gap).' },\n { path: 'page.options.cols', category: 'layout', valueKind: 'number', description: 'Numero de colunas do grid.' },\n { path: 'page.options.rowHeight', category: 'layout', valueKind: 'number', description: 'Altura das linhas (px).' },\n { path: 'page.options.gap', category: 'layout', valueKind: 'number', description: 'Espacamento entre widgets (px).' },\n\n // --- Widgets ---\n { path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Widgets da página.' },\n { path: 'page.widgets[].key', category: 'widgets', valueKind: 'string', description: 'ID unico do widget.', critical: true },\n { path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS do widget.' },\n { path: 'page.widgets[].layout', category: 'layout', valueKind: 'object', description: 'Layout do widget.' },\n { path: 'page.widgets[].layout.col', category: 'layout', valueKind: 'number', description: 'Coluna inicial (1-based).' },\n { path: 'page.widgets[].layout.colSpan', category: 'layout', valueKind: 'number', description: 'Colunas ocupadas.' },\n { path: 'page.widgets[].layout.row', category: 'layout', valueKind: 'number', description: 'Linha inicial (1-based).' },\n { path: 'page.widgets[].layout.rowSpan', category: 'layout', valueKind: 'number', description: 'Linhas ocupadas.' },\n { path: 'page.widgets[].definition', category: 'widgets', valueKind: 'object', description: 'Definicao do widget (WidgetDefinition).' },\n { path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente registrado.' },\n { path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs do componente.' },\n { path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de aplicação dos inputs.' },\n\n // --- Connections ---\n { path: 'page.connections', category: 'connections', valueKind: 'array', description: 'Conexões entre widgets.' },\n { path: 'page.connections[].from', category: 'connections', valueKind: 'object', description: 'Origem da conexão.' },\n { path: 'page.connections[].from.widget', category: 'connections', valueKind: 'string', description: 'Widget origem (key).' },\n { path: 'page.connections[].from.output', category: 'connections', valueKind: 'string', description: 'Output do widget origem.' },\n { path: 'page.connections[].to', category: 'connections', valueKind: 'object', description: 'Destino da conexão.' },\n { path: 'page.connections[].to.widget', category: 'connections', valueKind: 'string', description: 'Widget destino (key).' },\n { path: 'page.connections[].to.input', category: 'connections', valueKind: 'string', description: 'Input destino (path).' },\n { path: 'page.connections[].to.bindingOrder', category: 'connections', valueKind: 'array', description: 'Ordem de aplicação dos inputs.' },\n { path: 'page.connections[].map', category: 'connections', valueKind: 'expression', description: 'Mapeamento do payload.' },\n { path: 'page.connections[].set', category: 'connections', valueKind: 'object', description: 'Overrides fixos aplicados ao destino.' },\n { path: 'page.connections[].meta', category: 'connections', valueKind: 'object', description: 'Metadados opcionais para operadores de runtime.' },\n { path: 'page.connections[].meta.filterExpr', category: 'connections', valueKind: 'expression', description: 'Expressão de filtro para eventos.' },\n { path: 'page.connections[].meta.debounceMs', category: 'connections', valueKind: 'number', description: 'Debounce em milissegundos.' },\n { path: 'page.connections[].meta.distinct', category: 'connections', valueKind: 'boolean', description: 'Emite apenas quando valor mudar.' },\n { path: 'page.connections[].meta.distinctBy', category: 'connections', valueKind: 'expression', description: 'Chave para comparação distinct.' },\n\n // --- Page context ---\n { path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto da página (compartilhado por widgets).' },\n ],\n};\n","import type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n} from '@praxisui/core';\nimport type { GridWidgetInstance } from '@praxisui/core';\nimport { PageBuilderConfig } from './page-builder-ai.adapter';\n\nimport { PAGE_BUILDER_AI_CAPABILITIES } from './page-builder-ai-capabilities';\n\n\nconst WIDGET_CAPABILITY_CATALOGS = new Map<string, AiCapabilityCatalog>();\n\nexport function registerWidgetAiCatalog(widgetId: string, catalog: AiCapabilityCatalog): void {\n WIDGET_CAPABILITY_CATALOGS.set(widgetId, catalog);\n catalogCache = null;\n}\n\nexport function registerWidgetAiCatalogs(entries: Record<string, AiCapabilityCatalog>): void {\n Object.entries(entries).forEach(([id, catalog]) => registerWidgetAiCatalog(id, catalog));\n}\n\nexport function clearWidgetAiCatalogs(): void {\n WIDGET_CAPABILITY_CATALOGS.clear();\n catalogCache = null;\n}\n\n/**\n * Retrieves the CapabilityCatalog for a given widget ID.\n */\nexport function getWidgetAiCapabilities(widgetId: string): AiCapabilityCatalog | undefined {\n return WIDGET_CAPABILITY_CATALOGS.get(widgetId);\n}\n\ninterface CacheEntry {\n key: string;\n catalog: AiCapabilityCatalog;\n timestamp: number;\n}\n\nlet catalogCache: CacheEntry | null = null;\nconst CACHE_TTL_MS = 60000; // 1 minute TTL\n\n/**\n * Aggregates macro page builder capabilities with specific micro capabilities\n * of the widgets present in the page configuration.\n */\nexport function getPageAiCatalog(pageConfig?: PageBuilderConfig): AiCapabilityCatalog {\n const usedWidgetIds = getUniqueWidgetIds(pageConfig);\n const cacheKey = generateCacheKey(usedWidgetIds);\n\n if (catalogCache && catalogCache.key === cacheKey && (Date.now() - catalogCache.timestamp < CACHE_TTL_MS)) {\n return catalogCache.catalog;\n }\n\n // Start with a clone of the macro catalog\n const macro = PAGE_BUILDER_AI_CAPABILITIES as unknown as AiCapabilityCatalog;\n const result: AiCapabilityCatalog = {\n version: macro.version,\n capabilities: [], // Rebuild to ensure order and dedupe\n notes: [...(macro.notes || [])],\n enums: { ...macro.enums },\n targets: [...(macro.targets || [])],\n };\n\n const capabilityMap = new Map<string, AiCapability>();\n\n // Helper to process and add capabilities, with path prefixing for widget inputs\n const processAndAdd = (\n catalog: AiCapabilityCatalog,\n prefixPath: string | null,\n isMacro: boolean = false\n ) => {\n if (!catalog.capabilities) return;\n\n catalog.capabilities.forEach((cap) => {\n // Hardening: Basic validation\n if (!cap.path || !cap.category || !cap.valueKind) {\n console.warn('[PageBuilderAiCatalog] Invalid capability dropped:', cap);\n return;\n }\n\n // Normalize Path: prefix micro capabilities for widget inputs\n let finalPath = cap.path;\n if (prefixPath && !cap.path.startsWith('page.widgets')) { // Avoid double-prefixing if already done\n finalPath = `${prefixPath}.${cap.path}`;\n } else if (!isMacro && !cap.path.startsWith('page')) { // Fallback for general micro capabilities that are not widget inputs\n finalPath = `page.${cap.path}`;\n }\n\n\n // Deduplication Key: category::path\n const key = `${cap.category}::${finalPath}`;\n\n // Add to Map (last one wins)\n capabilityMap.set(key, { ...cap, path: finalPath, category: cap.category as AiCapabilityCategory });\n });\n\n // Merge Enums\n if (catalog.enums) {\n Object.entries(catalog.enums).forEach(([key, values]) => {\n if (!result.enums[key]) {\n result.enums[key] = values;\n } else {\n const existing = new Set(result.enums[key]);\n values.forEach(v => existing.add(v));\n result.enums[key] = Array.from(existing) as any;\n }\n });\n }\n\n // Merge Notes\n if (catalog.notes) {\n catalog.notes.forEach((note) => {\n if (!result.notes.includes(note)) {\n result.notes.push(note);\n }\n });\n }\n\n // Merge Targets (Safe cast for micro catalogs that might use generic CapabilityCatalog)\n const targets = catalog.targets;\n if (targets) {\n if (!result.targets) result.targets = [];\n targets.forEach((target) => {\n if (!result.targets!.includes(target)) {\n result.targets!.push(target);\n }\n });\n }\n };\n\n // Add Macro Page Builder Capabilities\n processAndAdd(macro, null, true);\n\n // Add Specific Widget Capabilities\n usedWidgetIds.forEach((widgetId) => {\n const microCatalog = getWidgetAiCapabilities(widgetId);\n if (microCatalog) {\n // Prefix for widget inputs: page.widgets[].definition.inputs.<capability.path>\n const prefix = `page.widgets[].definition.inputs`;\n processAndAdd(microCatalog, prefix);\n }\n });\n\n // Finalize Capabilities (Sort for determinism)\n result.capabilities = Array.from(capabilityMap.values()).sort((a, b) => {\n const catCompare = (a.category as string).localeCompare(b.category as string);\n if (catCompare !== 0) return catCompare;\n return a.path.localeCompare(b.path);\n });\n\n // Update Cache\n catalogCache = {\n key: cacheKey,\n catalog: result,\n timestamp: Date.now(),\n };\n\n return result;\n}\n\nfunction getUniqueWidgetIds(pageConfig?: PageBuilderConfig): Set<string> {\n const ids = new Set<string>();\n if (pageConfig?.page?.widgets) {\n pageConfig.page.widgets.forEach((widget: GridWidgetInstance) => {\n if (widget.definition?.id) {\n ids.add(widget.definition.id);\n }\n });\n }\n return ids;\n}\n\nfunction generateCacheKey(ids: Set<string>): string {\n const sortedIds = Array.from(ids).sort().join(',');\n return `v1:${sortedIds}`;\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AiCapabilityCatalog } from '@praxisui/core';\n\nexport const PAGE_BUILDER_WIDGET_AI_CATALOGS =\n new InjectionToken<Record<string, AiCapabilityCatalog>>('PAGE_BUILDER_WIDGET_AI_CATALOGS');\n","import { ENVIRONMENT_INITIALIZER, Optional, Provider } from '@angular/core';\nimport type { AiCapabilityCatalog } from '@praxisui/core';\nimport { registerWidgetAiCatalogs } from './page-builder-ai-catalog';\nimport { PAGE_BUILDER_WIDGET_AI_CATALOGS } from './page-builder-ai-catalog.tokens';\n\nexport function providePageBuilderWidgetAiCatalogs(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (catalogs?: Record<string, AiCapabilityCatalog>) => () => {\n if (catalogs && Object.keys(catalogs).length > 0) {\n registerWidgetAiCatalogs(catalogs);\n }\n },\n deps: [[new Optional(), PAGE_BUILDER_WIDGET_AI_CATALOGS]],\n } as Provider;\n}\n","export interface Point { x: number; y: number }\nexport interface Rect { x: number; y: number; width: number; height: number }\n\n/**\n * Simple elbow router (L-shape): horizontal then vertical.\n * Produces an SVG path string.\n */\nexport function routeElbow(from: Point, to: Point): string {\n const midX = (from.x + to.x) / 2;\n const p = [\n `M ${from.x} ${from.y}`,\n `L ${midX} ${from.y}`,\n `L ${midX} ${to.y}`,\n `L ${to.x} ${to.y}`,\n ];\n return p.join(' ');\n}\n\n/** Straight line path */\nexport function routeStraight(from: Point, to: Point): string {\n return `M ${from.x} ${from.y} L ${to.x} ${to.y}`;\n}\n\n/** Simple cubic bezier: horizontal tangents from endpoints */\nexport function routeBezier(from: Point, to: Point): string {\n const dx = (to.x - from.x) * 0.5;\n const c1 = { x: from.x + dx, y: from.y };\n const c2 = { x: to.x - dx, y: to.y };\n return `M ${from.x} ${from.y} C ${c1.x} ${c1.y}, ${c2.x} ${c2.y}, ${to.x} ${to.y}`;\n}\n\n/** Basic geometry helpers for auto-routing */\nfunction rectContains(r: Rect, p: Point): boolean {\n return p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height;\n}\nfunction segmentsIntersect(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n // cross product approach\n const d = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);\n if (d === 0) return false;\n const ua = ((p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x)) / d;\n const ub = ((p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x)) / d;\n return ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1;\n}\nfunction lineIntersectsRect(p1: Point, p2: Point, r: Rect): boolean {\n if (rectContains(r, p1) || rectContains(r, p2)) return true;\n const tl = { x: r.x, y: r.y };\n const tr = { x: r.x + r.width, y: r.y };\n const bl = { x: r.x, y: r.y + r.height };\n const br = { x: r.x + r.width, y: r.y + r.height };\n return (\n segmentsIntersect(p1, p2, tl, tr) ||\n segmentsIntersect(p1, p2, tr, br) ||\n segmentsIntersect(p1, p2, br, bl) ||\n segmentsIntersect(p1, p2, bl, tl)\n );\n}\n\n/**\n * Auto router: choose straight/bezier if clear, else elbow to avoid boxes.\n * Obstacles are rectangles in world space. Optional padding inflates obstacles.\n */\nexport function routeAuto(from: Point, to: Point, obstacles: Rect[] = [], padding = 6): string {\n const inflated = obstacles.map(r => ({ x: r.x - padding, y: r.y - padding, width: r.width + padding*2, height: r.height + padding*2 }));\n const intersects = inflated.some(r => lineIntersectsRect(from, to, r));\n if (intersects) return routeElbow(from, to);\n // prefer bezier for aesthetics when unobstructed\n return routeBezier(from, to);\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core';\n\nexport interface DragStartEvent { from: { nodeId: string; portId: string }; x: number; y: number }\nexport interface DragMoveEvent { x: number; y: number }\nexport interface DragEndEvent { x: number; y: number; endEvent: MouseEvent }\n\n@Directive({\n selector: '[dragConnect]'\n})\nexport class DragConnectDirective implements OnDestroy {\n @Input('dragConnect') from!: { nodeId: string; portId: string };\n @Output() connectDragStart = new EventEmitter<DragStartEvent>();\n @Output() connectDragMove = new EventEmitter<DragMoveEvent>();\n @Output() connectDragEnd = new EventEmitter<DragEndEvent>();\n\n private active = false;\n private onMove = (e: MouseEvent) => this.handleMove(e);\n private onUp = (e: MouseEvent) => this.handleUp(e);\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(ev: MouseEvent): void {\n if (!this.from) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.active = true;\n const rect = (this.el.nativeElement as HTMLElement).getBoundingClientRect();\n const x = rect.left + rect.width / 2;\n const y = rect.top + rect.height / 2;\n try { console.debug('[DragConnect] mousedown start', { from: this.from, x, y, target: (ev.target as HTMLElement)?.tagName }); } catch {}\n this.connectDragStart.emit({ from: this.from, x, y });\n document.addEventListener('mousemove', this.onMove);\n document.addEventListener('mouseup', this.onUp, { once: true });\n }\n\n private handleMove(e: MouseEvent): void {\n if (!this.active) return;\n try { console.debug('[DragConnect] mousemove', { x: e.clientX, y: e.clientY }); } catch {}\n this.connectDragMove.emit({ x: e.clientX, y: e.clientY });\n }\n\n private handleUp(e: MouseEvent): void {\n if (!this.active) return;\n this.active = false;\n document.removeEventListener('mousemove', this.onMove);\n try { console.debug('[DragConnect] mouseup end', { x: e.clientX, y: e.clientY, target: (e.target as HTMLElement)?.tagName, classes: (e.target as HTMLElement)?.className }); } catch {}\n this.connectDragEnd.emit({ x: e.clientX, y: e.clientY, endEvent: e });\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('mousemove', this.onMove);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\nimport { GraphEdge, GraphNode, GraphPort } from './graph-types';\n\n@Injectable({ providedIn: 'root' })\nexport class GraphMapperService {\n constructor(private registry: ComponentMetadataRegistry) {}\n\n /** Build nodes and edges for a given page definition and widgets. */\n mapToGraph(page: GridPageDefinition | undefined, widgets: GridWidgetInstance[]): { nodes: GraphNode[]; edges: GraphEdge[] } {\n const nodes: GraphNode[] = [];\n const nodeById = new Map<string, GraphNode>();\n const tabsCfgByKey = new Map<string, any>();\n const edges: GraphEdge[] = [];\n\n // Layout: simple columns — sources left, targets right\n const colWidth = 240;\n const rowHeight = 96;\n const gap = 28;\n\n let leftY = 0;\n let rightY = 0;\n\n // First pass: create a node per widget\n for (const w of widgets) {\n const meta = this.registry.get(w.definition.id);\n const metaOutputs = new Map<string, { label?: string; description?: string }>();\n for (const o of meta?.outputs || []) metaOutputs.set(o.name, { label: o.label, description: o.description });\n const outputs = new Set<string>([(meta?.outputs || []).map((o) => o.name)].flat() as string[]);\n if (w.definition.id === 'praxis-tabs') outputs.add('widgetEvent');\n if (w.definition.id === 'praxis-stepper') outputs.add('widgetEvent');\n\n const metaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of meta?.inputs || []) metaInputs.set(i.name, { label: i.label, description: i.description });\n // Show both instance-defined inputs and metadata-declared inputs (e.g., resourceId)\n const inputNames = Array.from(new Set<string>([\n ...Object.keys(w.definition.inputs || {}),\n ...((meta?.inputs || []).map((m) => m.name) as string[]),\n ]));\n const inputPorts: GraphPort[] = inputNames.map((name, i) => ({\n id: `in:${name}`,\n label: metaInputs.get(name)?.label || name,\n description: metaInputs.get(name)?.description,\n kind: 'input',\n anchor: { x: colWidth, y: 24 + i * 22 },\n }));\n // Generic port for new inputs\n inputPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', anchor: { x: colWidth, y: 24 + inputNames.length * 22 } });\n\n const outputPorts: GraphPort[] = Array.from(outputs.values()).map((name, i) => ({\n id: `out:${name}`,\n label: metaOutputs.get(name)?.label || name,\n description: metaOutputs.get(name)?.description,\n kind: 'output',\n anchor: { x: 0, y: 24 + i * 22 },\n }));\n\n const left = outputPorts.length > 0;\n const pos = left ? { x: gap, y: gap + leftY } : { x: colWidth + gap * 3, y: gap + rightY };\n const node: GraphNode = {\n id: w.key,\n label: meta?.friendlyName || w.definition.id || w.key,\n icon: meta?.icon,\n type: w.definition.id,\n parentId: null,\n collapsed: true,\n bounds: { x: pos.x, y: pos.y, width: colWidth, height: rowHeight },\n ports: [...outputPorts.map((p) => ({ ...p, anchor: { x: pos.x, y: pos.y + p.anchor.y } })), ...inputPorts.map((p) => ({ ...p, anchor: { x: pos.x + colWidth, y: pos.y + p.anchor.y } }))],\n };\n nodes.push(node);\n nodeById.set(node.id, node);\n if (left) leftY += rowHeight + gap; else rightY += rowHeight + gap;\n\n // Expand Tabs internals as child nodes (collapsed by default)\n if (w.definition.id === 'praxis-tabs') {\n const cfg = (w.definition as any)?.inputs?.config;\n tabsCfgByKey.set(w.key, cfg);\n // Group tabs\n const tabs = (cfg?.tabs || []) as Array<{ widgets?: any[] }>;\n for (let ti = 0; ti < tabs.length; ti++) {\n const inner = tabs[ti]?.widgets || [];\n for (let wi = 0; wi < inner.length; wi++) {\n const innerDef = inner[wi];\n const innerMeta = this.registry.get(innerDef?.id);\n const innerInputs = Object.keys(innerDef?.inputs || {});\n const innerMetaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of innerMeta?.inputs || []) innerMetaInputs.set(i.name, { label: i.label, description: i.description });\n const sectionLabel = cfg?.tabs?.[ti]?.textLabel as string | undefined;\n const containerTitle = sectionLabel ? `Aba: ${sectionLabel}` : `Aba ${ti + 1}`;\n const widgetLabel = innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`;\n const inPorts: GraphPort[] = innerInputs.map((name, ii) => {\n const path = `inputs.config.tabs[${ti}].widgets[${wi}].inputs.${name}`;\n const base = innerMetaInputs.get(name);\n const label = base?.label || name;\n const description = (base?.description ? base.description + '\\n' : '') + `${containerTitle} • ${widgetLabel} • ${name}\\n${path}`;\n return { id: `in:${name}`, label, description, kind: 'input', path, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (ti * 72) + ii * 18 } } as GraphPort;\n });\n if (!inPorts.length) inPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', path: `inputs.config.tabs[${ti}].widgets[${wi}].inputs.`, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (ti * 72) } });\n const child: GraphNode = {\n id: `${w.key}#group[${ti}]/${wi}`,\n label: innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`,\n icon: innerMeta?.icon,\n type: innerDef?.id || 'inner',\n parentId: w.key,\n collapsed: false,\n bounds: { x: node.bounds.x + 24, y: node.bounds.y + rowHeight + (ti * 72) + wi * 32, width: colWidth - 48, height: 48 },\n ports: inPorts,\n };\n nodes.push(child);\n nodeById.set(child.id, child);\n }\n }\n // Nav links\n const links = (cfg?.nav?.links || []) as Array<{ widgets?: any[] }>;\n for (let li = 0; li < links.length; li++) {\n const inner = links[li]?.widgets || [];\n for (let wi = 0; wi < inner.length; wi++) {\n const innerDef = inner[wi];\n const innerMeta = this.registry.get(innerDef?.id);\n const innerInputs = Object.keys(innerDef?.inputs || {});\n const innerMetaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of innerMeta?.inputs || []) innerMetaInputs.set(i.name, { label: i.label, description: i.description });\n const linkLabel = cfg?.nav?.links?.[li]?.label as string | undefined;\n const containerTitle = linkLabel ? `Link: ${linkLabel}` : `Link ${li + 1}`;\n const widgetLabel = innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`;\n const inPorts: GraphPort[] = innerInputs.map((name, ii) => {\n const path = `inputs.config.nav.links[${li}].widgets[${wi}].inputs.${name}`;\n const base = innerMetaInputs.get(name);\n const label = base?.label || name;\n const description = (base?.description ? base.description + '\\n' : '') + `${containerTitle} • ${widgetLabel} • ${name}\\n${path}`;\n return { id: `in:${name}`, label, description, kind: 'input', path, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (li * 72) + ii * 18 } } as GraphPort;\n });\n if (!inPorts.length) inPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', path: `inputs.config.nav.links[${li}].widgets[${wi}].inputs.`, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (li * 72) } });\n const child: GraphNode = {\n id: `${w.key}#nav[${li}]/${wi}`,\n label: innerMeta?.friendlyName || innerDef?.id || `link ${wi}`,\n icon: innerMeta?.icon,\n type: innerDef?.id || 'inner',\n parentId: w.key,\n collapsed: false,\n bounds: { x: node.bounds.x + 24, y: node.bounds.y + rowHeight + (li * 72) + wi * 32, width: colWidth - 48, height: 48 },\n ports: inPorts,\n };\n nodes.push(child);\n nodeById.set(child.id, child);\n }\n }\n }\n }\n\n // Second pass: map edges from page.connections\n const conns = (page?.connections || []) as WidgetConnection[];\n for (let i = 0; i < conns.length; i++) {\n const c = conns[i];\n const fromNodeId = c.from.widget;\n const fromPortId = `out:${c.from.output}`;\n let toNodeId = c.to.widget;\n let toPortId = `in:${c.to.input}`;\n\n const deep = this.parseTabsPath(c.to.input);\n let friendlyPath: string | undefined;\n if (deep) {\n const childId = `${c.to.widget}#${deep.kind}[${deep.index}]/${deep.widgetIndex}`;\n // If such child exists, route edge to it and its input name\n if (nodes.some((n) => n.id === childId)) {\n toNodeId = childId;\n toPortId = `in:${deep.input}`;\n } else {\n // Keep to widget but still expose label/path\n toPortId = `in:${deep.input}`;\n }\n const cfg = tabsCfgByKey.get(c.to.widget);\n const labelFromCfg = deep.kind === 'group' ? (cfg?.tabs?.[deep.index]?.textLabel as string | undefined) : (cfg?.nav?.links?.[deep.index]?.label as string | undefined);\n const containerLabel = labelFromCfg ? (deep.kind === 'group' ? `Aba: ${labelFromCfg}` : `Link: ${labelFromCfg}`) : (deep.kind === 'group' ? `Aba ${deep.index + 1}` : `Link ${deep.index + 1}`);\n const child = nodes.find(n => n.id === childId);\n friendlyPath = `${containerLabel} • ${(child?.label || 'Widget')} • ${deep.input}`;\n }\n\n // Ensure ports exist for visualization (create synthetic when missing)\n this.ensurePort(nodeById, fromNodeId, fromPortId, 'output', colWidth);\n this.ensurePort(nodeById, toNodeId, toPortId, 'input', colWidth);\n\n const edge: GraphEdge = {\n id: `e${i}`,\n from: { nodeId: fromNodeId, portId: fromPortId },\n to: { nodeId: toNodeId, portId: toPortId },\n label: c.map || undefined,\n meta: { map: c.map, bindingOrder: c.to.bindingOrder, ...(friendlyPath ? { friendlyPath } : {}) },\n };\n edges.push(edge);\n }\n\n return { nodes, edges };\n }\n\n private ensurePort(nodeById: Map<string, GraphNode>, nodeId: string, portId: string, kind: 'input' | 'output', colWidth: number): void {\n const n = nodeById.get(nodeId);\n if (!n) return;\n const exists = (n.ports || []).some(p => p.id === portId);\n if (exists) return;\n const label = portId.replace(/^(in:|out:)/, '');\n const portsOfKind = (n.ports || []).filter(p => p.kind === kind);\n const idx = portsOfKind.length;\n const y = n.bounds.y + 24 + idx * 22;\n const x = kind === 'output' ? n.bounds.x : n.bounds.x + n.bounds.width;\n const p: GraphPort = { id: portId, label, kind, anchor: { x, y } };\n n.ports = [...(n.ports || []), p];\n // Optionally grow node height to accommodate more ports\n const approxBottom = y + 28 - n.bounds.y;\n if (approxBottom > n.bounds.height) n.bounds = { ...n.bounds, height: approxBottom };\n }\n\n /**\n * Parse dot-path for Tabs internals. Supported:\n * - inputs.config.tabs[<i>].widgets[<j>].inputs.<input>\n * - inputs.config.nav.links[<i>].widgets[<j>].inputs.<input>\n */\n parseTabsPath(path: string | undefined): { kind: 'group' | 'nav'; index: number; widgetIndex: number; input: string } | null {\n if (!path) return null;\n const groupRe = /^inputs\\.config\\.tabs\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/;\n const navRe = /^inputs\\.config\\.nav\\.links\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/;\n const g = path.match(groupRe);\n if (g) return { kind: 'group', index: Number(g[1]), widgetIndex: Number(g[2]), input: g[3] };\n const n = path.match(navRe);\n if (n) return { kind: 'nav', index: Number(n[1]), widgetIndex: Number(n[2]), input: n[3] };\n return null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnChanges, OnInit, Optional, Output, SimpleChanges, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GraphEdge, GraphNode, GraphPort } from './graph-types';\nimport { GraphMapperService } from './graph-mapper.service';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\nimport { routeElbow } from './edge-router.util';\nimport { DragConnectDirective, DragEndEvent, DragMoveEvent, DragStartEvent } from './drag-connect.directive';\nimport { BehaviorSubject } from 'rxjs';\nimport { SETTINGS_PANEL_DATA, SettingsPanelService } from '@praxisui/settings-panel';\nimport { ConnectionBuilderComponent } from '../connection-builder.component';\n\n@Component({\n selector: 'praxis-connection-graph',\n standalone: true,\n imports: [CommonModule, FormsModule, MatButtonModule, MatIconModule, MatTooltipModule, DragConnectDirective],\n template: `\n <div class=\"cg-root\" (wheel)=\"onWheel($event)\" (mousedown)=\"onPanStart($event)\">\n <div class=\"cg-head\">\n <div class=\"cg-title\">Conexões</div>\n <div class=\"spacer\"></div>\n <button mat-button [color]=\"showPortLabels ? 'primary' : undefined\" (click)=\"showPortLabels = !showPortLabels\" matTooltip=\"Mostrar/ocultar labels de portas\" aria-label=\"Mostrar/ocultar labels de portas\">\n <mat-icon>label</mat-icon>\n </button>\n <button mat-button [color]=\"showFriendlyLabels ? 'primary' : undefined\" (click)=\"showFriendlyLabels = !showFriendlyLabels\" matTooltip=\"Alternar nome amigável/técnico\" aria-label=\"Alternar nome amigável/técnico\">\n <mat-icon>translate</mat-icon>\n </button>\n <button mat-button [color]=\"showEdgeLabels ? 'primary' : undefined\" (click)=\"showEdgeLabels = !showEdgeLabels\" matTooltip=\"Mostrar/ocultar rótulos de arestas\" aria-label=\"Mostrar/ocultar rótulos de arestas\">\n <mat-icon>text_fields</mat-icon>\n </button>\n <button mat-button [color]=\"showUnconnectedPorts ? 'primary' : undefined\" (click)=\"showUnconnectedPorts = !showUnconnectedPorts\" matTooltip=\"Mostrar/ocultar portas sem conexão\" aria-label=\"Mostrar/ocultar portas sem conexão\">\n <mat-icon>tune</mat-icon>\n </button>\n <button mat-stroked-button color=\"primary\" (click)=\"openBuilder()\" aria-label=\"Editar no Builder\"><mat-icon>tune</mat-icon><span>Editar no Builder</span></button>\n <div class=\"cg-count\" [attr.aria-label]=\"'Total de conexões: ' + connections().length\">{{ connections().length }}</div>\n </div>\n <div class=\"cg-canvas\">\n <!-- Edge details panel -->\n <div class=\"cg-details\" *ngIf=\"selectedEdgeIndex() >= 0 && showDetails\">\n <div class=\"details-head\">\n <div class=\"details-title\">Detalhes da conexão</div>\n <button mat-icon-button (click)=\"showDetails=false\" aria-label=\"Fechar\"><mat-icon>close</mat-icon></button>\n </div>\n <div class=\"details-body\" *ngIf=\"currentConn() as c\">\n <div><b>De:</b> {{ c.from.widget }}.{{ c.from.output }}</div>\n <div><b>Para:</b> {{ c.to.widget }}.{{ c.to.input }}</div>\n <div><b>map:</b> {{ c.map || 'payload' }}</div>\n <div *ngIf=\"c.to.bindingOrder?.length\"><b>bindingOrder:</b> {{ c.to.bindingOrder?.join(', ') }}</div>\n <div class=\"details-actions\">\n <button mat-button color=\"primary\" (click)=\"openBuilder()\"><mat-icon>tune</mat-icon> Editar no Builder</button>\n <button mat-button color=\"warn\" (click)=\"removeEdge(selectedEdgeIndex())\"><mat-icon>delete</mat-icon> Remover</button>\n </div>\n </div>\n </div>\n\n <svg [attr.width]=\"'100%'\" [attr.height]=\"'100%'\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"10\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"currentColor\"></path>\n </marker>\n </defs>\n <g [attr.transform]=\"transform()\">\n <!-- Edges -->\n <g class=\"edges\">\n <g *ngFor=\"let e of edges(); let i = index\" class=\"edge-group\" role=\"button\" tabindex=\"0\"\n (mouseenter)=\"hoverEdgeId = e.id\" (mouseleave)=\"hoverEdgeId = ''\" (click)=\"selectEdge(i)\">\n <path class=\"edge\" [attr.d]=\"edgePath(e)\" marker-end=\"url(#arrow)\" [class.hover]=\"hoverEdgeId===e.id\" [attr.aria-label]=\"e.label || ''\" [matTooltip]=\"edgeTooltip(e)\"></path>\n <ng-container *ngIf=\"showEdgeLabels && e.label\">\n <g [attr.transform]=\"'translate(' + edgeMid(e).x + ',' + edgeMid(e).y + ')'\">\n <text class=\"edge-label\" x=\"0\" y=\"0\">{{ e.label }}</text>\n </g>\n </ng-container>\n <g *ngIf=\"hoverEdgeId===e.id\" class=\"edge-toolbar\">\n <rect [attr.x]=\"edgeMid(e).x-28\" [attr.y]=\"edgeMid(e).y-14\" width=\"56\" height=\"28\" rx=\"6\" ry=\"6\" class=\"edge-toolbar-bg\"></rect>\n <text [attr.x]=\"edgeMid(e).x-14\" [attr.y]=\"edgeMid(e).y+4\" class=\"icon\" (click)=\"removeEdge(i)\" aria-label=\"Remover\">🗑</text>\n <text [attr.x]=\"edgeMid(e).x+8\" [attr.y]=\"edgeMid(e).y+4\" class=\"icon\" (click)=\"openBuilder()\" aria-label=\"Editar\">✎</text>\n </g>\n </g>\n </g>\n\n <!-- Temporary drag edge -->\n <path *ngIf=\"dragPath()\" class=\"edge temp\" [attr.d]=\"dragPath()\" marker-end=\"url(#arrow)\"></path>\n\n <!-- Nodes -->\n <g class=\"nodes\">\n <g *ngFor=\"let n of nodes(); let ni = index\" class=\"node\" [attr.transform]=\"'translate(' + n.bounds.x + ',' + n.bounds.y + ')'\" role=\"group\" [attr.aria-label]=\"n.label\">\n <rect class=\"node-box\" [attr.width]=\"n.bounds.width\" [attr.height]=\"n.bounds.height\" rx=\"8\" ry=\"8\"\n (mousedown)=\"onNodeDragStart($event, ni)\"></rect>\n <text class=\"node-title\" x=\"8\" y=\"20\">{{ n.label }}</text>\n\n <!-- Output ports (left) -->\n <g *ngFor=\"let p of outputPorts(n); trackBy: trackPort\" class=\"port output\"\n [attr.transform]=\"'translate(' + (0) + ',' + (p.anchor.y - n.bounds.y - 4) + ')'\">\n <circle r=\"6\" cx=\"-6\" cy=\"8\" class=\"port-dot\" [attr.data-node-id]=\"n.id\" [attr.data-port-id]=\"p.id\" [matTooltip]=\"portTooltip(p)\"></circle>\n <rect class=\"port-hit\" x=\"-16\" y=\"0\" width=\"20\" height=\"16\" [dragConnect]=\"{ nodeId: n.id, portId: p.id }\" [matTooltip]=\"portTooltip(p)\"\n (connectDragStart)=\"onDragStart($event)\" (connectDragMove)=\"onDragMove($event)\" (connectDragEnd)=\"onDragEnd($event)\"></rect>\n <text *ngIf=\"showPortLabels\" x=\"-4\" y=\"12\" class=\"port-label\" text-anchor=\"end\" [attr.title]=\"portTooltip(p)\">{{ portText(p) }}</text>\n </g>\n\n <!-- Input ports (right) -->\n <g *ngFor=\"let p of inputPorts(n); trackBy: trackPort\" class=\"port input\"\n [attr.transform]=\"'translate(' + (n.bounds.width) + ',' + (p.anchor.y - n.bounds.y - 4) + ')'\">\n <circle r=\"6\" cx=\"6\" cy=\"8\" class=\"port-dot\" [attr.data-node-id]=\"n.id\" [attr.data-port-id]=\"p.id\" data-port-kind=\"input\" [attr.data-port-path]=\"p.path || ''\" [matTooltip]=\"portTooltip(p)\"></circle>\n <rect class=\"port-hit\" x=\"-4\" y=\"0\" width=\"20\" height=\"16\" [matTooltip]=\"portTooltip(p)\"></rect>\n <text *ngIf=\"showPortLabels\" x=\"8\" y=\"12\" class=\"port-label\" [attr.title]=\"portTooltip(p)\">{{ portText(p) }}</text>\n </g>\n </g>\n </g>\n </g>\n </svg>\n <!-- Pending connection popover -->\n <div class=\"popover\" *ngIf=\"pendingPopover() as pop\" [style.left.px]=\"pop.x\" [style.top.px]=\"pop.y\">\n <div class=\"popover-body\">\n <div class=\"popover-title\">Nova conexão</div>\n <div class=\"popover-grid\">\n <label>map:\n <input class=\"popover-input\" [(ngModel)]=\"pop.map\" [attr.placeholder]=\"placeholderSample\" />\n </label>\n <div class=\"popover-chips\">\n <button mat-stroked-button (click)=\"applyPreset('payload')\">payload</button>\n <button mat-stroked-button (click)=\"applyPreset('payload.id')\">payload.id</button>\n <button mat-stroked-button (click)=\"applyPreset('payload.data')\">payload.data</button>\n </div>\n <label>filter (opcional):\n <input class=\"popover-input\" [(ngModel)]=\"pop.filter\" placeholder=\"ex.: = payload != null\" />\n </label>\n <div class=\"popover-rows\">\n <div class=\"popover-inline\">\n <label class=\"popover-inline-field\">debounce (ms): <input class=\"popover-input popover-input--short\" type=\"number\" min=\"0\" [(ngModel)]=\"pop.debounceMs\" /></label>\n <label class=\"popover-inline-field\">\n <input type=\"checkbox\" [(ngModel)]=\"pop.distinct\" /> distinct\n </label>\n </div>\n <label>distinctBy (opcional):\n <input class=\"popover-input\" [(ngModel)]=\"pop['distinctBy']\" placeholder=\"ex.: payload.id\" />\n </label>\n </div>\n <div class=\"popover-preview\">Filtro: {{ computeFilterPreview(pop.filter) }}</div>\n <div class=\"popover-preview\">Prévia: {{ computePreview(pop.map) }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"cancelPending()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" (click)=\"confirmPending()\">Confirmar</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .cg-root { display: flex; flex-direction: column; height: 100%; width: 100%; }\n .cg-head { display: flex; align-items: center; gap: 12px; padding: 8px 12px; background: var(--md-sys-color-surface); border-bottom: 1px solid var(--md-sys-color-outline); }\n .cg-title { font-weight: 600; }\n .spacer { flex: 1; }\n .cg-count { color: var(--md-sys-color-on-surface-variant); }\n .cg-canvas { position: relative; flex: 1; min-height: 300px; }\n svg { background: var(--md-sys-color-surface-container-lowest); color: var(--md-sys-color-on-surface); }\n .node-box { fill: var(--md-sys-color-surface-container); stroke: var(--md-sys-color-outline); }\n .node-title { fill: var(--md-sys-color-on-surface); font-size: 14px; font-weight: 600; }\n .port-dot { fill: currentColor; r: 6; }\n .port-label { fill: var(--md-sys-color-on-surface-variant); font-size: 13px; }\n .edge { stroke: var(--md-sys-color-primary); stroke-width: 2; fill: none; }\n .edge.hover { stroke: var(--md-sys-color-tertiary); }\n .edge.temp { stroke-dasharray: 4 4; opacity: 0.7; }\n .edge-label { fill: var(--md-sys-color-on-surface); font-size: 12px; dominant-baseline: middle; text-anchor: middle; }\n .edge-label-bg { fill: var(--md-sys-color-surface); opacity: 0.72; }\n .edge-toolbar .edge-toolbar-bg { fill: var(--md-sys-color-surface); stroke: var(--md-sys-color-outline); }\n .edge-toolbar .icon { fill: var(--md-sys-color-on-surface); font-size: 12px; cursor: pointer; user-select: none; }\n .popover { position: absolute; transform: translate(-50%, -50%); z-index: 10; }\n .popover-body { background: var(--md-sys-color-surface); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 8px; padding: 8px; min-width: 220px; box-shadow: var(--mat-elevation-level4); }\n .popover-title { font-weight: 600; margin-bottom: 8px; }\n .popover-grid { display: grid; gap: 6px; min-width: 260px; }\n .popover-chips { display: flex; gap: 6px; flex-wrap: wrap; }\n .popover-rows { display: grid; gap: 6px; }\n .popover-inline { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }\n .popover-inline-field { display: inline-flex; align-items: center; gap: 6px; }\n .popover-body label { display: grid; gap: 4px; font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .popover-input { background: var(--md-sys-color-surface-container-lowest); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 6px; padding: 4px 6px; font: inherit; }\n .popover-input:focus-visible { outline: 2px solid var(--md-sys-color-primary); outline-offset: 1px; }\n .popover-input--short { width: 90px; }\n .popover-preview { font-size: 12px; opacity: 0.8; color: var(--md-sys-color-on-surface-variant); }\n .actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n .port-hit { fill: transparent; cursor: crosshair; height: 24px; }\n .cg-details { position: absolute; right: 8px; top: 48px; width: 320px; background: var(--md-sys-color-surface); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 8px; box-shadow: var(--mat-elevation-level3); z-index: 12; }\n .details-head { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border-bottom: 1px solid var(--md-sys-color-outline); }\n .details-title { font-weight: 600; }\n .details-body { padding: 8px 10px; display: grid; gap: 6px; }\n .details-actions { display: flex; gap: 8px; margin-top: 8px; }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionGraphComponent implements OnInit, OnChanges {\n @Input() page?: GridPageDefinition | string;\n @Input() widgets?: GridWidgetInstance[];\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n nodes = signal<GraphNode[]>([]);\n edges = signal<GraphEdge[]>([]);\n connections = signal<WidgetConnection[]>([]);\n showPortLabels = true;\n showEdgeLabels = false;\n showUnconnectedPorts = true;\n showDetails = true;\n showFriendlyLabels = true;\n selectedEdgeIndex = signal<number>(-1);\n\n // Panning/zoom\n private pan = { x: 0, y: 0 };\n private zoom = 1;\n transform = signal<string>('');\n\n // Hover state\n hoverEdgeId = '';\n\n // Drag state\n private dragFrom?: { nodeId: string; portId: string };\n dragPath = signal<string>('');\n\n // Pending popover\n pendingPopover = signal<{ x: number; y: number; from: { nodeId: string; portId: string }; to: { nodeId: string; portId: string; path?: string }; map?: string; filter?: string; debounceMs?: number; distinct?: boolean; distinctBy?: string } | null>(null);\n\n // Settings Panel integration\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private initialSnapshot = '[]';\n placeholderSample = 'payload | payload.id | ${payload.id}';\n\n private connectedPorts = new Map<string, Set<string>>();\n private isPortConnected(nodeId: string, portId: string): boolean {\n const set = this.connectedPorts.get(nodeId); return !!set && set.has(portId);\n }\n outputPorts(n: GraphNode): GraphPort[] {\n const ports = (n.ports || []).filter((p) => p.kind === 'output');\n return this.showUnconnectedPorts ? ports : ports.filter(p => this.isPortConnected(n.id, p.id));\n }\n inputPorts(n: GraphNode): GraphPort[] {\n const ports = (n.ports || []).filter((p) => p.kind === 'input');\n return this.showUnconnectedPorts ? ports : ports.filter(p => this.isPortConnected(n.id, p.id));\n }\n\n constructor(\n private mapper: GraphMapperService,\n private settingsPanel: SettingsPanelService,\n @Optional() @Inject(SETTINGS_PANEL_DATA) private injectedData?: { page?: GridPageDefinition; widgets?: GridWidgetInstance[] },\n ) {}\n\n ngOnInit(): void {\n const data = this.injectedData || {};\n const p = this.parsePage(data.page);\n const ws = (data.widgets as GridWidgetInstance[]) || this.widgets || p?.widgets || [];\n this.widgets = ws;\n this.page = data.page || (this.page as any);\n const conns = [...(p?.connections || [])];\n this.connections.set(conns);\n this.initialSnapshot = JSON.stringify(conns);\n this.rebuildGraph();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['widgets']) {\n const p = this.parsePage(this.page);\n this.connections.set([...(p?.connections || [])]);\n this.rebuildGraph();\n this.initialSnapshot = JSON.stringify(this.connections());\n this.isDirty$.next(false);\n }\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n\n private rebuildGraph(): void {\n const p = this.parsePage(this.page) || ({ widgets: this.widgets || [], connections: this.connections() } as GridPageDefinition);\n const { nodes, edges } = this.mapper.mapToGraph({ ...p, connections: this.connections() }, this.widgets || []);\n this.nodes.set(nodes);\n this.edges.set(edges);\n this.recomputeConnectedPorts();\n this.updateTransform();\n }\n private recomputeConnectedPorts(): void {\n const map = new Map<string, Set<string>>();\n const add = (nodeId: string, portId: string) => {\n const s = map.get(nodeId) || new Set<string>(); s.add(portId); map.set(nodeId, s);\n };\n for (const e of this.edges()) {\n add(e.from.nodeId, e.from.portId);\n add(e.to.nodeId, e.to.portId);\n }\n this.connectedPorts = map;\n }\n\n // External focus by connection (from Builder or other callers)\n focusConnection(conn: { from: { widget: string; output: string }; to: { widget: string; input: string } }): void {\n const fromNodeId = conn.from.widget;\n const fromPortId = `out:${conn.from.output}`;\n let toNodeId = conn.to.widget;\n let toPortId = `in:${conn.to.input}`;\n const deep = this.parseTabsPath(conn.to.input);\n if (deep) {\n const childId = `${conn.to.widget}#${deep.kind}[${deep.index}]/${deep.widgetIndex}`;\n if (this.nodes().some(n => n.id === childId)) { toNodeId = childId; toPortId = `in:${deep.input}`; }\n else { toPortId = `in:${deep.input}`; }\n }\n const idx = this.edges().findIndex(e => e.from.nodeId === fromNodeId && e.from.portId === fromPortId && e.to.nodeId === toNodeId && e.to.portId === toPortId);\n if (idx >= 0) this.selectEdge(idx);\n }\n\n private parseTabsPath(path: string | undefined): { kind: 'group' | 'nav'; index: number; widgetIndex: number; input: string } | null {\n if (!path) return null;\n const g = path.match(/^inputs\\.config\\.tabs\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/);\n if (g) return { kind: 'group', index: Number(g[1]), widgetIndex: Number(g[2]), input: g[3] };\n const n = path.match(/^inputs\\.config\\.nav\\.links\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/);\n if (n) return { kind: 'nav', index: Number(n[1]), widgetIndex: Number(n[2]), input: n[3] };\n return null;\n }\n\n // Pan/Zoom handlers\n onWheel(ev: WheelEvent): void {\n ev.preventDefault();\n const delta = Math.sign(ev.deltaY) * -0.05; // invert: wheel down zoom out\n this.zoom = Math.min(2, Math.max(0.5, this.zoom + delta));\n this.updateTransform();\n }\n private panning = false;\n private panStart = { x: 0, y: 0 };\n onPanStart(ev: MouseEvent): void {\n if ((ev.target as HTMLElement).closest('.port-hit')) return; // don't pan when starting on port\n this.panning = true;\n this.panStart = { x: ev.clientX - this.pan.x, y: ev.clientY - this.pan.y };\n const onMove = (e: MouseEvent) => this.onPanMove(e);\n const onUp = () => { this.panning = false; document.removeEventListener('mousemove', onMove); };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp, { once: true });\n }\n private onPanMove(ev: MouseEvent): void {\n if (!this.panning) return;\n this.pan = { x: ev.clientX - this.panStart.x, y: ev.clientY - this.panStart.y };\n this.updateTransform();\n }\n private updateTransform(): void {\n this.transform.set(`translate(${this.pan.x},${this.pan.y}) scale(${this.zoom})`);\n }\n\n // Edge/path helpers\n edgePath(e: GraphEdge): string {\n const from = this.findPortAnchor(e.from.nodeId, e.from.portId);\n const to = this.findPortAnchor(e.to.nodeId, e.to.portId);\n return routeElbow(from, to);\n }\n edgeTooltip(e: GraphEdge): string {\n const toNode = this.nodes().find(n => n.id === e.to.nodeId);\n const fromNode = this.nodes().find(n => n.id === e.from.nodeId);\n const parts = [\n `De: ${fromNode?.label || e.from.nodeId}.${e.from.portId.replace('out:','')}`,\n `Para: ${toNode?.label || e.to.nodeId}.${e.to.portId.replace('in:','')}`,\n ];\n if (e.meta && (e.meta as any).friendlyPath) parts.push(`Destino: ${(e.meta as any).friendlyPath}`);\n if (e.meta?.map) parts.push(`map: ${e.meta.map}`);\n return parts.join('\\n');\n }\n\n // Port label/tooltip helpers\n private technicalName(p: GraphPort): string {\n const fromId = p.id?.replace(/^in:|^out:/, '') || '';\n if (fromId) return fromId;\n if (p.path) {\n const m = p.path.match(/\\.inputs\\.([^\\.\\[]+)$/);\n if (m) return m[1];\n }\n return p.label || '';\n }\n portText(p: GraphPort): string { return this.showFriendlyLabels ? (p.label || this.technicalName(p)) : this.technicalName(p); }\n portTooltip(p: GraphPort): string {\n const tech = this.technicalName(p);\n const friendly = p.label || tech;\n const desc = p.description ? `\\n${p.description}` : '';\n if (this.showFriendlyLabels) return `${friendly}${desc}`;\n // when showing technical, include friendly for contexto if different\n return friendly !== tech ? `${tech} \\n(${friendly})${desc}` : `${tech}${desc}`;\n }\n edgeMid(e: GraphEdge): { x: number; y: number } {\n const from = this.findPortAnchor(e.from.nodeId, e.from.portId);\n const to = this.findPortAnchor(e.to.nodeId, e.to.portId);\n return { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n }\n private findPortAnchor(nodeId: string, portId: string): { x: number; y: number } {\n const n = this.nodes().find((x) => x.id === nodeId);\n if (!n) return { x: 0, y: 0 };\n const p = n.ports.find((pp) => pp.id === portId);\n return p?.anchor || { x: n.bounds.x, y: n.bounds.y };\n }\n\n // Drag connect flow\n onDragStart(ev: DragStartEvent): void {\n this.dragFrom = ev.from;\n this.dragPath.set(`M ${ev.x} ${ev.y} L ${ev.x} ${ev.y}`);\n try { console.debug('[ConnectionGraph] drag:start', { from: ev.from, at: { x: ev.x, y: ev.y } }); } catch {}\n }\n onDragMove(ev: DragMoveEvent): void {\n if (!this.dragFrom) return;\n const from = this.findPortAnchor(this.dragFrom.nodeId, this.dragFrom.portId);\n this.dragPath.set(routeElbow(from, { x: ev.x, y: ev.y }));\n try { console.debug('[ConnectionGraph] drag:move', { to: { x: ev.x, y: ev.y } }); } catch {}\n }\n onDragEnd(ev: DragEndEvent): void {\n if (!this.dragFrom) return;\n this.dragPath.set('');\n // Find target input port element (robust: handle circle or its container)\n const endEl = ev.endEvent.target as Element;\n const targetInfo = { tag: (endEl as any)?.tagName, class: (endEl as any)?.className } as any;\n let circleEl: Element | null = (endEl as any)?.closest?.('.port.input circle') as Element | null;\n if (!circleEl) {\n const portGroup = (endEl as any)?.closest?.('.port.input') as Element | null;\n if (portGroup) circleEl = (portGroup.querySelector('circle') as Element) || null;\n }\n if (!circleEl && endEl && (endEl as any).getAttribute) {\n const hasData = Boolean((endEl as any).getAttribute('data-port-id'));\n if (hasData) circleEl = endEl as Element;\n }\n if (!circleEl) {\n try { console.warn('[ConnectionGraph] drag:end — no target port found', targetInfo); } catch {}\n this.dragFrom = undefined; return;\n }\n const toNodeId = circleEl.getAttribute('data-node-id') || '';\n const toPortId = circleEl.getAttribute('data-port-id') || '';\n const path = circleEl.getAttribute('data-port-path') || undefined;\n try { console.debug('[ConnectionGraph] drag:end found target', { toNodeId, toPortId, path, at: { x: ev.x, y: ev.y } }); } catch {}\n this.pendingPopover.set({ x: ev.x, y: ev.y, from: this.dragFrom, to: { nodeId: toNodeId, portId: toPortId, path }, map: 'payload' });\n try { console.debug('[ConnectionGraph] popover:open', this.pendingPopover()); } catch {}\n this.dragFrom = undefined;\n }\n cancelPending(): void { this.pendingPopover.set(null); }\n confirmPending(): void {\n const pop = this.pendingPopover();\n if (!pop) return;\n const fromOutput = pop.from.portId.replace(/^out:/, '');\n const toInputName = pop.to.portId.replace(/^in:/, '');\n const toPath = pop.to.path || toInputName;\n const newConn: WidgetConnection = {\n from: { widget: pop.from.nodeId, output: fromOutput },\n to: { widget: this.resolveToWidget(pop.to.nodeId), input: toPath },\n map: pop.map,\n meta: {\n filterExpr: pop.filter || undefined,\n debounceMs: pop.debounceMs || undefined,\n distinct: pop.distinct || undefined,\n distinctBy: pop.distinctBy || undefined,\n },\n } as any;\n const next = [...this.connections(), newConn];\n try { console.debug('[ConnectionGraph] connection:add', newConn); } catch {}\n this.connections.set(next);\n this.pendingPopover.set(null);\n try { console.debug('[ConnectionGraph] popover:close'); } catch {}\n this.rebuildGraph();\n this.emitPageChange();\n this.updateDirty(next);\n }\n applyPreset(map: string): void {\n const pop = this.pendingPopover(); if (!pop) return;\n this.pendingPopover.set({ ...pop, map });\n }\n computePreview(map?: string): string {\n try {\n const sample: any = { payload: { id: 123, data: { id: 123, name: 'Exemplo' }, row: { id: 123 } } };\n const path = (map || 'payload').split('.');\n let cur: any = sample;\n for (const k of path) { if (!k) continue; cur = cur?.[k]; }\n return JSON.stringify(cur);\n } catch { return '—'; }\n }\n computeFilterPreview(expr?: string): string {\n try {\n if (!expr) return '—';\n const sample: any = { payload: { id: 123, data: { id: 123, name: 'Exemplo' }, row: { id: 123 } } };\n if (typeof expr === 'string' && expr.trim().startsWith('=')) {\n const code = expr.trim().slice(1);\n // Controlled eval limited to sample context\n // eslint-disable-next-line no-new-func\n const fn = new Function('payload', `\"use strict\"; return (${code});`);\n const ok = !!fn(sample.payload);\n return ok ? 'pass' : 'skip';\n }\n return '—';\n } catch { return 'erro'; }\n }\n private resolveToWidget(nodeId: string): string {\n // Child nodes are encoded as parent#kind[index]/widgetIndex\n const hash = nodeId.indexOf('#');\n if (hash > 0) return nodeId.slice(0, hash);\n return nodeId;\n }\n\n removeEdge(index: number): void {\n const next = this.connections().slice();\n next.splice(index, 1);\n this.connections.set(next);\n this.rebuildGraph();\n this.emitPageChange();\n this.updateDirty(next);\n }\n\n // Select edge and open details\n selectEdge(index: number): void {\n this.selectedEdgeIndex.set(index);\n this.showDetails = true;\n }\n currentConn(): WidgetConnection | undefined { const i = this.selectedEdgeIndex(); return (i >= 0 ? this.connections()[i] : undefined); }\n\n private emitPageChange(): void {\n const parsed = this.parsePage(this.page) || ({ widgets: this.widgets || [] } as GridPageDefinition);\n const updated: GridPageDefinition = { ...parsed, connections: this.connections() };\n this.pageChange.emit(updated);\n }\n\n // Settings panel value provider methods\n getSettingsValue(): any { return { page: { ...(this.parsePage(this.page) || {}), connections: this.connections() } }; }\n reset(): void {\n try { this.connections.set(JSON.parse(this.initialSnapshot || '[]')); } catch { this.connections.set([]); }\n this.rebuildGraph();\n this.isDirty$.next(false);\n this.isValid$.next(true);\n }\n\n // Node dragging\n private nodeDrag = { active: false, index: -1, startX: 0, startY: 0, origX: 0, origY: 0 };\n onNodeDragStart(ev: MouseEvent, index: number): void {\n ev.preventDefault(); ev.stopPropagation();\n const n = this.nodes()[index]; if (!n) return;\n this.nodeDrag = { active: true, index, startX: ev.clientX, startY: ev.clientY, origX: n.bounds.x, origY: n.bounds.y };\n const onMove = (e: MouseEvent) => this.onNodeDragMove(e);\n const onUp = () => { this.nodeDrag.active = false; document.removeEventListener('mousemove', onMove); };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp, { once: true });\n }\n private onNodeDragMove(ev: MouseEvent): void {\n if (!this.nodeDrag.active) return;\n const dx = (ev.clientX - this.nodeDrag.startX) / this.zoom;\n const dy = (ev.clientY - this.nodeDrag.startY) / this.zoom;\n const nodes = this.nodes().slice();\n const n = { ...nodes[this.nodeDrag.index] };\n const newX = this.nodeDrag.origX + dx;\n const newY = this.nodeDrag.origY + dy;\n const ddx = newX - n.bounds.x;\n const ddy = newY - n.bounds.y;\n n.bounds = { ...n.bounds, x: newX, y: newY };\n // Shift port anchors by delta\n n.ports = (n.ports || []).map(p => ({ ...p, anchor: { x: p.anchor.x + ddx, y: p.anchor.y + ddy } }));\n nodes[this.nodeDrag.index] = n;\n this.nodes.set(nodes);\n }\n\n trackPort(_idx: number, p: GraphPort) { return p.id; }\n private updateDirty(next: WidgetConnection[]): void {\n this.isDirty$.next(JSON.stringify(next) !== this.initialSnapshot);\n this.isValid$.next(true);\n }\n\n // Builder integration\n openBuilder(): void {\n const base = this.parsePage(this.page) || ({ widgets: this.widgets || [] } as GridPageDefinition);\n const p: GridPageDefinition = { ...base, connections: this.connections() } as GridPageDefinition;\n try { console.debug('[ConnectionGraph] openBuilder()', { baseHasConns: !!(base as any).connections, graphConns: this.connections().length, widgets: this.widgets?.length }); } catch {}\n const ref = this.settingsPanel.open({ id: 'grid-connections', title: 'Conexões (Builder)', content: { component: ConnectionBuilderComponent, inputs: { page: p, widgets: this.widgets } } });\n ref.applied$.subscribe((val: any) => { const next = (val && val.page) ? (val.page as GridPageDefinition) : undefined; if (next) this.applyConnections(next); });\n ref.saved$.subscribe((val: any) => { const next = (val && val.page) ? (val.page as GridPageDefinition) : undefined; if (next) this.applyConnections(next); });\n }\n private applyConnections(next: GridPageDefinition): void {\n const conns = [...(next.connections || [])];\n try { console.debug('[ConnectionGraph] applyConnections()', { conns: conns.length }); } catch {}\n this.connections.set(conns);\n this.rebuildGraph();\n this.emitPageChange();\n this.initialSnapshot = JSON.stringify(conns);\n this.isDirty$.next(false);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { ConnectionBuilderComponent } from '../connection-builder.component';\nimport { ConnectionGraphComponent } from '../connection-graph/connection-graph.component';\n\n@Component({\n selector: 'praxis-connection-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTabsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n ConnectionBuilderComponent,\n ConnectionGraphComponent,\n ],\n templateUrl: './connection-editor.component.html',\n styleUrls: ['./connection-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionEditorComponent {\n readonly page = input<GridPageDefinition | string | null>(null);\n readonly widgets = input<GridWidgetInstance[] | null>(null);\n readonly pageChange = output<GridPageDefinition>();\n\n readonly pageState = signal<GridPageDefinition | undefined>(undefined);\n readonly jsonControl = new FormControl<string>('', { nonNullable: true });\n readonly jsonError = signal<string | null>(null);\n\n private lastSerialized = '';\n\n constructor() {\n effect(\n () => {\n const parsed = this.parsePage(this.page());\n const serialized = parsed ? JSON.stringify(parsed, null, 2) : '';\n if (serialized !== this.lastSerialized) {\n this.lastSerialized = serialized;\n this.pageState.set(parsed);\n this.jsonControl.setValue(serialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n },\n { allowSignalWrites: true },\n );\n\n this.jsonControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((next) => this.onJsonInput(next));\n }\n\n onPageChange(next: GridPageDefinition): void {\n this.pageState.set(next);\n this.pageChange.emit(next);\n this.lastSerialized = JSON.stringify(next, null, 2);\n this.jsonControl.setValue(this.lastSerialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n\n onJsonInput(raw: string): void {\n if (!raw.trim()) {\n this.jsonError.set(null);\n return;\n }\n try {\n const parsed = JSON.parse(raw) as GridPageDefinition;\n this.pageState.set(parsed);\n this.pageChange.emit(parsed);\n this.jsonError.set(null);\n this.lastSerialized = raw;\n } catch (err) {\n this.jsonError.set('JSON invalido');\n }\n }\n\n resetJson(): void {\n const next = this.pageState();\n const serialized = next ? JSON.stringify(next, null, 2) : '';\n this.lastSerialized = serialized;\n this.jsonControl.setValue(serialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n\n private parsePage(input: GridPageDefinition | string | null | undefined): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return undefined;\n }\n }\n return input;\n }\n}\n","<div class=\"conn-editor\">\n <mat-tab-group class=\"conn-tabs\">\n <mat-tab label=\"Construtor\">\n <praxis-connection-builder\n [page]=\"pageState() || undefined\"\n [widgets]=\"widgets() || undefined\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-builder>\n </mat-tab>\n <mat-tab label=\"Diagrama\">\n <praxis-connection-graph\n [page]=\"pageState() || undefined\"\n [widgets]=\"widgets() || undefined\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-graph>\n </mat-tab>\n <mat-tab label=\"JSON\">\n <div class=\"conn-json\">\n <mat-form-field class=\"json-field\" appearance=\"outline\">\n <mat-label>Pagina (JSON)</mat-label>\n <textarea matInput rows=\"16\" [formControl]=\"jsonControl\"></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Use este JSON para copiar/colar a página completa.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (jsonError()) {\n <div class=\"json-error\" role=\"alert\">{{ jsonError() }}</div>\n }\n <div class=\"json-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"resetJson()\">Recarregar</button>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { ConnectionEditorComponent } from './connection-editor.component';\n\nexport interface ConnectionEditorDialogData {\n page?: GridPageDefinition | string;\n widgets?: GridWidgetInstance[];\n}\n\n@Component({\n selector: 'praxis-connection-editor-dialog',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule, ConnectionEditorComponent],\n template: `\n <div class=\"dialog-shell\">\n <div mat-dialog-title class=\"dialog-head\">\n <div class=\"dialog-title\">Editor de Conexoes</div>\n <span class=\"spacer\"></span>\n <button mat-icon-button type=\"button\" (click)=\"close()\" aria-label=\"Fechar\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <mat-dialog-content class=\"dialog-body\">\n <praxis-connection-editor\n [page]=\"page()\"\n [widgets]=\"widgets()\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-editor>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\" class=\"dialog-actions\">\n <button mat-button type=\"button\" (click)=\"close()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"save()\">Salvar</button>\n </mat-dialog-actions>\n </div>\n `,\n styles: [\n `\n .dialog-shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-height: 90vh;\n min-width: min(960px, 94vw);\n }\n .dialog-head {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px 10px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n }\n .dialog-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .dialog-body {\n flex: 1;\n overflow: auto;\n }\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: var(--pdx-dialog-actions-padding, 12px 24px 16px);\n border-top: 1px solid var(--md-sys-color-outline-variant);\n align-items: center;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionEditorDialogComponent {\n readonly page = signal<GridPageDefinition | null>(null);\n readonly widgets = signal<GridWidgetInstance[]>([]);\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: ConnectionEditorDialogData,\n private dialogRef: MatDialogRef<ConnectionEditorDialogComponent>,\n ) {\n const parsed = this.parsePage(data?.page);\n this.page.set(parsed);\n this.widgets.set(data?.widgets || []);\n }\n\n onPageChange(next: GridPageDefinition): void {\n this.page.set(next);\n }\n\n close(): void {\n this.dialogRef.close();\n }\n\n save(): void {\n const next = this.page();\n if (next) {\n this.dialogRef.close({ page: next });\n return;\n }\n this.dialogRef.close();\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | null {\n if (!input) return null;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return null;\n }\n }\n return input;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GridPageDefinition, PageIdentity } from '@praxisui/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype PageOptions = GridPageDefinition['options'];\n\n@Component({\n selector: 'praxis-page-config-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatButtonModule, MatFormFieldModule, MatInputModule, MatIconModule, MatTooltipModule],\n template: `\n <div class=\"page-config\">\n <div class=\"page-head\">\n <div class=\"page-title\">Configurações da Página</div>\n <span class=\"spacer\"></span>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n @if (identity()) {\n <div class=\"page-identity\">\n <div><strong>Rota:</strong> {{ identity()?.routePath || '/' }}</div>\n <div><strong>App:</strong> {{ identity()?.appId || 'app' }}</div>\n @if (identity()?.tenantId) {\n <div><strong>Tenant:</strong> {{ identity()?.tenantId }}</div>\n }\n @if (identity()?.userId) {\n <div><strong>User:</strong> {{ identity()?.userId }}</div>\n }\n </div>\n }\n\n <div class=\"page-section\">Grid</div>\n <form class=\"grid-form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.cols\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura da linha (px)</mat-label>\n <input matInput type=\"number\" min=\"20\" [formControl]=\"form.controls.rowHeight\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap (px)</mat-label>\n <input matInput type=\"number\" min=\"0\" [formControl]=\"form.controls.gap\" />\n </mat-form-field>\n </form>\n\n <div class=\"page-section\">Contexto</div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Contexto (JSON)</mat-label>\n <textarea matInput rows=\"10\" [formControl]=\"contextControl\"></textarea>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"contextExample\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (contextError()) {\n <div class=\"page-error\" role=\"alert\">{{ contextError() }}</div>\n }\n\n <div class=\"page-actions\">\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"apply()\">Aplicar</button>\n </div>\n </div>\n `,\n styles: [\n `\n .page-config {\n display: grid;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .page-head {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .page-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .page-identity {\n display: grid;\n gap: 4px;\n font-size: 13px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .page-section {\n font-weight: 600;\n margin-top: 8px;\n }\n .grid-form {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n .page-actions {\n display: flex;\n justify-content: flex-end;\n }\n .page-error {\n color: var(--md-sys-color-error);\n font-size: 13px;\n }\n .page-config .mat-mdc-form-field {\n width: 100%;\n --mdc-outlined-text-field-container-height: 48px;\n --mdc-outlined-text-field-outline-color: var(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: -4px;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .mat-mdc-form-field-icon-suffix { align-self: center; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageConfigEditorComponent {\n protected readonly contextExample = 'Ex.: {\\\"tenantId\\\":\\\"acme\\\",\\\"locale\\\":\\\"pt-BR\\\"}';\n readonly page = input<GridPageDefinition | string | null>(null);\n readonly identity = input<PageIdentity | null>(null);\n readonly gridsterOptions = input<any | null>(null);\n readonly pageChange = output<GridPageDefinition>();\n\n readonly form = new FormGroup({\n cols: new FormControl<number | null>(null),\n rowHeight: new FormControl<number | null>(null),\n gap: new FormControl<number | null>(null),\n });\n readonly contextControl = new FormControl<string>('', { nonNullable: true });\n readonly contextError = signal<string | null>(null);\n\n private lastContext = '';\n\n constructor() {\n effect(\n () => {\n const next = this.parsePage(this.page());\n const options = next?.options;\n this.form.setValue(\n {\n cols: options?.cols ?? null,\n rowHeight: options?.rowHeight ?? null,\n gap: options?.gap ?? null,\n },\n { emitEvent: false },\n );\n const context = next?.context ? JSON.stringify(next.context, null, 2) : '';\n if (context !== this.lastContext) {\n this.lastContext = context;\n this.contextControl.setValue(context, { emitEvent: false });\n this.contextError.set(null);\n }\n },\n { allowSignalWrites: true },\n );\n\n this.contextControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.contextError.set(null));\n }\n\n apply(): void {\n const next = this.parsePage(this.page()) || ({ widgets: [] } as GridPageDefinition);\n const options = this.buildOptions(this.form.value);\n const context = this.parseContext(this.contextControl.value);\n if (context === null) {\n this.contextError.set('JSON invalido');\n return;\n }\n const updated: GridPageDefinition = {\n ...next,\n options,\n context: context || undefined,\n };\n this.pageChange.emit(updated);\n }\n\n reset(): void {\n const next = this.parsePage(this.page());\n const options = next?.options;\n this.form.setValue(\n {\n cols: options?.cols ?? null,\n rowHeight: options?.rowHeight ?? null,\n gap: options?.gap ?? null,\n },\n { emitEvent: false },\n );\n const context = next?.context ? JSON.stringify(next.context, null, 2) : '';\n this.lastContext = context;\n this.contextControl.setValue(context, { emitEvent: false });\n this.contextError.set(null);\n }\n\n private parsePage(input: GridPageDefinition | string | null | undefined): GridPageDefinition | null {\n if (!input) return null;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return null;\n }\n }\n return input;\n }\n\n private parseContext(raw: string): Record<string, any> | null {\n if (!raw.trim()) return {};\n try {\n return JSON.parse(raw) as Record<string, any>;\n } catch {\n return null;\n }\n }\n\n private buildOptions(values: { cols?: number | null; rowHeight?: number | null; gap?: number | null }): PageOptions {\n const options: PageOptions = {};\n if (values.cols != null) options.cols = values.cols;\n if (values.rowHeight != null) options.rowHeight = values.rowHeight;\n if (values.gap != null) options.gap = values.gap;\n return options;\n }\n}\n","import {\n ComponentMetadataRegistry,\n GridPageDefinition,\n GridWidgetInstance,\n PageIdentity,\n deepMerge,\n generateId,\n} from '@praxisui/core';\nimport type { ComponentDocMeta } from '@praxisui/core';\nimport type { AiCapability } from '@praxisui/core';\nimport type { GridsterConfig } from 'angular-gridster2';\nimport { PAGE_BUILDER_AI_CAPABILITIES } from './page-builder-ai-capabilities';\nimport { getPageAiCatalog } from './page-builder-ai-catalog';\n\nexport type PageBuilderConfig = {\n page?: GridPageDefinition;\n context?: Record<string, unknown> | null;\n enableCustomization?: boolean;\n showSettingsButton?: boolean;\n strictValidation?: boolean;\n gridsterOptions?: Partial<GridsterConfig>;\n pageIdentity?: PageIdentity;\n};\n\nexport interface PageBuilderHost {\n page?: GridPageDefinition | string;\n context?: Record<string, unknown> | null;\n enableCustomization: boolean;\n showSettingsButton: boolean;\n strictValidation: boolean;\n gridsterOptions?: Partial<GridsterConfig>;\n pageIdentity?: PageIdentity;\n applyConfigFromAdapter(config: PageBuilderConfig): void;\n}\n\ntype LegacyWidget = GridWidgetInstance & {\n x?: number;\n y?: number;\n cols?: number;\n rows?: number;\n minItemCols?: number;\n minItemRows?: number;\n maxItemCols?: number;\n maxItemRows?: number;\n};\n\ntype WidgetLayout = {\n col?: number;\n row?: number;\n colSpan?: number;\n rowSpan?: number;\n};\n\ntype ComponentCatalogEntry = {\n id: string;\n friendlyName?: string;\n description?: string;\n icon?: string;\n tags?: string[];\n inputs?: string[];\n outputs?: string[];\n layoutHints?: ComponentDocMeta['layoutHints'];\n};\n\ntype GridConnection = NonNullable<GridPageDefinition['connections']>[number];\n\ntype PatchResult = {\n success: boolean;\n warnings?: string[];\n error?: string;\n};\n\nexport class PageBuilderAiAdapter {\n componentName = 'Page Builder';\n componentId = 'praxis-dynamic-gridster-page';\n componentType = 'page';\n\n constructor(\n private host: PageBuilderHost,\n private registry?: ComponentMetadataRegistry,\n ) {\n }\n\n getCurrentConfig(): PageBuilderConfig {\n const page = this.normalizePageForAi(this.parsePage(this.host.page));\n const config: PageBuilderConfig = {\n page: page ? this.clone(page) : { widgets: [] },\n context: this.clone(this.host.context ?? null),\n enableCustomization: this.host.enableCustomization,\n showSettingsButton: this.host.showSettingsButton,\n strictValidation: this.host.strictValidation,\n gridsterOptions: this.pickGridsterOptions(this.host.gridsterOptions),\n pageIdentity: this.clone(this.host.pageIdentity),\n };\n return config;\n }\n\n getCapabilities(): AiCapability[] {\n return getPageAiCatalog(this.getCurrentConfig()).capabilities;\n }\n\n getRuntimeState(): Record<string, unknown> {\n const page = this.normalizePageForAi(this.parsePage(this.host.page));\n const widgets = page?.widgets || [];\n const connections = page?.connections || [];\n return {\n widgetsCount: widgets.length,\n connectionsCount: connections.length,\n widgetKeys: widgets.map((w) => w.key),\n widgetTypes: widgets.map((w) => w.definition?.id).filter((id) => !!id),\n componentCatalog: this.buildComponentCatalog(),\n };\n }\n\n createSnapshot(): PageBuilderConfig {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: PageBuilderConfig): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(snapshot);\n }\n\n async applyPatch(\n patch: Partial<PageBuilderConfig>,\n _intent?: string,\n ): Promise<PatchResult> {\n try {\n const warnings: string[] = [];\n const current = this.getCurrentConfig();\n const normalizedPatch = this.normalizePatch(patch, current, warnings);\n const merged = deepMerge(current, normalizedPatch);\n const next = this.normalizeConfigForRuntime(merged, warnings);\n this.applyConfig(next);\n return warnings.length ? { success: true, warnings } : { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error applying patch';\n return { success: false, error: message };\n }\n }\n\n private applyConfig(config: PageBuilderConfig): void {\n this.host.applyConfigFromAdapter(config);\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return undefined;\n }\n }\n return input;\n }\n\n private normalizePageForAi(page?: GridPageDefinition): GridPageDefinition | undefined {\n if (!page) return page;\n const widgets = (page.widgets || []).map((w) => this.ensureLayoutFromLegacy(this.clone(w)));\n const options = page.options ?? this.pageOptionsFromGridster(this.host.gridsterOptions);\n return { ...this.clone(page), widgets, ...(options ? { options } : {}) };\n }\n\n private normalizeConfigForRuntime(\n config: PageBuilderConfig,\n warnings: string[],\n ): PageBuilderConfig {\n const page = this.normalizePageForRuntime(config.page, warnings);\n const gridsterOptions = this.mergeRuntimeGridsterOptions(\n this.host.gridsterOptions,\n config.gridsterOptions,\n config.page?.options,\n );\n return {\n ...config,\n page,\n gridsterOptions,\n };\n }\n\n private normalizePageForRuntime(\n page: GridPageDefinition | undefined,\n warnings: string[],\n ): GridPageDefinition | undefined {\n if (!page) return page;\n const widgets = (page.widgets || []).map((w) => this.ensureLegacyLayout(w, warnings));\n return { ...page, widgets };\n }\n\n private normalizePatch(\n patch: Partial<PageBuilderConfig>,\n base: PageBuilderConfig,\n warnings: string[],\n ): Partial<PageBuilderConfig> {\n if (!patch || typeof patch !== 'object') return {};\n const cloned = this.clone(patch) as Partial<PageBuilderConfig>;\n if (cloned.page?.widgets) {\n cloned.page = {\n ...cloned.page,\n widgets: cloned.page.widgets.map((w) => this.ensureLayoutFromLegacy(w)),\n };\n }\n if (cloned.page?.connections) {\n cloned.page = {\n ...cloned.page,\n connections: cloned.page.connections.filter((c) => {\n if (!this.connectionKey(c)) {\n warnings.push('Connection missing from/to information was ignored.');\n return false;\n }\n return true;\n }),\n };\n }\n if (cloned.page?.options) {\n cloned.gridsterOptions = deepMerge(\n cloned.gridsterOptions || {},\n this.gridsterFromPageOptions(cloned.page.options),\n );\n }\n if (cloned.page?.widgets) {\n const mergedWidgets = this.mergeWidgets(\n base.page?.widgets || [],\n cloned.page.widgets,\n warnings,\n );\n cloned.page = { ...cloned.page, widgets: mergedWidgets };\n }\n if (cloned.page?.connections) {\n const mergedConnections = this.mergeConnections(\n base.page?.connections || [],\n cloned.page.connections,\n );\n cloned.page = { ...cloned.page, connections: mergedConnections };\n }\n return cloned;\n }\n\n private mergeWidgets(\n baseWidgets: GridWidgetInstance[],\n patchWidgets: GridWidgetInstance[],\n warnings: string[],\n ): GridWidgetInstance[] {\n const normalizedPatch = patchWidgets.map((w) => this.ensureLayoutFromLegacy(w));\n \n // Process updates and removals\n const merged = baseWidgets\n .map((orig) => {\n const key = this.getWidgetKey(orig);\n const match = key\n ? normalizedPatch.find((p) => this.getWidgetKey(p) === key)\n : undefined;\n \n if (match && (match as any)._delete) {\n return null; // Mark for removal\n }\n \n return match ? (deepMerge(orig, match) as GridWidgetInstance) : orig;\n })\n .filter((w): w is GridWidgetInstance => w !== null);\n\n // Process additions\n for (const patch of normalizedPatch) {\n if ((patch as any)._delete) continue; // Skip deletion patches here\n\n const key = this.getWidgetKey(patch) || this.generateWidgetKey(patch);\n if (!key) {\n warnings.push('Widget without key/id was ignored.');\n continue;\n }\n if (!baseWidgets.find((w) => this.getWidgetKey(w) === key)) {\n const next = { ...patch, key };\n merged.push(this.ensureLegacyLayout(next, warnings));\n }\n }\n return merged;\n }\n\n private mergeConnections(\n baseConnections: GridPageDefinition['connections'],\n patchConnections: GridPageDefinition['connections'],\n ): GridPageDefinition['connections'] {\n const base = baseConnections || [];\n const patch = patchConnections || [];\n if (patch.length === 0) return base;\n\n // Process updates and removals\n const merged = base\n .map((orig) => {\n const key = this.connectionKey(orig);\n const match = key ? patch.find((p) => this.connectionKey(p) === key) : undefined;\n \n if (match && (match as any)._delete) {\n return null; // Mark for removal\n }\n\n return match ? (deepMerge(orig, match) as typeof orig) : orig;\n })\n .filter((c): c is NonNullable<typeof c> => c !== null);\n\n // Process additions\n for (const conn of patch) {\n if ((conn as any)._delete) continue;\n\n const key = this.connectionKey(conn);\n if (!key) continue;\n if (!base.find((c) => this.connectionKey(c) === key)) {\n merged.push(conn);\n }\n }\n return merged;\n }\n\n private ensureLayoutFromLegacy(widget: GridWidgetInstance): GridWidgetInstance {\n const legacy = widget as LegacyWidget;\n const layout = legacy.layout ?? this.layoutFromLegacy(legacy);\n return layout ? ({ ...legacy, layout } as GridWidgetInstance) : widget;\n }\n\n private ensureLegacyLayout(\n widget: GridWidgetInstance,\n warnings: string[],\n ): GridWidgetInstance {\n const legacy = widget as LegacyWidget;\n const layout = legacy.layout ?? this.layoutFromLegacy(legacy);\n const safeLayout = layout ?? { col: 1, row: 1, colSpan: 3, rowSpan: 3 };\n if (!layout) {\n warnings.push(`Widget \"${legacy.key || legacy.definition?.id || 'unknown'}\" missing layout; using defaults.`);\n }\n const col = this.coerceNumber(safeLayout.col, 1);\n const row = this.coerceNumber(safeLayout.row, 1);\n const colSpan = this.coerceNumber(safeLayout.colSpan, 3);\n const rowSpan = this.coerceNumber(safeLayout.rowSpan, 3);\n return {\n ...legacy,\n layout: { col, row, colSpan, rowSpan },\n x: Math.max(0, col - 1),\n y: Math.max(0, row - 1),\n cols: colSpan,\n rows: rowSpan,\n } as GridWidgetInstance;\n }\n\n private layoutFromLegacy(widget: LegacyWidget): WidgetLayout | undefined {\n if (widget.layout) return widget.layout;\n if (typeof widget.x !== 'number' || typeof widget.y !== 'number') return undefined;\n const colSpan = typeof widget.cols === 'number' ? widget.cols : 3;\n const rowSpan = typeof widget.rows === 'number' ? widget.rows : 3;\n return { col: widget.x + 1, row: widget.y + 1, colSpan, rowSpan };\n }\n\n private getWidgetKey(widget: GridWidgetInstance | undefined): string | undefined {\n if (!widget) return undefined;\n const key = (widget as { key?: unknown }).key;\n if (typeof key !== 'string') return undefined;\n const trimmed = key.trim();\n return trimmed ? trimmed : undefined;\n }\n\n private generateWidgetKey(widget: GridWidgetInstance): string | undefined {\n const id = (widget as { definition?: { id?: unknown } }).definition?.id;\n const prefix = typeof id === 'string' && id.trim() ? id.trim() : 'widget';\n return `${prefix}-${generateId()}`;\n }\n\n private connectionKey(connection: GridConnection | undefined): string | null {\n if (!connection) return null;\n const fromWidget = connection.from?.widget;\n const fromOutput = connection.from?.output;\n const toWidget = connection.to?.widget;\n const toInput = connection.to?.input;\n if (!fromWidget || !fromOutput || !toWidget || !toInput) return null;\n return `${fromWidget}::${fromOutput}->${toWidget}::${toInput}`;\n }\n\n private gridsterFromPageOptions(options?: GridPageDefinition['options']): Partial<GridsterConfig> {\n if (!options) return {};\n const patch: Partial<GridsterConfig> = {};\n if (typeof options.cols === 'number') {\n patch.minCols = options.cols;\n patch.maxCols = options.cols;\n }\n if (typeof options.rowHeight === 'number') {\n patch.fixedRowHeight = options.rowHeight;\n }\n if (typeof options.gap === 'number') {\n patch.margin = options.gap;\n }\n return patch;\n }\n\n private mergeRuntimeGridsterOptions(\n base: Partial<GridsterConfig> | undefined,\n overrides: Partial<GridsterConfig> | undefined,\n options?: GridPageDefinition['options'],\n ): Partial<GridsterConfig> | undefined {\n const fromOptions = this.gridsterFromPageOptions(options);\n const merged = { ...(base || {}), ...(overrides || {}), ...(fromOptions || {}) };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n private pageOptionsFromGridster(options?: Partial<GridsterConfig>): GridPageDefinition['options'] | undefined {\n if (!options) return undefined;\n const cols = this.pickNumber(options.maxCols ?? options.minCols);\n const rowHeight = this.pickNumber(options.fixedRowHeight);\n const gap = this.pickNumber(options.margin);\n if (cols == null && rowHeight == null && gap == null) return undefined;\n return {\n ...(cols != null ? { cols } : {}),\n ...(rowHeight != null ? { rowHeight } : {}),\n ...(gap != null ? { gap } : {}),\n };\n }\n\n private pickGridsterOptions(\n options?: Partial<GridsterConfig>,\n ): Partial<GridsterConfig> | undefined {\n if (!options) return undefined;\n const picked: Partial<GridsterConfig> = {};\n if (typeof options.minCols === 'number') picked.minCols = options.minCols;\n if (typeof options.maxCols === 'number') picked.maxCols = options.maxCols;\n if (typeof options.fixedRowHeight === 'number') picked.fixedRowHeight = options.fixedRowHeight;\n if (typeof options.margin === 'number') picked.margin = options.margin;\n return Object.keys(picked).length ? picked : undefined;\n }\n\n private buildComponentCatalog(): ComponentCatalogEntry[] {\n if (!this.registry) return [];\n return this.registry.getAll().map((meta) => ({\n id: meta.id,\n friendlyName: meta.friendlyName,\n description: meta.description,\n icon: meta.icon,\n tags: meta.tags,\n inputs: (meta.inputs || []).map((input) => input.name),\n outputs: (meta.outputs || []).map((output) => output.name),\n layoutHints: meta.layoutHints,\n }));\n }\n\n private pickNumber(value: unknown): number | null {\n return typeof value === 'number' && !Number.isNaN(value) ? value : null;\n }\n\n private coerceNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && !Number.isNaN(value) ? value : fallback;\n }\n\n private clone<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n try {\n return structuredClone(value);\n } catch {\n return JSON.parse(JSON.stringify(value));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChange, SimpleChanges, signal, ElementRef, Inject, Optional, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DynamicWidgetLoaderDirective, ComponentKeyService, GlobalActionService } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance, WidgetShellActionEvent, WidgetShellComponent } from '@praxisui/core';\nimport { ConnectionManagerService } from '@praxisui/core';\nimport { Router } from '@angular/router';\nimport {\n GridsterComponent,\n GridsterConfig,\n GridsterItem,\n GridsterItemComponent,\n} from 'angular-gridster2';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { FloatingToolbarComponent } from './editor/floating-toolbar.component';\nimport { TileToolbarComponent } from './editor/tile-toolbar.component';\nimport { ConfirmDialogComponent } from './editor/confirm-dialog.component';\nimport { ComponentPaletteDialogComponent } from './editor/component-palette-dialog.component';\nimport { ConnectionBuilderComponent } from './editor/connection-builder.component';\nimport { ConnectionGraphComponent } from './editor/connection-graph/connection-graph.component';\nimport { GraphMapperService } from './editor/connection-graph/graph-mapper.service';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { ConnectionEditorDialogComponent } from './editor/connection-editor/connection-editor-dialog.component';\nimport { generateId } from '@praxisui/core';\nimport { SETTINGS_PANEL_BRIDGE, SettingsPanelBridge } from '@praxisui/core';\nimport { TABLE_CONFIG_EDITOR, STEPPER_CONFIG_EDITOR } from '@praxisui/core';\nimport { PageConfigEditorComponent } from './page-config-editor/page-config-editor.component';\nimport { PageIdentity, PersistedPageConfig, buildPageKey } from '@praxisui/core';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage } from '@praxisui/core';\nimport { take } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { PageBuilderAiAdapter, PageBuilderConfig, PageBuilderHost } from './ai/page-builder-ai.adapter';\nimport { WidgetShellEditorComponent } from './editor/widget-shell-editor.component';\n// Avoid static import from @praxisui/table to prevent cross-entry circular deps.\n// We'll lazy-load the editor component when needed.\n\ntype ItemWithKey = GridsterItem & { __key__: string };\ntype GridsterWidgetInstance = GridWidgetInstance & {\n x?: number;\n y?: number;\n cols?: number;\n rows?: number;\n minItemCols?: number;\n minItemRows?: number;\n maxItemCols?: number;\n maxItemRows?: number;\n};\n\n@Component({\n selector: 'praxis-dynamic-gridster-page',\n standalone: true,\n imports: [CommonModule, GridsterComponent, GridsterItemComponent, DynamicWidgetLoaderDirective, MatButtonModule, MatIconModule, MatDialogModule, FloatingToolbarComponent, TileToolbarComponent, PraxisAiAssistantComponent, WidgetShellComponent],\n template: `\n <gridster [options]=\"options\" [class.editing]=\"overlayEnabled && showSettings()\" [class.interacting]=\"overlayEnabled && interacting\">\n <gridster-item *ngFor=\"let it of items(); trackBy: trackItem\" [item]=\"it\">\n <div class=\"pdx-gridster-item mat-elevation-z4\"\n [attr.id]=\"computeTileDomId(it.__key__)\"\n [attr.data-widget-key]=\"it.__key__\"\n [attr.data-widget-type]=\"getWidgetType(it.__key__)\"\n [class.selected]=\"isSelected(it.__key__)\"\n (click)=\"onTileClick(it.__key__, $event)\"\n tabindex=\"0\">\n <praxis-tile-toolbar\n *ngIf=\"showSettings()\"\n [selected]=\"isSelected(it.__key__)\"\n [widgetType]=\"getWidgetType(it.__key__) || null\"\n (remove)=\"confirmRemoveWidget(it.__key__)\"\n (settings)=\"openWidgetSettings(it.__key__)\"\n (shell)=\"openWidgetShellSettings(it.__key__)\"\n ></praxis-tile-toolbar>\n <praxis-widget-shell\n [shell]=\"getWidgetShell(it.__key__)\"\n [context]=\"mergedContext\"\n (action)=\"onShellAction(it.__key__, $event)\"\n >\n <ng-container\n [dynamicWidgetLoader]=\"getWidgetDef(it.__key__)\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onWidgetEvent(it.__key__, $event)\"\n ></ng-container>\n </praxis-widget-shell>\n </div>\n </gridster-item>\n </gridster>\n <button\n mat-mini-fab\n color=\"primary\"\n class=\"pdx-settings-button\"\n *ngIf=\"showSettings() && showSettingsButton\"\n (click)=\"openPageSettings()\"\n aria-label=\"Configurações da Página\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <praxis-floating-toolbar\n [visible]=\"showSettings()\"\n [canUndo]=\"false\"\n [canRedo]=\"false\"\n (add)=\"onAddComponent()\"\n (connections)=\"openConnectionsGraph()\"\n (connectionsEdit)=\"openConnectionsBuilder()\"\n (connectionsVisual)=\"openConnectionsEditor()\"\n (settings)=\"openPageSettings()\"\n (save)=\"savePage()\"\n (preview)=\"togglePreview()\"\n >\n <praxis-ai-assistant\n *ngIf=\"showSettings()\"\n pdx-toolbar-extra\n [adapter]=\"aiAdapter\">\n </praxis-ai-assistant>\n </praxis-floating-toolbar>\n `,\n styles: [\n `\n :host { display: block; position: relative; }\n :host ::ng-deep gridster { position: relative; }\n :host ::ng-deep gridster.editing::before,\n :host ::ng-deep gridster.interacting::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0.6;\n z-index: 0; /* Put overlay behind tiles */\n background-image:\n radial-gradient(circle at 1px 1px, var(--md-sys-color-outline-variant) 1px, transparent 1px),\n radial-gradient(circle, var(--md-sys-color-outline-variant) 1px, transparent 1px);\n background-size: var(--pdx-col-step, 16px) var(--pdx-row-step, 16px), calc(var(--pdx-col-step, 16px) * 4) calc(var(--pdx-row-step, 16px) * 4);\n }\n .pdx-gridster-item { position: relative; height: 100%; }\n `,\n ],\n})\nexport class DynamicGridsterPageComponent implements OnChanges, PageBuilderHost {\n @Input() page?: GridPageDefinition | string;\n @Input() context?: Record<string, any> | null = null;\n @Input() strictValidation = true;\n @Input() gridsterOptions?: Partial<GridsterConfig>;\n /** Shows settings button and enables in-place editing affordances */\n @Input() enableCustomization = false;\n /** When true, shows small floating settings fab; if false, rely on bottom toolbar */\n @Input() showSettingsButton = true;\n /** Optional identity; if not provided, will derive routePath from current Router URL */\n @Input() pageIdentity?: PageIdentity;\n /** Optional instance key for pages rendered multiple times */\n @Input() componentInstanceId?: string;\n\n @Output() layoutChange = new EventEmitter<GridWidgetInstance[]>();\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n mergedContext: Record<string, any> = {};\n private selectedKey = signal<string | null>(null);\n private widgets = signal<GridWidgetInstance[]>([]);\n private readonly globalActions = inject(GlobalActionService);\n items = signal<ItemWithKey[]>([]);\n interacting = false;\n overlayEnabled = true;\n private appliedPersisted = false;\n public aiAdapter: PageBuilderAiAdapter;\n\n options: GridsterConfig = {\n minCols: 12,\n maxCols: 12,\n minRows: 12,\n defaultItemCols: 3,\n defaultItemRows: 3,\n margin: 12,\n fixedRowHeight: 80,\n draggable: { enabled: false },\n resizable: { enabled: false },\n displayGrid: 'onDrag&Resize',\n itemChangeCallback: (item) => this.onItemChanged(item),\n itemResizeCallback: (item) => this.onItemChanged(item),\n } as GridsterConfig;\n\n // Preserve component instances when items list changes\n trackItem = (_: number, it: ItemWithKey) => it.__key__;\n\n constructor(\n private conn: ConnectionManagerService,\n private router: Router,\n private host: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n private graphMapper: GraphMapperService,\n private registry: ComponentMetadataRegistry,\n @Inject(ASYNC_CONFIG_STORAGE) private storage: AsyncConfigStorage,\n private componentKeys: ComponentKeyService,\n @Optional() @Inject(TABLE_CONFIG_EDITOR) private tableConfigEditor: any,\n @Optional() @Inject(STEPPER_CONFIG_EDITOR) private stepperConfigEditor: any,\n @Optional() @Inject(SETTINGS_PANEL_BRIDGE) private settingsPanel: SettingsPanelBridge | null,\n @Optional() private route: ActivatedRoute | null,\n ) {\n this.aiAdapter = new PageBuilderAiAdapter(this, this.registry);\n }\n\n applyConfigFromAdapter(next: PageBuilderConfig): void {\n const prevPage = this.page;\n const prevContext = this.context;\n const prevGridsterOptions = this.gridsterOptions;\n const prevEditModeEnabled = this.enableCustomization;\n\n this.page = next.page;\n this.context = next.context ?? null;\n this.gridsterOptions = next.gridsterOptions;\n this.enableCustomization = next.enableCustomization ?? this.enableCustomization;\n this.showSettingsButton = next.showSettingsButton ?? this.showSettingsButton;\n this.strictValidation = next.strictValidation ?? this.strictValidation;\n this.pageIdentity = next.pageIdentity ?? this.pageIdentity;\n\n const changes: SimpleChanges = {};\n if (prevPage !== this.page) {\n changes['page'] = new SimpleChange(prevPage, this.page, false);\n }\n if (prevContext !== this.context) {\n changes['context'] = new SimpleChange(prevContext, this.context, false);\n }\n if (prevGridsterOptions !== this.gridsterOptions) {\n changes['gridsterOptions'] = new SimpleChange(prevGridsterOptions, this.gridsterOptions, false);\n }\n if (prevEditModeEnabled !== this.enableCustomization) {\n changes['enableCustomization'] = new SimpleChange(prevEditModeEnabled, this.enableCustomization, false);\n }\n if (Object.keys(changes).length > 0) {\n this.ngOnChanges(changes);\n }\n if (prevPage !== this.page && this.page && typeof this.page === 'object') {\n this.pageChange.emit(this.page);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const pageOrContextChanged = !!(changes['page'] || changes['context']);\n const anyOptionsChanged = !!(changes['gridsterOptions'] || changes['enableCustomization'] || pageOrContextChanged);\n\n const parsed = this.parsePage(this.page);\n const ctx = parsed?.context || {};\n\n if (pageOrContextChanged) {\n // Only reset widgets when page/context changed\n const widgets = parsed?.widgets || [];\n const enriched = this.applyEditShellActions(this.enrichWithInheritedInputs(widgets));\n this.widgets.set(enriched);\n this.mergedContext = { ...ctx, ...(this.context || {}) };\n try { this.overlayEnabled = (ctx as any)?.ui?.editingOverlay ?? true; } catch { this.overlayEnabled = true; }\n const items = enriched.map((w) => this.widgetToItem(w));\n this.items.set(items);\n if (!this.appliedPersisted) {\n this.appliedPersisted = true;\n this.loadPersistedPage();\n }\n }\n\n if (anyOptionsChanged) {\n const fromPage = this.gridsterFromPageOptions(parsed?.options);\n const opts = { ...this.options, ...(this.gridsterOptions || {}), ...(fromPage || {}) } as GridsterConfig;\n opts.draggable = { enabled: !!this.enableCustomization } as any;\n opts.resizable = { enabled: !!this.enableCustomization } as any;\n this.options = opts;\n }\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n\n private gridsterFromPageOptions(options?: GridPageDefinition['options']): Partial<GridsterConfig> | null {\n if (!options) return null;\n const patch: Partial<GridsterConfig> = {};\n if (typeof options.cols === 'number') {\n patch.minCols = options.cols;\n patch.maxCols = options.cols;\n }\n if (typeof options.rowHeight === 'number') {\n patch.fixedRowHeight = options.rowHeight;\n }\n if (typeof options.gap === 'number') {\n patch.margin = options.gap;\n }\n return Object.keys(patch).length ? patch : null;\n }\n\n private enrichWithInheritedInputs(widgets: GridWidgetInstance[]): GridWidgetInstance[] {\n // Inherit any page-level provided inputs into each widget instance\n try {\n const page = this.parsePage(this.page);\n const inherited = (page as any)?.context?.inheritedInputs;\n const inheritedInputs =\n inherited && typeof inherited === 'object' ? inherited : {};\n return widgets.map((w) => this.applyWidgetInputs(w, inheritedInputs));\n } catch {\n return widgets;\n }\n }\n\n private applyWidgetInputs(\n widget: GridWidgetInstance,\n inheritedInputs: Record<string, any>,\n ): GridWidgetInstance {\n const def = widget.definition || ({} as any);\n const inputs = { ...(def.inputs || {}), ...inheritedInputs };\n const enriched = this.ensureComponentInstanceId(widget.key, def.id, inputs);\n return { ...widget, definition: { ...def, inputs: enriched } };\n }\n\n private ensureComponentInstanceId(\n widgetKey: string,\n widgetId: string | undefined,\n inputs: Record<string, any>,\n ): Record<string, any> {\n if (!widgetId) return inputs;\n const explicit = inputs['componentInstanceId'];\n if (explicit != null && String(explicit).trim()) return inputs;\n const meta = this.registry.get(widgetId);\n const supports = meta?.inputs?.some((i) => i.name === 'componentInstanceId');\n if (!supports) return inputs;\n return { ...inputs, componentInstanceId: widgetKey };\n }\n\n private widgetToItem(w: GridWidgetInstance): ItemWithKey {\n const legacy = w as GridsterWidgetInstance;\n const layout = w.layout;\n const x = typeof legacy.x === 'number' ? legacy.x : (layout?.col != null ? Math.max(0, layout.col - 1) : undefined);\n const y = typeof legacy.y === 'number' ? legacy.y : (layout?.row != null ? Math.max(0, layout.row - 1) : undefined);\n const cols = typeof legacy.cols === 'number' ? legacy.cols : layout?.colSpan;\n const rows = typeof legacy.rows === 'number' ? legacy.rows : layout?.rowSpan;\n return {\n x,\n y,\n cols,\n rows,\n minItemCols: legacy.minItemCols,\n minItemRows: legacy.minItemRows,\n maxItemCols: legacy.maxItemCols,\n maxItemRows: legacy.maxItemRows,\n __key__: w.key,\n } as ItemWithKey;\n }\n\n computeTileDomId(key: string): string { return `pdx-grid-tile-${key}`; }\n isSelected(key: string): boolean { return this.selectedKey() === key; }\n getWidgetType(key: string): string | undefined { return (this.widgets().find((w) => w.key === key)?.definition?.id) || undefined; }\n getWidgetDef(key: string): any { return this.widgets().find((w) => w.key === key)?.definition; }\n getWidgetShell(key: string): any { return this.widgets().find((w) => w.key === key)?.shell; }\n\n onTileClick(key: string, ev: MouseEvent): void {\n if (!this.enableCustomization) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.selectedKey.set(key);\n }\n\n onItemChanged(item: GridsterItem): void {\n const widgets = [...this.widgets()];\n const i = widgets.findIndex((w) => w.key === (item as any).__key__);\n if (i >= 0) {\n const col = (item.x ?? 0) + 1;\n const row = (item.y ?? 0) + 1;\n const legacy = widgets[i] as GridsterWidgetInstance;\n const colSpan = item.cols ?? legacy.cols ?? 1;\n const rowSpan = item.rows ?? legacy.rows ?? 1;\n widgets[i] = {\n ...widgets[i],\n x: item.x!,\n y: item.y!,\n cols: item.cols!,\n rows: item.rows!,\n layout: { col, row, colSpan, rowSpan },\n } as any;\n this.widgets.set(widgets);\n this.layoutChange.emit(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n this.pageChange.emit({ ...parsed, widgets });\n }\n }\n\n togglePreview(): void { this.overlayEnabled = !this.overlayEnabled; }\n\n confirmRemoveWidget(key: string): void {\n const ref = this.dialog.open(ConfirmDialogComponent, { data: { title: 'Remover componente', message: `Remover ${this.getWidgetType(key)}? Esta ação também apagará conexões vinculadas.`, confirmLabel: 'Remover', cancelLabel: 'Cancelar', icon: 'delete' } });\n ref.afterClosed().subscribe((ok) => { if (ok) this.removeWidget(key); });\n }\n\n removeWidget(key: string): void {\n const widgets = this.widgets().filter((w) => w.key !== key);\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n // Remove connections referencing this widget\n const conns = (parsed.connections || []).filter((c: any) => c.from.widget !== key && c.to.widget !== key);\n const next: GridPageDefinition = { ...parsed, widgets, connections: conns };\n this.page = next;\n this.pageChange.emit(next);\n }\n\n onAddComponent(): void {\n const ref = this.dialog.open(ComponentPaletteDialogComponent, { width: '720px', data: { title: 'Inserir componente' } });\n ref.afterClosed().subscribe((type: string | undefined) => { if (type) this.addWidget(type); });\n }\n\n addWidget(type: string): void {\n const widgets = [...this.widgets()];\n widgets.push({\n key: this.createWidgetKey(type),\n definition: { id: type, inputs: {} },\n x: 0,\n y: 0,\n cols: 3,\n rows: 3,\n layout: { col: 1, row: 1, colSpan: 3, rowSpan: 3 },\n } as any);\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n const next: GridPageDefinition = { ...parsed, widgets };\n this.page = next;\n this.pageChange.emit(next);\n }\n\n createWidgetKey(type: string): string { return `${type}-${generateId()}`; }\n\n openWidgetSettings(key: string): void {\n const def = this.getWidgetDef(key);\n if (!def) return;\n const compId = key;\n const id = def.id;\n const inputs = def.inputs || {};\n if (id === 'praxis-stepper') {\n if (this.stepperConfigEditor) this.stepperConfigEditor.open?.({ id: `stepper:${compId}`, title: 'Configurar Fluxo por Etapas', content: { component: this.stepperConfigEditor.component, inputs } });\n else this.openConnectionsBuilder();\n return;\n }\n if (id === 'praxis-table') {\n if (this.tableConfigEditor) this.tableConfigEditor.open?.({ id: `table:${compId}`, title: 'Configurar Tabela', content: { component: this.tableConfigEditor.component, inputs } });\n else this.openConnectionsBuilder();\n return;\n }\n this.openConnectionsBuilder();\n }\n\n openWidgetShellSettings(key: string): void {\n const widget = this.widgets().find((w) => w.key === key);\n if (!widget || !this.settingsPanel) return;\n const page = this.parsePage(this.page);\n const uiShell = (page?.context as any)?.ui?.shell || {};\n const ref = this.settingsPanel.open({\n id: `grid-widget-shell:${key}`,\n title: 'Configurar Card',\n content: {\n component: WidgetShellEditorComponent,\n inputs: {\n shell: widget.shell || null,\n widgetKey: key,\n widgetType: widget.definition?.id,\n presets: uiShell?.presets || null,\n pagePreset: uiShell?.preset || null,\n },\n },\n });\n ref.applied$.subscribe((result) => this.applyWidgetShell(key, result));\n ref.saved$.subscribe((result) => this.applyWidgetShell(key, result));\n }\n\n openConnectionsGraph(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n this.settingsPanel?.open({ id: 'grid-connections:graph', title: 'Conexões (Diagrama)', content: { component: ConnectionGraphComponent, inputs: { page: current, widgets: this.widgets() } } });\n }\n\n openConnectionsBuilder(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n this.settingsPanel?.open({ id: 'grid-connections:builder', title: 'Conexões (Builder)', content: { component: ConnectionBuilderComponent, inputs: { page: current, widgets: this.widgets() } } });\n }\n\n async openConnectionsEditor(): Promise<void> {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n const ref = this.dialog.open(ConnectionEditorDialogComponent, { width: '95vw', height: '95vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog', autoFocus: false, restoreFocus: false, data: { page: current, widgets: this.widgets() } });\n ref.afterClosed().subscribe((res: any) => { if (res && res.page) { this.page = res.page; this.pageChange.emit(res.page); } });\n }\n\n openPageSettings(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n const identity = this.pageIdentity || this.derivePageIdentity();\n this.settingsPanel?.open({ id: 'grid-page-config', title: 'Configurações da Página', content: { component: PageConfigEditorComponent, inputs: { page: current, identity, gridsterOptions: this.options } } });\n }\n\n private derivePageIdentity(): PageIdentity | undefined {\n try {\n const url = this.router.url;\n const routePath = (url || '').split('?')[0] || '/';\n const appId = 'app';\n return { routePath, appId } as PageIdentity;\n } catch {}\n return undefined;\n }\n\n savePage(): void {\n const identity = this.pageIdentity || this.derivePageIdentity();\n const parsed = this.parsePage(this.page) || ({ widgets: this.widgets() } as GridPageDefinition);\n const persist: PersistedPageConfig = { key: buildPageKey(identity || { routePath: '/', appId: 'app' }), page: parsed, identity } as any;\n try {\n const key = this.storageKey(identity);\n if (key) {\n this.storage.saveConfig(key, persist as any).pipe(take(1)).subscribe({ error: () => {} });\n }\n } catch {}\n }\n\n private applyPage(persisted: PersistedPageConfig): void {\n const next = persisted?.page as GridPageDefinition;\n const hasConns = (next?.connections || []).length > 0;\n this.page = next;\n this.pageChange.emit(next);\n if (hasConns) this.items.set((next.widgets || []).map((w) => this.widgetToItem(w)) as any);\n }\n\n private loadPersistedPage(): void {\n try {\n const identity = this.pageIdentity || this.derivePageIdentity();\n const key = this.storageKey(identity);\n if (!key) return;\n this.storage.loadConfig<PersistedPageConfig>(key).pipe(take(1)).subscribe((persisted) => {\n if (persisted && persisted.page) {\n this.applyPage(persisted);\n return;\n }\n });\n } catch { return undefined; }\n }\n\n onWidgetEvent(fromKey: string, evt: { output?: string; payload?: any }): void {\n if (!evt?.output) return;\n if (this.maybeExecuteMappedAction(fromKey, evt)) return;\n const parsed = this.parsePage(this.page);\n const p = parsed || ({ widgets: this.widgets() } as GridPageDefinition);\n const matches = this.conn.findMatches(p?.connections, fromKey, evt.output);\n let widgets = [...this.widgets()];\n for (const c of matches) {\n widgets = this.conn.applyMatch(widgets, c, evt);\n }\n this.widgets.set(widgets);\n }\n\n onShellAction(fromKey: string, evt: WidgetShellActionEvent): void {\n if (this.handleSetInputCommand(fromKey, evt)) return;\n if (this.maybeExecuteGlobalCommand(fromKey, evt)) return;\n const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);\n if (!output) return;\n this.onWidgetEvent(fromKey, { output, payload: evt.payload });\n }\n\n private handleSetInputCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n if (evt?.command !== 'pdx:set-input') return false;\n const payload = evt?.payload as any;\n const input = typeof payload?.input === 'string' ? payload.input.trim() : '';\n if (!input) return true;\n const value = payload?.value;\n const widgets = this.conn.applyMatch(\n [...this.widgets()],\n { to: { widget: fromKey, input }, set: value } as any,\n { payload: value } as any,\n );\n this.widgets.set(widgets);\n return true;\n }\n\n private maybeExecuteMappedAction(fromKey: string, evt: { output?: string; payload?: any }): boolean {\n const output = evt?.output;\n if (!output) return false;\n const parsed = this.parsePage(this.page);\n const page = parsed || ({ widgets: this.widgets() } as GridPageDefinition);\n const widget = page?.widgets?.find((w) => w.key === fromKey);\n const mapping = widget?.definition?.outputs?.[output];\n if (!mapping || mapping === 'emit') return false;\n const actionId = (mapping as any).type;\n if (!actionId) return true;\n const payload = this.resolveActionPayload((mapping as any).params, evt, fromKey);\n void this.globalActions.execute(actionId, payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output,\n payload: evt?.payload,\n pageContext: this.mergedContext || undefined,\n });\n return true;\n }\n\n private maybeExecuteGlobalCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n const command = evt?.command || '';\n if (!command) return false;\n const prefix = command.startsWith('global:')\n ? 'global:'\n : command.startsWith('global.')\n ? 'global.'\n : '';\n if (!prefix) return false;\n const actionId = command.slice(prefix.length).trim();\n if (!actionId) return true;\n void this.globalActions.execute(actionId, evt.payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output: evt.emit,\n payload: evt.payload,\n pageContext: this.mergedContext || undefined,\n meta: { origin: 'shell' },\n });\n return true;\n }\n\n private resolveActionPayload(\n params: Record<string, any> | undefined,\n evt: { output?: string; payload?: any },\n fromKey: string,\n ): any {\n if (!params) return evt?.payload;\n const ctx = {\n payload: evt?.payload,\n output: evt?.output,\n sourceId: fromKey,\n widgetKey: fromKey,\n context: this.mergedContext || undefined,\n };\n return this.resolveTemplate(params, ctx);\n }\n\n private resolveTemplate(raw: any, ctx: Record<string, any>): any {\n if (typeof raw === 'string') {\n const singleExpr = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (singleExpr) return this.lookup(ctx, singleExpr[1].trim());\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(ctx, path.trim());\n return v != null ? String(v) : '';\n });\n }\n if (Array.isArray(raw)) return raw.map((v) => this.resolveTemplate(v, ctx));\n if (raw && typeof raw === 'object') {\n const out: any = {};\n for (const [k, v] of Object.entries(raw)) out[k] = this.resolveTemplate(v, ctx);\n return out;\n }\n return raw;\n }\n\n private lookup(ctx: any, path: string): any {\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\n }\n\n private applyWidgetShell(key: string, result: any): void {\n const payload = result && result.shell !== undefined ? result : { shell: result };\n const normalized = payload.shell && Object.keys(payload.shell).length ? payload.shell : undefined;\n const widgets = this.widgets().map((w) => (w.key === key ? { ...w, shell: normalized } : w));\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n const next: GridPageDefinition = this.applyPageShellPreset(parsed, widgets, payload);\n this.page = next;\n this.pageChange.emit(next);\n }\n\n private applyPageShellPreset(page: GridPageDefinition, widgets: GridWidgetInstance[], payload: any): GridPageDefinition {\n if (!payload?.applyToAll || !payload?.pagePreset) return { ...page, widgets };\n const context = { ...(page.context || {}) } as any;\n const ui = { ...(context.ui || {}) } as any;\n const shell = { ...(ui.shell || {}) } as any;\n shell.preset = payload.pagePreset;\n ui.shell = shell;\n context.ui = ui;\n return { ...page, context, widgets };\n }\n\n private applyEditShellActions(widgets: GridWidgetInstance[]): GridWidgetInstance[] {\n if (!this.enableCustomization) return widgets;\n return widgets.map((w) => {\n if (!w.shell || w.shell.kind === 'none') return w;\n const shell = { ...w.shell };\n const actions = [...(shell.actions || [])];\n if (!actions.some((a) => a.id === 'widget-settings')) {\n actions.push({\n id: 'widget-settings',\n icon: 'settings',\n label: 'Configurar Card',\n placement: 'window',\n variant: 'icon',\n tooltip: 'Configurar Card',\n });\n }\n if (shell.showHeader === false) shell.showHeader = true;\n return { ...w, shell: { ...shell, actions } };\n });\n }\n\n showSettings(): boolean { return !!this.enableCustomization; }\n\n private storageKey(identity?: PageIdentity | null): string | null {\n const id = this.componentKeyId(identity || undefined);\n return id ? `grid-page:${id}` : null;\n }\n\n private componentKeyId(identity?: PageIdentity): string | null {\n const scopeId = this.buildPageScopeId(identity);\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-dynamic-gridster-page',\n componentId: scopeId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n return key;\n }\n\n private buildPageScopeId(identity?: PageIdentity): string {\n if (!identity) return 'default';\n const app = identity.appId || 'app';\n const tenant = identity.tenantId || '*';\n const user = identity.userId || '*';\n const parts = [app, tenant, user];\n if (identity.locale) parts.push(identity.locale);\n return parts.join(':');\n }\n}\n","/*\n * Public API Surface of @praxisui/page-builder\n */\n\n// Temporary minimal export for build isolation\nexport * from './lib/shim';\nexport * from './lib/editor/confirm-dialog.component';\nexport * from './lib/editor/tile-toolbar.component';\nexport * from './lib/editor/floating-toolbar.component';\nexport * from './lib/editor/component-palette-dialog.component';\nexport * from './lib/editor/connection-builder.component';\nexport * from './lib/editor/widget-shell-editor.component';\nexport * from './lib/editor/dynamic-page-config-editor.component';\nexport * from './lib/ai/page-builder-ai-capabilities';\nexport * from './lib/ai/page-builder-ai-catalog';\nexport * from './lib/ai/page-builder-ai-catalog.tokens';\nexport * from './lib/ai/page-builder-ai-catalog.providers';\nexport * from './lib/dynamic-gridster-page.component';\nexport { WidgetShellComponent } from '@praxisui/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i6","i10","i11","i13","BUILTIN_PRESET_OPTIONS","i8","i9","i7"],"mappings":"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"}
1
+ {"version":3,"file":"praxisui-page-builder.mjs","sources":["../../../projects/praxis-page-builder/src/lib/shim.ts","../../../projects/praxis-page-builder/src/lib/editor/confirm-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/editor/tile-toolbar.component.ts","../../../projects/praxis-page-builder/src/lib/editor/floating-toolbar.component.ts","../../../projects/praxis-page-builder/src/lib/editor/component-palette-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-builder.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-builder.component.html","../../../projects/praxis-page-builder/src/lib/editor/widget-shell-editor.component.ts","../../../projects/praxis-page-builder/src/lib/editor/dynamic-page-config-editor.component.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-capabilities.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.tokens.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai-catalog.providers.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/edge-router.util.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/drag-connect.directive.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/graph-mapper.service.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-graph/connection-graph.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor.component.ts","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor.component.html","../../../projects/praxis-page-builder/src/lib/editor/connection-editor/connection-editor-dialog.component.ts","../../../projects/praxis-page-builder/src/lib/page-config-editor/page-config-editor.component.ts","../../../projects/praxis-page-builder/src/lib/ai/page-builder-ai.adapter.ts","../../../projects/praxis-page-builder/src/lib/dynamic-gridster-page.component.ts","../../../projects/praxis-page-builder/src/public-api.ts","../../../projects/praxis-page-builder/src/praxisui-page-builder.ts"],"sourcesContent":["export const PLACEHOLDER = 1;\n\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\n\nexport interface ConfirmDialogData {\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n icon?: string;\n}\n\n@Component({\n selector: 'praxis-confirm-dialog',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule, PraxisIconDirective],\n template: `\n <h2 mat-dialog-title>\n <mat-icon class=\"dlg-icon\" aria-hidden=\"true\" [praxisIcon]=\"data.icon || 'warning'\"></mat-icon>\n {{ data.title || 'Confirmar ação' }}\n </h2>\n <div mat-dialog-content>\n <p>{{ data.message || 'Tem certeza que deseja prosseguir?' }}</p>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>{{ data.cancelLabel || 'Cancelar' }}</button>\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"true\">{{ data.confirmLabel || 'Excluir' }}</button>\n </div>\n `,\n styles: [\n `\n :host { color: var(--md-sys-color-on-surface); }\n .dlg-icon { vertical-align: middle; margin-right: 8px; color: var(--md-sys-color-error); }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent {\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogData,\n public ref: MatDialogRef<ConfirmDialogComponent, boolean>,\n ) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-tile-toolbar',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, PraxisIconDirective],\n template: `\n <div class=\"pdx-tile-toolbar\" [class.always-visible]=\"selected\" role=\"toolbar\" aria-label=\"Ações do widget\">\n <button\n mat-mini-fab\n (click)=\"settings.emit()\"\n [matTooltip]=\"'Configurar widget'\"\n aria-label=\"Configurar widget\"\n >\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n (click)=\"shell.emit()\"\n [matTooltip]=\"'Configurar card'\"\n aria-label=\"Configurar card\"\n >\n <mat-icon [praxisIcon]=\"'view_headline'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n color=\"primary\"\n class=\"pdx-drag-handle\"\n [matTooltip]=\"'Arrastar tile'\"\n aria-label=\"Arrastar tile\"\n >\n <mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon>\n </button>\n <button\n mat-mini-fab\n color=\"warn\"\n (click)=\"remove.emit()\"\n [matTooltip]=\"'Excluir widget'\"\n aria-label=\"Excluir widget\"\n >\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n `,\n styles: [\n `\n :host { position: absolute; inset: 0; pointer-events: none; }\n .pdx-tile-toolbar {\n position: absolute;\n right: 6px;\n top: -18px; /* half outside to keep clear of tile content, but close enough to not lose hover */\n display: flex;\n gap: 6px;\n z-index: 5;\n opacity: 0;\n transition: opacity 120ms ease-in-out;\n pointer-events: auto; /* enabled when visible via parent rule */\n background: var(--md-sys-color-surface-container-low);\n backdrop-filter: blur(4px);\n border-radius: 999px;\n padding: 4px;\n box-shadow: var(--mat-elevation-level3);\n }\n .pdx-tile-toolbar.always-visible { opacity: 1; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TileToolbarComponent {\n @Input() selected = false;\n @Input() widgetType: string | null = null;\n @Output() remove = new EventEmitter<void>();\n @Output() settings = new EventEmitter<void>();\n @Output() shell = new EventEmitter<void>();\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PraxisIconDirective } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-floating-toolbar',\n standalone: true,\n imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, PraxisIconDirective],\n template: `\n <div class=\"pdx-floating-toolbar\" *ngIf=\"visible\">\n <button mat-fab color=\"primary\" class=\"pdx-fab\" [matTooltip]=\"'Ações rápidas'\">\n <mat-icon [praxisIcon]=\"'build'\"></mat-icon>\n </button>\n <div class=\"pdx-actions\">\n <button mat-mini-fab color=\"primary\" (click)=\"add.emit()\" [matTooltip]=\"'Inserir componente'\" aria-label=\"Inserir componente\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connections.emit()\" [matTooltip]=\"'Visualizar conexões (Diagrama)'\" aria-label=\"Visualizar conexões (Diagrama)\">\n <mat-icon [praxisIcon]=\"'device_hub'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connectionsVisual.emit()\" [matTooltip]=\"'Editor Visual (beta)'\" aria-label=\"Editor Visual (beta)\">\n <mat-icon [praxisIcon]=\"'schema'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"connectionsEdit.emit()\" [matTooltip]=\"'Editar conexões (Builder)'\" aria-label=\"Editar conexões (Builder)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-mini-fab color=\"accent\" (click)=\"save.emit()\" [matTooltip]=\"'Salvar página'\" aria-label=\"Salvar página\">\n <mat-icon [praxisIcon]=\"'save'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"undo.emit()\" [disabled]=\"!canUndo\" [matTooltip]=\"'Desfazer'\" aria-label=\"Desfazer\">\n <mat-icon [praxisIcon]=\"'undo'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"redo.emit()\" [disabled]=\"!canRedo\" [matTooltip]=\"'Refazer'\" aria-label=\"Refazer\">\n <mat-icon [praxisIcon]=\"'redo'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"settings.emit()\" [matTooltip]=\"'Configurações da página'\" aria-label=\"Configurações da página\">\n <mat-icon [praxisIcon]=\"'settings'\"></mat-icon>\n </button>\n <button mat-mini-fab (click)=\"preview.emit()\" [matTooltip]=\"'Pré-visualizar'\" aria-label=\"Pré-visualizar\">\n <mat-icon [praxisIcon]=\"'visibility'\"></mat-icon>\n </button>\n <ng-content select=\"[pdx-toolbar-extra]\"></ng-content>\n </div>\n </div>\n `,\n styles: [\n `\n :host { position: absolute; inset: 0; pointer-events: none; }\n .pdx-floating-toolbar { position: absolute; right: 16px; bottom: 16px; display: flex; gap: 8px; align-items: center; pointer-events: auto; }\n .pdx-actions { display: flex; gap: 8px; }\n .pdx-fab { box-shadow: var(--mat-elevation-level4); }\n @media (max-width: 720px) {\n .pdx-actions { gap: 6px; }\n .pdx-floating-toolbar { right: 12px; bottom: 12px; }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FloatingToolbarComponent {\n @Input() visible = false;\n @Input() canUndo = false;\n @Input() canRedo = false;\n\n @Output() add = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() redo = new EventEmitter<void>();\n @Output() settings = new EventEmitter<void>();\n @Output() preview = new EventEmitter<void>();\n @Output() connections = new EventEmitter<void>();\n @Output() connectionsEdit = new EventEmitter<void>();\n @Output() connectionsVisual = new EventEmitter<void>();\n @Output() save = new EventEmitter<void>();\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, OnInit, computed, effect, signal } from '@angular/core';\nimport { MatDialogModule, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { ComponentDocMeta } from '@praxisui/core';\n\nexport interface ComponentPaletteData {\n title?: string;\n allowedWidgetIds?: string[];\n allowedWidgetTags?: string[];\n predicate?: (m: ComponentDocMeta) => boolean;\n}\n\n@Component({\n selector: 'praxis-component-palette-dialog',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule, PraxisIconDirective],\n template: `\n <h2 mat-dialog-title>\n <div class=\"dlg-title\">\n <mat-icon class=\"dlg-icon\" [praxisIcon]=\"'widgets'\"></mat-icon>\n <div class=\"dlg-texts\">\n <div class=\"dlg-head\">{{ data?.title || 'Inserir componente' }}</div>\n <div class=\"dlg-sub\">Escolha um componente para adicionar à página · {{ filtered().length }} disponíveis</div>\n </div>\n </div>\n </h2>\n <div mat-dialog-content class=\"pdx-palette-content\">\n <div [class]=\"'pdx-grid ' + density()\" *ngIf=\"filtered().length; else emptyState\">\n <div\n *ngFor=\"let m of filtered(); trackBy: trackById\"\n class=\"pdx-card mat-elevation-z2\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"'Adicionar ' + (m.friendlyName || m.id)\"\n (click)=\"select(m.id)\"\n (keydown.enter)=\"select(m.id)\"\n (keydown.space)=\"select(m.id)\"\n >\n <div class=\"pdx-card-icon\">\n <mat-icon [praxisIcon]=\"m.icon || 'widgets'\"></mat-icon>\n </div>\n <div class=\"pdx-card-body\">\n <div class=\"pdx-card-title\">{{ m.friendlyName || m.id }}</div>\n <div class=\"pdx-card-desc\">{{ m.description || m.selector }}</div>\n </div>\n </div>\n </div>\n\n <ng-template #emptyState>\n <div class=\"pdx-empty\">\n <mat-icon [praxisIcon]=\"'sentiment_dissatisfied'\"></mat-icon>\n <div>Nenhum componente disponível</div>\n </div>\n </ng-template>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-stroked-button color=\"primary\" mat-dialog-close>Cancelar</button>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n h2[mat-dialog-title] {\n margin: 0;\n padding: 12px 24px 10px 24px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n }\n .dlg-title { display: flex; align-items: center; gap: 10px; }\n .dlg-icon { color: var(--md-sys-color-primary); }\n .dlg-head { font-size: 18px; font-weight: 600; line-height: 1.2; }\n .dlg-sub { font-size: 12px; opacity: 0.85; color: var(--md-sys-color-on-surface-variant); }\n .pdx-palette-content { min-width: 480px; max-width: 920px; padding-top: 8px; }\n .pdx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }\n .pdx-grid.dense { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; }\n .pdx-grid.roomy { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }\n .pdx-card {\n position: relative;\n display: grid;\n grid-template-columns: 44px 1fr;\n grid-template-rows: auto auto;\n gap: 10px;\n padding: 14px;\n border: 1px solid transparent;\n border-radius: 14px;\n cursor: pointer;\n outline: none;\n min-height: 92px;\n background: var(--md-sys-color-surface);\n border-color: var(--md-sys-color-outline-variant);\n transition: box-shadow .2s ease, background .25s ease, transform .06s ease;\n }\n .pdx-grid.dense .pdx-card { padding: 10px; border-radius: 12px; min-height: 84px; }\n .pdx-grid.roomy .pdx-card { padding: 16px; border-radius: 16px; min-height: 100px; }\n .pdx-card:focus, .pdx-card:hover {\n box-shadow: var(--mat-elevation-level4);\n background: var(--md-sys-color-surface-container-low);\n border-color: var(--md-sys-color-primary);\n }\n .pdx-card:focus-visible {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n .pdx-card:active { transform: translateY(1px); }\n .pdx-card-icon { grid-row: span 2; display: flex; align-items: center; justify-content: center; color: var(--md-sys-color-primary); }\n .pdx-card-title { font-weight: 600; line-height: 1.2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .pdx-card-desc { color: var(--md-sys-color-on-surface-variant); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; word-break: break-word; }\n .pdx-empty { padding: 24px; display: grid; place-items: center; color: var(--md-sys-color-on-surface-variant); gap: 8px; }\n @media (max-width: 600px) { .pdx-palette-content { min-width: 320px; } .pdx-grid { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComponentPaletteDialogComponent implements OnInit {\n query = '';\n private all = signal<ComponentDocMeta[]>([]);\n filtered = computed(() => this.applyFilters());\n density = computed(() => {\n const n = this.filtered().length;\n if (n <= 4) return 'roomy';\n if (n > 12) return 'dense';\n return 'normal';\n });\n\n constructor(\n private dialogRef: MatDialogRef<ComponentPaletteDialogComponent, string>,\n private registry: ComponentMetadataRegistry,\n @Inject(MAT_DIALOG_DATA) public data?: ComponentPaletteData,\n ) {}\n\n ngOnInit(): void {\n this.all.set(this.registry.getAll());\n }\n\n select(id: string): void {\n this.dialogRef.close(id);\n }\n\n trackById = (_: number, m: ComponentDocMeta) => m.id;\n\n getPreview(m: ComponentDocMeta): string {\n return (m.description || m.selector || m.friendlyName || m.id || '').toString();\n }\n\n // Create effect in injection context (field initializer is allowed)\n private _adjustSizeEffect = effect(() => {\n const n = this.filtered().length;\n let width = '720px';\n if (n <= 4) width = '560px';\n else if (n <= 8) width = '680px';\n const container: any = (this.dialogRef as any)._containerInstance;\n if (container && container._config) {\n container._config.width = width;\n }\n });\n\n private applyFilters(): ComponentDocMeta[] {\n const list = (this.all() || []);\n const q = (this.query || '').toLowerCase();\n const allowIds = new Set((this.data?.allowedWidgetIds || []).map((s) => s.toLowerCase()));\n const allowTags = new Set((this.data?.allowedWidgetTags || []).map((s) => s.toLowerCase()));\n return list.filter((m) => {\n if (q) {\n const hay = `${m.id} ${m.friendlyName || ''} ${m.description || ''} ${m.selector || ''}`.toLowerCase();\n if (!hay.includes(q)) return false;\n }\n if (allowIds.size > 0 && !allowIds.has((m.id || '').toLowerCase())) return false;\n if (allowTags.size > 0 && !m.tags?.some(t => allowTags.has(t.toLowerCase()))) return false;\n if (typeof this.data?.predicate === 'function' && !this.data.predicate(m)) return false;\n return true;\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, computed, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\n\n@Component({\n selector: 'praxis-connection-builder',\n standalone: true,\n imports: [CommonModule, FormsModule, MatFormFieldModule, MatInputModule, MatSelectModule, MatButtonModule, MatIconModule, MatListModule, MatDialogModule, MatAutocompleteModule, MatMenuModule, MatTabsModule, MatTooltipModule, MatProgressBarModule, MatCheckboxModule, MatSnackBarModule, ScrollingModule, PraxisIconDirective],\n templateUrl: './connection-builder.component.html',\n styleUrls: ['./connection-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionBuilderComponent implements OnInit, OnChanges {\n @Input() page?: GridPageDefinition | string;\n @Input() widgets?: GridWidgetInstance[];\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n // State\n private originalSnapshot = '';\n showOnlyIssues = false;\n showFriendly = true;\n filterText = '';\n groupBy: 'none' | 'from' | 'to' | 'event' = 'none';\n sortBy: 'from' | 'to' = 'from';\n // Move braces-containing placeholder into TS (AGENTS.md policy)\n mapPlaceholder = 'payload | payload.id | ${payload.id}';\n\n // Signals\n connections = signal<WidgetConnection[]>([]);\n selectedIndex = signal<number>(-1);\n\n // Derived lists\n readonly filteredConnections = computed(() => this.applyFilters(this.connections()));\n readonly groupedConnections = computed(() => this.applyGrouping(this.filteredConnections()));\n\n constructor(private dialog: MatDialog, private registry: ComponentMetadataRegistry, private snack: MatSnackBar) {}\n\n ngOnInit(): void {\n const p = this.parsePage(this.page);\n const ws = this.widgets || p?.widgets || [];\n this.widgets = ws;\n const conns = [...(p?.connections || [])];\n this.connections.set(conns);\n this.originalSnapshot = JSON.stringify(conns);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['widgets']) {\n const p = this.parsePage(this.page);\n this.widgets = this.widgets || p?.widgets || [];\n const next = [...(p?.connections || [])];\n this.connections.set(next);\n this.originalSnapshot = JSON.stringify(next);\n }\n }\n\n // UI helpers\n isExpanded(i: number): boolean { return i === this.selectedIndex(); }\n toggleExpanded(i: number, ev?: Event): void { if (ev) ev.stopPropagation(); this.selectedIndex.set(this.selectedIndex() === i ? -1 : i); }\n setSortBy(v: 'from' | 'to'): void { this.sortBy = v; this.connections.set(this.sortList([...this.connections()])); }\n onGroupByChange(): void {}\n toggleShowOnlyIssues(): void { this.showOnlyIssues = !this.showOnlyIssues; }\n toggleFriendly(): void { this.showFriendly = !this.showFriendly; }\n trackByIndex = (i: number) => i;\n\n private isWidgetSource(from: WidgetConnection['from']): from is Extract<WidgetConnection['from'], { widget: string }> {\n return 'widget' in from;\n }\n\n private isWidgetTarget(to: WidgetConnection['to']): to is Extract<WidgetConnection['to'], { widget: string }> {\n return 'widget' in to;\n }\n\n // Labels\n fromLabel(c: WidgetConnection): string {\n return this.isWidgetSource(c.from) ? `${c.from.widget}.${c.from.output}` : `state:${c.from.state}`;\n }\n toLabel(c: WidgetConnection): string {\n return this.isWidgetTarget(c.to) ? `${c.to.widget}.${c.to.input}` : `state:${c.to.state}`;\n }\n fromFriendly(c: WidgetConnection): string {\n return this.isWidgetSource(c.from) ? `${this.widgetFriendlyNameForKey(c.from.widget)}.${c.from.output}` : `state:${c.from.state}`;\n }\n toFriendly(c: WidgetConnection): string {\n return this.isWidgetTarget(c.to) ? `${this.widgetFriendlyNameForKey(c.to.widget)}.${c.to.input}` : `state:${c.to.state}`;\n }\n outputDescription(c: WidgetConnection): string {\n if (!this.isWidgetSource(c.from)) return '';\n const from = c.from;\n return this.registry.get(this.widgetTypeByKey(from.widget))?.outputs?.find(o => o.name === from.output)?.description || '';\n }\n inputDescription(c: WidgetConnection): string {\n if (!this.isWidgetTarget(c.to)) return '';\n const to = c.to;\n return this.registry.get(this.widgetTypeByKey(to.widget))?.inputs?.find(i => i.name === to.input)?.description || '';\n }\n fromTooltip(c: WidgetConnection): string { return this.showFriendly ? `${this.fromFriendly(c)} → ${this.toFriendly(c)}` : ''; }\n fromIcon(c: WidgetConnection): string { return this.isWidgetSource(c.from) ? this.componentIconForKey(c.from.widget) : 'account_tree'; }\n toIcon(c: WidgetConnection): string { return this.isWidgetTarget(c.to) ? this.componentIconForKey(c.to.widget) : 'account_tree'; }\n fromIconTooltip(c: WidgetConnection): string { return this.isWidgetSource(c.from) ? this.widgetFriendlyNameForKey(c.from.widget) : this.fromLabel(c); }\n toIconTooltip(c: WidgetConnection): string { return this.isWidgetTarget(c.to) ? this.widgetFriendlyNameForKey(c.to.widget) : this.toLabel(c); }\n widgetFriendlyNameForKey(key: string): string { const id = this.widgetTypeByKey(key); return this.registry.get(id)?.friendlyName || id; }\n componentIconForKey(key: string): string { const id = this.widgetTypeByKey(key); return this.registry.get(id)?.icon || 'widgets'; }\n private widgetTypeByKey(key: string): string { return this.widgets?.find(w => w.key === key)?.definition?.id || key; }\n selectedConnection(): WidgetConnection | undefined {\n const index = this.selectedIndex();\n return index >= 0 ? this.connections()[index] : undefined;\n }\n selectedSourcePrimaryValue(): string {\n const selected = this.selectedConnection();\n if (!selected) return '';\n return this.isWidgetSource(selected.from) ? selected.from.widget : selected.from.state;\n }\n setSelectedSourcePrimaryValue(value: string): void {\n const selected = this.selectedConnection();\n if (!selected) return;\n if (this.isWidgetSource(selected.from)) selected.from.widget = value;\n else selected.from.state = value;\n this.connections.set([...this.connections()]);\n }\n selectedSourceSecondaryValue(): string {\n const selected = this.selectedConnection();\n return selected && this.isWidgetSource(selected.from) ? selected.from.output : '';\n }\n setSelectedSourceSecondaryValue(value: string): void {\n const selected = this.selectedConnection();\n if (!selected || !this.isWidgetSource(selected.from)) return;\n selected.from.output = value;\n this.connections.set([...this.connections()]);\n }\n selectedTargetPrimaryValue(): string {\n const selected = this.selectedConnection();\n if (!selected) return '';\n return this.isWidgetTarget(selected.to) ? selected.to.widget : selected.to.state;\n }\n setSelectedTargetPrimaryValue(value: string): void {\n const selected = this.selectedConnection();\n if (!selected) return;\n if (this.isWidgetTarget(selected.to)) selected.to.widget = value;\n else selected.to.state = value;\n this.connections.set([...this.connections()]);\n }\n selectedTargetSecondaryValue(): string {\n const selected = this.selectedConnection();\n return selected && this.isWidgetTarget(selected.to) ? selected.to.input : '';\n }\n setSelectedTargetSecondaryValue(value: string): void {\n const selected = this.selectedConnection();\n if (!selected || !this.isWidgetTarget(selected.to)) return;\n selected.to.input = value;\n this.connections.set([...this.connections()]);\n }\n selectedMapValue(): string {\n return this.selectedConnection()?.map || '';\n }\n setSelectedMapValue(value: string): void {\n const selected = this.selectedConnection();\n if (!selected) return;\n selected.map = value;\n this.connections.set([...this.connections()]);\n }\n showSelectedSourceSecondary(): boolean {\n const selected = this.selectedConnection();\n return !!selected && this.isWidgetSource(selected.from);\n }\n showSelectedTargetSecondary(): boolean {\n const selected = this.selectedConnection();\n return !!selected && this.isWidgetTarget(selected.to);\n }\n\n private applyFilters(list: WidgetConnection[]): WidgetConnection[] {\n const q = (this.filterText || '').toLowerCase();\n const arr = list.filter((c) => {\n if (this.showOnlyIssues && this.connectionStatus(c) === 'ok') return false;\n if (!q) return true;\n const hay = `${this.fromLabel(c)} ${this.toLabel(c)} ${c.map || ''}`.toLowerCase();\n return hay.includes(q);\n });\n return this.sortList(arr);\n }\n\n private applyGrouping(list: WidgetConnection[]): Array<{ label: string; list: WidgetConnection[] }>\n {\n switch (this.groupBy) {\n case 'from': return this.groupByKey(list, c => this.fromLabel(c));\n case 'to': return this.groupByKey(list, c => this.toLabel(c));\n case 'event': return this.groupByKey(list, c => this.isWidgetSource(c.from) ? c.from.output : c.from.state);\n default: return [{ label: 'Todas', list }];\n }\n }\n\n private groupByKey(list: WidgetConnection[], keyFn: (c: WidgetConnection) => string): Array<{ label: string; list: WidgetConnection[] }>\n {\n const map = new Map<string, WidgetConnection[]>();\n for (const c of list) { const k = keyFn(c); const arr = map.get(k) || []; arr.push(c); map.set(k, arr); }\n return Array.from(map.entries()).map(([k, v]) => ({ label: k, list: v }));\n }\n\n private sortList(list: WidgetConnection[]): WidgetConnection[] {\n return [...list].sort((a, b) => {\n if (this.sortBy === 'from') return this.fromLabel(a).localeCompare(this.fromLabel(b));\n return this.toLabel(a).localeCompare(this.toLabel(b));\n });\n }\n\n // Editing\n createNew(): void {\n const fromKey = this.widgets?.[0]?.key || '';\n const toKey = this.widgets?.[1]?.key || '';\n const conn: WidgetConnection = { from: { widget: fromKey, output: 'submit' }, to: { widget: toKey, input: 'context' } } as any;\n this.connections.set([conn, ...this.connections()]);\n }\n startEdit(index: number, _c: WidgetConnection): void { this.selectedIndex.set(index); }\n startEditByConn(c: WidgetConnection): void { const i = this.connections().indexOf(c); if (i >= 0) this.startEdit(i, c); }\n duplicateConnection(index: number): void { const next = [...this.connections()]; const c = next[index]; if (!c) return; next.splice(index + 1, 0, { ...c }); this.connections.set(next); }\n removeConnection(index: number): void { const next = [...this.connections()]; if (index < 0 || index >= next.length) return; next.splice(index, 1); this.connections.set(next); }\n\n // Validation\n connectionStatus(c: WidgetConnection): 'ok' | 'warn' | 'err' {\n if (this.isWidgetSource(c.from)) {\n const from = c.from;\n if (!from.widget || !from.output) return 'err';\n const wFrom = this.widgetTypeByKey(from.widget);\n const outOk = !!this.registry.get(wFrom)?.outputs?.some(o => o.name === from.output);\n if (!outOk) return 'warn';\n } else if (!c.from.state) {\n return 'err';\n }\n if (this.isWidgetTarget(c.to)) {\n const to = c.to;\n if (!to.widget || !to.input) return 'err';\n const wTo = this.widgetTypeByKey(to.widget);\n const inOk = !!this.registry.get(wTo)?.inputs?.some(i => i.name === to.input);\n if (!inOk) return 'warn';\n } else if (!c.to.state) {\n return 'err';\n }\n return 'ok';\n }\n\n // Persist/apply\n onSave(): void {\n const p = this.parsePage(this.page) || ({} as GridPageDefinition);\n const next: GridPageDefinition = { ...(p as any), connections: this.connections() };\n this.page = next;\n this.pageChange.emit(next);\n this.snack.open('Conexões salvas', undefined, { duration: 1000 });\n this.originalSnapshot = JSON.stringify(this.connections());\n }\n\n // Diagram helpers\n openDiagramFor(_c: WidgetConnection): void {\n import('./connection-graph/connection-graph.component').then(m => {\n this.dialog.open((m as any).ConnectionGraphComponent as any, { width: '95vw', height: '80vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog' });\n });\n }\n openDiagramFullscreen(): void {\n import('./connection-graph/connection-graph.component').then(m => {\n this.dialog.open((m as any).ConnectionGraphComponent as any, { width: '95vw', height: '95vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog', autoFocus: false, restoreFocus: false });\n });\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n}\n","<div class=\"pdx-conn-root\" role=\"region\" aria-label=\"Construtor de Conexões\">\n <div class=\"pdx-conn-head\">\n <span class=\"pdx-conn-title\">Conexões</span>\n <span class=\"pdx-conn-count\" aria-label=\"Conexões filtradas e total\">{{ filteredConnections().length }} / {{ connections().length }}</span>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-search\">\n <mat-label>Buscar</mat-label>\n <input matInput [(ngModel)]=\"filterText\" placeholder=\"Origem, Destino, Input, Map...\" />\n <button mat-icon-button matSuffix *ngIf=\"filterText\" (click)=\"filterText='';\" aria-label=\"Limpar busca\"><mat-icon [praxisIcon]=\"'close'\"></mat-icon></button>\n </mat-form-field>\n <span class=\"pdx-spacer\"></span>\n <button mat-button (click)=\"toggleShowOnlyIssues()\" [color]=\"showOnlyIssues ? 'primary': undefined\" aria-label=\"Somente avisos/erros\"><mat-icon [praxisIcon]=\"'report_problem'\"></mat-icon> Alertas</button>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-select\">\n <mat-label>Ordenar por</mat-label>\n <mat-select [(ngModel)]=\"sortBy\" (ngModelChange)=\"setSortBy($event)\">\n <mat-option value=\"from\">Origem</mat-option>\n <mat-option value=\"to\">Destino</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"pdx-conn-group\">\n <mat-label>Agrupar por</mat-label>\n <mat-select [(ngModel)]=\"groupBy\" (ngModelChange)=\"onGroupByChange()\">\n <mat-option value=\"none\">Nenhum</mat-option>\n <mat-option value=\"from\">Origem</mat-option>\n <mat-option value=\"to\">Destino</mat-option>\n <mat-option value=\"event\">Evento</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button [color]=\"showFriendly ? 'primary' : undefined\" (click)=\"toggleFriendly()\" aria-label=\"Alternar nome amigável/técnico\"><mat-icon [praxisIcon]=\"'translate'\"></mat-icon></button>\n <button mat-stroked-button (click)=\"createNew()\" aria-label=\"Nova conexão\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon> Nova conexão</button>\n <button mat-flat-button color=\"accent\" class=\"pdx-diagram-cta\" (click)=\"openDiagramFullscreen()\" aria-label=\"Abrir diagrama em tela cheia\" matTooltip=\"Visualizar conexões em grafo\"><mat-icon [praxisIcon]=\"'schema'\"></mat-icon><span>Diagrama</span></button>\n </div>\n\n <div class=\"pdx-conn-grid\">\n <div class=\"pdx-conn-list\" role=\"list\" aria-label=\"Lista de conexões\" cdkScrollable>\n <mat-list *ngIf=\"filteredConnections().length; else noConns\">\n <ng-container *ngIf=\"groupBy!=='none'; else flatList\">\n <div class=\"group-block\" *ngFor=\"let g of groupedConnections(); let gi = index\">\n <div class=\"group-header\">\n <span class=\"group-title\">{{ g.label }}</span>\n <span class=\"group-count\">{{ g.list.length }}</span>\n </div>\n <mat-divider></mat-divider>\n <div class=\"group-list\">\n <ng-container *ngFor=\"let c of g.list; let i = index\">\n <mat-list-item role=\"listitem\" (click)=\"startEdit(i, c)\" [class.selected]=\"selectedIndex()===i\">\n <div class=\"card-head\" matListItemTitle [matTooltip]=\"fromTooltip(c)\">\n <mat-icon class=\"comp-icon from\" [matTooltip]=\"fromIconTooltip(c)\">{{ fromIcon(c) }}</mat-icon>\n <span class=\"pdx-badge from\" aria-hidden=\"true\"></span>\n <span class=\"from\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</span>\n <span class=\"arrow\">→</span>\n <mat-icon class=\"comp-icon to\" [matTooltip]=\"toIconTooltip(c)\">{{ toIcon(c) }}</mat-icon>\n <span class=\"pdx-badge to\" aria-hidden=\"true\"></span>\n <span class=\"to\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</span>\n <span class=\"spacer\"></span>\n <span class=\"status-pill\" [class.ok]=\"connectionStatus(c)==='ok'\" [class.warn]=\"connectionStatus(c)==='warn'\" [class.err]=\"connectionStatus(c)==='err'\">\n <mat-icon *ngIf=\"connectionStatus(c)==='ok'\">check_circle</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='warn'\">warning</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='err'\">error</mat-icon>\n </span>\n <button mat-icon-button class=\"expand-btn\" [attr.aria-expanded]=\"isExpanded(i)\" (click)=\"toggleExpanded(i, $event)\" [matTooltip]=\"isExpanded(i) ? 'Recolher detalhes' : 'Expandir detalhes'\">\n <mat-icon>{{ isExpanded(i) ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n <div class=\"meta\" *ngIf=\"showFriendly\" matListItemLine>\n <span class=\"hint\">{{ outputDescription(c) }}</span>\n <span class=\"sep\" *ngIf=\"outputDescription(c) && inputDescription(c)\">•</span>\n <span class=\"hint\">{{ inputDescription(c) }}</span>\n </div>\n <div class=\"map-chip\" *ngIf=\"c.map\" [matTooltip]=\"c.map || ''\" matListItemLine (click)=\"startEditByConn(c)\" title=\"Clique para editar Map\">\n <span class=\"pdx-badge map\" aria-hidden=\"true\"></span>\n <mat-icon class=\"map-icon\" inline>bolt</mat-icon>\n <span class=\"mono\">{{ c.map }}</span>\n </div>\n <div class=\"card-actions\" matListItemLine (click)=\"$event.stopPropagation()\">\n <span class=\"action-group\">\n <button mat-icon-button (click)=\"startEdit(i, c)\" matTooltip=\"Editar\"><mat-icon>settings</mat-icon></button>\n <button mat-icon-button (click)=\"duplicateConnection(i)\" matTooltip=\"Duplicar\"><mat-icon>content_copy</mat-icon></button>\n </span>\n <span class=\"action-group\">\n <button mat-stroked-button color=\"primary\" (click)=\"openDiagramFor(c)\" matTooltip=\"Ver relação no diagrama\"><mat-icon>schema</mat-icon><span>Diagrama</span></button>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"action-group\">\n <button mat-icon-button color=\"warn\" (click)=\"removeConnection(i)\" matTooltip=\"Remover\"><mat-icon>delete</mat-icon></button>\n </span>\n </div>\n <div class=\"card-details\" matListItemLine [class.expanded]=\"isExpanded(i)\" [style.maxHeight]=\"isExpanded(i) ? '240px' : '0px'\" [style.opacity]=\"isExpanded(i) ? 1 : 0\" [style.pointerEvents]=\"isExpanded(i) ? 'auto' : 'none'\">\n <div class=\"stepper\">\n <div class=\"step from-step\">\n <div class=\"dot from\"></div>\n <div class=\"content\">\n <div class=\"label\">De</div>\n <div class=\"value\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step to-step\">\n <div class=\"dot to\"></div>\n <div class=\"content\">\n <div class=\"label\">Para</div>\n <div class=\"value\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step map-step\" *ngIf=\"c.map\">\n <div class=\"dot map\"></div>\n <div class=\"content\">\n <div class=\"label\">Map</div>\n <div class=\"value mono\">{{ c.map }}</div>\n </div>\n </div>\n </div>\n </div>\n </mat-list-item>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-template #flatList>\n <ng-container *ngFor=\"let c of filteredConnections(); let i = index\">\n <mat-list-item role=\"listitem\" (click)=\"startEdit(i, c)\" [class.selected]=\"selectedIndex()===i\">\n <div class=\"card-head\" matListItemTitle [matTooltip]=\"fromTooltip(c)\">\n <mat-icon class=\"comp-icon from\" [matTooltip]=\"fromIconTooltip(c)\">{{ fromIcon(c) }}</mat-icon>\n <span class=\"pdx-badge from\" aria-hidden=\"true\"></span>\n <span class=\"from\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</span>\n <span class=\"arrow\">→</span>\n <mat-icon class=\"comp-icon to\" [matTooltip]=\"toIconTooltip(c)\">{{ toIcon(c) }}</mat-icon>\n <span class=\"pdx-badge to\" aria-hidden=\"true\"></span>\n <span class=\"to\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</span>\n <span class=\"spacer\"></span>\n <span class=\"status-pill\" [class.ok]=\"connectionStatus(c)==='ok'\" [class.warn]=\"connectionStatus(c)==='warn'\" [class.err]=\"connectionStatus(c)==='err'\">\n <mat-icon *ngIf=\"connectionStatus(c)==='ok'\">check_circle</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='warn'\">warning</mat-icon>\n <mat-icon *ngIf=\"connectionStatus(c)==='err'\">error</mat-icon>\n </span>\n <button mat-icon-button class=\"expand-btn\" [attr.aria-expanded]=\"isExpanded(i)\" (click)=\"toggleExpanded(i, $event)\" [matTooltip]=\"isExpanded(i) ? 'Recolher detalhes' : 'Expandir detalhes'\">\n <mat-icon>{{ isExpanded(i) ? 'expand_less' : 'expand_more' }}</mat-icon>\n </button>\n </div>\n <div class=\"meta\" *ngIf=\"showFriendly\" matListItemLine>\n <span class=\"hint\">{{ outputDescription(c) }}</span>\n <span class=\"sep\" *ngIf=\"outputDescription(c) && inputDescription(c)\">•</span>\n <span class=\"hint\">{{ inputDescription(c) }}</span>\n </div>\n <div class=\"map-chip\" *ngIf=\"c.map\" [matTooltip]=\"c.map || ''\" matListItemLine (click)=\"startEditByConn(c)\" title=\"Clique para editar Map\">\n <span class=\"pdx-badge map\" aria-hidden=\"true\"></span>\n <mat-icon class=\"map-icon\" inline>bolt</mat-icon>\n <span class=\"mono\">{{ c.map }}</span>\n </div>\n <div class=\"card-actions\" matListItemLine (click)=\"$event.stopPropagation()\">\n <span class=\"action-group\">\n <button mat-icon-button (click)=\"startEdit(i, c)\" matTooltip=\"Editar\"><mat-icon>settings</mat-icon></button>\n <button mat-icon-button (click)=\"duplicateConnection(i)\" matTooltip=\"Duplicar\"><mat-icon>content_copy</mat-icon></button>\n </span>\n <span class=\"action-group\">\n <button mat-stroked-button color=\"primary\" (click)=\"openDiagramFor(c)\" matTooltip=\"Ver relação no diagrama\"><mat-icon>schema</mat-icon><span>Diagrama</span></button>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"action-group\">\n <button mat-icon-button color=\"warn\" (click)=\"removeConnection(i)\" matTooltip=\"Remover\"><mat-icon>delete</mat-icon></button>\n </span>\n </div>\n <div class=\"card-details\" matListItemLine [class.expanded]=\"isExpanded(i)\" [style.maxHeight]=\"isExpanded(i) ? '240px' : '0px'\" [style.opacity]=\"isExpanded(i) ? 1 : 0\" [style.pointerEvents]=\"isExpanded(i) ? 'auto' : 'none'\">\n <div class=\"stepper\">\n <div class=\"step from-step\">\n <div class=\"dot from\"></div>\n <div class=\"content\">\n <div class=\"label\">De</div>\n <div class=\"value\">{{ showFriendly ? fromFriendly(c) : fromLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step to-step\">\n <div class=\"dot to\"></div>\n <div class=\"content\">\n <div class=\"label\">Para</div>\n <div class=\"value\">{{ showFriendly ? toFriendly(c) : toLabel(c) }}</div>\n </div>\n </div>\n <div class=\"step map-step\" *ngIf=\"c.map\">\n <div class=\"dot map\"></div>\n <div class=\"content\">\n <div class=\"label\">Map</div>\n <div class=\"value mono\">{{ c.map }}</div>\n </div>\n </div>\n </div>\n </div>\n </mat-list-item>\n </ng-container>\n </ng-template>\n </mat-list>\n <ng-template #noConns>\n <div class=\"pdx-empty-list\" role=\"status\" aria-live=\"polite\">\n <mat-icon>link_off</mat-icon>\n <div>Nenhuma conexão definida. Use \"Nova conexão\".</div>\n </div>\n </ng-template>\n </div>\n\n <div class=\"pdx-conn-editor\" role=\"form\" aria-label=\"Editor de conexão\">\n <ng-container *ngIf=\"selectedIndex() >= 0; else emptyEditor\">\n <div class=\"form-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Origem (widget.key)</mat-label>\n <input matInput [ngModel]=\"selectedSourcePrimaryValue()\" (ngModelChange)=\"setSelectedSourcePrimaryValue($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"showSelectedSourceSecondary()\">\n <mat-label>Evento (output)</mat-label>\n <input matInput [ngModel]=\"selectedSourceSecondaryValue()\" (ngModelChange)=\"setSelectedSourceSecondaryValue($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Destino (widget.key)</mat-label>\n <input matInput [ngModel]=\"selectedTargetPrimaryValue()\" (ngModelChange)=\"setSelectedTargetPrimaryValue($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"showSelectedTargetSecondary()\">\n <mat-label>Input</mat-label>\n <input matInput [ngModel]=\"selectedTargetSecondaryValue()\" (ngModelChange)=\"setSelectedTargetSecondaryValue($event)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full-span\">\n <mat-label>Map (opcional)</mat-label>\n <input matInput [ngModel]=\"selectedMapValue()\" (ngModelChange)=\"setSelectedMapValue($event)\" [placeholder]=\"mapPlaceholder\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Ex.: payload.id ou ${payload.id}.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"full-span\">\n <button mat-flat-button color=\"primary\" (click)=\"onSave()\"><mat-icon [praxisIcon]=\"'save'\"></mat-icon>Salvar</button>\n </div>\n </div>\n </ng-container>\n <ng-template #emptyEditor>\n <div class=\"pdx-empty-editor\">Selecione uma conexão para editar.</div>\n </ng-template>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { BehaviorSubject } from 'rxjs';\nimport { BUILTIN_SHELL_PRESETS, ComponentDocMeta, ComponentMetadataRegistry, PraxisIconDirective, WidgetShellAction, WidgetShellConfig } from '@praxisui/core';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype ShellInputs = {\n shell?: WidgetShellConfig | null;\n widgetKey?: string;\n widgetType?: string;\n presets?: Record<string, WidgetShellConfig['appearance']> | null;\n pagePreset?: string | null;\n};\n\ntype ShellEditorResult = {\n shell: WidgetShellConfig | null;\n applyToAll?: boolean;\n pagePreset?: string;\n};\n\ntype AvailableShellAction = {\n kind: 'action' | 'command';\n id: string;\n label: string;\n icon?: string;\n scope?: NonNullable<ComponentDocMeta['actions']>[number]['scope'] | 'any';\n emit?: string;\n command?: string;\n description?: string;\n payloadExample?: any;\n};\n\ntype SetInputValueOption = {\n label: string;\n value: any;\n icon?: string;\n};\n\ntype SetInputPreset = {\n input: string;\n label: string;\n icon?: string;\n values: SetInputValueOption[];\n};\n\nconst BUILTIN_PRESET_OPTIONS: Array<{ id: string; label: string }> = [\n { id: 'dark-glass', label: 'Dark Glass' },\n { id: 'light-neutral', label: 'Light Neutral' },\n { id: 'graphite', label: 'Graphite' },\n];\n\nconst BUILTIN_PRESET_MAP = BUILTIN_SHELL_PRESETS;\n\nconst SET_INPUT_PRESETS: Record<string, SetInputPreset[]> = {\n 'praxis-dynamic-form': [\n {\n input: 'mode',\n label: 'Modo',\n icon: 'toggle_on',\n values: [\n { label: 'Visualização', value: 'view', icon: 'visibility' },\n { label: 'Edição', value: 'edit', icon: 'edit' },\n { label: 'Criação', value: 'create', icon: 'add' },\n ],\n },\n {\n input: 'schemaSource',\n label: 'Fonte do schema',\n icon: 'schema',\n values: [\n { label: 'Recurso', value: 'resource' },\n { label: 'Filtro', value: 'filter' },\n ],\n },\n {\n input: 'notifyIfOutdated',\n label: 'Notificação de schema',\n icon: 'notification_important',\n values: [\n { label: 'Inline', value: 'inline' },\n { label: 'Snackbar', value: 'snackbar' },\n { label: 'Ambos', value: 'both' },\n { label: 'Nenhum', value: 'none' },\n ],\n },\n {\n input: 'removeEmptyContainersOnSave',\n label: 'Remover containers vazios',\n icon: 'cleaning_services',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'autoOpenSettingsOnOutdated',\n label: 'Abrir editor automático',\n icon: 'open_in_new',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'readonlyModeGlobal',\n label: 'Somente leitura global',\n icon: 'lock',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'disabledModeGlobal',\n label: 'Desabilitar global',\n icon: 'block',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'presentationModeGlobal',\n label: 'Modo apresentação',\n icon: 'slideshow',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'visibleGlobal',\n label: 'Visibilidade global',\n icon: 'visibility',\n values: [\n { label: 'Exibir', value: true },\n { label: 'Ocultar', value: false },\n ],\n },\n ],\n 'praxis-table': [\n {\n input: 'showToolbar',\n label: 'Toolbar',\n icon: 'toolbar',\n values: [\n { label: 'Exibir', value: true },\n { label: 'Ocultar', value: false },\n ],\n },\n {\n input: 'toolbarV2',\n label: 'Toolbar v2',\n icon: 'view_compact',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'autoDelete',\n label: 'Auto delete',\n icon: 'delete_forever',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'dense',\n label: 'Modo compacto',\n icon: 'compress',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n ],\n 'praxis-stepper': [\n {\n input: 'inputs.config.orientation',\n label: 'Orientação',\n icon: 'swap_vert',\n values: [\n { label: 'Horizontal', value: 'horizontal' },\n { label: 'Vertical', value: 'vertical' },\n ],\n },\n {\n input: 'inputs.config.headerPosition',\n label: 'Posição do cabeçalho',\n icon: 'vertical_align_top',\n values: [\n { label: 'Topo', value: 'top' },\n { label: 'Base', value: 'bottom' },\n ],\n },\n {\n input: 'inputs.config.linear',\n label: 'Modo linear',\n icon: 'linear_scale',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n {\n input: 'inputs.config.navigation.variant',\n label: 'Navegação (variante)',\n icon: 'tune',\n values: [\n { label: 'Basic', value: 'basic' },\n { label: 'Flat', value: 'flat' },\n { label: 'Stroked', value: 'stroked' },\n { label: 'Raised', value: 'raised' },\n ],\n },\n {\n input: 'inputs.config.navigation.align',\n label: 'Navegação (alinhamento)',\n icon: 'format_align_center',\n values: [\n { label: 'Início', value: 'start' },\n { label: 'Centro', value: 'center' },\n { label: 'Fim', value: 'end' },\n { label: 'Espaçado', value: 'space-between' },\n ],\n },\n {\n input: 'labelPosition',\n label: 'Posição do rótulo',\n icon: 'format_align_center',\n values: [\n { label: 'Abaixo', value: 'bottom' },\n { label: 'Ao lado', value: 'end' },\n ],\n },\n {\n input: 'density',\n label: 'Densidade',\n icon: 'density_small',\n values: [\n { label: 'Padrão', value: 'default' },\n { label: 'Confortável', value: 'comfortable' },\n { label: 'Compacto', value: 'compact' },\n ],\n },\n ],\n 'praxis-expansion': [\n {\n input: 'strictValidation',\n label: 'Validação estrita',\n icon: 'rule',\n values: [\n { label: 'Ativar', value: true },\n { label: 'Desativar', value: false },\n ],\n },\n ],\n};\n\n@Component({\n selector: 'praxis-widget-shell-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDividerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatSelectModule,\n PraxisIconDirective,\n ],\n template: `\n <div class=\"shell-editor\">\n <div class=\"shell-head\">\n <div>\n <div class=\"shell-title\">Configurar Card</div>\n <div class=\"shell-subtitle\">Defina título, ícone e ações do cabeçalho.</div>\n </div>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n <div class=\"shell-section\">Geral</div>\n <div class=\"shell-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo de card</mat-label>\n <mat-select [formControl]=\"form.controls.kind\">\n <mat-option value=\"dashboard-card\">Dashboard Card</mat-option>\n <mat-option value=\"none\">Sem shell</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Preset</mat-label>\n <mat-select [formControl]=\"form.controls.preset\">\n <mat-option value=\"\">Nenhum</mat-option>\n <mat-option *ngIf=\"pagePreset\" [value]=\"pagePreset\">Usar preset da página ({{ pagePreset }})</mat-option>\n <mat-option *ngFor=\"let p of presetOptions\" [value]=\"p.id\">{{ p.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"shell-hint\" *ngIf=\"!form.controls.preset.value && pagePreset\">\n Preset da página: {{ pagePreset }}\n </div>\n <mat-checkbox [formControl]=\"form.controls.applyToAll\" *ngIf=\"form.controls.preset.value\">\n Aplicar preset como padrão da página\n </mat-checkbox>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [formControl]=\"form.controls.icon\" placeholder=\"ex: badge\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [formControl]=\"form.controls.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitle\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mostrar cabeçalho</mat-label>\n <mat-select [formControl]=\"form.controls.showHeader\">\n <mat-option value=\"auto\">Automático</mat-option>\n <mat-option value=\"true\">Sempre</mat-option>\n <mat-option value=\"false\">Nunca</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"shell-section\">Controles de janela</div>\n <div class=\"shell-flags\">\n <mat-checkbox [formControl]=\"form.controls.collapsible\">Permitir recolher</mat-checkbox>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"shell-section\">Aparência</div>\n <div class=\"shell-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do card</mat-label>\n <input matInput [formControl]=\"form.controls.cardBg\" placeholder=\"ex: #0b1220\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da borda</mat-label>\n <input matInput [formControl]=\"form.controls.cardBorder\" placeholder=\"ex: rgba(255,255,255,0.12)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Raio da borda</mat-label>\n <input matInput [formControl]=\"form.controls.cardRadius\" placeholder=\"ex: 14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Sombra</mat-label>\n <input matInput [formControl]=\"form.controls.cardShadow\" placeholder=\"ex: 0 10px 30px rgba(0,0,0,0.2)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do cabeçalho</mat-label>\n <input matInput [formControl]=\"form.controls.headerBg\" placeholder=\"ex: linear-gradient(...)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Borda do cabeçalho</mat-label>\n <input matInput [formControl]=\"form.controls.headerBorder\" placeholder=\"ex: rgba(255,255,255,0.08)\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleColor\" placeholder=\"ex: #e6edf3\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitleColor\" placeholder=\"ex: #9fb0c4\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do ícone</mat-label>\n <input matInput [formControl]=\"form.controls.iconColor\" placeholder=\"ex: #8ab4ff\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Fundo do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyBg\" placeholder=\"ex: transparent\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do texto do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyColor\" placeholder=\"ex: #e6edf3\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding do corpo</mat-label>\n <input matInput [formControl]=\"form.controls.bodyPadding\" placeholder=\"ex: 10px 12px 12px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleSize\" placeholder=\"ex: 14px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do título</mat-label>\n <input matInput [formControl]=\"form.controls.titleWeight\" placeholder=\"ex: 600\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do subtítulo</mat-label>\n <input matInput [formControl]=\"form.controls.subtitleSize\" placeholder=\"ex: 12px\" />\n </mat-form-field>\n </div>\n\n <div class=\"shell-preview\" [ngStyle]=\"previewVars()\">\n <div class=\"shell-preview-card\" [class.no-shell]=\"form.controls.kind.value === 'none'\" [class.expanded]=\"previewExpanded\">\n <div class=\"shell-preview-header\" *ngIf=\"previewShowHeader()\">\n <div class=\"shell-preview-title\">\n <mat-icon *ngIf=\"form.controls.icon.value\" [praxisIcon]=\"form.controls.icon.value\"></mat-icon>\n <div class=\"shell-preview-text\">\n <div class=\"shell-preview-title-text\">{{ previewTitle() }}</div>\n <div class=\"shell-preview-subtitle\">{{ previewSubtitle() }}</div>\n </div>\n </div>\n <div class=\"shell-preview-actions\">\n <button\n *ngFor=\"let action of previewHeaderActions()\"\n type=\"button\"\n [disabled]=\"action.disabled\"\n [ngClass]=\"action.variant === 'outlined' ? 'pdx-preview-outlined' : 'pdx-preview-text'\"\n mat-button\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n <span class=\"pdx-preview-label\">{{ action.label || action.id }}</span>\n </button>\n <button\n *ngIf=\"previewOverflowCount()\"\n mat-icon-button\n type=\"button\"\n aria-label=\"Mais ações\"\n >\n <mat-icon>more_horiz</mat-icon>\n </button>\n <button\n *ngFor=\"let action of previewWindowActions()\"\n mat-icon-button\n type=\"button\"\n [disabled]=\"action.disabled\"\n [attr.aria-label]=\"action.label || action.id\"\n >\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n </button>\n <button mat-icon-button type=\"button\" (click)=\"togglePreviewCollapse()\" aria-label=\"Recolher\">\n <mat-icon>{{ previewCollapsed ? 'unfold_more' : 'unfold_less' }}</mat-icon>\n </button>\n <button mat-icon-button type=\"button\" (click)=\"togglePreviewExpand()\" aria-label=\"Expandir\">\n <mat-icon>{{ previewExpanded ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"shell-preview-body\" [class.hidden]=\"previewCollapsed\">Conteudo do widget</div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"shell-section\" *ngIf=\"hasAvailableActions\">Ações disponíveis</div>\n <div class=\"shell-available\" *ngIf=\"hasAvailableActions; else noAvailableActions\">\n <div class=\"shell-available-toolbar\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Buscar ação</mat-label>\n <input matInput [formControl]=\"actionQuery\" placeholder=\"ex: export, editar, submit\" />\n </mat-form-field>\n <div class=\"shell-available-filters\">\n <mat-checkbox [(ngModel)]=\"showScopeShell\">Shell</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeAny\">Any</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeToolbar\">Toolbar</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"showScopeContext\">Context</mat-checkbox>\n </div>\n </div>\n <div class=\"shell-available-list\">\n <div class=\"shell-available-item\" *ngFor=\"let action of filteredAvailableActions()\">\n <div class=\"shell-available-main\">\n <div class=\"shell-available-title\">\n <mat-icon *ngIf=\"action.icon\" [praxisIcon]=\"action.icon\"></mat-icon>\n <div class=\"shell-available-text\">\n <div class=\"shell-available-label\">{{ action.label }}</div>\n <div class=\"shell-available-meta\">\n <span class=\"shell-badge\">{{ action.kind === 'command' ? 'Comando' : 'Ação' }}</span>\n <span class=\"shell-badge\">{{ scopeLabel(action.scope) }}</span>\n <span class=\"shell-code\">id: {{ action.id }}</span>\n <span *ngIf=\"action.emit\" class=\"shell-code\">emit: {{ action.emit }}</span>\n <span *ngIf=\"action.command\" class=\"shell-code\">command: {{ action.command }}</span>\n </div>\n </div>\n </div>\n <div class=\"shell-available-desc\" *ngIf=\"action.description\">{{ action.description }}</div>\n <div class=\"shell-available-payload\" *ngIf=\"action.payloadExample !== undefined\">\n <span class=\"shell-code\">payload: {{ stringifyPayload(action.payloadExample) }}</span>\n </div>\n <div class=\"shell-available-warning\" *ngIf=\"action.scope === 'context'\">\n Essa ação depende de item/linha selecionado; payload fixo pode não funcionar.\n </div>\n </div>\n <div class=\"shell-available-actions\">\n <button\n mat-stroked-button\n type=\"button\"\n [color]=\"isActionSelected(action) ? 'warn' : 'primary'\"\n (click)=\"toggleAvailableAction(action)\"\n >\n {{ isActionSelected(action) ? 'Remover' : 'Adicionar' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noAvailableActions>\n <div class=\"shell-empty\">Nenhuma ação registrada para este componente.</div>\n </ng-template>\n\n <mat-divider *ngIf=\"hasAvailableActions\"></mat-divider>\n\n <div class=\"shell-section\" *ngIf=\"setInputPresets.length\">Ações rápidas (inputs)</div>\n <div class=\"shell-quick-inputs\" *ngIf=\"setInputPresets.length\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Input</mat-label>\n <mat-select [formControl]=\"setInputTarget\">\n <mat-option *ngFor=\"let preset of setInputPresets\" [value]=\"preset.input\">\n <mat-icon *ngIf=\"preset.icon\" [praxisIcon]=\"preset.icon\"></mat-icon>\n {{ preset.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"shell-input-path\" *ngIf=\"setInputTarget.value\">\n Input: {{ displayInputPath(setInputTarget.value) }}\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Valor</mat-label>\n <mat-select [formControl]=\"setInputValue\">\n <mat-option *ngFor=\"let option of currentSetInputValues()\" [value]=\"option.value\">\n <mat-icon *ngIf=\"option.icon\" [praxisIcon]=\"option.icon\"></mat-icon>\n {{ option.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addSetInputAction()\">\n Adicionar ação\n </button>\n </div>\n\n <div class=\"shell-section shell-actions-head\">\n <div>Ações do cabeçalho</div>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addAction()\">Adicionar ação</button>\n </div>\n\n <div class=\"shell-actions\" *ngIf=\"actions.controls.length; else emptyActions\">\n <div class=\"shell-action\" *ngFor=\"let action of actions.controls; let i = index\" [formGroup]=\"action\">\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>ID</mat-label>\n <input matInput formControlName=\"id\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Label</mat-label>\n <input matInput formControlName=\"label\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput formControlName=\"icon\" />\n </mat-form-field>\n </div>\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Variante</mat-label>\n <mat-select formControlName=\"variant\">\n <mat-option value=\"text\">Texto</mat-option>\n <mat-option value=\"outlined\">Outlined</mat-option>\n <mat-option value=\"icon\">Ícone</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <mat-select formControlName=\"placement\">\n <mat-option value=\"header\">Cabeçalho</mat-option>\n <mat-option value=\"window\">Janela</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Emit</mat-label>\n <input matInput formControlName=\"emit\" placeholder=\"ex: editar\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tooltip</mat-label>\n <input matInput formControlName=\"tooltip\" />\n </mat-form-field>\n </div>\n <div class=\"shell-action-row\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Command</mat-label>\n <input matInput formControlName=\"command\" placeholder=\"ex: add-item\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Payload (JSON)</mat-label>\n <textarea matInput rows=\"2\" formControlName=\"payload\" placeholder='ex: {\"foo\":\"bar\"}'></textarea>\n </mat-form-field>\n <mat-checkbox formControlName=\"visible\">Visível</mat-checkbox>\n <mat-checkbox formControlName=\"disabled\">Desabilitado</mat-checkbox>\n </div>\n <div class=\"shell-action-hint\" *ngIf=\"showActionInputPath(action.value)\">\n Input: {{ displayInputPath(extractActionInput(action.value)) }}\n </div>\n <div class=\"shell-action-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\" (click)=\"removeAction(i)\">Remover</button>\n </div>\n </div>\n </div>\n\n <ng-template #emptyActions>\n <div class=\"shell-empty\">Nenhuma ação configurada.</div>\n </ng-template>\n </div>\n `,\n styles: [\n `\n .shell-editor {\n display: grid;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .shell-head { display: flex; align-items: center; gap: 12px; }\n .shell-title { font-weight: 600; }\n .shell-subtitle { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-section { font-weight: 600; margin-top: 8px; }\n .shell-grid {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n .shell-flags { display: flex; gap: 16px; align-items: center; }\n .shell-actions-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .shell-available { display: grid; gap: 12px; }\n .shell-available-toolbar { display: grid; gap: 12px; grid-template-columns: minmax(200px, 1fr); }\n .shell-available-filters { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\n .shell-available-list { display: grid; gap: 10px; }\n .shell-available-item { display: grid; gap: 8px; grid-template-columns: 1fr auto; border: 1px solid var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; background: var(--md-sys-color-surface-container-low); }\n .shell-available-title { display: flex; align-items: center; gap: 10px; }\n .shell-available-text { display: grid; gap: 4px; }\n .shell-available-label { font-weight: 600; }\n .shell-available-meta { display: flex; gap: 8px; flex-wrap: wrap; font-size: 11px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-desc { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-payload { font-size: 11px; color: var(--md-sys-color-on-surface-variant); }\n .shell-available-warning { font-size: 11px; color: var(--md-sys-color-error); }\n .shell-available-actions { display: flex; align-items: flex-start; justify-content: flex-end; }\n .shell-badge { padding: 2px 6px; border-radius: 999px; border: 1px solid var(--md-sys-color-outline-variant); font-size: 10px; }\n .shell-code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; }\n .shell-actions { display: grid; gap: 12px; }\n .shell-action { border: 1px solid var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; display: grid; gap: 8px; }\n .shell-action-row { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }\n .shell-action-actions { display: flex; justify-content: flex-end; }\n .shell-action-hint { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-empty { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-hint { align-self: center; font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .shell-quick-inputs { display: grid; gap: 12px; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); align-items: end; }\n .shell-input-path { font-size: 12px; color: var(--md-sys-color-on-surface-variant); align-self: center; }\n .shell-editor .mat-mdc-form-field { width: 100%; }\n .shell-preview { border: 1px dashed var(--md-sys-color-outline-variant); border-radius: 12px; padding: 12px; }\n .shell-preview-card {\n background: var(--pdx-shell-card-bg, var(--md-sys-color-surface));\n border: 1px solid var(--pdx-shell-card-border, var(--md-sys-color-outline-variant));\n border-radius: var(--pdx-shell-card-radius, 14px);\n box-shadow: var(--pdx-shell-card-shadow, var(--mat-elevation-level2));\n overflow: hidden;\n }\n .shell-preview-card.no-shell { background: transparent; border: none; box-shadow: none; }\n .shell-preview-card.expanded { box-shadow: var(--pdx-shell-card-shadow, 0 16px 34px rgba(0,0,0,0.32)); transform: scale(1.01); }\n .shell-preview-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px 8px 12px;\n border-bottom: 1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));\n background: var(--pdx-shell-header-bg, var(--md-sys-color-surface-container));\n }\n .shell-preview-title { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1; color: var(--pdx-shell-title-color, inherit); }\n .shell-preview-title mat-icon { color: var(--pdx-shell-icon-color, currentColor); }\n .shell-preview-text { min-width: 0; }\n .shell-preview-title-text { font-weight: var(--pdx-shell-title-weight, 600); font-size: var(--pdx-shell-title-size, 14px); line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shell-preview-subtitle { font-size: var(--pdx-shell-subtitle-size, 12px); opacity: 0.75; color: var(--pdx-shell-subtitle-color, currentColor); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n .shell-preview-actions { display: flex; align-items: center; gap: 6px; }\n .pdx-preview-text { padding: 0 8px; }\n .pdx-preview-outlined {\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 999px;\n padding: 0 10px;\n }\n .pdx-preview-label { font-size: 12px; font-weight: 500; }\n .shell-preview-body { padding: var(--pdx-shell-body-padding, 10px 12px 12px 12px); background: var(--pdx-shell-body-bg, transparent); color: var(--pdx-shell-body-color, inherit); font-size: 12px; }\n .shell-preview-body.hidden { display: none; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class WidgetShellEditorComponent implements SettingsValueProvider {\n form = new FormGroup({\n kind: new FormControl<'dashboard-card' | 'none'>('dashboard-card', { nonNullable: true }),\n preset: new FormControl<string>('', { nonNullable: true }),\n applyToAll: new FormControl<boolean>(false, { nonNullable: true }),\n title: new FormControl<string>('', { nonNullable: true }),\n subtitle: new FormControl<string>('', { nonNullable: true }),\n icon: new FormControl<string>('', { nonNullable: true }),\n showHeader: new FormControl<'auto' | 'true' | 'false'>('auto', { nonNullable: true }),\n collapsible: new FormControl<boolean>(true, { nonNullable: true }),\n cardBg: new FormControl<string>('', { nonNullable: true }),\n cardBorder: new FormControl<string>('', { nonNullable: true }),\n cardRadius: new FormControl<string>('', { nonNullable: true }),\n cardShadow: new FormControl<string>('', { nonNullable: true }),\n headerBg: new FormControl<string>('', { nonNullable: true }),\n headerBorder: new FormControl<string>('', { nonNullable: true }),\n titleColor: new FormControl<string>('', { nonNullable: true }),\n subtitleColor: new FormControl<string>('', { nonNullable: true }),\n iconColor: new FormControl<string>('', { nonNullable: true }),\n bodyBg: new FormControl<string>('', { nonNullable: true }),\n bodyColor: new FormControl<string>('', { nonNullable: true }),\n bodyPadding: new FormControl<string>('', { nonNullable: true }),\n titleSize: new FormControl<string>('', { nonNullable: true }),\n titleWeight: new FormControl<string>('', { nonNullable: true }),\n subtitleSize: new FormControl<string>('', { nonNullable: true }),\n actions: new FormArray<FormGroup>([]),\n });\n\n private readonly initialShell = new BehaviorSubject<WidgetShellConfig | null>(null);\n private readonly dirtySubject = new BehaviorSubject<boolean>(false);\n private readonly validSubject = new BehaviorSubject<boolean>(true);\n private readonly busySubject = new BehaviorSubject<boolean>(false);\n\n isDirty$ = this.dirtySubject.asObservable();\n isValid$ = this.validSubject.asObservable();\n isBusy$ = this.busySubject.asObservable();\n\n private snapshot = '';\n presetOptions: Array<{ id: string; label: string }> = [...BUILTIN_PRESET_OPTIONS];\n private presets: Record<string, WidgetShellConfig['appearance']> = { ...BUILTIN_PRESET_MAP };\n availableActions: AvailableShellAction[] = [];\n actionQuery = new FormControl<string>('', { nonNullable: true });\n showScopeShell = true;\n showScopeAny = true;\n showScopeToolbar = false;\n showScopeContext = false;\n setInputPresets: SetInputPreset[] = [];\n setInputTarget = new FormControl<string>('', { nonNullable: true });\n setInputValue = new FormControl<any>(null);\n previewCollapsed = false;\n previewExpanded = false;\n pagePreset: string | null = null;\n constructor(\n @Optional() @Inject(SETTINGS_PANEL_DATA) data?: ShellInputs | null,\n @Optional() private registry?: ComponentMetadataRegistry | null,\n ) {\n const customPresets = data?.presets || {};\n const customOptions = Object.keys(customPresets).map((id) => ({ id, label: id }));\n this.presetOptions = [...BUILTIN_PRESET_OPTIONS, ...customOptions];\n this.presets = { ...BUILTIN_PRESET_MAP, ...customPresets };\n this.pagePreset = data?.pagePreset || null;\n const shell = data?.shell || null;\n this.initialShell.next(shell);\n this.applyShell(shell);\n this.loadAvailableActions(data?.widgetType || null);\n this.loadSetInputPresets(data?.widgetType || null);\n\n this.form.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.validSubject.next(this.form.valid);\n const current = this.snapshotValue();\n this.dirtySubject.next(current !== this.snapshot);\n });\n\n this.form.controls.preset.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n if (!value && this.form.controls.applyToAll.value) {\n this.form.controls.applyToAll.setValue(false, { emitEvent: false });\n }\n });\n\n this.setInputTarget.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n const next = this.currentSetInputValues()[0];\n if (next) this.setInputValue.setValue(next.value, { emitEvent: false });\n });\n }\n\n get actions(): FormArray<FormGroup> {\n return this.form.controls.actions;\n }\n\n get hasAvailableActions(): boolean {\n return !!this.availableActions.length;\n }\n\n addAction(seed?: Partial<WidgetShellAction>): void {\n this.actions.push(this.createActionGroup(seed));\n }\n\n removeAction(index: number): void {\n this.actions.removeAt(index);\n }\n\n getSettingsValue(): ShellEditorResult {\n return this.buildResult();\n }\n\n onSave(): ShellEditorResult {\n return this.buildResult();\n }\n\n reset(): void {\n const shell = this.initialShell.value;\n this.applyShell(shell);\n }\n\n private applyShell(shell: WidgetShellConfig | null): void {\n const showHeader = shell?.showHeader == null ? 'auto' : shell.showHeader ? 'true' : 'false';\n const window = shell?.windowActions || {};\n const appearance = shell?.appearance || {};\n const card = appearance.card || {};\n const header = appearance.header || {};\n const body = appearance.body || {};\n const typography = appearance.typography || {};\n this.form.setControl('actions', new FormArray<FormGroup>(\n (shell?.actions || []).map((a) => this.createActionGroup(a)),\n ));\n this.form.setValue(\n {\n kind: shell?.kind === 'none' ? 'none' : 'dashboard-card',\n preset: shell?.preset || '',\n applyToAll: false,\n title: shell?.title || '',\n subtitle: shell?.subtitle || '',\n icon: shell?.icon || '',\n showHeader,\n collapsible: window.collapsible !== false,\n cardBg: card.background || '',\n cardBorder: card.borderColor || '',\n cardRadius: card.borderRadius || '',\n cardShadow: card.shadow || '',\n headerBg: header.background || '',\n headerBorder: header.borderColor || '',\n titleColor: header.titleColor || '',\n subtitleColor: header.subtitleColor || '',\n iconColor: header.iconColor || '',\n bodyBg: body.background || '',\n bodyColor: body.textColor || '',\n bodyPadding: body.padding || '',\n titleSize: typography.titleSize || '',\n titleWeight: typography.titleWeight || '',\n subtitleSize: typography.subtitleSize || '',\n actions: this.actions.value,\n },\n { emitEvent: false },\n );\n this.snapshot = this.snapshotValue();\n this.dirtySubject.next(false);\n this.validSubject.next(this.form.valid);\n }\n\n private loadAvailableActions(widgetType: string | null): void {\n if (!widgetType || !this.registry) {\n this.availableActions = [];\n return;\n }\n const meta = this.registry.get(widgetType);\n const actions = (meta?.actions || []).map((action) => ({\n kind: 'action',\n id: action.id,\n label: action.label || action.id,\n icon: action.icon,\n scope: action.scope || 'any',\n emit: action.emit,\n command: action.command,\n description: action.description,\n payloadExample: action.payloadSchema?.example,\n })) as AvailableShellAction[];\n const commands = (meta?.commands || []).map((command) => ({\n kind: 'command',\n id: command.name,\n label: command.label || command.name,\n icon: command.icon,\n scope: 'any',\n command: command.name,\n description: command.description,\n payloadExample: command.payloadSchema?.example,\n })) as AvailableShellAction[];\n this.availableActions = [...actions, ...commands];\n }\n\n private createActionGroup(seed?: Partial<WidgetShellAction>): FormGroup {\n return new FormGroup({\n id: new FormControl<string>(seed?.id || '', { nonNullable: true, validators: [Validators.required] }),\n label: new FormControl<string>(seed?.label || '', { nonNullable: true }),\n icon: new FormControl<string>(seed?.icon || '', { nonNullable: true }),\n variant: new FormControl<WidgetShellAction['variant']>(seed?.variant || 'text', { nonNullable: true }),\n placement: new FormControl<WidgetShellAction['placement']>(seed?.placement || 'header', { nonNullable: true }),\n emit: new FormControl<string>(seed?.emit || '', { nonNullable: true }),\n tooltip: new FormControl<string>(seed?.tooltip || '', { nonNullable: true }),\n command: new FormControl<string>(seed?.command || '', { nonNullable: true }),\n payload: new FormControl<string>(seed?.payload != null ? JSON.stringify(seed.payload) : '', { nonNullable: true }),\n visible: new FormControl<boolean>(seed?.visible !== false, { nonNullable: true }),\n disabled: new FormControl<boolean>(!!seed?.disabled, { nonNullable: true }),\n });\n }\n\n private buildShell(): WidgetShellConfig | null {\n const raw = this.form.getRawValue();\n if (raw.kind === 'none') {\n return { kind: 'none' };\n }\n\n const shell: WidgetShellConfig = {};\n if (raw.preset) shell.preset = raw.preset;\n if (raw.title.trim()) shell.title = raw.title.trim();\n if (raw.subtitle.trim()) shell.subtitle = raw.subtitle.trim();\n if (raw.icon.trim()) shell.icon = raw.icon.trim();\n if (raw.showHeader !== 'auto') shell.showHeader = raw.showHeader === 'true';\n\n const windowActions: WidgetShellConfig['windowActions'] = {};\n if (!raw.collapsible) windowActions.collapsible = false;\n if (Object.keys(windowActions).length) shell.windowActions = windowActions;\n\n const actions = (raw.actions || [])\n .map((a) => this.normalizeAction(a))\n .filter((a) => a.id);\n if (actions.length) shell.actions = actions;\n\n const appearance = this.buildAppearance(raw);\n if (appearance) shell.appearance = appearance;\n\n return shell;\n }\n\n private buildResult(): ShellEditorResult {\n const raw = this.form.getRawValue();\n const shell = this.buildShell();\n const applyToAll = !!raw.applyToAll && !!raw.preset;\n return {\n shell,\n applyToAll,\n pagePreset: applyToAll ? raw.preset : undefined,\n };\n }\n\n private buildAppearance(raw: any): WidgetShellConfig['appearance'] | undefined {\n const card: NonNullable<WidgetShellConfig['appearance']>['card'] = {};\n const header: NonNullable<WidgetShellConfig['appearance']>['header'] = {};\n const body: NonNullable<WidgetShellConfig['appearance']>['body'] = {};\n const typography: NonNullable<WidgetShellConfig['appearance']>['typography'] = {};\n\n if (raw.cardBg) card.background = raw.cardBg.trim();\n if (raw.cardBorder) card.borderColor = raw.cardBorder.trim();\n if (raw.cardRadius) card.borderRadius = raw.cardRadius.trim();\n if (raw.cardShadow) card.shadow = raw.cardShadow.trim();\n\n if (raw.headerBg) header.background = raw.headerBg.trim();\n if (raw.headerBorder) header.borderColor = raw.headerBorder.trim();\n if (raw.titleColor) header.titleColor = raw.titleColor.trim();\n if (raw.subtitleColor) header.subtitleColor = raw.subtitleColor.trim();\n if (raw.iconColor) header.iconColor = raw.iconColor.trim();\n\n if (raw.bodyBg) body.background = raw.bodyBg.trim();\n if (raw.bodyColor) body.textColor = raw.bodyColor.trim();\n if (raw.bodyPadding) body.padding = raw.bodyPadding.trim();\n\n if (raw.titleSize) typography.titleSize = raw.titleSize.trim();\n if (raw.titleWeight) typography.titleWeight = raw.titleWeight.trim();\n if (raw.subtitleSize) typography.subtitleSize = raw.subtitleSize.trim();\n\n const appearance: WidgetShellConfig['appearance'] = {};\n if (Object.keys(card).length) appearance.card = card;\n if (Object.keys(header).length) appearance.header = header;\n if (Object.keys(body).length) appearance.body = body;\n if (Object.keys(typography).length) appearance.typography = typography;\n\n return Object.keys(appearance).length ? appearance : undefined;\n }\n\n previewVars(): Record<string, string | null> {\n const appearance = this.buildPreviewAppearance();\n return {\n '--pdx-shell-card-bg': appearance?.card?.background || null,\n '--pdx-shell-card-border': appearance?.card?.borderColor || null,\n '--pdx-shell-card-radius': appearance?.card?.borderRadius || null,\n '--pdx-shell-card-shadow': appearance?.card?.shadow || null,\n '--pdx-shell-header-bg': appearance?.header?.background || null,\n '--pdx-shell-header-border': appearance?.header?.borderColor || null,\n '--pdx-shell-title-color': appearance?.header?.titleColor || null,\n '--pdx-shell-subtitle-color': appearance?.header?.subtitleColor || null,\n '--pdx-shell-icon-color': appearance?.header?.iconColor || null,\n '--pdx-shell-body-bg': appearance?.body?.background || null,\n '--pdx-shell-body-color': appearance?.body?.textColor || null,\n '--pdx-shell-body-padding': appearance?.body?.padding || null,\n '--pdx-shell-title-size': appearance?.typography?.titleSize || null,\n '--pdx-shell-title-weight': appearance?.typography?.titleWeight || null,\n '--pdx-shell-subtitle-size': appearance?.typography?.subtitleSize || null,\n };\n }\n\n previewShowHeader(): boolean {\n const raw = this.form.getRawValue();\n if (raw.kind === 'none') return false;\n if (raw.showHeader === 'true') return true;\n if (raw.showHeader === 'false') return false;\n return !!(raw.title || raw.subtitle || raw.icon);\n }\n\n previewTitle(): string {\n const title = this.form.controls.title.value.trim();\n return title || 'Titulo do card';\n }\n\n previewSubtitle(): string {\n const subtitle = this.form.controls.subtitle.value.trim();\n return subtitle || 'Subtitulo opcional';\n }\n\n private buildPreviewAppearance(): WidgetShellConfig['appearance'] | undefined {\n const raw = this.form.getRawValue();\n const presetId = raw.preset || this.pagePreset || '';\n const base = presetId ? this.presets[presetId] : undefined;\n const override = this.buildAppearance(raw);\n return this.mergeAppearance(base, override);\n }\n\n private mergeAppearance(\n base?: WidgetShellConfig['appearance'],\n override?: WidgetShellConfig['appearance'],\n ): WidgetShellConfig['appearance'] | undefined {\n if (!base && !override) return undefined;\n const out: WidgetShellConfig['appearance'] = {};\n const mergeSection = <T extends object>(key: keyof NonNullable<WidgetShellConfig['appearance']>) => {\n const a = (base && base[key]) || undefined;\n const b = (override && override[key]) || undefined;\n if (!a && !b) return;\n out[key] = { ...(a || {}), ...(b || {}) } as any;\n };\n mergeSection('card');\n mergeSection('header');\n mergeSection('body');\n mergeSection('typography');\n return out;\n }\n\n togglePreviewCollapse(): void {\n this.previewCollapsed = !this.previewCollapsed;\n }\n\n togglePreviewExpand(): void {\n this.previewExpanded = !this.previewExpanded;\n }\n\n previewHeaderActions(): WidgetShellAction[] {\n const actions = this.previewActions().filter((a) => (a.placement || 'header') === 'header');\n return actions.slice(0, 3);\n }\n\n previewOverflowCount(): number {\n const actions = this.previewActions().filter((a) => (a.placement || 'header') === 'header');\n return Math.max(0, actions.length - 3);\n }\n\n previewWindowActions(): WidgetShellAction[] {\n return this.previewActions().filter((a) => (a.placement || 'header') === 'window');\n }\n\n private normalizeAction(raw: any): WidgetShellAction {\n const action: WidgetShellAction = { id: String(raw.id || '').trim() };\n const label = String(raw.label || '').trim();\n const icon = String(raw.icon || '').trim();\n const emit = String(raw.emit || '').trim();\n const tooltip = String(raw.tooltip || '').trim();\n const command = String(raw.command || '').trim();\n if (label) action.label = label;\n if (icon) action.icon = icon;\n if (emit) action.emit = emit;\n if (tooltip) action.tooltip = tooltip;\n if (command) action.command = command;\n if (raw.variant && raw.variant !== 'text') action.variant = raw.variant;\n if (raw.placement && raw.placement !== 'header') action.placement = raw.placement;\n if (raw.visible === false) action.visible = false;\n if (raw.disabled === true) action.disabled = true;\n const payload = this.tryParsePayload(raw.payload);\n if (payload !== undefined) action.payload = payload;\n return action;\n }\n\n private tryParsePayload(raw: any): any {\n const value = String(raw || '').trim();\n if (!value) return undefined;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n }\n\n private snapshotValue(): string {\n try {\n return JSON.stringify(this.buildResult());\n } catch {\n return '';\n }\n }\n\n filteredAvailableActions(): AvailableShellAction[] {\n const query = this.actionQuery.value.trim().toLowerCase();\n const scopes = new Set<string>();\n if (this.showScopeShell) scopes.add('shell');\n if (this.showScopeAny) scopes.add('any');\n if (this.showScopeToolbar) scopes.add('toolbar');\n if (this.showScopeContext) scopes.add('context');\n return this.availableActions.filter((action) => {\n const scope = action.scope || 'any';\n if (!scopes.has(scope)) return false;\n if (!query) return true;\n const hay = [\n action.label,\n action.id,\n action.description,\n action.emit,\n action.command,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n return hay.includes(query);\n });\n }\n\n isActionSelected(action: AvailableShellAction): boolean {\n return this.findActionIndex(action) >= 0;\n }\n\n toggleAvailableAction(action: AvailableShellAction): void {\n const idx = this.findActionIndex(action);\n if (idx >= 0) {\n this.removeAction(idx);\n return;\n }\n this.addAction({\n id: action.id,\n label: action.label,\n icon: action.icon,\n emit: action.emit,\n command: action.command,\n payload: action.payloadExample,\n });\n }\n\n scopeLabel(scope?: string): string {\n const value = scope || 'any';\n if (value === 'shell') return 'Shell';\n if (value === 'toolbar') return 'Toolbar';\n if (value === 'context') return 'Context';\n return 'Any';\n }\n\n stringifyPayload(payload: any): string {\n if (payload === null) return 'null';\n if (payload === undefined) return 'undefined';\n if (typeof payload === 'string') return payload;\n try {\n return JSON.stringify(payload);\n } catch {\n return String(payload);\n }\n }\n\n displayInputPath(path: string): string {\n const trimmed = String(path || '').trim();\n if (!trimmed) return '';\n return trimmed.replace(/^inputs\\./, '');\n }\n\n extractActionInput(actionValue: any): string {\n const payload = this.tryParsePayload(actionValue?.payload);\n const input = typeof payload?.input === 'string' ? payload.input.trim() : '';\n return input;\n }\n\n showActionInputPath(actionValue: any): boolean {\n const command = String(actionValue?.command || '').trim();\n if (command !== 'pdx:set-input') return false;\n return !!this.extractActionInput(actionValue);\n }\n\n currentSetInputValues(): SetInputValueOption[] {\n const preset = this.setInputPresets.find((p) => p.input === this.setInputTarget.value);\n return preset?.values || [];\n }\n\n addSetInputAction(): void {\n const preset = this.setInputPresets.find((p) => p.input === this.setInputTarget.value);\n if (!preset) return;\n const selected = this.currentSetInputValues().find((v) => v.value === this.setInputValue.value);\n if (!selected) return;\n const label = `${preset.label}: ${selected.label}`;\n const payload = { input: preset.input, value: selected.value };\n this.addAction({\n id: `set-${preset.input}-${String(selected.value)}`,\n label,\n icon: selected.icon || preset.icon,\n command: 'pdx:set-input',\n payload,\n variant: 'text',\n placement: 'header',\n });\n }\n\n private findActionIndex(action: AvailableShellAction): number {\n const values = this.actions.getRawValue();\n return values.findIndex((a) => {\n if (a.id !== action.id) return false;\n if (action.command && a.command) return a.command === action.command;\n if (action.emit && a.emit) return a.emit === action.emit;\n return true;\n });\n }\n\n private previewActions(): WidgetShellAction[] {\n return (this.actions.getRawValue() || [])\n .map((a) => this.normalizeAction(a))\n .filter((a) => a.id && a.visible !== false);\n }\n\n private loadSetInputPresets(widgetType: string | null): void {\n if (!widgetType) {\n this.setInputPresets = [];\n return;\n }\n this.setInputPresets = SET_INPUT_PRESETS[widgetType] || [];\n const first = this.setInputPresets[0];\n if (first) {\n this.setInputTarget.setValue(first.input, { emitEvent: false });\n const firstValue = first.values[0];\n if (firstValue) this.setInputValue.setValue(firstValue.value, { emitEvent: false });\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, Optional } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SETTINGS_PANEL_DATA, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { WidgetPageDefinition, WidgetPageLayout, WidgetPageOrientation, WidgetShellConfig } from '@praxisui/core';\n\ntype DynamicPageEditorInputs = {\n page?: WidgetPageDefinition | null; // Full page definition\n layout?: WidgetPageLayout | null;\n presets?: Record<string, WidgetShellConfig['appearance']> | null;\n pagePreset?: string | null;\n};\n\n// We extend the result to optionally include the full page if edited via JSON\ntype DynamicPageEditorResult = {\n layout: WidgetPageLayout | null;\n pagePreset: string;\n fullPage?: WidgetPageDefinition;\n};\n\nconst BUILTIN_PRESET_OPTIONS: Array<{ id: string; label: string }> = [\n { id: 'dark-glass', label: 'Dark Glass' },\n { id: 'light-neutral', label: 'Light Neutral' },\n { id: 'graphite', label: 'Graphite' },\n];\n\n@Component({\n selector: 'praxis-dynamic-page-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatIconModule,\n MatTabsModule\n ],\n template: `\n <div class=\"page-config\">\n <div class=\"page-head\">\n <div class=\"page-title\">Configurações da Página</div>\n <button\n mat-icon-button\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use os botões do painel para aplicar ou salvar.'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n <span class=\"spacer\"></span>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n <mat-tab-group\n animationDuration=\"0ms\"\n class=\"config-tabs\"\n (selectedIndexChange)=\"onTabChange($event)\"\n >\n <mat-tab label=\"Layout\">\n <div class=\"tab-content\">\n <div class=\"page-section\">Layout</div>\n <form class=\"page-form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Preset da página</mat-label>\n <mat-select [formControl]=\"form.controls.pagePreset\">\n <mat-option value=\"\">Sem preset</mat-option>\n <mat-option *ngFor=\"let p of presetOptions\" [value]=\"p.id\">{{ p.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Orientação</mat-label>\n <mat-select [formControl]=\"form.controls.orientation\">\n <mat-option value=\"vertical\">Vertical</mat-option>\n <mat-option value=\"columns\">Colunas</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.columns\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap</mat-label>\n <input matInput [formControl]=\"form.controls.gap\" placeholder=\"ex: 16px\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>SM (>= 640px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpSm\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>MD (>= 960px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpMd\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>LG (>= 1280px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpLg\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>XL (>= 1536px)</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.bpXl\" />\n </mat-form-field>\n </form>\n </div>\n </mat-tab>\n \n <mat-tab label=\"JSON (Avançado)\">\n <div class=\"tab-content\">\n <div class=\"json-editor-container\">\n <div class=\"json-toolbar\">\n <button mat-button (click)=\"formatJson()\" [disabled]=\"!jsonControl.valid\" type=\"button\">\n <mat-icon>format_align_left</mat-icon> Formatar\n </button>\n <span class=\"spacer\"></span>\n <span class=\"validation-status\" [class.valid]=\"jsonControl.valid\" [class.invalid]=\"jsonControl.invalid\">\n {{ jsonControl.valid ? 'JSON Válido' : 'JSON Inválido' }}\n </span>\n </div>\n \n <div class=\"json-editor-wrapper\">\n <textarea\n [formControl]=\"jsonControl\"\n spellcheck=\"false\"\n placeholder=\"Cole aqui a configuração completa da página...\"\n ></textarea>\n </div>\n \n <div class=\"json-error\" *ngIf=\"jsonControl.errors?.['invalidJson']\">\n Erro de sintaxe JSON\n </div>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .page-config {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n height: 100%;\n box-sizing: border-box;\n }\n .page-head {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .help-icon-button mat-icon { font-size: 18px; width: 18px; height: 18px; }\n .page-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .page-section {\n font-weight: 600;\n margin-top: 8px;\n }\n .page-form {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n }\n .page-config .mat-mdc-form-field {\n width: 100%;\n }\n \n .config-tabs {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n ::ng-deep .config-tabs .mat-mdc-tab-body-wrapper {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n ::ng-deep .mat-mdc-tab-body,\n ::ng-deep .mat-mdc-tab-body-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .tab-content {\n padding-top: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n height: 100%;\n box-sizing: border-box;\n overflow-y: auto;\n }\n \n .json-editor-container {\n display: flex;\n flex-direction: column;\n height: 100%; /* Ensure container takes full height of tab-content */\n flex: 1; /* Allow it to grow in flex parent */\n gap: 8px;\n overflow: hidden; /* Prevent double scrollbars */\n }\n .json-toolbar {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n }\n .json-editor-wrapper {\n flex: 1;\n width: 100%;\n height: 100%;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 4px;\n overflow: hidden;\n background-color: var(--md-sys-color-surface);\n }\n .json-editor-wrapper textarea {\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n resize: none;\n padding: 12px;\n box-sizing: border-box;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.4;\n background: transparent;\n color: var(--md-sys-color-on-surface);\n white-space: pre;\n }\n .json-editor-wrapper textarea:focus {\n background-color: var(--md-sys-color-surface-container-low);\n }\n .json-error {\n color: var(--md-sys-color-error);\n font-size: 12px;\n padding: 0 8px;\n flex-shrink: 0;\n }\n\n .validation-status {\n font-size: 12px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n }\n .validation-status.valid { color: var(--md-sys-color-primary); background: var(--md-sys-color-primary-container); }\n .validation-status.invalid { color: var(--md-sys-color-error); background: var(--md-sys-color-error-container); }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicPageConfigEditorComponent implements SettingsValueProvider {\n form = new FormGroup({\n pagePreset: new FormControl<string>('', { nonNullable: true }),\n orientation: new FormControl<WidgetPageOrientation>('vertical', { nonNullable: true }),\n columns: new FormControl<number>(2, { nonNullable: true, validators: [Validators.min(1)] }),\n gap: new FormControl<string>('16px', { nonNullable: true }),\n bpSm: new FormControl<number>(1, { nonNullable: true, validators: [Validators.min(1)] }),\n bpMd: new FormControl<number>(2, { nonNullable: true, validators: [Validators.min(1)] }),\n bpLg: new FormControl<number>(3, { nonNullable: true, validators: [Validators.min(1)] }),\n bpXl: new FormControl<number>(3, { nonNullable: true, validators: [Validators.min(1)] }),\n });\n\n jsonControl = new FormControl<string>('', {\n nonNullable: true,\n validators: [(control) => {\n try {\n JSON.parse(control.value);\n return null;\n } catch {\n return { invalidJson: true };\n }\n }]\n });\n\n private readonly initialLayout = new BehaviorSubject<WidgetPageLayout | null>(null);\n private readonly dirtySubject = new BehaviorSubject<boolean>(false);\n private readonly validSubject = new BehaviorSubject<boolean>(true);\n private readonly busySubject = new BehaviorSubject<boolean>(false);\n\n isDirty$ = this.dirtySubject.asObservable();\n isValid$ = this.validSubject.asObservable();\n isBusy$ = this.busySubject.asObservable();\n\n private snapshot = '';\n presetOptions: Array<{ id: string; label: string }> = [...BUILTIN_PRESET_OPTIONS];\n private pagePreset = '';\n private currentFullConfig: WidgetPageDefinition = { widgets: [] };\n private activeTab = 0; // 0 = Layout, 1 = JSON\n\n constructor(@Optional() @Inject(SETTINGS_PANEL_DATA) data?: DynamicPageEditorInputs | null) {\n const layout = data?.layout || null;\n const customPresets = data?.presets || {};\n const customOptions = Object.keys(customPresets).map((id) => ({ id, label: this.formatPresetLabel(id) }));\n this.presetOptions = [...BUILTIN_PRESET_OPTIONS, ...customOptions];\n this.pagePreset = data?.pagePreset || '';\n \n // Initialize full config from input if available, or build a skeleton\n if (data?.page) {\n this.currentFullConfig = JSON.parse(JSON.stringify(data.page));\n } else {\n // Fallback: construct from partial layout\n this.currentFullConfig = {\n widgets: [],\n layout: layout || undefined,\n context: { ui: { shell: { preset: this.pagePreset } } }\n };\n }\n\n this.initialLayout.next(layout);\n this.applyLayoutToForm(layout, this.pagePreset);\n this.syncJsonFromState(); // Init JSON text\n\n // Form -> State Sync\n this.form.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this.activeTab === 0) {\n this.updateStateFromForm();\n }\n this.updateValidity();\n });\n\n this.form.controls.orientation.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((value) => {\n this.toggleGridControls(value);\n });\n \n // JSON -> State Sync (debounced by user typing speed naturally, but logic runs on change)\n this.jsonControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n if (this.activeTab === 1 && this.jsonControl.valid) {\n try {\n const parsed = JSON.parse(this.jsonControl.value);\n this.currentFullConfig = parsed;\n // We also need to update the Form to reflect JSON changes so if user switches back, it's consistent\n this.applyLayoutToForm(parsed.layout || null, this.extractPreset(parsed));\n } catch {}\n }\n this.updateValidity();\n });\n }\n \n onTabChange(index: number): void {\n this.activeTab = index;\n if (index === 0) {\n // Switching to Layout: Form is already updated via subscription, but ensure consistency\n this.applyLayoutToForm(this.currentFullConfig.layout || null, this.extractPreset(this.currentFullConfig));\n } else {\n // Switching to JSON: Update text from current state\n this.syncJsonFromState();\n }\n }\n\n getSettingsValue(): DynamicPageEditorResult {\n // If we are in JSON tab, currentFullConfig is the source of truth\n // If in Layout tab, form -> currentFullConfig has already happened\n const layout = this.currentFullConfig.layout || null;\n const pagePreset = this.extractPreset(this.currentFullConfig);\n \n return { \n layout, \n pagePreset,\n fullPage: this.currentFullConfig \n };\n }\n \n formatJson(): void {\n if (this.jsonControl.valid) {\n try {\n const parsed = JSON.parse(this.jsonControl.value);\n this.jsonControl.setValue(JSON.stringify(parsed, null, 2));\n } catch {}\n }\n }\n\n onSave(): DynamicPageEditorResult {\n return this.getSettingsValue();\n }\n\n reset(): void {\n const layout = this.initialLayout.value;\n this.currentFullConfig.layout = layout || undefined;\n this.applyLayoutToForm(layout, this.pagePreset);\n this.syncJsonFromState();\n this.snapshot = this.snapshotValue();\n this.dirtySubject.next(false);\n }\n\n private updateValidity(): void {\n const isValid = this.activeTab === 0 ? this.form.valid : this.jsonControl.valid;\n this.validSubject.next(isValid);\n \n const current = this.snapshotValue();\n this.dirtySubject.next(current !== this.snapshot);\n }\n\n private updateStateFromForm(): void {\n const orientation = this.form.controls.orientation.value;\n const columns = Number(this.form.controls.columns.value);\n const gap = (this.form.controls.gap.value || '').trim();\n const pagePreset = (this.form.controls.pagePreset.value || '').trim();\n \n const layout: WidgetPageLayout = {\n orientation,\n gap: gap || undefined,\n };\n if (orientation === 'columns') {\n layout.columns = Math.max(1, Number.isFinite(columns) ? columns : 2);\n layout.breakpoints = {\n sm: Math.max(1, Number(this.form.controls.bpSm.value)),\n md: Math.max(1, Number(this.form.controls.bpMd.value)),\n lg: Math.max(1, Number(this.form.controls.bpLg.value)),\n xl: Math.max(1, Number(this.form.controls.bpXl.value)),\n };\n }\n \n // Update internal state\n this.currentFullConfig.layout = layout;\n \n // Update preset in context\n if (!this.currentFullConfig.context) this.currentFullConfig.context = {};\n if (!this.currentFullConfig.context.ui) this.currentFullConfig.context.ui = {};\n if (!this.currentFullConfig.context.ui.shell) this.currentFullConfig.context.ui.shell = {};\n \n if (pagePreset) {\n this.currentFullConfig.context.ui.shell.preset = pagePreset;\n } else {\n delete this.currentFullConfig.context.ui.shell.preset;\n }\n }\n\n private applyLayoutToForm(layout: WidgetPageLayout | null, preset: string): void {\n const orientation = layout?.orientation || 'vertical';\n const columns = layout?.columns ?? 2;\n const gap = layout?.gap || '16px';\n const defaults = {\n sm: 1,\n md: Math.min(2, columns),\n lg: Math.min(3, columns),\n xl: columns,\n };\n const bp = layout?.breakpoints || {};\n const presetValue = (preset || '').trim();\n const allowed = new Set(this.presetOptions.map((p) => p.id));\n \n this.form.patchValue({\n orientation,\n columns,\n gap,\n bpSm: bp.sm ?? defaults.sm,\n bpMd: bp.md ?? defaults.md,\n bpLg: bp.lg ?? defaults.lg,\n bpXl: bp.xl ?? defaults.xl,\n pagePreset: presetValue && allowed.has(presetValue) ? presetValue : ''\n }, { emitEvent: false }); // Do not trigger updateStateFromForm to avoid loops\n\n this.toggleGridControls(orientation);\n \n // Update snapshot on first load or reset\n if (!this.snapshot) {\n this.snapshot = this.snapshotValue();\n }\n }\n \n private toggleGridControls(orientation: string): void {\n if (orientation === 'vertical') {\n this.form.controls.columns.disable({ emitEvent: false });\n this.form.controls.bpSm.disable({ emitEvent: false });\n this.form.controls.bpMd.disable({ emitEvent: false });\n this.form.controls.bpLg.disable({ emitEvent: false });\n this.form.controls.bpXl.disable({ emitEvent: false });\n } else {\n this.form.controls.columns.enable({ emitEvent: false });\n this.form.controls.bpSm.enable({ emitEvent: false });\n this.form.controls.bpMd.enable({ emitEvent: false });\n this.form.controls.bpLg.enable({ emitEvent: false });\n this.form.controls.bpXl.enable({ emitEvent: false });\n }\n }\n \n private syncJsonFromState(): void {\n const json = JSON.stringify(this.currentFullConfig, null, 2);\n this.jsonControl.setValue(json, { emitEvent: false });\n }\n\n private extractPreset(page: WidgetPageDefinition): string {\n return (page.context as any)?.ui?.shell?.preset || '';\n }\n\n private snapshotValue(): string {\n return JSON.stringify(this.getSettingsValue());\n }\n\n private formatPresetLabel(id: string): string {\n return id\n .replace(/[_-]+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n }\n}\n","/**\n * Capabilities catalog for Dynamic Gridster Page (GridPageDefinition + inputs).\n */\n\nimport type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n AiValueKind,\n} from '@praxisui/core';\n\ndeclare module '@praxisui/core' {\n interface AiCapabilityCategoryMap {\n page: true;\n widgets: true;\n connections: true;\n context: true;\n state: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nexport const PAGE_BUILDER_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.0',\n enums: {},\n targets: [\n 'page-builder',\n 'layout-renderer',\n 'dynamic-page',\n 'praxis-dynamic-page',\n 'praxis-dynamic-grid-page',\n 'praxis-dynamic-gridster-page',\n ],\n notes: [\n 'page segue o modelo GridPageDefinition (widgets, connections, options, context e state opcional).',\n 'pageIdentity identifica o escopo de persistência e não pertence ao objeto page.',\n ],\n capabilities: [\n // --- Component inputs ---\n { path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página (GridPageDefinition).' },\n { path: 'context', category: 'context', valueKind: 'object', description: 'Contexto extra mesclado ao page.context.' },\n { path: 'enableCustomization', category: 'behavior', valueKind: 'boolean', description: 'Habilita modo de edicao.' },\n { path: 'showSettingsButton', category: 'behavior', valueKind: 'boolean', description: 'Exibe botao de settings.' },\n { path: 'strictValidation', category: 'behavior', valueKind: 'boolean', description: 'Validação estrita do widget loader.' },\n { path: 'gridsterOptions', category: 'layout', valueKind: 'object', description: 'Opcoes do Gridster (Partial<GridsterConfig>).', safetyNotes: 'Objeto amplo; revisar com a doc do Gridster.' },\n { path: 'pageIdentity', category: 'identity', valueKind: 'object', description: 'Identidade de persistência da página.' },\n { path: 'pageIdentity.appId', category: 'identity', valueKind: 'string', description: 'App id (opcional).' },\n { path: 'pageIdentity.tenantId', category: 'identity', valueKind: 'string', description: 'Tenant id.' },\n { path: 'pageIdentity.userId', category: 'identity', valueKind: 'string', description: 'User id.' },\n { path: 'pageIdentity.routePath', category: 'identity', valueKind: 'string', description: 'Rota base da página.' },\n { path: 'pageIdentity.locale', category: 'identity', valueKind: 'string', description: 'Locale.' },\n\n // --- Page options ---\n { path: 'page.options', category: 'layout', valueKind: 'object', description: 'Opções do grid (cols/rowHeight/gap).' },\n { path: 'page.options.cols', category: 'layout', valueKind: 'number', description: 'Numero de colunas do grid.' },\n { path: 'page.options.rowHeight', category: 'layout', valueKind: 'number', description: 'Altura das linhas (px).' },\n { path: 'page.options.gap', category: 'layout', valueKind: 'number', description: 'Espacamento entre widgets (px).' },\n\n // --- Page state ---\n { path: 'page.state', category: 'state', valueKind: 'object', description: 'Estado declarativo opcional da pagina.' },\n { path: 'page.state.values', category: 'state', valueKind: 'object', description: 'Valores primarios persistiveis do estado da pagina.' },\n { path: 'page.state.schema', category: 'state', valueKind: 'object', description: 'Descritores dos paths de estado primario.' },\n { path: 'page.state.derived', category: 'state', valueKind: 'object', description: 'Descritores de estado derivado recomputado pelo runtime.' },\n\n // --- Widgets ---\n { path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Widgets da página.' },\n { path: 'page.widgets[].key', category: 'widgets', valueKind: 'string', description: 'ID unico do widget.', critical: true },\n { path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS do widget.' },\n { path: 'page.widgets[].layout', category: 'layout', valueKind: 'object', description: 'Layout do widget.' },\n { path: 'page.widgets[].layout.col', category: 'layout', valueKind: 'number', description: 'Coluna inicial (1-based).' },\n { path: 'page.widgets[].layout.colSpan', category: 'layout', valueKind: 'number', description: 'Colunas ocupadas.' },\n { path: 'page.widgets[].layout.row', category: 'layout', valueKind: 'number', description: 'Linha inicial (1-based).' },\n { path: 'page.widgets[].layout.rowSpan', category: 'layout', valueKind: 'number', description: 'Linhas ocupadas.' },\n { path: 'page.widgets[].definition', category: 'widgets', valueKind: 'object', description: 'Definicao do widget (WidgetDefinition).' },\n { path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente registrado.' },\n { path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs do componente.' },\n { path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de aplicação dos inputs.' },\n\n // --- Connections ---\n { path: 'page.connections', category: 'connections', valueKind: 'array', description: 'Conexões entre widgets.' },\n { path: 'page.connections[].from', category: 'connections', valueKind: 'object', description: 'Origem da conexão.' },\n { path: 'page.connections[].from.widget', category: 'connections', valueKind: 'string', description: 'Widget origem (key).' },\n { path: 'page.connections[].from.output', category: 'connections', valueKind: 'string', description: 'Output do widget origem.' },\n { path: 'page.connections[].from.state', category: 'connections', valueKind: 'string', description: 'Path de state origem quando a conexao parte do estado da pagina.' },\n { path: 'page.connections[].to', category: 'connections', valueKind: 'object', description: 'Destino da conexão.' },\n { path: 'page.connections[].to.widget', category: 'connections', valueKind: 'string', description: 'Widget destino (key).' },\n { path: 'page.connections[].to.input', category: 'connections', valueKind: 'string', description: 'Input destino (path).' },\n { path: 'page.connections[].to.bindingOrder', category: 'connections', valueKind: 'array', description: 'Ordem de aplicação dos inputs.' },\n { path: 'page.connections[].to.state', category: 'connections', valueKind: 'string', description: 'Path de state destino quando a conexao escreve no estado da pagina.' },\n { path: 'page.connections[].map', category: 'connections', valueKind: 'expression', description: 'Mapeamento do payload.' },\n { path: 'page.connections[].set', category: 'connections', valueKind: 'object', description: 'Overrides fixos aplicados ao destino.' },\n { path: 'page.connections[].meta', category: 'connections', valueKind: 'object', description: 'Metadados opcionais para operadores de runtime.' },\n { path: 'page.connections[].meta.filterExpr', category: 'connections', valueKind: 'expression', description: 'Expressão de filtro para eventos.' },\n { path: 'page.connections[].meta.debounceMs', category: 'connections', valueKind: 'number', description: 'Debounce em milissegundos.' },\n { path: 'page.connections[].meta.distinct', category: 'connections', valueKind: 'boolean', description: 'Emite apenas quando valor mudar.' },\n { path: 'page.connections[].meta.distinctBy', category: 'connections', valueKind: 'expression', description: 'Chave para comparação distinct.' },\n\n // --- Page context ---\n { path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto da página (compartilhado por widgets).' },\n ],\n};\n","import type {\n AiCapability,\n AiCapabilityCatalog,\n AiCapabilityCategory,\n} from '@praxisui/core';\nimport type { GridWidgetInstance } from '@praxisui/core';\nimport { PageBuilderConfig } from './page-builder-ai.adapter';\n\nimport { PAGE_BUILDER_AI_CAPABILITIES } from './page-builder-ai-capabilities';\n\n\nconst WIDGET_CAPABILITY_CATALOGS = new Map<string, AiCapabilityCatalog>();\n\nexport function registerWidgetAiCatalog(widgetId: string, catalog: AiCapabilityCatalog): void {\n WIDGET_CAPABILITY_CATALOGS.set(widgetId, catalog);\n catalogCache = null;\n}\n\nexport function registerWidgetAiCatalogs(entries: Record<string, AiCapabilityCatalog>): void {\n Object.entries(entries).forEach(([id, catalog]) => registerWidgetAiCatalog(id, catalog));\n}\n\nexport function clearWidgetAiCatalogs(): void {\n WIDGET_CAPABILITY_CATALOGS.clear();\n catalogCache = null;\n}\n\n/**\n * Retrieves the CapabilityCatalog for a given widget ID.\n */\nexport function getWidgetAiCapabilities(widgetId: string): AiCapabilityCatalog | undefined {\n return WIDGET_CAPABILITY_CATALOGS.get(widgetId);\n}\n\ninterface CacheEntry {\n key: string;\n catalog: AiCapabilityCatalog;\n timestamp: number;\n}\n\nlet catalogCache: CacheEntry | null = null;\nconst CACHE_TTL_MS = 60000; // 1 minute TTL\n\n/**\n * Aggregates macro page builder capabilities with specific micro capabilities\n * of the widgets present in the page configuration.\n */\nexport function getPageAiCatalog(pageConfig?: PageBuilderConfig): AiCapabilityCatalog {\n const usedWidgetIds = getUniqueWidgetIds(pageConfig);\n const cacheKey = generateCacheKey(usedWidgetIds);\n\n if (catalogCache && catalogCache.key === cacheKey && (Date.now() - catalogCache.timestamp < CACHE_TTL_MS)) {\n return catalogCache.catalog;\n }\n\n // Start with a clone of the macro catalog\n const macro = PAGE_BUILDER_AI_CAPABILITIES as unknown as AiCapabilityCatalog;\n const result: AiCapabilityCatalog = {\n version: macro.version,\n capabilities: [], // Rebuild to ensure order and dedupe\n notes: [...(macro.notes || [])],\n enums: { ...macro.enums },\n targets: [...(macro.targets || [])],\n };\n\n const capabilityMap = new Map<string, AiCapability>();\n\n // Helper to process and add capabilities, with path prefixing for widget inputs\n const processAndAdd = (\n catalog: AiCapabilityCatalog,\n prefixPath: string | null,\n isMacro: boolean = false\n ) => {\n if (!catalog.capabilities) return;\n\n catalog.capabilities.forEach((cap) => {\n // Hardening: Basic validation\n if (!cap.path || !cap.category || !cap.valueKind) {\n console.warn('[PageBuilderAiCatalog] Invalid capability dropped:', cap);\n return;\n }\n\n // Normalize Path: prefix micro capabilities for widget inputs\n let finalPath = cap.path;\n if (prefixPath && !cap.path.startsWith('page.widgets')) { // Avoid double-prefixing if already done\n finalPath = `${prefixPath}.${cap.path}`;\n } else if (!isMacro && !cap.path.startsWith('page')) { // Fallback for general micro capabilities that are not widget inputs\n finalPath = `page.${cap.path}`;\n }\n\n\n // Deduplication Key: category::path\n const key = `${cap.category}::${finalPath}`;\n\n // Add to Map (last one wins)\n capabilityMap.set(key, { ...cap, path: finalPath, category: cap.category as AiCapabilityCategory });\n });\n\n // Merge Enums\n if (catalog.enums) {\n Object.entries(catalog.enums).forEach(([key, values]) => {\n if (!result.enums[key]) {\n result.enums[key] = values;\n } else {\n const existing = new Set(result.enums[key]);\n values.forEach(v => existing.add(v));\n result.enums[key] = Array.from(existing) as any;\n }\n });\n }\n\n // Merge Notes\n if (catalog.notes) {\n catalog.notes.forEach((note) => {\n if (!result.notes.includes(note)) {\n result.notes.push(note);\n }\n });\n }\n\n // Merge Targets (Safe cast for micro catalogs that might use generic CapabilityCatalog)\n const targets = catalog.targets;\n if (targets) {\n if (!result.targets) result.targets = [];\n targets.forEach((target) => {\n if (!result.targets!.includes(target)) {\n result.targets!.push(target);\n }\n });\n }\n };\n\n // Add Macro Page Builder Capabilities\n processAndAdd(macro, null, true);\n\n // Add Specific Widget Capabilities\n usedWidgetIds.forEach((widgetId) => {\n const microCatalog = getWidgetAiCapabilities(widgetId);\n if (microCatalog) {\n // Prefix for widget inputs: page.widgets[].definition.inputs.<capability.path>\n const prefix = `page.widgets[].definition.inputs`;\n processAndAdd(microCatalog, prefix);\n }\n });\n\n // Finalize Capabilities (Sort for determinism)\n result.capabilities = Array.from(capabilityMap.values()).sort((a, b) => {\n const catCompare = (a.category as string).localeCompare(b.category as string);\n if (catCompare !== 0) return catCompare;\n return a.path.localeCompare(b.path);\n });\n\n // Update Cache\n catalogCache = {\n key: cacheKey,\n catalog: result,\n timestamp: Date.now(),\n };\n\n return result;\n}\n\nfunction getUniqueWidgetIds(pageConfig?: PageBuilderConfig): Set<string> {\n const ids = new Set<string>();\n if (pageConfig?.page?.widgets) {\n pageConfig.page.widgets.forEach((widget: GridWidgetInstance) => {\n if (widget.definition?.id) {\n ids.add(widget.definition.id);\n }\n });\n }\n return ids;\n}\n\nfunction generateCacheKey(ids: Set<string>): string {\n const sortedIds = Array.from(ids).sort().join(',');\n return `v1:${sortedIds}`;\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AiCapabilityCatalog } from '@praxisui/core';\n\nexport const PAGE_BUILDER_WIDGET_AI_CATALOGS =\n new InjectionToken<Record<string, AiCapabilityCatalog>>('PAGE_BUILDER_WIDGET_AI_CATALOGS');\n","import { ENVIRONMENT_INITIALIZER, Optional, Provider } from '@angular/core';\nimport type { AiCapabilityCatalog } from '@praxisui/core';\nimport { registerWidgetAiCatalogs } from './page-builder-ai-catalog';\nimport { PAGE_BUILDER_WIDGET_AI_CATALOGS } from './page-builder-ai-catalog.tokens';\n\nexport function providePageBuilderWidgetAiCatalogs(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (catalogs?: Record<string, AiCapabilityCatalog>) => () => {\n if (catalogs && Object.keys(catalogs).length > 0) {\n registerWidgetAiCatalogs(catalogs);\n }\n },\n deps: [[new Optional(), PAGE_BUILDER_WIDGET_AI_CATALOGS]],\n } as Provider;\n}\n","export interface Point { x: number; y: number }\nexport interface Rect { x: number; y: number; width: number; height: number }\n\n/**\n * Simple elbow router (L-shape): horizontal then vertical.\n * Produces an SVG path string.\n */\nexport function routeElbow(from: Point, to: Point): string {\n const midX = (from.x + to.x) / 2;\n const p = [\n `M ${from.x} ${from.y}`,\n `L ${midX} ${from.y}`,\n `L ${midX} ${to.y}`,\n `L ${to.x} ${to.y}`,\n ];\n return p.join(' ');\n}\n\n/** Straight line path */\nexport function routeStraight(from: Point, to: Point): string {\n return `M ${from.x} ${from.y} L ${to.x} ${to.y}`;\n}\n\n/** Simple cubic bezier: horizontal tangents from endpoints */\nexport function routeBezier(from: Point, to: Point): string {\n const dx = (to.x - from.x) * 0.5;\n const c1 = { x: from.x + dx, y: from.y };\n const c2 = { x: to.x - dx, y: to.y };\n return `M ${from.x} ${from.y} C ${c1.x} ${c1.y}, ${c2.x} ${c2.y}, ${to.x} ${to.y}`;\n}\n\n/** Basic geometry helpers for auto-routing */\nfunction rectContains(r: Rect, p: Point): boolean {\n return p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height;\n}\nfunction segmentsIntersect(p1: Point, p2: Point, p3: Point, p4: Point): boolean {\n // cross product approach\n const d = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);\n if (d === 0) return false;\n const ua = ((p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x)) / d;\n const ub = ((p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x)) / d;\n return ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1;\n}\nfunction lineIntersectsRect(p1: Point, p2: Point, r: Rect): boolean {\n if (rectContains(r, p1) || rectContains(r, p2)) return true;\n const tl = { x: r.x, y: r.y };\n const tr = { x: r.x + r.width, y: r.y };\n const bl = { x: r.x, y: r.y + r.height };\n const br = { x: r.x + r.width, y: r.y + r.height };\n return (\n segmentsIntersect(p1, p2, tl, tr) ||\n segmentsIntersect(p1, p2, tr, br) ||\n segmentsIntersect(p1, p2, br, bl) ||\n segmentsIntersect(p1, p2, bl, tl)\n );\n}\n\n/**\n * Auto router: choose straight/bezier if clear, else elbow to avoid boxes.\n * Obstacles are rectangles in world space. Optional padding inflates obstacles.\n */\nexport function routeAuto(from: Point, to: Point, obstacles: Rect[] = [], padding = 6): string {\n const inflated = obstacles.map(r => ({ x: r.x - padding, y: r.y - padding, width: r.width + padding*2, height: r.height + padding*2 }));\n const intersects = inflated.some(r => lineIntersectsRect(from, to, r));\n if (intersects) return routeElbow(from, to);\n // prefer bezier for aesthetics when unobstructed\n return routeBezier(from, to);\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core';\n\nexport interface DragStartEvent { from: { nodeId: string; portId: string }; x: number; y: number }\nexport interface DragMoveEvent { x: number; y: number }\nexport interface DragEndEvent { x: number; y: number; endEvent: MouseEvent }\n\n@Directive({\n selector: '[dragConnect]'\n})\nexport class DragConnectDirective implements OnDestroy {\n @Input('dragConnect') from!: { nodeId: string; portId: string };\n @Output() connectDragStart = new EventEmitter<DragStartEvent>();\n @Output() connectDragMove = new EventEmitter<DragMoveEvent>();\n @Output() connectDragEnd = new EventEmitter<DragEndEvent>();\n\n private active = false;\n private onMove = (e: MouseEvent) => this.handleMove(e);\n private onUp = (e: MouseEvent) => this.handleUp(e);\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n @HostListener('mousedown', ['$event'])\n onMouseDown(ev: MouseEvent): void {\n if (!this.from) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.active = true;\n const rect = (this.el.nativeElement as HTMLElement).getBoundingClientRect();\n const x = rect.left + rect.width / 2;\n const y = rect.top + rect.height / 2;\n try { console.debug('[DragConnect] mousedown start', { from: this.from, x, y, target: (ev.target as HTMLElement)?.tagName }); } catch {}\n this.connectDragStart.emit({ from: this.from, x, y });\n document.addEventListener('mousemove', this.onMove);\n document.addEventListener('mouseup', this.onUp, { once: true });\n }\n\n private handleMove(e: MouseEvent): void {\n if (!this.active) return;\n try { console.debug('[DragConnect] mousemove', { x: e.clientX, y: e.clientY }); } catch {}\n this.connectDragMove.emit({ x: e.clientX, y: e.clientY });\n }\n\n private handleUp(e: MouseEvent): void {\n if (!this.active) return;\n this.active = false;\n document.removeEventListener('mousemove', this.onMove);\n try { console.debug('[DragConnect] mouseup end', { x: e.clientX, y: e.clientY, target: (e.target as HTMLElement)?.tagName, classes: (e.target as HTMLElement)?.className }); } catch {}\n this.connectDragEnd.emit({ x: e.clientX, y: e.clientY, endEvent: e });\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('mousemove', this.onMove);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance, WidgetPageStateInput } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\nimport { GraphEdge, GraphNode, GraphPort } from './graph-types';\n\ntype StatefulGridPageDefinition = GridPageDefinition & {\n state?: WidgetPageStateInput;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class GraphMapperService {\n constructor(private registry: ComponentMetadataRegistry) {}\n\n private isWidgetSource(from: WidgetConnection['from']): from is Extract<WidgetConnection['from'], { widget: string }> {\n return 'widget' in from;\n }\n\n private isWidgetTarget(to: WidgetConnection['to']): to is Extract<WidgetConnection['to'], { widget: string }> {\n return 'widget' in to;\n }\n\n /** Build nodes and edges for a given page definition and widgets. */\n mapToGraph(page: StatefulGridPageDefinition | undefined, widgets: GridWidgetInstance[]): { nodes: GraphNode[]; edges: GraphEdge[] } {\n const nodes: GraphNode[] = [];\n const nodeById = new Map<string, GraphNode>();\n const tabsCfgByKey = new Map<string, any>();\n const edges: GraphEdge[] = [];\n\n // Layout: simple columns — sources left, targets right\n const colWidth = 240;\n const rowHeight = 96;\n const gap = 28;\n\n let leftY = 0;\n let rightY = 0;\n const stateNodeIds = new Map<string, string>();\n\n // First pass: create a node per widget\n for (const w of widgets) {\n const meta = this.registry.get(w.definition.id);\n const metaOutputs = new Map<string, { label?: string; description?: string }>();\n for (const o of meta?.outputs || []) metaOutputs.set(o.name, { label: o.label, description: o.description });\n const outputs = new Set<string>([(meta?.outputs || []).map((o) => o.name)].flat() as string[]);\n if (w.definition.id === 'praxis-tabs') outputs.add('widgetEvent');\n if (w.definition.id === 'praxis-stepper') outputs.add('widgetEvent');\n\n const metaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of meta?.inputs || []) metaInputs.set(i.name, { label: i.label, description: i.description });\n // Show both instance-defined inputs and metadata-declared inputs (e.g., resourceId)\n const inputNames = Array.from(new Set<string>([\n ...Object.keys(w.definition.inputs || {}),\n ...((meta?.inputs || []).map((m) => m.name) as string[]),\n ]));\n const inputPorts: GraphPort[] = inputNames.map((name, i) => ({\n id: `in:${name}`,\n label: metaInputs.get(name)?.label || name,\n description: metaInputs.get(name)?.description,\n kind: 'input',\n anchor: { x: colWidth, y: 24 + i * 22 },\n }));\n // Generic port for new inputs\n inputPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', anchor: { x: colWidth, y: 24 + inputNames.length * 22 } });\n\n const outputPorts: GraphPort[] = Array.from(outputs.values()).map((name, i) => ({\n id: `out:${name}`,\n label: metaOutputs.get(name)?.label || name,\n description: metaOutputs.get(name)?.description,\n kind: 'output',\n anchor: { x: 0, y: 24 + i * 22 },\n }));\n\n const left = outputPorts.length > 0;\n const pos = left ? { x: gap, y: gap + leftY } : { x: colWidth + gap * 3, y: gap + rightY };\n const node: GraphNode = {\n id: w.key,\n label: meta?.friendlyName || w.definition.id || w.key,\n icon: meta?.icon,\n type: w.definition.id,\n parentId: null,\n collapsed: true,\n bounds: { x: pos.x, y: pos.y, width: colWidth, height: rowHeight },\n ports: [...outputPorts.map((p) => ({ ...p, anchor: { x: pos.x, y: pos.y + p.anchor.y } })), ...inputPorts.map((p) => ({ ...p, anchor: { x: pos.x + colWidth, y: pos.y + p.anchor.y } }))],\n };\n nodes.push(node);\n nodeById.set(node.id, node);\n if (left) leftY += rowHeight + gap; else rightY += rowHeight + gap;\n\n // Expand Tabs internals as child nodes (collapsed by default)\n if (w.definition.id === 'praxis-tabs') {\n const cfg = (w.definition as any)?.inputs?.config;\n tabsCfgByKey.set(w.key, cfg);\n // Group tabs\n const tabs = (cfg?.tabs || []) as Array<{ widgets?: any[] }>;\n for (let ti = 0; ti < tabs.length; ti++) {\n const inner = tabs[ti]?.widgets || [];\n for (let wi = 0; wi < inner.length; wi++) {\n const innerDef = inner[wi];\n const innerMeta = this.registry.get(innerDef?.id);\n const innerInputs = Object.keys(innerDef?.inputs || {});\n const innerMetaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of innerMeta?.inputs || []) innerMetaInputs.set(i.name, { label: i.label, description: i.description });\n const sectionLabel = cfg?.tabs?.[ti]?.textLabel as string | undefined;\n const containerTitle = sectionLabel ? `Aba: ${sectionLabel}` : `Aba ${ti + 1}`;\n const widgetLabel = innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`;\n const inPorts: GraphPort[] = innerInputs.map((name, ii) => {\n const path = `inputs.config.tabs[${ti}].widgets[${wi}].inputs.${name}`;\n const base = innerMetaInputs.get(name);\n const label = base?.label || name;\n const description = (base?.description ? base.description + '\\n' : '') + `${containerTitle} • ${widgetLabel} • ${name}\\n${path}`;\n return { id: `in:${name}`, label, description, kind: 'input', path, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (ti * 72) + ii * 18 } } as GraphPort;\n });\n if (!inPorts.length) inPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', path: `inputs.config.tabs[${ti}].widgets[${wi}].inputs.`, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (ti * 72) } });\n const child: GraphNode = {\n id: `${w.key}#group[${ti}]/${wi}`,\n label: innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`,\n icon: innerMeta?.icon,\n type: innerDef?.id || 'inner',\n parentId: w.key,\n collapsed: false,\n bounds: { x: node.bounds.x + 24, y: node.bounds.y + rowHeight + (ti * 72) + wi * 32, width: colWidth - 48, height: 48 },\n ports: inPorts,\n };\n nodes.push(child);\n nodeById.set(child.id, child);\n }\n }\n // Nav links\n const links = (cfg?.nav?.links || []) as Array<{ widgets?: any[] }>;\n for (let li = 0; li < links.length; li++) {\n const inner = links[li]?.widgets || [];\n for (let wi = 0; wi < inner.length; wi++) {\n const innerDef = inner[wi];\n const innerMeta = this.registry.get(innerDef?.id);\n const innerInputs = Object.keys(innerDef?.inputs || {});\n const innerMetaInputs = new Map<string, { label?: string; description?: string }>();\n for (const i of innerMeta?.inputs || []) innerMetaInputs.set(i.name, { label: i.label, description: i.description });\n const linkLabel = cfg?.nav?.links?.[li]?.label as string | undefined;\n const containerTitle = linkLabel ? `Link: ${linkLabel}` : `Link ${li + 1}`;\n const widgetLabel = innerMeta?.friendlyName || innerDef?.id || `widget ${wi}`;\n const inPorts: GraphPort[] = innerInputs.map((name, ii) => {\n const path = `inputs.config.nav.links[${li}].widgets[${wi}].inputs.${name}`;\n const base = innerMetaInputs.get(name);\n const label = base?.label || name;\n const description = (base?.description ? base.description + '\\n' : '') + `${containerTitle} • ${widgetLabel} • ${name}\\n${path}`;\n return { id: `in:${name}`, label, description, kind: 'input', path, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (li * 72) + ii * 18 } } as GraphPort;\n });\n if (!inPorts.length) inPorts.push({ id: 'in:*', label: 'novo input…', kind: 'input', path: `inputs.config.nav.links[${li}].widgets[${wi}].inputs.`, anchor: { x: node.bounds.x + colWidth, y: node.bounds.y + rowHeight + (li * 72) } });\n const child: GraphNode = {\n id: `${w.key}#nav[${li}]/${wi}`,\n label: innerMeta?.friendlyName || innerDef?.id || `link ${wi}`,\n icon: innerMeta?.icon,\n type: innerDef?.id || 'inner',\n parentId: w.key,\n collapsed: false,\n bounds: { x: node.bounds.x + 24, y: node.bounds.y + rowHeight + (li * 72) + wi * 32, width: colWidth - 48, height: 48 },\n ports: inPorts,\n };\n nodes.push(child);\n nodeById.set(child.id, child);\n }\n }\n }\n }\n\n // Second pass: map edges from page.connections\n const conns = (page?.connections || []) as WidgetConnection[];\n for (let i = 0; i < conns.length; i++) {\n const c = conns[i];\n const fromState = !this.isWidgetSource(c.from)\n ? this.ensureStateNode(stateNodeIds, nodeById, nodes, page, c.from.state, 'output', colWidth, gap, leftY)\n : null;\n const fromNodeId = this.isWidgetSource(c.from) ? c.from.widget : fromState!.nodeId;\n const fromPortId = this.isWidgetSource(c.from) ? `out:${c.from.output}` : 'out:state';\n const toState = !this.isWidgetTarget(c.to)\n ? this.ensureStateNode(stateNodeIds, nodeById, nodes, page, c.to.state, 'input', colWidth, gap, rightY)\n : null;\n let toNodeId = this.isWidgetTarget(c.to) ? c.to.widget : toState!.nodeId;\n let toPortId = this.isWidgetTarget(c.to) ? `in:${c.to.input}` : 'in:state';\n\n if (fromState?.created) leftY += rowHeight + gap;\n if (toState?.created) rightY += rowHeight + gap;\n\n const deep = this.isWidgetTarget(c.to) ? this.parseTabsPath(c.to.input) : null;\n let friendlyPath: string | undefined;\n if (deep && this.isWidgetTarget(c.to)) {\n const target = c.to;\n const childId = `${target.widget}#${deep.kind}[${deep.index}]/${deep.widgetIndex}`;\n // If such child exists, route edge to it and its input name\n if (nodes.some((n) => n.id === childId)) {\n toNodeId = childId;\n toPortId = `in:${deep.input}`;\n } else {\n // Keep to widget but still expose label/path\n toPortId = `in:${deep.input}`;\n }\n const cfg = tabsCfgByKey.get(target.widget);\n const labelFromCfg = deep.kind === 'group' ? (cfg?.tabs?.[deep.index]?.textLabel as string | undefined) : (cfg?.nav?.links?.[deep.index]?.label as string | undefined);\n const containerLabel = labelFromCfg ? (deep.kind === 'group' ? `Aba: ${labelFromCfg}` : `Link: ${labelFromCfg}`) : (deep.kind === 'group' ? `Aba ${deep.index + 1}` : `Link ${deep.index + 1}`);\n const child = nodes.find(n => n.id === childId);\n friendlyPath = `${containerLabel} • ${(child?.label || 'Widget')} • ${deep.input}`;\n }\n\n // Ensure ports exist for visualization (create synthetic when missing)\n this.ensurePort(nodeById, fromNodeId, fromPortId, 'output', colWidth);\n this.ensurePort(nodeById, toNodeId, toPortId, 'input', colWidth);\n\n const edge: GraphEdge = {\n id: `e${i}`,\n from: { nodeId: fromNodeId, portId: fromPortId },\n to: { nodeId: toNodeId, portId: toPortId },\n label: c.map || undefined,\n meta: { map: c.map, bindingOrder: this.isWidgetTarget(c.to) ? c.to.bindingOrder : undefined, ...(friendlyPath ? { friendlyPath } : {}) },\n };\n edges.push(edge);\n }\n\n return { nodes, edges };\n }\n\n private ensureStateNode(\n stateNodeIds: Map<string, string>,\n nodeById: Map<string, GraphNode>,\n nodes: GraphNode[],\n page: StatefulGridPageDefinition | undefined,\n statePath: string,\n kind: 'input' | 'output',\n colWidth: number,\n gap: number,\n offsetY: number,\n ): { nodeId: string; created: boolean } {\n const key = `${kind}:${statePath}`;\n const existing = stateNodeIds.get(key);\n if (existing) return { nodeId: existing, created: false };\n const nodeId = `state:${kind}:${encodeURIComponent(statePath)}`;\n const portId = kind === 'output' ? 'out:state' : 'in:state';\n const x = kind === 'output' ? gap : colWidth + gap * 3;\n const structuredState = this.normalizeState(page?.state);\n const isDerived = !!structuredState?.derived?.[statePath];\n const node: GraphNode = {\n id: nodeId,\n label: `${isDerived ? 'derived' : 'state'}:${statePath}`,\n icon: isDerived ? 'function' : 'account_tree',\n type: isDerived ? 'page-derived-state' : 'page-state',\n parentId: null,\n collapsed: true,\n bounds: { x, y: gap + offsetY, width: colWidth, height: 72 },\n ports: [{\n id: portId,\n label: statePath,\n description: statePath,\n kind,\n anchor: { x: kind === 'output' ? x : x + colWidth, y: gap + offsetY + 24 },\n }],\n };\n nodes.push(node);\n nodeById.set(nodeId, node);\n stateNodeIds.set(key, nodeId);\n return { nodeId, created: true };\n }\n\n private normalizeState(state: WidgetPageStateInput | undefined): { derived?: Record<string, any> } | null {\n if (!state || typeof state !== 'object' || Array.isArray(state)) return null;\n if ('values' in state || 'schema' in state || 'derived' in state) return state as { derived?: Record<string, any> };\n return null;\n }\n\n private ensurePort(nodeById: Map<string, GraphNode>, nodeId: string, portId: string, kind: 'input' | 'output', colWidth: number): void {\n const n = nodeById.get(nodeId);\n if (!n) return;\n const exists = (n.ports || []).some(p => p.id === portId);\n if (exists) return;\n const label = portId.replace(/^(in:|out:)/, '');\n const portsOfKind = (n.ports || []).filter(p => p.kind === kind);\n const idx = portsOfKind.length;\n const y = n.bounds.y + 24 + idx * 22;\n const x = kind === 'output' ? n.bounds.x : n.bounds.x + n.bounds.width;\n const p: GraphPort = { id: portId, label, kind, anchor: { x, y } };\n n.ports = [...(n.ports || []), p];\n // Optionally grow node height to accommodate more ports\n const approxBottom = y + 28 - n.bounds.y;\n if (approxBottom > n.bounds.height) n.bounds = { ...n.bounds, height: approxBottom };\n }\n\n /**\n * Parse dot-path for Tabs internals. Supported:\n * - inputs.config.tabs[<i>].widgets[<j>].inputs.<input>\n * - inputs.config.nav.links[<i>].widgets[<j>].inputs.<input>\n */\n parseTabsPath(path: string | undefined): { kind: 'group' | 'nav'; index: number; widgetIndex: number; input: string } | null {\n if (!path) return null;\n const groupRe = /^inputs\\.config\\.tabs\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/;\n const navRe = /^inputs\\.config\\.nav\\.links\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/;\n const g = path.match(groupRe);\n if (g) return { kind: 'group', index: Number(g[1]), widgetIndex: Number(g[2]), input: g[3] };\n const n = path.match(navRe);\n if (n) return { kind: 'nav', index: Number(n[1]), widgetIndex: Number(n[2]), input: n[3] };\n return null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnChanges, OnInit, Optional, Output, SimpleChanges, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GraphEdge, GraphNode, GraphPort } from './graph-types';\nimport { GraphMapperService } from './graph-mapper.service';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { WidgetConnection } from '@praxisui/core';\nimport { routeElbow } from './edge-router.util';\nimport { DragConnectDirective, DragEndEvent, DragMoveEvent, DragStartEvent } from './drag-connect.directive';\nimport { BehaviorSubject } from 'rxjs';\nimport { SETTINGS_PANEL_DATA, SettingsPanelService } from '@praxisui/settings-panel';\nimport { ConnectionBuilderComponent } from '../connection-builder.component';\n\n@Component({\n selector: 'praxis-connection-graph',\n standalone: true,\n imports: [CommonModule, FormsModule, MatButtonModule, MatIconModule, MatTooltipModule, DragConnectDirective],\n template: `\n <div class=\"cg-root\" (wheel)=\"onWheel($event)\" (mousedown)=\"onPanStart($event)\">\n <div class=\"cg-head\">\n <div class=\"cg-title\">Conexões</div>\n <div class=\"spacer\"></div>\n <button mat-button [color]=\"showPortLabels ? 'primary' : undefined\" (click)=\"showPortLabels = !showPortLabels\" matTooltip=\"Mostrar/ocultar labels de portas\" aria-label=\"Mostrar/ocultar labels de portas\">\n <mat-icon>label</mat-icon>\n </button>\n <button mat-button [color]=\"showFriendlyLabels ? 'primary' : undefined\" (click)=\"showFriendlyLabels = !showFriendlyLabels\" matTooltip=\"Alternar nome amigável/técnico\" aria-label=\"Alternar nome amigável/técnico\">\n <mat-icon>translate</mat-icon>\n </button>\n <button mat-button [color]=\"showEdgeLabels ? 'primary' : undefined\" (click)=\"showEdgeLabels = !showEdgeLabels\" matTooltip=\"Mostrar/ocultar rótulos de arestas\" aria-label=\"Mostrar/ocultar rótulos de arestas\">\n <mat-icon>text_fields</mat-icon>\n </button>\n <button mat-button [color]=\"showUnconnectedPorts ? 'primary' : undefined\" (click)=\"showUnconnectedPorts = !showUnconnectedPorts\" matTooltip=\"Mostrar/ocultar portas sem conexão\" aria-label=\"Mostrar/ocultar portas sem conexão\">\n <mat-icon>tune</mat-icon>\n </button>\n <button mat-stroked-button color=\"primary\" (click)=\"openBuilder()\" aria-label=\"Editar no Builder\"><mat-icon>tune</mat-icon><span>Editar no Builder</span></button>\n <div class=\"cg-count\" [attr.aria-label]=\"'Total de conexões: ' + connections().length\">{{ connections().length }}</div>\n </div>\n <div class=\"cg-canvas\">\n <!-- Edge details panel -->\n <div class=\"cg-details\" *ngIf=\"selectedEdgeIndex() >= 0 && showDetails\">\n <div class=\"details-head\">\n <div class=\"details-title\">Detalhes da conexão</div>\n <button mat-icon-button (click)=\"showDetails=false\" aria-label=\"Fechar\"><mat-icon>close</mat-icon></button>\n </div>\n <div class=\"details-body\" *ngIf=\"currentConn() as c\">\n <div><b>De:</b> {{ fromLabel(c) }}</div>\n <div><b>Para:</b> {{ toLabel(c) }}</div>\n <div><b>map:</b> {{ c.map || 'payload' }}</div>\n <div *ngIf=\"bindingOrderLabel(c)\"><b>bindingOrder:</b> {{ bindingOrderLabel(c) }}</div>\n <div class=\"details-actions\">\n <button mat-button color=\"primary\" (click)=\"openBuilder()\"><mat-icon>tune</mat-icon> Editar no Builder</button>\n <button mat-button color=\"warn\" (click)=\"removeEdge(selectedEdgeIndex())\"><mat-icon>delete</mat-icon> Remover</button>\n </div>\n </div>\n </div>\n\n <svg [attr.width]=\"'100%'\" [attr.height]=\"'100%'\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"10\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"currentColor\"></path>\n </marker>\n </defs>\n <g [attr.transform]=\"transform()\">\n <!-- Edges -->\n <g class=\"edges\">\n <g *ngFor=\"let e of edges(); let i = index\" class=\"edge-group\" role=\"button\" tabindex=\"0\"\n (mouseenter)=\"hoverEdgeId = e.id\" (mouseleave)=\"hoverEdgeId = ''\" (click)=\"selectEdge(i)\">\n <path class=\"edge\" [attr.d]=\"edgePath(e)\" marker-end=\"url(#arrow)\" [class.hover]=\"hoverEdgeId===e.id\" [attr.aria-label]=\"e.label || ''\" [matTooltip]=\"edgeTooltip(e)\"></path>\n <ng-container *ngIf=\"showEdgeLabels && e.label\">\n <g [attr.transform]=\"'translate(' + edgeMid(e).x + ',' + edgeMid(e).y + ')'\">\n <text class=\"edge-label\" x=\"0\" y=\"0\">{{ e.label }}</text>\n </g>\n </ng-container>\n <g *ngIf=\"hoverEdgeId===e.id\" class=\"edge-toolbar\">\n <rect [attr.x]=\"edgeMid(e).x-28\" [attr.y]=\"edgeMid(e).y-14\" width=\"56\" height=\"28\" rx=\"6\" ry=\"6\" class=\"edge-toolbar-bg\"></rect>\n <text [attr.x]=\"edgeMid(e).x-14\" [attr.y]=\"edgeMid(e).y+4\" class=\"icon\" (click)=\"removeEdge(i)\" aria-label=\"Remover\">🗑</text>\n <text [attr.x]=\"edgeMid(e).x+8\" [attr.y]=\"edgeMid(e).y+4\" class=\"icon\" (click)=\"openBuilder()\" aria-label=\"Editar\">✎</text>\n </g>\n </g>\n </g>\n\n <!-- Temporary drag edge -->\n <path *ngIf=\"dragPath()\" class=\"edge temp\" [attr.d]=\"dragPath()\" marker-end=\"url(#arrow)\"></path>\n\n <!-- Nodes -->\n <g class=\"nodes\">\n <g *ngFor=\"let n of nodes(); let ni = index\" class=\"node\" [attr.transform]=\"'translate(' + n.bounds.x + ',' + n.bounds.y + ')'\" role=\"group\" [attr.aria-label]=\"n.label\">\n <rect class=\"node-box\" [attr.width]=\"n.bounds.width\" [attr.height]=\"n.bounds.height\" rx=\"8\" ry=\"8\"\n (mousedown)=\"onNodeDragStart($event, ni)\"></rect>\n <text class=\"node-title\" x=\"8\" y=\"20\">{{ n.label }}</text>\n\n <!-- Output ports (left) -->\n <g *ngFor=\"let p of outputPorts(n); trackBy: trackPort\" class=\"port output\"\n [attr.transform]=\"'translate(' + (0) + ',' + (p.anchor.y - n.bounds.y - 4) + ')'\">\n <circle r=\"6\" cx=\"-6\" cy=\"8\" class=\"port-dot\" [attr.data-node-id]=\"n.id\" [attr.data-port-id]=\"p.id\" [matTooltip]=\"portTooltip(p)\"></circle>\n <rect class=\"port-hit\" x=\"-16\" y=\"0\" width=\"20\" height=\"16\" [dragConnect]=\"{ nodeId: n.id, portId: p.id }\" [matTooltip]=\"portTooltip(p)\"\n (connectDragStart)=\"onDragStart($event)\" (connectDragMove)=\"onDragMove($event)\" (connectDragEnd)=\"onDragEnd($event)\"></rect>\n <text *ngIf=\"showPortLabels\" x=\"-4\" y=\"12\" class=\"port-label\" text-anchor=\"end\" [attr.title]=\"portTooltip(p)\">{{ portText(p) }}</text>\n </g>\n\n <!-- Input ports (right) -->\n <g *ngFor=\"let p of inputPorts(n); trackBy: trackPort\" class=\"port input\"\n [attr.transform]=\"'translate(' + (n.bounds.width) + ',' + (p.anchor.y - n.bounds.y - 4) + ')'\">\n <circle r=\"6\" cx=\"6\" cy=\"8\" class=\"port-dot\" [attr.data-node-id]=\"n.id\" [attr.data-port-id]=\"p.id\" data-port-kind=\"input\" [attr.data-port-path]=\"p.path || ''\" [matTooltip]=\"portTooltip(p)\"></circle>\n <rect class=\"port-hit\" x=\"-4\" y=\"0\" width=\"20\" height=\"16\" [matTooltip]=\"portTooltip(p)\"></rect>\n <text *ngIf=\"showPortLabels\" x=\"8\" y=\"12\" class=\"port-label\" [attr.title]=\"portTooltip(p)\">{{ portText(p) }}</text>\n </g>\n </g>\n </g>\n </g>\n </svg>\n <!-- Pending connection popover -->\n <div class=\"popover\" *ngIf=\"pendingPopover() as pop\" [style.left.px]=\"pop.x\" [style.top.px]=\"pop.y\">\n <div class=\"popover-body\">\n <div class=\"popover-title\">Nova conexão</div>\n <div class=\"popover-grid\">\n <label>map:\n <input class=\"popover-input\" [(ngModel)]=\"pop.map\" [attr.placeholder]=\"placeholderSample\" />\n </label>\n <div class=\"popover-chips\">\n <button mat-stroked-button (click)=\"applyPreset('payload')\">payload</button>\n <button mat-stroked-button (click)=\"applyPreset('payload.id')\">payload.id</button>\n <button mat-stroked-button (click)=\"applyPreset('payload.data')\">payload.data</button>\n </div>\n <label>filter (opcional):\n <input class=\"popover-input\" [(ngModel)]=\"pop.filter\" placeholder=\"ex.: = payload != null\" />\n </label>\n <div class=\"popover-rows\">\n <div class=\"popover-inline\">\n <label class=\"popover-inline-field\">debounce (ms): <input class=\"popover-input popover-input--short\" type=\"number\" min=\"0\" [(ngModel)]=\"pop.debounceMs\" /></label>\n <label class=\"popover-inline-field\">\n <input type=\"checkbox\" [(ngModel)]=\"pop.distinct\" /> distinct\n </label>\n </div>\n <label>distinctBy (opcional):\n <input class=\"popover-input\" [(ngModel)]=\"pop['distinctBy']\" placeholder=\"ex.: payload.id\" />\n </label>\n </div>\n <div class=\"popover-preview\">Filtro: {{ computeFilterPreview(pop.filter) }}</div>\n <div class=\"popover-preview\">Prévia: {{ computePreview(pop.map) }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"cancelPending()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" (click)=\"confirmPending()\">Confirmar</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .cg-root { display: flex; flex-direction: column; height: 100%; width: 100%; }\n .cg-head { display: flex; align-items: center; gap: 12px; padding: 8px 12px; background: var(--md-sys-color-surface); border-bottom: 1px solid var(--md-sys-color-outline); }\n .cg-title { font-weight: 600; }\n .spacer { flex: 1; }\n .cg-count { color: var(--md-sys-color-on-surface-variant); }\n .cg-canvas { position: relative; flex: 1; min-height: 300px; }\n svg { background: var(--md-sys-color-surface-container-lowest); color: var(--md-sys-color-on-surface); }\n .node-box { fill: var(--md-sys-color-surface-container); stroke: var(--md-sys-color-outline); }\n .node-title { fill: var(--md-sys-color-on-surface); font-size: 14px; font-weight: 600; }\n .port-dot { fill: currentColor; r: 6; }\n .port-label { fill: var(--md-sys-color-on-surface-variant); font-size: 13px; }\n .edge { stroke: var(--md-sys-color-primary); stroke-width: 2; fill: none; }\n .edge.hover { stroke: var(--md-sys-color-tertiary); }\n .edge.temp { stroke-dasharray: 4 4; opacity: 0.7; }\n .edge-label { fill: var(--md-sys-color-on-surface); font-size: 12px; dominant-baseline: middle; text-anchor: middle; }\n .edge-label-bg { fill: var(--md-sys-color-surface); opacity: 0.72; }\n .edge-toolbar .edge-toolbar-bg { fill: var(--md-sys-color-surface); stroke: var(--md-sys-color-outline); }\n .edge-toolbar .icon { fill: var(--md-sys-color-on-surface); font-size: 12px; cursor: pointer; user-select: none; }\n .popover { position: absolute; transform: translate(-50%, -50%); z-index: 10; }\n .popover-body { background: var(--md-sys-color-surface); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 8px; padding: 8px; min-width: 220px; box-shadow: var(--mat-elevation-level4); }\n .popover-title { font-weight: 600; margin-bottom: 8px; }\n .popover-grid { display: grid; gap: 6px; min-width: 260px; }\n .popover-chips { display: flex; gap: 6px; flex-wrap: wrap; }\n .popover-rows { display: grid; gap: 6px; }\n .popover-inline { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }\n .popover-inline-field { display: inline-flex; align-items: center; gap: 6px; }\n .popover-body label { display: grid; gap: 4px; font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .popover-input { background: var(--md-sys-color-surface-container-lowest); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 6px; padding: 4px 6px; font: inherit; }\n .popover-input:focus-visible { outline: 2px solid var(--md-sys-color-primary); outline-offset: 1px; }\n .popover-input--short { width: 90px; }\n .popover-preview { font-size: 12px; opacity: 0.8; color: var(--md-sys-color-on-surface-variant); }\n .actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n .port-hit { fill: transparent; cursor: crosshair; height: 24px; }\n .cg-details { position: absolute; right: 8px; top: 48px; width: 320px; background: var(--md-sys-color-surface); color: var(--md-sys-color-on-surface); border: 1px solid var(--md-sys-color-outline); border-radius: 8px; box-shadow: var(--mat-elevation-level3); z-index: 12; }\n .details-head { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; border-bottom: 1px solid var(--md-sys-color-outline); }\n .details-title { font-weight: 600; }\n .details-body { padding: 8px 10px; display: grid; gap: 6px; }\n .details-actions { display: flex; gap: 8px; margin-top: 8px; }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionGraphComponent implements OnInit, OnChanges {\n @Input() page?: GridPageDefinition | string;\n @Input() widgets?: GridWidgetInstance[];\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n nodes = signal<GraphNode[]>([]);\n edges = signal<GraphEdge[]>([]);\n connections = signal<WidgetConnection[]>([]);\n showPortLabels = true;\n showEdgeLabels = false;\n showUnconnectedPorts = true;\n showDetails = true;\n showFriendlyLabels = true;\n selectedEdgeIndex = signal<number>(-1);\n\n // Panning/zoom\n private pan = { x: 0, y: 0 };\n private zoom = 1;\n transform = signal<string>('');\n\n // Hover state\n hoverEdgeId = '';\n\n // Drag state\n private dragFrom?: { nodeId: string; portId: string };\n dragPath = signal<string>('');\n\n // Pending popover\n pendingPopover = signal<{ x: number; y: number; from: { nodeId: string; portId: string }; to: { nodeId: string; portId: string; path?: string }; map?: string; filter?: string; debounceMs?: number; distinct?: boolean; distinctBy?: string } | null>(null);\n\n // Settings Panel integration\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n private initialSnapshot = '[]';\n placeholderSample = 'payload | payload.id | ${payload.id}';\n\n private connectedPorts = new Map<string, Set<string>>();\n private isWidgetSource(from: WidgetConnection['from']): from is Extract<WidgetConnection['from'], { widget: string }> {\n return 'widget' in from;\n }\n private isWidgetTarget(to: WidgetConnection['to']): to is Extract<WidgetConnection['to'], { widget: string }> {\n return 'widget' in to;\n }\n fromLabel(c: WidgetConnection): string {\n return this.isWidgetSource(c.from) ? `${c.from.widget}.${c.from.output}` : `state:${c.from.state}`;\n }\n toLabel(c: WidgetConnection): string {\n return this.isWidgetTarget(c.to) ? `${c.to.widget}.${c.to.input}` : `state:${c.to.state}`;\n }\n bindingOrderLabel(c: WidgetConnection): string {\n return this.isWidgetTarget(c.to) && c.to.bindingOrder?.length ? c.to.bindingOrder.join(', ') : '';\n }\n private isPortConnected(nodeId: string, portId: string): boolean {\n const set = this.connectedPorts.get(nodeId); return !!set && set.has(portId);\n }\n outputPorts(n: GraphNode): GraphPort[] {\n const ports = (n.ports || []).filter((p) => p.kind === 'output');\n return this.showUnconnectedPorts ? ports : ports.filter(p => this.isPortConnected(n.id, p.id));\n }\n inputPorts(n: GraphNode): GraphPort[] {\n const ports = (n.ports || []).filter((p) => p.kind === 'input');\n return this.showUnconnectedPorts ? ports : ports.filter(p => this.isPortConnected(n.id, p.id));\n }\n\n constructor(\n private mapper: GraphMapperService,\n private settingsPanel: SettingsPanelService,\n @Optional() @Inject(SETTINGS_PANEL_DATA) private injectedData?: { page?: GridPageDefinition; widgets?: GridWidgetInstance[] },\n ) {}\n\n ngOnInit(): void {\n const data = this.injectedData || {};\n const p = this.parsePage(data.page);\n const ws = (data.widgets as GridWidgetInstance[]) || this.widgets || p?.widgets || [];\n this.widgets = ws;\n this.page = data.page || (this.page as any);\n const conns = [...(p?.connections || [])];\n this.connections.set(conns);\n this.initialSnapshot = JSON.stringify(conns);\n this.rebuildGraph();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['page'] || changes['widgets']) {\n const p = this.parsePage(this.page);\n this.connections.set([...(p?.connections || [])]);\n this.rebuildGraph();\n this.initialSnapshot = JSON.stringify(this.connections());\n this.isDirty$.next(false);\n }\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n\n private rebuildGraph(): void {\n const p = this.parsePage(this.page) || ({ widgets: this.widgets || [], connections: this.connections() as any } as GridPageDefinition);\n const { nodes, edges } = this.mapper.mapToGraph({ ...p, connections: this.connections() as any } as GridPageDefinition, this.widgets || []);\n this.nodes.set(nodes);\n this.edges.set(edges);\n this.recomputeConnectedPorts();\n this.updateTransform();\n }\n private recomputeConnectedPorts(): void {\n const map = new Map<string, Set<string>>();\n const add = (nodeId: string, portId: string) => {\n const s = map.get(nodeId) || new Set<string>(); s.add(portId); map.set(nodeId, s);\n };\n for (const e of this.edges()) {\n add(e.from.nodeId, e.from.portId);\n add(e.to.nodeId, e.to.portId);\n }\n this.connectedPorts = map;\n }\n\n // External focus by connection (from Builder or other callers)\n focusConnection(conn: WidgetConnection): void {\n const fromNodeId = this.isWidgetSource(conn.from) ? conn.from.widget : `state:output:${encodeURIComponent(conn.from.state)}`;\n const fromPortId = this.isWidgetSource(conn.from) ? `out:${conn.from.output}` : 'out:state';\n let toNodeId = this.isWidgetTarget(conn.to) ? conn.to.widget : `state:input:${encodeURIComponent(conn.to.state)}`;\n let toPortId = this.isWidgetTarget(conn.to) ? `in:${conn.to.input}` : 'in:state';\n const deep = this.isWidgetTarget(conn.to) ? this.parseTabsPath(conn.to.input) : null;\n if (deep && this.isWidgetTarget(conn.to)) {\n const childId = `${conn.to.widget}#${deep.kind}[${deep.index}]/${deep.widgetIndex}`;\n if (this.nodes().some(n => n.id === childId)) { toNodeId = childId; toPortId = `in:${deep.input}`; }\n else { toPortId = `in:${deep.input}`; }\n }\n const idx = this.edges().findIndex(e => e.from.nodeId === fromNodeId && e.from.portId === fromPortId && e.to.nodeId === toNodeId && e.to.portId === toPortId);\n if (idx >= 0) this.selectEdge(idx);\n }\n\n private parseTabsPath(path: string | undefined): { kind: 'group' | 'nav'; index: number; widgetIndex: number; input: string } | null {\n if (!path) return null;\n const g = path.match(/^inputs\\.config\\.tabs\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/);\n if (g) return { kind: 'group', index: Number(g[1]), widgetIndex: Number(g[2]), input: g[3] };\n const n = path.match(/^inputs\\.config\\.nav\\.links\\[(\\d+)\\]\\.widgets\\[(\\d+)\\]\\.inputs\\.(.+)$/);\n if (n) return { kind: 'nav', index: Number(n[1]), widgetIndex: Number(n[2]), input: n[3] };\n return null;\n }\n\n // Pan/Zoom handlers\n onWheel(ev: WheelEvent): void {\n ev.preventDefault();\n const delta = Math.sign(ev.deltaY) * -0.05; // invert: wheel down zoom out\n this.zoom = Math.min(2, Math.max(0.5, this.zoom + delta));\n this.updateTransform();\n }\n private panning = false;\n private panStart = { x: 0, y: 0 };\n onPanStart(ev: MouseEvent): void {\n if ((ev.target as HTMLElement).closest('.port-hit')) return; // don't pan when starting on port\n this.panning = true;\n this.panStart = { x: ev.clientX - this.pan.x, y: ev.clientY - this.pan.y };\n const onMove = (e: MouseEvent) => this.onPanMove(e);\n const onUp = () => { this.panning = false; document.removeEventListener('mousemove', onMove); };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp, { once: true });\n }\n private onPanMove(ev: MouseEvent): void {\n if (!this.panning) return;\n this.pan = { x: ev.clientX - this.panStart.x, y: ev.clientY - this.panStart.y };\n this.updateTransform();\n }\n private updateTransform(): void {\n this.transform.set(`translate(${this.pan.x},${this.pan.y}) scale(${this.zoom})`);\n }\n\n // Edge/path helpers\n edgePath(e: GraphEdge): string {\n const from = this.findPortAnchor(e.from.nodeId, e.from.portId);\n const to = this.findPortAnchor(e.to.nodeId, e.to.portId);\n return routeElbow(from, to);\n }\n edgeTooltip(e: GraphEdge): string {\n const toNode = this.nodes().find(n => n.id === e.to.nodeId);\n const fromNode = this.nodes().find(n => n.id === e.from.nodeId);\n const parts = [\n `De: ${fromNode?.label || e.from.nodeId}.${e.from.portId.replace('out:','')}`,\n `Para: ${toNode?.label || e.to.nodeId}.${e.to.portId.replace('in:','')}`,\n ];\n if (e.meta && (e.meta as any).friendlyPath) parts.push(`Destino: ${(e.meta as any).friendlyPath}`);\n if (e.meta?.map) parts.push(`map: ${e.meta.map}`);\n return parts.join('\\n');\n }\n\n // Port label/tooltip helpers\n private technicalName(p: GraphPort): string {\n const fromId = p.id?.replace(/^in:|^out:/, '') || '';\n if (fromId) return fromId;\n if (p.path) {\n const m = p.path.match(/\\.inputs\\.([^\\.\\[]+)$/);\n if (m) return m[1];\n }\n return p.label || '';\n }\n portText(p: GraphPort): string { return this.showFriendlyLabels ? (p.label || this.technicalName(p)) : this.technicalName(p); }\n portTooltip(p: GraphPort): string {\n const tech = this.technicalName(p);\n const friendly = p.label || tech;\n const desc = p.description ? `\\n${p.description}` : '';\n if (this.showFriendlyLabels) return `${friendly}${desc}`;\n // when showing technical, include friendly for contexto if different\n return friendly !== tech ? `${tech} \\n(${friendly})${desc}` : `${tech}${desc}`;\n }\n edgeMid(e: GraphEdge): { x: number; y: number } {\n const from = this.findPortAnchor(e.from.nodeId, e.from.portId);\n const to = this.findPortAnchor(e.to.nodeId, e.to.portId);\n return { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n }\n private findPortAnchor(nodeId: string, portId: string): { x: number; y: number } {\n const n = this.nodes().find((x) => x.id === nodeId);\n if (!n) return { x: 0, y: 0 };\n const p = n.ports.find((pp) => pp.id === portId);\n return p?.anchor || { x: n.bounds.x, y: n.bounds.y };\n }\n\n // Drag connect flow\n onDragStart(ev: DragStartEvent): void {\n this.dragFrom = ev.from;\n this.dragPath.set(`M ${ev.x} ${ev.y} L ${ev.x} ${ev.y}`);\n try { console.debug('[ConnectionGraph] drag:start', { from: ev.from, at: { x: ev.x, y: ev.y } }); } catch {}\n }\n onDragMove(ev: DragMoveEvent): void {\n if (!this.dragFrom) return;\n const from = this.findPortAnchor(this.dragFrom.nodeId, this.dragFrom.portId);\n this.dragPath.set(routeElbow(from, { x: ev.x, y: ev.y }));\n try { console.debug('[ConnectionGraph] drag:move', { to: { x: ev.x, y: ev.y } }); } catch {}\n }\n onDragEnd(ev: DragEndEvent): void {\n if (!this.dragFrom) return;\n this.dragPath.set('');\n // Find target input port element (robust: handle circle or its container)\n const endEl = ev.endEvent.target as Element;\n const targetInfo = { tag: (endEl as any)?.tagName, class: (endEl as any)?.className } as any;\n let circleEl: Element | null = (endEl as any)?.closest?.('.port.input circle') as Element | null;\n if (!circleEl) {\n const portGroup = (endEl as any)?.closest?.('.port.input') as Element | null;\n if (portGroup) circleEl = (portGroup.querySelector('circle') as Element) || null;\n }\n if (!circleEl && endEl && (endEl as any).getAttribute) {\n const hasData = Boolean((endEl as any).getAttribute('data-port-id'));\n if (hasData) circleEl = endEl as Element;\n }\n if (!circleEl) {\n try { console.warn('[ConnectionGraph] drag:end — no target port found', targetInfo); } catch {}\n this.dragFrom = undefined; return;\n }\n const toNodeId = circleEl.getAttribute('data-node-id') || '';\n const toPortId = circleEl.getAttribute('data-port-id') || '';\n const path = circleEl.getAttribute('data-port-path') || undefined;\n try { console.debug('[ConnectionGraph] drag:end found target', { toNodeId, toPortId, path, at: { x: ev.x, y: ev.y } }); } catch {}\n this.pendingPopover.set({ x: ev.x, y: ev.y, from: this.dragFrom, to: { nodeId: toNodeId, portId: toPortId, path }, map: 'payload' });\n try { console.debug('[ConnectionGraph] popover:open', this.pendingPopover()); } catch {}\n this.dragFrom = undefined;\n }\n cancelPending(): void { this.pendingPopover.set(null); }\n confirmPending(): void {\n const pop = this.pendingPopover();\n if (!pop) return;\n const fromOutput = pop.from.portId.replace(/^out:/, '');\n const toInputName = pop.to.portId.replace(/^in:/, '');\n const toPath = pop.to.path || toInputName;\n const newConn: WidgetConnection = {\n from: { widget: pop.from.nodeId, output: fromOutput },\n to: { widget: this.resolveToWidget(pop.to.nodeId), input: toPath },\n map: pop.map,\n meta: {\n filterExpr: pop.filter || undefined,\n debounceMs: pop.debounceMs || undefined,\n distinct: pop.distinct || undefined,\n distinctBy: pop.distinctBy || undefined,\n },\n } as any;\n const next = [...this.connections(), newConn];\n try { console.debug('[ConnectionGraph] connection:add', newConn); } catch {}\n this.connections.set(next);\n this.pendingPopover.set(null);\n try { console.debug('[ConnectionGraph] popover:close'); } catch {}\n this.rebuildGraph();\n this.emitPageChange();\n this.updateDirty(next);\n }\n applyPreset(map: string): void {\n const pop = this.pendingPopover(); if (!pop) return;\n this.pendingPopover.set({ ...pop, map });\n }\n computePreview(map?: string): string {\n try {\n const sample: any = { payload: { id: 123, data: { id: 123, name: 'Exemplo' }, row: { id: 123 } } };\n const path = (map || 'payload').split('.');\n let cur: any = sample;\n for (const k of path) { if (!k) continue; cur = cur?.[k]; }\n return JSON.stringify(cur);\n } catch { return '—'; }\n }\n computeFilterPreview(expr?: string): string {\n try {\n if (!expr) return '—';\n const sample: any = { payload: { id: 123, data: { id: 123, name: 'Exemplo' }, row: { id: 123 } } };\n if (typeof expr === 'string' && expr.trim().startsWith('=')) {\n const code = expr.trim().slice(1);\n // Controlled eval limited to sample context\n // eslint-disable-next-line no-new-func\n const fn = new Function('payload', `\"use strict\"; return (${code});`);\n const ok = !!fn(sample.payload);\n return ok ? 'pass' : 'skip';\n }\n return '—';\n } catch { return 'erro'; }\n }\n private resolveToWidget(nodeId: string): string {\n // Child nodes are encoded as parent#kind[index]/widgetIndex\n const hash = nodeId.indexOf('#');\n if (hash > 0) return nodeId.slice(0, hash);\n return nodeId;\n }\n\n removeEdge(index: number): void {\n const next = this.connections().slice();\n next.splice(index, 1);\n this.connections.set(next);\n this.rebuildGraph();\n this.emitPageChange();\n this.updateDirty(next);\n }\n\n // Select edge and open details\n selectEdge(index: number): void {\n this.selectedEdgeIndex.set(index);\n this.showDetails = true;\n }\n currentConn(): WidgetConnection | undefined { const i = this.selectedEdgeIndex(); return (i >= 0 ? this.connections()[i] : undefined); }\n\n private emitPageChange(): void {\n const parsed = this.parsePage(this.page) || ({ widgets: this.widgets || [] } as GridPageDefinition);\n const updated: GridPageDefinition = { ...parsed, connections: this.connections() as any } as GridPageDefinition;\n this.pageChange.emit(updated);\n }\n\n // Settings panel value provider methods\n getSettingsValue(): any { return { page: { ...(this.parsePage(this.page) || {}), connections: this.connections() } }; }\n reset(): void {\n try { this.connections.set(JSON.parse(this.initialSnapshot || '[]')); } catch { this.connections.set([]); }\n this.rebuildGraph();\n this.isDirty$.next(false);\n this.isValid$.next(true);\n }\n\n // Node dragging\n private nodeDrag = { active: false, index: -1, startX: 0, startY: 0, origX: 0, origY: 0 };\n onNodeDragStart(ev: MouseEvent, index: number): void {\n ev.preventDefault(); ev.stopPropagation();\n const n = this.nodes()[index]; if (!n) return;\n this.nodeDrag = { active: true, index, startX: ev.clientX, startY: ev.clientY, origX: n.bounds.x, origY: n.bounds.y };\n const onMove = (e: MouseEvent) => this.onNodeDragMove(e);\n const onUp = () => { this.nodeDrag.active = false; document.removeEventListener('mousemove', onMove); };\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onUp, { once: true });\n }\n private onNodeDragMove(ev: MouseEvent): void {\n if (!this.nodeDrag.active) return;\n const dx = (ev.clientX - this.nodeDrag.startX) / this.zoom;\n const dy = (ev.clientY - this.nodeDrag.startY) / this.zoom;\n const nodes = this.nodes().slice();\n const n = { ...nodes[this.nodeDrag.index] };\n const newX = this.nodeDrag.origX + dx;\n const newY = this.nodeDrag.origY + dy;\n const ddx = newX - n.bounds.x;\n const ddy = newY - n.bounds.y;\n n.bounds = { ...n.bounds, x: newX, y: newY };\n // Shift port anchors by delta\n n.ports = (n.ports || []).map(p => ({ ...p, anchor: { x: p.anchor.x + ddx, y: p.anchor.y + ddy } }));\n nodes[this.nodeDrag.index] = n;\n this.nodes.set(nodes);\n }\n\n trackPort(_idx: number, p: GraphPort) { return p.id; }\n private updateDirty(next: WidgetConnection[]): void {\n this.isDirty$.next(JSON.stringify(next) !== this.initialSnapshot);\n this.isValid$.next(true);\n }\n\n // Builder integration\n openBuilder(): void {\n const base = this.parsePage(this.page) || ({ widgets: this.widgets || [] } as GridPageDefinition);\n const p: GridPageDefinition = { ...base, connections: this.connections() as any } as GridPageDefinition;\n try { console.debug('[ConnectionGraph] openBuilder()', { baseHasConns: !!(base as any).connections, graphConns: this.connections().length, widgets: this.widgets?.length }); } catch {}\n const ref = this.settingsPanel.open({ id: 'grid-connections', title: 'Conexões (Builder)', content: { component: ConnectionBuilderComponent, inputs: { page: p, widgets: this.widgets } } });\n ref.applied$.subscribe((val: any) => { const next = (val && val.page) ? (val.page as GridPageDefinition) : undefined; if (next) this.applyConnections(next); });\n ref.saved$.subscribe((val: any) => { const next = (val && val.page) ? (val.page as GridPageDefinition) : undefined; if (next) this.applyConnections(next); });\n }\n private applyConnections(next: GridPageDefinition): void {\n const conns = [...(next.connections || [])];\n try { console.debug('[ConnectionGraph] applyConnections()', { conns: conns.length }); } catch {}\n this.connections.set(conns);\n this.rebuildGraph();\n this.emitPageChange();\n this.initialSnapshot = JSON.stringify(conns);\n this.isDirty$.next(false);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { ConnectionBuilderComponent } from '../connection-builder.component';\nimport { ConnectionGraphComponent } from '../connection-graph/connection-graph.component';\n\n@Component({\n selector: 'praxis-connection-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatTabsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n ConnectionBuilderComponent,\n ConnectionGraphComponent,\n ],\n templateUrl: './connection-editor.component.html',\n styleUrls: ['./connection-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionEditorComponent {\n readonly page = input<GridPageDefinition | string | null>(null);\n readonly widgets = input<GridWidgetInstance[] | null>(null);\n readonly pageChange = output<GridPageDefinition>();\n\n readonly pageState = signal<GridPageDefinition | undefined>(undefined);\n readonly jsonControl = new FormControl<string>('', { nonNullable: true });\n readonly jsonError = signal<string | null>(null);\n\n private lastSerialized = '';\n\n constructor() {\n effect(\n () => {\n const parsed = this.parsePage(this.page());\n const serialized = parsed ? JSON.stringify(parsed, null, 2) : '';\n if (serialized !== this.lastSerialized) {\n this.lastSerialized = serialized;\n this.pageState.set(parsed);\n this.jsonControl.setValue(serialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n },\n { allowSignalWrites: true },\n );\n\n this.jsonControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe((next) => this.onJsonInput(next));\n }\n\n onPageChange(next: GridPageDefinition): void {\n this.pageState.set(next);\n this.pageChange.emit(next);\n this.lastSerialized = JSON.stringify(next, null, 2);\n this.jsonControl.setValue(this.lastSerialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n\n onJsonInput(raw: string): void {\n if (!raw.trim()) {\n this.jsonError.set(null);\n return;\n }\n try {\n const parsed = JSON.parse(raw) as GridPageDefinition;\n this.pageState.set(parsed);\n this.pageChange.emit(parsed);\n this.jsonError.set(null);\n this.lastSerialized = raw;\n } catch (err) {\n this.jsonError.set('JSON invalido');\n }\n }\n\n resetJson(): void {\n const next = this.pageState();\n const serialized = next ? JSON.stringify(next, null, 2) : '';\n this.lastSerialized = serialized;\n this.jsonControl.setValue(serialized, { emitEvent: false });\n this.jsonError.set(null);\n }\n\n private parsePage(input: GridPageDefinition | string | null | undefined): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return undefined;\n }\n }\n return input;\n }\n}\n","<div class=\"conn-editor\">\n <mat-tab-group class=\"conn-tabs\">\n <mat-tab label=\"Construtor\">\n <praxis-connection-builder\n [page]=\"pageState() || undefined\"\n [widgets]=\"widgets() || undefined\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-builder>\n </mat-tab>\n <mat-tab label=\"Diagrama\">\n <praxis-connection-graph\n [page]=\"pageState() || undefined\"\n [widgets]=\"widgets() || undefined\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-graph>\n </mat-tab>\n <mat-tab label=\"JSON\">\n <div class=\"conn-json\">\n <mat-form-field class=\"json-field\" appearance=\"outline\">\n <mat-label>Pagina (JSON)</mat-label>\n <textarea matInput rows=\"16\" [formControl]=\"jsonControl\"></textarea>\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n class=\"help-icon-button\"\n matTooltip=\"Use este JSON para copiar/colar a página completa.\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (jsonError()) {\n <div class=\"json-error\" role=\"alert\">{{ jsonError() }}</div>\n }\n <div class=\"json-actions\">\n <button mat-stroked-button type=\"button\" (click)=\"resetJson()\">Recarregar</button>\n </div>\n </div>\n </mat-tab>\n </mat-tab-group>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, signal } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { GridPageDefinition, GridWidgetInstance } from '@praxisui/core';\nimport { ConnectionEditorComponent } from './connection-editor.component';\n\nexport interface ConnectionEditorDialogData {\n page?: GridPageDefinition | string;\n widgets?: GridWidgetInstance[];\n}\n\n@Component({\n selector: 'praxis-connection-editor-dialog',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule, ConnectionEditorComponent],\n template: `\n <div class=\"dialog-shell\">\n <div mat-dialog-title class=\"dialog-head\">\n <div class=\"dialog-title\">Editor de Conexoes</div>\n <span class=\"spacer\"></span>\n <button mat-icon-button type=\"button\" (click)=\"close()\" aria-label=\"Fechar\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <mat-dialog-content class=\"dialog-body\">\n <praxis-connection-editor\n [page]=\"page()\"\n [widgets]=\"widgets()\"\n (pageChange)=\"onPageChange($event)\"\n ></praxis-connection-editor>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\" class=\"dialog-actions\">\n <button mat-button type=\"button\" (click)=\"close()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"save()\">Salvar</button>\n </mat-dialog-actions>\n </div>\n `,\n styles: [\n `\n .dialog-shell {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-height: 90vh;\n min-width: min(960px, 94vw);\n }\n .dialog-head {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px 10px;\n border-bottom: 1px solid var(--md-sys-color-outline-variant);\n }\n .dialog-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .dialog-body {\n flex: 1;\n overflow: auto;\n }\n .dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: var(--pdx-dialog-actions-padding, 12px 24px 16px);\n border-top: 1px solid var(--md-sys-color-outline-variant);\n align-items: center;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConnectionEditorDialogComponent {\n readonly page = signal<GridPageDefinition | null>(null);\n readonly widgets = signal<GridWidgetInstance[]>([]);\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: ConnectionEditorDialogData,\n private dialogRef: MatDialogRef<ConnectionEditorDialogComponent>,\n ) {\n const parsed = this.parsePage(data?.page);\n this.page.set(parsed);\n this.widgets.set(data?.widgets || []);\n }\n\n onPageChange(next: GridPageDefinition): void {\n this.page.set(next);\n }\n\n close(): void {\n this.dialogRef.close();\n }\n\n save(): void {\n const next = this.page();\n if (next) {\n this.dialogRef.close({ page: next });\n return;\n }\n this.dialogRef.close();\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | null {\n if (!input) return null;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return null;\n }\n }\n return input;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n GridPageDefinition,\n PageIdentity,\n WidgetDerivedStateNode,\n WidgetPageStateDefinition,\n WidgetPageStateInput,\n WidgetStateNode,\n} from '@praxisui/core';\n\ntype PageOptions = GridPageDefinition['options'];\ntype PageState = GridPageDefinition['state'];\n\ntype SchemaNodeGroup = FormGroup<{\n path: FormControl<string>;\n type: FormControl<string>;\n initial: FormControl<string>;\n persist: FormControl<string>;\n mergeStrategy: FormControl<string>;\n description: FormControl<string>;\n}>;\n\ntype DerivedNodeGroup = FormGroup<{\n path: FormControl<string>;\n dependsOn: FormControl<string>;\n computeKind: FormControl<string>;\n operator: FormControl<string>;\n sourcePath: FormControl<string>;\n keysCsv: FormControl<string>;\n expression: FormControl<string>;\n transformerId: FormControl<string>;\n options: FormControl<string>;\n template: FormControl<string>;\n description: FormControl<string>;\n}>;\n\nconst DERIVED_OPERATORS = ['merge-objects', 'pick', 'omit'] as const;\nconst MERGE_STRATEGIES = ['replace', 'merge', 'append', 'remove-keys'] as const;\n\n@Component({\n selector: 'praxis-page-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatSelectModule,\n MatTooltipModule,\n ],\n template: `\n <div class=\"page-config\">\n <div class=\"page-head\">\n <div class=\"page-title\">Configurações da Página</div>\n <span class=\"spacer\"></span>\n <button mat-stroked-button type=\"button\" (click)=\"reset()\">Recarregar</button>\n </div>\n\n @if (identity()) {\n <div class=\"page-identity\">\n <div><strong>Rota:</strong> {{ identity()?.routePath || '/' }}</div>\n <div><strong>App:</strong> {{ identity()?.appId || 'app' }}</div>\n @if (identity()?.tenantId) {\n <div><strong>Tenant:</strong> {{ identity()?.tenantId }}</div>\n }\n @if (identity()?.userId) {\n <div><strong>User:</strong> {{ identity()?.userId }}</div>\n }\n </div>\n }\n\n <div class=\"page-section\">Grid</div>\n <form class=\"grid-form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [formControl]=\"form.controls.cols\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura da linha (px)</mat-label>\n <input matInput type=\"number\" min=\"20\" [formControl]=\"form.controls.rowHeight\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Gap (px)</mat-label>\n <input matInput type=\"number\" min=\"0\" [formControl]=\"form.controls.gap\" />\n </mat-form-field>\n </form>\n\n <div class=\"page-section\">Contexto</div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Contexto (JSON)</mat-label>\n <textarea matInput rows=\"10\" [formControl]=\"contextControl\"></textarea>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"contextExample\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n @if (contextError()) {\n <div class=\"page-error\" role=\"alert\">{{ contextError() }}</div>\n }\n\n <div class=\"page-section\">Estado da Página</div>\n <div class=\"state-grid\">\n <mat-form-field appearance=\"outline\" class=\"state-values\">\n <mat-label>Valores primários (JSON)</mat-label>\n <textarea matInput rows=\"10\" [formControl]=\"stateValuesControl\"></textarea>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"stateValuesExample\"\n matTooltipPosition=\"above\"\n >\n <mat-icon>help_outline</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"state-group\">\n <div class=\"state-group-head\">\n <div class=\"state-group-title\">Schema</div>\n <button mat-stroked-button type=\"button\" (click)=\"addSchemaNode()\">\n <mat-icon>add</mat-icon>\n Adicionar nó\n </button>\n </div>\n <div class=\"state-group-help\">Define caminhos primários, valor inicial e estratégia de merge.</div>\n @if (!schemaNodes.length) {\n <div class=\"state-empty\">Nenhum nó de schema configurado.</div>\n }\n <div class=\"state-list\">\n @for (group of schemaNodes.controls; track $index) {\n <div class=\"state-card\" [formGroup]=\"group\">\n <div class=\"state-card-head\">\n <div class=\"state-card-title\">Nó {{ $index + 1 }}</div>\n <button mat-icon-button type=\"button\" (click)=\"removeSchemaNode($index)\" aria-label=\"Remover nó de schema\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <div class=\"state-card-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Path</mat-label>\n <input matInput formControlName=\"path\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <input matInput formControlName=\"type\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Persistência</mat-label>\n <mat-select formControlName=\"persist\">\n <mat-option value=\"\">Padrão</mat-option>\n <mat-option value=\"true\">Persistir</mat-option>\n <mat-option value=\"false\">Não persistir</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Merge</mat-label>\n <mat-select formControlName=\"mergeStrategy\">\n <mat-option value=\"\">Padrão</mat-option>\n @for (strategy of mergeStrategies; track strategy) {\n <mat-option [value]=\"strategy\">{{ strategy }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"span-2\">\n <mat-label>Initial (JSON)</mat-label>\n <textarea matInput rows=\"4\" formControlName=\"initial\"></textarea>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"span-2\">\n <mat-label>Descrição</mat-label>\n <input matInput formControlName=\"description\" />\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"state-group\">\n <div class=\"state-group-head\">\n <div class=\"state-group-title\">Derived</div>\n <button mat-stroked-button type=\"button\" (click)=\"addDerivedNode()\">\n <mat-icon>add</mat-icon>\n Adicionar derivação\n </button>\n </div>\n <div class=\"state-group-help\">Modela recomputações do runtime com dependsOn e operadores canônicos.</div>\n @if (!derivedNodes.length) {\n <div class=\"state-empty\">Nenhum nó derivado configurado.</div>\n }\n <div class=\"state-list\">\n @for (group of derivedNodes.controls; track $index) {\n <div class=\"state-card\" [formGroup]=\"group\">\n <div class=\"state-card-head\">\n <div class=\"state-card-title\">Derived {{ $index + 1 }}</div>\n <button mat-icon-button type=\"button\" (click)=\"removeDerivedNode($index)\" aria-label=\"Remover derivação\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n <div class=\"state-card-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Path</mat-label>\n <input matInput formControlName=\"path\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Compute</mat-label>\n <mat-select formControlName=\"computeKind\">\n <mat-option value=\"operator\">Operator</mat-option>\n <mat-option value=\"template\">Template</mat-option>\n <mat-option value=\"expr\">Expr</mat-option>\n <mat-option value=\"transformer\">Transformer</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"span-2\">\n <mat-label>DependsOn (vírgula)</mat-label>\n <input matInput formControlName=\"dependsOn\" />\n </mat-form-field>\n @if (group.controls.computeKind.value === 'operator') {\n <mat-form-field appearance=\"outline\">\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"operator\">\n @for (operator of derivedOperators; track operator) {\n <mat-option [value]=\"operator\">{{ operator }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (group.controls.operator.value === 'pick' || group.controls.operator.value === 'omit') {\n <mat-form-field appearance=\"outline\">\n <mat-label>Source path</mat-label>\n <input matInput formControlName=\"sourcePath\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"span-2\">\n <mat-label>Keys (vírgula)</mat-label>\n <input matInput formControlName=\"keysCsv\" />\n </mat-form-field>\n } @else {\n <div class=\"state-operator-hint span-3\">\n <mat-icon>account_tree</mat-icon>\n <span>O operador {{ group.controls.operator.value }} usa os caminhos de dependsOn como fonte principal.</span>\n </div>\n }\n }\n @if (group.controls.computeKind.value === 'template') {\n <mat-form-field appearance=\"outline\" class=\"span-3\">\n <mat-label>Template (JSON)</mat-label>\n <textarea matInput rows=\"4\" formControlName=\"template\"></textarea>\n </mat-form-field>\n }\n @if (group.controls.computeKind.value === 'expr') {\n <mat-form-field appearance=\"outline\" class=\"span-3\">\n <mat-label>Expression</mat-label>\n <input matInput formControlName=\"expression\" />\n </mat-form-field>\n }\n @if (group.controls.computeKind.value === 'transformer') {\n <mat-form-field appearance=\"outline\">\n <mat-label>Transformer</mat-label>\n <input matInput formControlName=\"transformerId\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"span-2\">\n <mat-label>Options (JSON)</mat-label>\n <textarea matInput rows=\"4\" formControlName=\"options\"></textarea>\n </mat-form-field>\n }\n <mat-form-field appearance=\"outline\" class=\"span-3\">\n <mat-label>Descrição</mat-label>\n <input matInput formControlName=\"description\" />\n </mat-form-field>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n @if (stateError()) {\n <div class=\"page-error\" role=\"alert\">{{ stateError() }}</div>\n }\n\n <div class=\"page-actions\">\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"apply()\">Aplicar</button>\n </div>\n </div>\n `,\n styles: [\n `\n .page-config {\n display: grid;\n gap: 12px;\n padding: 16px;\n background: var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .page-head {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .page-title {\n font-weight: 600;\n }\n .spacer {\n flex: 1;\n }\n .page-identity {\n display: grid;\n gap: 4px;\n font-size: 13px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .page-section {\n font-weight: 600;\n margin-top: 8px;\n }\n .grid-form {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n .state-grid {\n display: grid;\n gap: 16px;\n }\n .state-values,\n .state-group {\n padding: 14px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 14px;\n background:\n linear-gradient(180deg, color-mix(in srgb, var(--md-sys-color-surface-container-low) 92%, transparent), transparent),\n var(--md-sys-color-surface-container-lowest, var(--md-sys-color-surface));\n }\n .state-group {\n display: grid;\n gap: 12px;\n }\n .state-group-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n .state-group-title {\n font-weight: 600;\n }\n .state-group-help {\n color: var(--md-sys-color-on-surface-variant);\n font-size: 13px;\n }\n .state-list {\n display: grid;\n gap: 12px;\n }\n .state-card {\n display: grid;\n gap: 12px;\n padding: 12px;\n border-radius: 12px;\n border: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 80%, transparent);\n background: color-mix(in srgb, var(--md-sys-color-surface-container) 84%, transparent);\n }\n .state-card-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n }\n .state-card-title {\n font-weight: 600;\n }\n .state-card-grid {\n display: grid;\n gap: 12px;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n }\n .span-2 {\n grid-column: span 2;\n }\n .span-3 {\n grid-column: 1 / -1;\n }\n .state-empty {\n color: var(--md-sys-color-on-surface-variant);\n font-size: 13px;\n }\n .state-operator-hint {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 48px;\n padding: 0 12px;\n border-radius: 12px;\n color: var(--md-sys-color-on-surface-variant);\n background: color-mix(in srgb, var(--md-sys-color-secondary-container) 35%, transparent);\n }\n .state-operator-hint mat-icon {\n color: var(--md-sys-color-secondary);\n }\n .page-actions {\n display: flex;\n justify-content: flex-end;\n }\n .page-error {\n color: var(--md-sys-color-error);\n font-size: 13px;\n }\n .page-config .mat-mdc-form-field {\n width: 100%;\n --mdc-outlined-text-field-container-height: 48px;\n --mdc-outlined-text-field-outline-color: var(--md-sys-color-outline-variant);\n --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);\n --mdc-outlined-text-field-focus-outline-color: var(--md-sys-color-primary);\n --mdc-outlined-text-field-error-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-focus-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-error-hover-outline-color: var(--md-sys-color-error);\n --mdc-outlined-text-field-label-text-color: var(--md-sys-color-on-surface-variant);\n --mdc-outlined-text-field-input-text-color: var(--md-sys-color-on-surface);\n --mdc-outlined-text-field-supporting-text-color: var(--md-sys-color-on-surface-variant);\n }\n .help-icon-button {\n --mdc-icon-button-state-layer-size: 28px;\n --mdc-icon-button-icon-size: 18px;\n width: 28px;\n height: 28px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: -4px;\n }\n .help-icon-button mat-icon {\n font-size: 18px;\n width: 18px;\n height: 18px;\n }\n .mat-mdc-form-field-icon-suffix {\n align-self: center;\n }\n @media (max-width: 720px) {\n .span-2,\n .span-3 {\n grid-column: auto;\n }\n .state-group-head {\n align-items: stretch;\n flex-direction: column;\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageConfigEditorComponent {\n protected readonly contextExample = 'Ex.: {\"tenantId\":\"acme\",\"locale\":\"pt-BR\"}';\n protected readonly stateValuesExample = 'Ex.: {\"query\":{\"filter\":{\"year\":2026}},\"selection\":{\"department\":\"Finance\"}}';\n protected readonly derivedOperators = DERIVED_OPERATORS;\n protected readonly mergeStrategies = MERGE_STRATEGIES;\n\n readonly page = input<GridPageDefinition | string | null>(null);\n readonly identity = input<PageIdentity | null>(null);\n readonly gridsterOptions = input<any | null>(null);\n readonly pageChange = output<GridPageDefinition>();\n\n readonly form = new FormGroup({\n cols: new FormControl<number | null>(null),\n rowHeight: new FormControl<number | null>(null),\n gap: new FormControl<number | null>(null),\n });\n readonly contextControl = new FormControl<string>('', { nonNullable: true });\n readonly stateValuesControl = new FormControl<string>('', { nonNullable: true });\n readonly schemaNodes = new FormArray<SchemaNodeGroup>([]);\n readonly derivedNodes = new FormArray<DerivedNodeGroup>([]);\n readonly contextError = signal<string | null>(null);\n readonly stateError = signal<string | null>(null);\n\n private lastContext = '';\n private lastStateValues = '';\n\n constructor() {\n effect(() => {\n const next = this.parsePage(this.page());\n const options = next?.options;\n this.form.setValue(\n {\n cols: options?.cols ?? null,\n rowHeight: options?.rowHeight ?? null,\n gap: options?.gap ?? null,\n },\n { emitEvent: false },\n );\n const context = next?.context ? JSON.stringify(next.context, null, 2) : '';\n if (context !== this.lastContext) {\n this.lastContext = context;\n this.contextControl.setValue(context, { emitEvent: false });\n this.contextError.set(null);\n }\n this.hydrateStateEditor(next?.state);\n });\n\n this.contextControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.contextError.set(null));\n this.stateValuesControl.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.stateError.set(null));\n this.schemaNodes.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.stateError.set(null));\n this.derivedNodes.valueChanges\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.stateError.set(null));\n }\n\n addSchemaNode(seed?: { path?: string; config?: WidgetStateNode }): void {\n this.schemaNodes.push(this.createSchemaNodeGroup(seed));\n }\n\n removeSchemaNode(index: number): void {\n this.schemaNodes.removeAt(index);\n }\n\n addDerivedNode(seed?: { path?: string; config?: WidgetDerivedStateNode }): void {\n this.derivedNodes.push(this.createDerivedNodeGroup(seed));\n }\n\n removeDerivedNode(index: number): void {\n this.derivedNodes.removeAt(index);\n }\n\n apply(): void {\n const next = this.parsePage(this.page()) || ({ widgets: [] } as GridPageDefinition);\n const options = this.buildOptions(this.form.value);\n const context = this.parseContext(this.contextControl.value);\n const state = this.buildState();\n if (context === null) {\n this.contextError.set('JSON invalido');\n return;\n }\n if (state === null) {\n this.stateError.set('JSON invalido');\n return;\n }\n const updated: GridPageDefinition = {\n ...next,\n options,\n context: context || undefined,\n state: state || undefined,\n };\n this.pageChange.emit(updated);\n }\n\n reset(): void {\n const next = this.parsePage(this.page());\n const options = next?.options;\n this.form.setValue(\n {\n cols: options?.cols ?? null,\n rowHeight: options?.rowHeight ?? null,\n gap: options?.gap ?? null,\n },\n { emitEvent: false },\n );\n const context = next?.context ? JSON.stringify(next.context, null, 2) : '';\n this.lastContext = context;\n this.contextControl.setValue(context, { emitEvent: false });\n this.contextError.set(null);\n this.hydrateStateEditor(next?.state);\n }\n\n private hydrateStateEditor(state: PageState | undefined): void {\n const normalized = this.normalizeState(state);\n const nextValues = normalized.values ? JSON.stringify(normalized.values, null, 2) : '';\n if (nextValues !== this.lastStateValues) {\n this.lastStateValues = nextValues;\n this.stateValuesControl.setValue(nextValues, { emitEvent: false });\n this.stateError.set(null);\n }\n this.replaceSchemaNodes(normalized.schema);\n this.replaceDerivedNodes(normalized.derived);\n }\n\n private replaceSchemaNodes(schema: WidgetPageStateDefinition['schema']): void {\n this.schemaNodes.clear({ emitEvent: false });\n for (const [path, config] of Object.entries(schema || {})) {\n this.schemaNodes.push(this.createSchemaNodeGroup({ path, config }), { emitEvent: false });\n }\n }\n\n private replaceDerivedNodes(derived: WidgetPageStateDefinition['derived']): void {\n this.derivedNodes.clear({ emitEvent: false });\n for (const [path, config] of Object.entries(derived || {})) {\n this.derivedNodes.push(this.createDerivedNodeGroup({ path, config }), { emitEvent: false });\n }\n }\n\n private createSchemaNodeGroup(seed?: { path?: string; config?: WidgetStateNode }): SchemaNodeGroup {\n const config = seed?.config || {};\n return new FormGroup({\n path: new FormControl<string>(seed?.path || '', { nonNullable: true, validators: [Validators.required] }),\n type: new FormControl<string>(config.type || '', { nonNullable: true }),\n initial: new FormControl<string>(\n config.initial === undefined ? '' : JSON.stringify(config.initial, null, 2),\n { nonNullable: true },\n ),\n persist: new FormControl<string>(\n typeof config.persist === 'boolean' ? String(config.persist) : '',\n { nonNullable: true },\n ),\n mergeStrategy: new FormControl<string>(config.mergeStrategy || '', { nonNullable: true }),\n description: new FormControl<string>(config.description || '', { nonNullable: true }),\n });\n }\n\n private createDerivedNodeGroup(seed?: { path?: string; config?: WidgetDerivedStateNode }): DerivedNodeGroup {\n const config = seed?.config;\n const compute = config?.compute;\n const normalizedComputeKind =\n compute?.kind === 'operator' && compute.operator === 'template'\n ? 'template'\n : compute?.kind || 'operator';\n const operatorOptions =\n compute?.kind === 'operator'\n ? compute.options || {}\n : {};\n const sourcePath =\n typeof operatorOptions['source'] === 'string'\n ? operatorOptions['source']\n : '';\n const keysCsv = Array.isArray(operatorOptions['keys'])\n ? operatorOptions['keys'].filter((item) => typeof item === 'string').join(', ')\n : '';\n return new FormGroup({\n path: new FormControl<string>(seed?.path || '', { nonNullable: true, validators: [Validators.required] }),\n dependsOn: new FormControl<string>((config?.dependsOn || []).join(', '), { nonNullable: true }),\n computeKind: new FormControl<string>(normalizedComputeKind, { nonNullable: true }),\n operator: new FormControl<string>(compute?.kind === 'operator' ? compute.operator || 'merge-objects' : 'merge-objects', {\n nonNullable: true,\n }),\n sourcePath: new FormControl<string>(sourcePath, { nonNullable: true }),\n keysCsv: new FormControl<string>(keysCsv, { nonNullable: true }),\n expression: new FormControl<string>(compute?.kind === 'expr' ? compute.expression || '' : '', { nonNullable: true }),\n transformerId: new FormControl<string>(\n compute?.kind === 'transformer' ? compute.transformerId || '' : '',\n { nonNullable: true },\n ),\n options: new FormControl<string>(\n compute?.kind === 'transformer'\n ? JSON.stringify(compute.options || {}, null, 2)\n : '',\n { nonNullable: true },\n ),\n template: new FormControl<string>(\n compute?.kind === 'template'\n ? JSON.stringify(compute.value, null, 2)\n : compute?.kind === 'operator' && compute.operator === 'template'\n ? JSON.stringify(compute.options?.['value'], null, 2)\n : '',\n { nonNullable: true },\n ),\n description: new FormControl<string>(config?.description || '', { nonNullable: true }),\n });\n }\n\n private buildState(): PageState | null {\n const values = this.parseJson<Record<string, any>>(this.stateValuesControl.value, {});\n if (values === null) return null;\n\n const schema = this.buildSchema();\n if (schema === null) return null;\n\n const derived = this.buildDerived();\n if (derived === null) return null;\n\n if (!Object.keys(values).length && !Object.keys(schema).length && !Object.keys(derived).length) {\n return undefined;\n }\n\n const state: WidgetPageStateDefinition = {};\n if (Object.keys(values).length) state.values = values;\n if (Object.keys(schema).length) state.schema = schema;\n if (Object.keys(derived).length) state.derived = derived;\n return state;\n }\n\n private buildSchema(): Record<string, WidgetStateNode> | null {\n const schema: Record<string, WidgetStateNode> = {};\n for (const group of this.schemaNodes.controls) {\n const path = group.controls.path.value.trim();\n if (!path) continue;\n const initial = this.parseJson<any>(group.controls.initial.value, undefined);\n if (initial === null) return null;\n const node: WidgetStateNode = {};\n const type = group.controls.type.value.trim();\n const persist = group.controls.persist.value.trim();\n const mergeStrategy = group.controls.mergeStrategy.value.trim() as WidgetStateNode['mergeStrategy'];\n const description = group.controls.description.value.trim();\n if (type) node.type = type;\n if (initial !== undefined) node.initial = initial;\n if (persist === 'true') node.persist = true;\n if (persist === 'false') node.persist = false;\n if (mergeStrategy) node.mergeStrategy = mergeStrategy;\n if (description) node.description = description;\n schema[path] = node;\n }\n return schema;\n }\n\n private buildDerived(): Record<string, WidgetDerivedStateNode> | null {\n const derived: Record<string, WidgetDerivedStateNode> = {};\n for (const group of this.derivedNodes.controls) {\n const path = group.controls.path.value.trim();\n if (!path) continue;\n const dependsOn = group.controls.dependsOn.value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n const computeKind = group.controls.computeKind.value;\n const description = group.controls.description.value.trim();\n let compute: WidgetDerivedStateNode['compute'];\n\n if (computeKind === 'template') {\n const value = this.parseJson<any>(group.controls.template.value, undefined);\n if (value === null) return null;\n compute = { kind: 'template', value };\n } else if (computeKind === 'expr') {\n compute = { kind: 'expr', expression: group.controls.expression.value.trim() };\n } else if (computeKind === 'transformer') {\n const options = this.parseJson<Record<string, any>>(group.controls.options.value, {});\n if (options === null) return null;\n compute = {\n kind: 'transformer',\n transformerId: group.controls.transformerId.value.trim(),\n options,\n };\n } else {\n const operator = group.controls.operator.value.trim() || 'merge-objects';\n const options = this.buildOperatorOptions(group);\n if (options === null) return null;\n compute = {\n kind: 'operator',\n operator,\n options,\n };\n }\n\n derived[path] = {\n dependsOn,\n compute,\n ...(description ? { description } : {}),\n };\n }\n return derived;\n }\n\n private normalizeState(state: WidgetPageStateInput | undefined): WidgetPageStateDefinition {\n if (!state) return { values: {} };\n const isStructured =\n typeof state === 'object'\n && !Array.isArray(state)\n && ('values' in state || 'schema' in state || 'derived' in state);\n if (isStructured) {\n const structured = state as WidgetPageStateDefinition;\n return {\n values: this.clone(structured.values) || {},\n schema: this.clone(structured.schema),\n derived: this.clone(structured.derived),\n };\n }\n return { values: this.clone(state as Record<string, any>) || {} };\n }\n\n private parsePage(input: GridPageDefinition | string | null | undefined): GridPageDefinition | null {\n if (!input) return null;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as GridPageDefinition;\n } catch {\n return null;\n }\n }\n return input;\n }\n\n private parseContext(raw: string): Record<string, any> | null {\n if (!raw.trim()) return {};\n try {\n return JSON.parse(raw) as Record<string, any>;\n } catch {\n return null;\n }\n }\n\n private parseJson<T>(raw: string, emptyValue: T): T | null {\n if (!raw.trim()) return emptyValue;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n }\n\n private buildOperatorOptions(group: DerivedNodeGroup): Record<string, any> | null {\n const operator = group.controls.operator.value.trim();\n if (operator === 'pick' || operator === 'omit') {\n const source = group.controls.sourcePath.value.trim();\n const keys = group.controls.keysCsv.value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n const options: Record<string, any> = {};\n if (source) options['source'] = source;\n if (keys.length) options['keys'] = keys;\n return options;\n }\n return {};\n }\n\n private buildOptions(values: { cols?: number | null; rowHeight?: number | null; gap?: number | null }): PageOptions {\n const options: PageOptions = {};\n if (values.cols != null) options.cols = values.cols;\n if (values.rowHeight != null) options.rowHeight = values.rowHeight;\n if (values.gap != null) options.gap = values.gap;\n return options;\n }\n\n private clone<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n return JSON.parse(JSON.stringify(value));\n }\n}\n","import {\n ComponentMetadataRegistry,\n GridPageDefinition,\n GridWidgetInstance,\n PageIdentity,\n WidgetConnection,\n WidgetPageStateInput,\n deepMerge,\n generateId,\n} from '@praxisui/core';\nimport type { ComponentDocMeta } from '@praxisui/core';\nimport type { AiCapability } from '@praxisui/core';\nimport type { GridsterConfig } from 'angular-gridster2';\nimport { PAGE_BUILDER_AI_CAPABILITIES } from './page-builder-ai-capabilities';\nimport { getPageAiCatalog } from './page-builder-ai-catalog';\n\nexport type PageBuilderConfig = {\n page?: BuilderPageDefinition;\n context?: Record<string, unknown> | null;\n enableCustomization?: boolean;\n showSettingsButton?: boolean;\n strictValidation?: boolean;\n gridsterOptions?: Partial<GridsterConfig>;\n pageIdentity?: PageIdentity;\n};\n\nexport interface PageBuilderHost {\n page?: BuilderPageDefinition | string;\n context?: Record<string, unknown> | null;\n enableCustomization: boolean;\n showSettingsButton: boolean;\n strictValidation: boolean;\n gridsterOptions?: Partial<GridsterConfig>;\n pageIdentity?: PageIdentity;\n applyConfigFromAdapter(config: PageBuilderConfig): void;\n}\n\ntype LegacyWidget = GridWidgetInstance & {\n x?: number;\n y?: number;\n cols?: number;\n rows?: number;\n minItemCols?: number;\n minItemRows?: number;\n maxItemCols?: number;\n maxItemRows?: number;\n};\n\ntype WidgetLayout = {\n col?: number;\n row?: number;\n colSpan?: number;\n rowSpan?: number;\n};\n\ntype ComponentCatalogEntry = {\n id: string;\n friendlyName?: string;\n description?: string;\n icon?: string;\n tags?: string[];\n inputs?: string[];\n outputs?: string[];\n layoutHints?: ComponentDocMeta['layoutHints'];\n};\n\ntype BuilderPageDefinition = GridPageDefinition & {\n state?: WidgetPageStateInput;\n connections?: WidgetConnection[];\n};\n\ntype GridConnection = NonNullable<BuilderPageDefinition['connections']>[number];\n\ntype PatchResult = {\n success: boolean;\n warnings?: string[];\n error?: string;\n};\n\nexport class PageBuilderAiAdapter {\n componentName = 'Page Builder';\n componentId = 'praxis-dynamic-gridster-page';\n componentType = 'page';\n\n constructor(\n private host: PageBuilderHost,\n private registry?: ComponentMetadataRegistry,\n ) {\n }\n\n getCurrentConfig(): PageBuilderConfig {\n const page = this.normalizePageForAi(this.parsePage(this.host.page));\n const config: PageBuilderConfig = {\n page: page ? this.clone(page) : { widgets: [] },\n context: this.clone(this.host.context ?? null),\n enableCustomization: this.host.enableCustomization,\n showSettingsButton: this.host.showSettingsButton,\n strictValidation: this.host.strictValidation,\n gridsterOptions: this.pickGridsterOptions(this.host.gridsterOptions),\n pageIdentity: this.clone(this.host.pageIdentity),\n };\n return config;\n }\n\n getCapabilities(): AiCapability[] {\n return getPageAiCatalog(this.getCurrentConfig()).capabilities;\n }\n\n getRuntimeState(): Record<string, unknown> {\n const page = this.normalizePageForAi(this.parsePage(this.host.page));\n const widgets = page?.widgets || [];\n const connections = page?.connections || [];\n return {\n widgetsCount: widgets.length,\n connectionsCount: connections.length,\n widgetKeys: widgets.map((w) => w.key),\n widgetTypes: widgets.map((w) => w.definition?.id).filter((id) => !!id),\n componentCatalog: this.buildComponentCatalog(),\n };\n }\n\n createSnapshot(): PageBuilderConfig {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: PageBuilderConfig): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(snapshot);\n }\n\n async applyPatch(\n patch: Partial<PageBuilderConfig>,\n _intent?: string,\n ): Promise<PatchResult> {\n try {\n const warnings: string[] = [];\n const current = this.getCurrentConfig();\n const normalizedPatch = this.normalizePatch(patch, current, warnings);\n const merged = deepMerge(current, normalizedPatch);\n const next = this.normalizeConfigForRuntime(merged, warnings);\n this.applyConfig(next);\n return warnings.length ? { success: true, warnings } : { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error applying patch';\n return { success: false, error: message };\n }\n }\n\n private applyConfig(config: PageBuilderConfig): void {\n this.host.applyConfigFromAdapter(config);\n }\n\n private parsePage(input?: BuilderPageDefinition | string | null): BuilderPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') {\n try {\n return JSON.parse(input) as BuilderPageDefinition;\n } catch {\n return undefined;\n }\n }\n return input;\n }\n\n private normalizePageForAi(page?: BuilderPageDefinition): BuilderPageDefinition | undefined {\n if (!page) return page;\n const widgets = (page.widgets || []).map((w) => this.ensureLayoutFromLegacy(this.clone(w)));\n const options = page.options ?? this.pageOptionsFromGridster(this.host.gridsterOptions);\n return { ...this.clone(page), widgets, ...(options ? { options } : {}) };\n }\n\n private normalizeConfigForRuntime(\n config: PageBuilderConfig,\n warnings: string[],\n ): PageBuilderConfig {\n const page = this.normalizePageForRuntime(config.page, warnings);\n const gridsterOptions = this.mergeRuntimeGridsterOptions(\n this.host.gridsterOptions,\n config.gridsterOptions,\n config.page?.options,\n );\n return {\n ...config,\n page,\n gridsterOptions,\n };\n }\n\n private normalizePageForRuntime(\n page: BuilderPageDefinition | undefined,\n warnings: string[],\n ): BuilderPageDefinition | undefined {\n if (!page) return page;\n const widgets = (page.widgets || []).map((w) => this.ensureLegacyLayout(w, warnings));\n return { ...page, widgets };\n }\n\n private normalizePatch(\n patch: Partial<PageBuilderConfig>,\n base: PageBuilderConfig,\n warnings: string[],\n ): Partial<PageBuilderConfig> {\n if (!patch || typeof patch !== 'object') return {};\n const cloned = this.clone(patch) as Partial<PageBuilderConfig>;\n if (cloned.page?.widgets) {\n cloned.page = {\n ...cloned.page,\n widgets: cloned.page.widgets.map((w) => this.ensureLayoutFromLegacy(w)),\n };\n }\n if (cloned.page?.connections) {\n cloned.page = {\n ...cloned.page,\n connections: cloned.page.connections.filter((c) => {\n if (!this.connectionKey(c)) {\n warnings.push('Connection missing from/to information was ignored.');\n return false;\n }\n return true;\n }),\n };\n }\n if (cloned.page?.options) {\n cloned.gridsterOptions = deepMerge(\n cloned.gridsterOptions || {},\n this.gridsterFromPageOptions(cloned.page.options),\n );\n }\n if (cloned.page?.widgets) {\n const mergedWidgets = this.mergeWidgets(\n base.page?.widgets || [],\n cloned.page.widgets,\n warnings,\n );\n cloned.page = { ...cloned.page, widgets: mergedWidgets };\n }\n if (cloned.page?.connections) {\n const mergedConnections = this.mergeConnections(\n base.page?.connections || [],\n cloned.page.connections,\n );\n cloned.page = { ...cloned.page, connections: mergedConnections };\n }\n return cloned;\n }\n\n private mergeWidgets(\n baseWidgets: GridWidgetInstance[],\n patchWidgets: GridWidgetInstance[],\n warnings: string[],\n ): GridWidgetInstance[] {\n const normalizedPatch = patchWidgets.map((w) => this.ensureLayoutFromLegacy(w));\n \n // Process updates and removals\n const merged = baseWidgets\n .map((orig) => {\n const key = this.getWidgetKey(orig);\n const match = key\n ? normalizedPatch.find((p) => this.getWidgetKey(p) === key)\n : undefined;\n \n if (match && (match as any)._delete) {\n return null; // Mark for removal\n }\n \n return match ? (deepMerge(orig, match) as GridWidgetInstance) : orig;\n })\n .filter((w): w is GridWidgetInstance => w !== null);\n\n // Process additions\n for (const patch of normalizedPatch) {\n if ((patch as any)._delete) continue; // Skip deletion patches here\n\n const key = this.getWidgetKey(patch) || this.generateWidgetKey(patch);\n if (!key) {\n warnings.push('Widget without key/id was ignored.');\n continue;\n }\n if (!baseWidgets.find((w) => this.getWidgetKey(w) === key)) {\n const next = { ...patch, key };\n merged.push(this.ensureLegacyLayout(next, warnings));\n }\n }\n return merged;\n }\n\n private mergeConnections(\n baseConnections: BuilderPageDefinition['connections'],\n patchConnections: BuilderPageDefinition['connections'],\n ): BuilderPageDefinition['connections'] {\n const base = baseConnections || [];\n const patch = patchConnections || [];\n if (patch.length === 0) return base;\n\n // Process updates and removals\n const merged = base\n .map((orig) => {\n const key = this.connectionKey(orig);\n const match = key ? patch.find((p) => this.connectionKey(p) === key) : undefined;\n \n if (match && (match as any)._delete) {\n return null; // Mark for removal\n }\n\n return match ? (deepMerge(orig, match) as typeof orig) : orig;\n })\n .filter((c): c is NonNullable<typeof c> => c !== null);\n\n // Process additions\n for (const conn of patch) {\n if ((conn as any)._delete) continue;\n\n const key = this.connectionKey(conn);\n if (!key) continue;\n if (!base.find((c) => this.connectionKey(c) === key)) {\n merged.push(conn);\n }\n }\n return merged;\n }\n\n private ensureLayoutFromLegacy(widget: GridWidgetInstance): GridWidgetInstance {\n const legacy = widget as LegacyWidget;\n const layout = legacy.layout ?? this.layoutFromLegacy(legacy);\n return layout ? ({ ...legacy, layout } as GridWidgetInstance) : widget;\n }\n\n private ensureLegacyLayout(\n widget: GridWidgetInstance,\n warnings: string[],\n ): GridWidgetInstance {\n const legacy = widget as LegacyWidget;\n const layout = legacy.layout ?? this.layoutFromLegacy(legacy);\n const safeLayout = layout ?? { col: 1, row: 1, colSpan: 3, rowSpan: 3 };\n if (!layout) {\n warnings.push(`Widget \"${legacy.key || legacy.definition?.id || 'unknown'}\" missing layout; using defaults.`);\n }\n const col = this.coerceNumber(safeLayout.col, 1);\n const row = this.coerceNumber(safeLayout.row, 1);\n const colSpan = this.coerceNumber(safeLayout.colSpan, 3);\n const rowSpan = this.coerceNumber(safeLayout.rowSpan, 3);\n return {\n ...legacy,\n layout: { col, row, colSpan, rowSpan },\n x: Math.max(0, col - 1),\n y: Math.max(0, row - 1),\n cols: colSpan,\n rows: rowSpan,\n } as GridWidgetInstance;\n }\n\n private layoutFromLegacy(widget: LegacyWidget): WidgetLayout | undefined {\n if (widget.layout) return widget.layout;\n if (typeof widget.x !== 'number' || typeof widget.y !== 'number') return undefined;\n const colSpan = typeof widget.cols === 'number' ? widget.cols : 3;\n const rowSpan = typeof widget.rows === 'number' ? widget.rows : 3;\n return { col: widget.x + 1, row: widget.y + 1, colSpan, rowSpan };\n }\n\n private getWidgetKey(widget: GridWidgetInstance | undefined): string | undefined {\n if (!widget) return undefined;\n const key = (widget as { key?: unknown }).key;\n if (typeof key !== 'string') return undefined;\n const trimmed = key.trim();\n return trimmed ? trimmed : undefined;\n }\n\n private generateWidgetKey(widget: GridWidgetInstance): string | undefined {\n const id = (widget as { definition?: { id?: unknown } }).definition?.id;\n const prefix = typeof id === 'string' && id.trim() ? id.trim() : 'widget';\n return `${prefix}-${generateId()}`;\n }\n\n private connectionKey(connection: GridConnection | undefined): string | null {\n if (!connection) return null;\n const from = 'widget' in connection.from\n ? (connection.from.widget && connection.from.output ? `widget:${connection.from.widget}::${connection.from.output}` : null)\n : (connection.from.state ? `state:${connection.from.state}` : null);\n const to = 'widget' in connection.to\n ? (connection.to.widget && connection.to.input ? `widget:${connection.to.widget}::${connection.to.input}` : null)\n : (connection.to.state ? `state:${connection.to.state}` : null);\n if (!from || !to) return null;\n return `${from}->${to}`;\n }\n\n private gridsterFromPageOptions(options?: GridPageDefinition['options']): Partial<GridsterConfig> {\n if (!options) return {};\n const patch: Partial<GridsterConfig> = {};\n if (typeof options.cols === 'number') {\n patch.minCols = options.cols;\n patch.maxCols = options.cols;\n }\n if (typeof options.rowHeight === 'number') {\n patch.fixedRowHeight = options.rowHeight;\n }\n if (typeof options.gap === 'number') {\n patch.margin = options.gap;\n }\n return patch;\n }\n\n private mergeRuntimeGridsterOptions(\n base: Partial<GridsterConfig> | undefined,\n overrides: Partial<GridsterConfig> | undefined,\n options?: GridPageDefinition['options'],\n ): Partial<GridsterConfig> | undefined {\n const fromOptions = this.gridsterFromPageOptions(options);\n const merged = { ...(base || {}), ...(overrides || {}), ...(fromOptions || {}) };\n return Object.keys(merged).length ? merged : undefined;\n }\n\n private pageOptionsFromGridster(options?: Partial<GridsterConfig>): GridPageDefinition['options'] | undefined {\n if (!options) return undefined;\n const cols = this.pickNumber(options.maxCols ?? options.minCols);\n const rowHeight = this.pickNumber(options.fixedRowHeight);\n const gap = this.pickNumber(options.margin);\n if (cols == null && rowHeight == null && gap == null) return undefined;\n return {\n ...(cols != null ? { cols } : {}),\n ...(rowHeight != null ? { rowHeight } : {}),\n ...(gap != null ? { gap } : {}),\n };\n }\n\n private pickGridsterOptions(\n options?: Partial<GridsterConfig>,\n ): Partial<GridsterConfig> | undefined {\n if (!options) return undefined;\n const picked: Partial<GridsterConfig> = {};\n if (typeof options.minCols === 'number') picked.minCols = options.minCols;\n if (typeof options.maxCols === 'number') picked.maxCols = options.maxCols;\n if (typeof options.fixedRowHeight === 'number') picked.fixedRowHeight = options.fixedRowHeight;\n if (typeof options.margin === 'number') picked.margin = options.margin;\n return Object.keys(picked).length ? picked : undefined;\n }\n\n private buildComponentCatalog(): ComponentCatalogEntry[] {\n if (!this.registry) return [];\n return this.registry.getAll().map((meta) => ({\n id: meta.id,\n friendlyName: meta.friendlyName,\n description: meta.description,\n icon: meta.icon,\n tags: meta.tags,\n inputs: (meta.inputs || []).map((input) => input.name),\n outputs: (meta.outputs || []).map((output) => output.name),\n layoutHints: meta.layoutHints,\n }));\n }\n\n private pickNumber(value: unknown): number | null {\n return typeof value === 'number' && !Number.isNaN(value) ? value : null;\n }\n\n private coerceNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && !Number.isNaN(value) ? value : fallback;\n }\n\n private clone<T>(value: T): T {\n if (value == null || typeof value !== 'object') return value;\n try {\n return structuredClone(value);\n } catch {\n return JSON.parse(JSON.stringify(value));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChange, SimpleChanges, signal, ElementRef, Inject, Optional, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { DynamicWidgetLoaderDirective, ComponentKeyService, GlobalActionService } from '@praxisui/core';\nimport { GridPageDefinition, GridWidgetInstance, WidgetConnection, WidgetShellActionEvent, WidgetShellComponent } from '@praxisui/core';\nimport { ConnectionManagerService } from '@praxisui/core';\nimport { Router } from '@angular/router';\nimport {\n GridsterComponent,\n GridsterConfig,\n GridsterItem,\n GridsterItemComponent,\n} from 'angular-gridster2';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { FloatingToolbarComponent } from './editor/floating-toolbar.component';\nimport { TileToolbarComponent } from './editor/tile-toolbar.component';\nimport { ConfirmDialogComponent } from './editor/confirm-dialog.component';\nimport { ComponentPaletteDialogComponent } from './editor/component-palette-dialog.component';\nimport { ConnectionBuilderComponent } from './editor/connection-builder.component';\nimport { ConnectionGraphComponent } from './editor/connection-graph/connection-graph.component';\nimport { GraphMapperService } from './editor/connection-graph/graph-mapper.service';\nimport { ComponentMetadataRegistry } from '@praxisui/core';\nimport { ConnectionEditorDialogComponent } from './editor/connection-editor/connection-editor-dialog.component';\nimport { generateId } from '@praxisui/core';\nimport { SETTINGS_PANEL_BRIDGE, SettingsPanelBridge } from '@praxisui/core';\nimport { TABLE_CONFIG_EDITOR, STEPPER_CONFIG_EDITOR } from '@praxisui/core';\nimport { PageConfigEditorComponent } from './page-config-editor/page-config-editor.component';\nimport { PageIdentity, PersistedPageConfig, buildPageKey } from '@praxisui/core';\nimport { ASYNC_CONFIG_STORAGE, AsyncConfigStorage } from '@praxisui/core';\nimport { take } from 'rxjs/operators';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { PageBuilderAiAdapter, PageBuilderConfig, PageBuilderHost } from './ai/page-builder-ai.adapter';\nimport { WidgetShellEditorComponent } from './editor/widget-shell-editor.component';\n// Avoid static import from @praxisui/table to prevent cross-entry circular deps.\n// We'll lazy-load the editor component when needed.\n\ntype ItemWithKey = GridsterItem & { __key__: string };\ntype GridsterWidgetInstance = GridWidgetInstance & {\n x?: number;\n y?: number;\n cols?: number;\n rows?: number;\n minItemCols?: number;\n minItemRows?: number;\n maxItemCols?: number;\n maxItemRows?: number;\n};\n\n@Component({\n selector: 'praxis-dynamic-gridster-page',\n standalone: true,\n imports: [CommonModule, GridsterComponent, GridsterItemComponent, DynamicWidgetLoaderDirective, MatButtonModule, MatIconModule, MatDialogModule, FloatingToolbarComponent, TileToolbarComponent, PraxisAiAssistantComponent, WidgetShellComponent],\n template: `\n <gridster [options]=\"options\" [class.editing]=\"overlayEnabled && showSettings()\" [class.interacting]=\"overlayEnabled && interacting\">\n <gridster-item *ngFor=\"let it of items(); trackBy: trackItem\" [item]=\"it\">\n <div class=\"pdx-gridster-item mat-elevation-z4\"\n [attr.id]=\"computeTileDomId(it.__key__)\"\n [attr.data-widget-key]=\"it.__key__\"\n [attr.data-widget-type]=\"getWidgetType(it.__key__)\"\n [class.selected]=\"isSelected(it.__key__)\"\n (click)=\"onTileClick(it.__key__, $event)\"\n tabindex=\"0\">\n <praxis-tile-toolbar\n *ngIf=\"showSettings()\"\n [selected]=\"isSelected(it.__key__)\"\n [widgetType]=\"getWidgetType(it.__key__) || null\"\n (remove)=\"confirmRemoveWidget(it.__key__)\"\n (settings)=\"openWidgetSettings(it.__key__)\"\n (shell)=\"openWidgetShellSettings(it.__key__)\"\n ></praxis-tile-toolbar>\n <praxis-widget-shell\n [shell]=\"getWidgetShell(it.__key__)\"\n [context]=\"mergedContext\"\n (action)=\"onShellAction(it.__key__, $event)\"\n >\n <ng-container\n [dynamicWidgetLoader]=\"getWidgetDef(it.__key__)\"\n [context]=\"mergedContext\"\n [strictValidation]=\"strictValidation\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onWidgetEvent(it.__key__, $event)\"\n ></ng-container>\n </praxis-widget-shell>\n </div>\n </gridster-item>\n </gridster>\n <button\n mat-mini-fab\n color=\"primary\"\n class=\"pdx-settings-button\"\n *ngIf=\"showSettings() && showSettingsButton\"\n (click)=\"openPageSettings()\"\n aria-label=\"Configurações da Página\"\n >\n <mat-icon>settings</mat-icon>\n </button>\n <praxis-floating-toolbar\n [visible]=\"showSettings()\"\n [canUndo]=\"false\"\n [canRedo]=\"false\"\n (add)=\"onAddComponent()\"\n (connections)=\"openConnectionsGraph()\"\n (connectionsEdit)=\"openConnectionsBuilder()\"\n (connectionsVisual)=\"openConnectionsEditor()\"\n (settings)=\"openPageSettings()\"\n (save)=\"savePage()\"\n (preview)=\"togglePreview()\"\n >\n <praxis-ai-assistant\n *ngIf=\"showSettings()\"\n pdx-toolbar-extra\n [adapter]=\"aiAdapter\">\n </praxis-ai-assistant>\n </praxis-floating-toolbar>\n `,\n styles: [\n `\n :host { display: block; position: relative; }\n :host ::ng-deep gridster { position: relative; }\n :host ::ng-deep gridster.editing::before,\n :host ::ng-deep gridster.interacting::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n opacity: 0.6;\n z-index: 0; /* Put overlay behind tiles */\n background-image:\n radial-gradient(circle at 1px 1px, var(--md-sys-color-outline-variant) 1px, transparent 1px),\n radial-gradient(circle, var(--md-sys-color-outline-variant) 1px, transparent 1px);\n background-size: var(--pdx-col-step, 16px) var(--pdx-row-step, 16px), calc(var(--pdx-col-step, 16px) * 4) calc(var(--pdx-row-step, 16px) * 4);\n }\n .pdx-gridster-item { position: relative; height: 100%; }\n `,\n ],\n})\nexport class DynamicGridsterPageComponent implements OnChanges, PageBuilderHost {\n @Input() page?: GridPageDefinition | string;\n @Input() context?: Record<string, any> | null = null;\n @Input() strictValidation = true;\n @Input() gridsterOptions?: Partial<GridsterConfig>;\n /** Shows settings button and enables in-place editing affordances */\n @Input() enableCustomization = false;\n /** When true, shows small floating settings fab; if false, rely on bottom toolbar */\n @Input() showSettingsButton = true;\n /** Optional identity; if not provided, will derive routePath from current Router URL */\n @Input() pageIdentity?: PageIdentity;\n /** Optional instance key for pages rendered multiple times */\n @Input() componentInstanceId?: string;\n\n @Output() layoutChange = new EventEmitter<GridWidgetInstance[]>();\n @Output() pageChange = new EventEmitter<GridPageDefinition>();\n\n mergedContext: Record<string, any> = {};\n private selectedKey = signal<string | null>(null);\n private widgets = signal<GridWidgetInstance[]>([]);\n private readonly globalActions = inject(GlobalActionService);\n items = signal<ItemWithKey[]>([]);\n interacting = false;\n overlayEnabled = true;\n private appliedPersisted = false;\n public aiAdapter: PageBuilderAiAdapter;\n\n options: GridsterConfig = {\n minCols: 12,\n maxCols: 12,\n minRows: 12,\n defaultItemCols: 3,\n defaultItemRows: 3,\n margin: 12,\n fixedRowHeight: 80,\n draggable: { enabled: false },\n resizable: { enabled: false },\n displayGrid: 'onDrag&Resize',\n itemChangeCallback: (item) => this.onItemChanged(item),\n itemResizeCallback: (item) => this.onItemChanged(item),\n } as GridsterConfig;\n\n // Preserve component instances when items list changes\n trackItem = (_: number, it: ItemWithKey) => it.__key__;\n\n constructor(\n private conn: ConnectionManagerService,\n private router: Router,\n private host: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n private graphMapper: GraphMapperService,\n private registry: ComponentMetadataRegistry,\n @Inject(ASYNC_CONFIG_STORAGE) private storage: AsyncConfigStorage,\n private componentKeys: ComponentKeyService,\n @Optional() @Inject(TABLE_CONFIG_EDITOR) private tableConfigEditor: any,\n @Optional() @Inject(STEPPER_CONFIG_EDITOR) private stepperConfigEditor: any,\n @Optional() @Inject(SETTINGS_PANEL_BRIDGE) private settingsPanel: SettingsPanelBridge | null,\n @Optional() private route: ActivatedRoute | null,\n ) {\n this.aiAdapter = new PageBuilderAiAdapter(this, this.registry);\n }\n\n applyConfigFromAdapter(next: PageBuilderConfig): void {\n const prevPage = this.page;\n const prevContext = this.context;\n const prevGridsterOptions = this.gridsterOptions;\n const prevEditModeEnabled = this.enableCustomization;\n\n this.page = next.page;\n this.context = next.context ?? null;\n this.gridsterOptions = next.gridsterOptions;\n this.enableCustomization = next.enableCustomization ?? this.enableCustomization;\n this.showSettingsButton = next.showSettingsButton ?? this.showSettingsButton;\n this.strictValidation = next.strictValidation ?? this.strictValidation;\n this.pageIdentity = next.pageIdentity ?? this.pageIdentity;\n\n const changes: SimpleChanges = {};\n if (prevPage !== this.page) {\n changes['page'] = new SimpleChange(prevPage, this.page, false);\n }\n if (prevContext !== this.context) {\n changes['context'] = new SimpleChange(prevContext, this.context, false);\n }\n if (prevGridsterOptions !== this.gridsterOptions) {\n changes['gridsterOptions'] = new SimpleChange(prevGridsterOptions, this.gridsterOptions, false);\n }\n if (prevEditModeEnabled !== this.enableCustomization) {\n changes['enableCustomization'] = new SimpleChange(prevEditModeEnabled, this.enableCustomization, false);\n }\n if (Object.keys(changes).length > 0) {\n this.ngOnChanges(changes);\n }\n if (prevPage !== this.page && this.page && typeof this.page === 'object') {\n this.pageChange.emit(this.page);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const pageOrContextChanged = !!(changes['page'] || changes['context']);\n const anyOptionsChanged = !!(changes['gridsterOptions'] || changes['enableCustomization'] || pageOrContextChanged);\n\n const parsed = this.parsePage(this.page);\n const ctx = parsed?.context || {};\n\n if (pageOrContextChanged) {\n // Only reset widgets when page/context changed\n const widgets = parsed?.widgets || [];\n const enriched = this.applyEditShellActions(this.enrichWithInheritedInputs(widgets));\n this.widgets.set(enriched);\n this.mergedContext = { ...ctx, ...(this.context || {}) };\n try { this.overlayEnabled = (ctx as any)?.ui?.editingOverlay ?? true; } catch { this.overlayEnabled = true; }\n const items = enriched.map((w) => this.widgetToItem(w));\n this.items.set(items);\n if (!this.appliedPersisted) {\n this.appliedPersisted = true;\n this.loadPersistedPage();\n }\n }\n\n if (anyOptionsChanged) {\n const fromPage = this.gridsterFromPageOptions(parsed?.options);\n const opts = { ...this.options, ...(this.gridsterOptions || {}), ...(fromPage || {}) } as GridsterConfig;\n opts.draggable = { enabled: !!this.enableCustomization } as any;\n opts.resizable = { enabled: !!this.enableCustomization } as any;\n this.options = opts;\n }\n }\n\n private parsePage(input?: GridPageDefinition | string | null): GridPageDefinition | undefined {\n if (!input) return undefined;\n if (typeof input === 'string') { try { return JSON.parse(input) as GridPageDefinition; } catch { return undefined; } }\n return input;\n }\n\n private gridsterFromPageOptions(options?: GridPageDefinition['options']): Partial<GridsterConfig> | null {\n if (!options) return null;\n const patch: Partial<GridsterConfig> = {};\n if (typeof options.cols === 'number') {\n patch.minCols = options.cols;\n patch.maxCols = options.cols;\n }\n if (typeof options.rowHeight === 'number') {\n patch.fixedRowHeight = options.rowHeight;\n }\n if (typeof options.gap === 'number') {\n patch.margin = options.gap;\n }\n return Object.keys(patch).length ? patch : null;\n }\n\n private enrichWithInheritedInputs(widgets: GridWidgetInstance[]): GridWidgetInstance[] {\n // Inherit any page-level provided inputs into each widget instance\n try {\n const page = this.parsePage(this.page);\n const inherited = (page as any)?.context?.inheritedInputs;\n const inheritedInputs =\n inherited && typeof inherited === 'object' ? inherited : {};\n return widgets.map((w) => this.applyWidgetInputs(w, inheritedInputs));\n } catch {\n return widgets;\n }\n }\n\n private applyWidgetInputs(\n widget: GridWidgetInstance,\n inheritedInputs: Record<string, any>,\n ): GridWidgetInstance {\n const def = widget.definition || ({} as any);\n const inputs = { ...(def.inputs || {}), ...inheritedInputs };\n const enriched = this.ensureComponentInstanceId(widget.key, def.id, inputs);\n return { ...widget, definition: { ...def, inputs: enriched } };\n }\n\n private ensureComponentInstanceId(\n widgetKey: string,\n widgetId: string | undefined,\n inputs: Record<string, any>,\n ): Record<string, any> {\n if (!widgetId) return inputs;\n const explicit = inputs['componentInstanceId'];\n if (explicit != null && String(explicit).trim()) return inputs;\n const meta = this.registry.get(widgetId);\n const supports = meta?.inputs?.some((i) => i.name === 'componentInstanceId');\n if (!supports) return inputs;\n return { ...inputs, componentInstanceId: widgetKey };\n }\n\n private widgetToItem(w: GridWidgetInstance): ItemWithKey {\n const legacy = w as GridsterWidgetInstance;\n const layout = w.layout;\n const x = typeof legacy.x === 'number' ? legacy.x : (layout?.col != null ? Math.max(0, layout.col - 1) : undefined);\n const y = typeof legacy.y === 'number' ? legacy.y : (layout?.row != null ? Math.max(0, layout.row - 1) : undefined);\n const cols = typeof legacy.cols === 'number' ? legacy.cols : layout?.colSpan;\n const rows = typeof legacy.rows === 'number' ? legacy.rows : layout?.rowSpan;\n return {\n x,\n y,\n cols,\n rows,\n minItemCols: legacy.minItemCols,\n minItemRows: legacy.minItemRows,\n maxItemCols: legacy.maxItemCols,\n maxItemRows: legacy.maxItemRows,\n __key__: w.key,\n } as ItemWithKey;\n }\n\n computeTileDomId(key: string): string { return `pdx-grid-tile-${key}`; }\n isSelected(key: string): boolean { return this.selectedKey() === key; }\n getWidgetType(key: string): string | undefined { return (this.widgets().find((w) => w.key === key)?.definition?.id) || undefined; }\n getWidgetDef(key: string): any { return this.widgets().find((w) => w.key === key)?.definition; }\n getWidgetShell(key: string): any { return this.widgets().find((w) => w.key === key)?.shell; }\n\n onTileClick(key: string, ev: MouseEvent): void {\n if (!this.enableCustomization) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.selectedKey.set(key);\n }\n\n onItemChanged(item: GridsterItem): void {\n const widgets = [...this.widgets()];\n const i = widgets.findIndex((w) => w.key === (item as any).__key__);\n if (i >= 0) {\n const col = (item.x ?? 0) + 1;\n const row = (item.y ?? 0) + 1;\n const legacy = widgets[i] as GridsterWidgetInstance;\n const colSpan = item.cols ?? legacy.cols ?? 1;\n const rowSpan = item.rows ?? legacy.rows ?? 1;\n widgets[i] = {\n ...widgets[i],\n x: item.x!,\n y: item.y!,\n cols: item.cols!,\n rows: item.rows!,\n layout: { col, row, colSpan, rowSpan },\n } as any;\n this.widgets.set(widgets);\n this.layoutChange.emit(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n this.pageChange.emit({ ...parsed, widgets });\n }\n }\n\n togglePreview(): void { this.overlayEnabled = !this.overlayEnabled; }\n\n confirmRemoveWidget(key: string): void {\n const ref = this.dialog.open(ConfirmDialogComponent, { data: { title: 'Remover componente', message: `Remover ${this.getWidgetType(key)}? Esta ação também apagará conexões vinculadas.`, confirmLabel: 'Remover', cancelLabel: 'Cancelar', icon: 'delete' } });\n ref.afterClosed().subscribe((ok) => { if (ok) this.removeWidget(key); });\n }\n\n removeWidget(key: string): void {\n const widgets = this.widgets().filter((w) => w.key !== key);\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n // Remove connections referencing this widget\n const conns = (parsed.connections || []).filter((c: any) => {\n const fromMatches = c?.from && 'widget' in c.from && c.from.widget === key;\n const toMatches = c?.to && 'widget' in c.to && c.to.widget === key;\n return !fromMatches && !toMatches;\n });\n const next: GridPageDefinition = { ...parsed, widgets, connections: conns };\n this.page = next;\n this.pageChange.emit(next);\n }\n\n onAddComponent(): void {\n const ref = this.dialog.open(ComponentPaletteDialogComponent, { width: '720px', data: { title: 'Inserir componente' } });\n ref.afterClosed().subscribe((type: string | undefined) => { if (type) this.addWidget(type); });\n }\n\n addWidget(type: string): void {\n const widgets = [...this.widgets()];\n widgets.push({\n key: this.createWidgetKey(type),\n definition: { id: type, inputs: {} },\n x: 0,\n y: 0,\n cols: 3,\n rows: 3,\n layout: { col: 1, row: 1, colSpan: 3, rowSpan: 3 },\n } as any);\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n const next: GridPageDefinition = { ...parsed, widgets };\n this.page = next;\n this.pageChange.emit(next);\n }\n\n createWidgetKey(type: string): string { return `${type}-${generateId()}`; }\n\n openWidgetSettings(key: string): void {\n const def = this.getWidgetDef(key);\n if (!def) return;\n const compId = key;\n const id = def.id;\n const inputs = def.inputs || {};\n if (id === 'praxis-stepper') {\n if (this.stepperConfigEditor) this.stepperConfigEditor.open?.({ id: `stepper:${compId}`, title: 'Configurar Fluxo por Etapas', content: { component: this.stepperConfigEditor.component, inputs } });\n else this.openConnectionsBuilder();\n return;\n }\n if (id === 'praxis-table') {\n if (this.tableConfigEditor) this.tableConfigEditor.open?.({ id: `table:${compId}`, title: 'Configurar Tabela', content: { component: this.tableConfigEditor.component, inputs } });\n else this.openConnectionsBuilder();\n return;\n }\n this.openConnectionsBuilder();\n }\n\n openWidgetShellSettings(key: string): void {\n const widget = this.widgets().find((w) => w.key === key);\n if (!widget || !this.settingsPanel) return;\n const page = this.parsePage(this.page);\n const uiShell = (page?.context as any)?.ui?.shell || {};\n const ref = this.settingsPanel.open({\n id: `grid-widget-shell:${key}`,\n title: 'Configurar Card',\n content: {\n component: WidgetShellEditorComponent,\n inputs: {\n shell: widget.shell || null,\n widgetKey: key,\n widgetType: widget.definition?.id,\n presets: uiShell?.presets || null,\n pagePreset: uiShell?.preset || null,\n },\n },\n });\n ref.applied$.subscribe((result) => this.applyWidgetShell(key, result));\n ref.saved$.subscribe((result) => this.applyWidgetShell(key, result));\n }\n\n openConnectionsGraph(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n this.settingsPanel?.open({ id: 'grid-connections:graph', title: 'Conexões (Diagrama)', content: { component: ConnectionGraphComponent, inputs: { page: current, widgets: this.widgets() } } });\n }\n\n openConnectionsBuilder(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n this.settingsPanel?.open({ id: 'grid-connections:builder', title: 'Conexões (Builder)', content: { component: ConnectionBuilderComponent, inputs: { page: current, widgets: this.widgets() } } });\n }\n\n async openConnectionsEditor(): Promise<void> {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n const ref = this.dialog.open(ConnectionEditorDialogComponent, { width: '95vw', height: '95vh', maxWidth: '100vw', panelClass: 'praxis-conn-graph-dialog', autoFocus: false, restoreFocus: false, data: { page: current, widgets: this.widgets() } });\n ref.afterClosed().subscribe((res: any) => { if (res && res.page) { this.page = res.page; this.pageChange.emit(res.page); } });\n }\n\n openPageSettings(): void {\n const current = this.parsePage(this.page) || { widgets: this.widgets() } as GridPageDefinition;\n const identity = this.pageIdentity || this.derivePageIdentity();\n this.settingsPanel?.open({ id: 'grid-page-config', title: 'Configurações da Página', content: { component: PageConfigEditorComponent, inputs: { page: current, identity, gridsterOptions: this.options } } });\n }\n\n private derivePageIdentity(): PageIdentity | undefined {\n try {\n const url = this.router.url;\n const routePath = (url || '').split('?')[0] || '/';\n const appId = 'app';\n return { routePath, appId } as PageIdentity;\n } catch {}\n return undefined;\n }\n\n savePage(): void {\n const identity = this.pageIdentity || this.derivePageIdentity();\n const parsed = this.parsePage(this.page) || ({ widgets: this.widgets() } as GridPageDefinition);\n const persist: PersistedPageConfig = { key: buildPageKey(identity || { routePath: '/', appId: 'app' }), page: parsed, identity } as any;\n try {\n const key = this.storageKey(identity);\n if (key) {\n this.storage.saveConfig(key, persist as any).pipe(take(1)).subscribe({ error: () => {} });\n }\n } catch {}\n }\n\n private applyPage(persisted: PersistedPageConfig): void {\n const next = persisted?.page as GridPageDefinition;\n const hasConns = (next?.connections || []).length > 0;\n this.page = next;\n this.pageChange.emit(next);\n if (hasConns) this.items.set((next.widgets || []).map((w) => this.widgetToItem(w)) as any);\n }\n\n private loadPersistedPage(): void {\n try {\n const identity = this.pageIdentity || this.derivePageIdentity();\n const key = this.storageKey(identity);\n if (!key) return;\n this.storage.loadConfig<PersistedPageConfig>(key).pipe(take(1)).subscribe((persisted) => {\n if (persisted && persisted.page) {\n this.applyPage(persisted);\n return;\n }\n });\n } catch { return undefined; }\n }\n\n onWidgetEvent(fromKey: string, evt: { output?: string; payload?: any }): void {\n if (!evt?.output) return;\n if (this.maybeExecuteMappedAction(fromKey, evt)) return;\n const parsed = this.parsePage(this.page);\n const p = parsed || ({ widgets: this.widgets() } as GridPageDefinition);\n const matches = this.conn.findMatches(p?.connections, fromKey, evt.output);\n let widgets = [...this.widgets()];\n for (const c of matches) {\n if (!('widget' in c.to)) continue;\n widgets = this.conn.applyMatch(widgets, c as WidgetConnection & { to: { widget: string; input: string; bindingOrder?: string[] } }, evt);\n }\n this.widgets.set(widgets);\n }\n\n onShellAction(fromKey: string, evt: WidgetShellActionEvent): void {\n if (this.handleSetInputCommand(fromKey, evt)) return;\n if (this.maybeExecuteGlobalCommand(fromKey, evt)) return;\n const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);\n if (!output) return;\n this.onWidgetEvent(fromKey, { output, payload: evt.payload });\n }\n\n private handleSetInputCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n if (evt?.command !== 'pdx:set-input') return false;\n const payload = evt?.payload as any;\n const input = typeof payload?.input === 'string' ? payload.input.trim() : '';\n if (!input) return true;\n const value = payload?.value;\n const widgets = this.conn.applyMatch(\n [...this.widgets()],\n { to: { widget: fromKey, input }, set: value } as any,\n { payload: value } as any,\n );\n this.widgets.set(widgets);\n return true;\n }\n\n private maybeExecuteMappedAction(fromKey: string, evt: { output?: string; payload?: any }): boolean {\n const output = evt?.output;\n if (!output) return false;\n const parsed = this.parsePage(this.page);\n const page = parsed || ({ widgets: this.widgets() } as GridPageDefinition);\n const widget = page?.widgets?.find((w) => w.key === fromKey);\n const mapping = widget?.definition?.outputs?.[output];\n if (!mapping || mapping === 'emit') return false;\n const actionId = (mapping as any).type;\n if (!actionId) return true;\n const payload = this.resolveActionPayload((mapping as any).params, evt, fromKey);\n void this.globalActions.execute(actionId, payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output,\n payload: evt?.payload,\n pageContext: this.mergedContext || undefined,\n });\n return true;\n }\n\n private maybeExecuteGlobalCommand(fromKey: string, evt: WidgetShellActionEvent): boolean {\n const command = evt?.command || '';\n if (!command) return false;\n const prefix = command.startsWith('global:')\n ? 'global:'\n : command.startsWith('global.')\n ? 'global.'\n : '';\n if (!prefix) return false;\n const actionId = command.slice(prefix.length).trim();\n if (!actionId) return true;\n void this.globalActions.execute(actionId, evt.payload, {\n sourceId: fromKey,\n widgetKey: fromKey,\n output: evt.emit,\n payload: evt.payload,\n pageContext: this.mergedContext || undefined,\n meta: { origin: 'shell' },\n });\n return true;\n }\n\n private resolveActionPayload(\n params: Record<string, any> | undefined,\n evt: { output?: string; payload?: any },\n fromKey: string,\n ): any {\n if (!params) return evt?.payload;\n const ctx = {\n payload: evt?.payload,\n output: evt?.output,\n sourceId: fromKey,\n widgetKey: fromKey,\n context: this.mergedContext || undefined,\n };\n return this.resolveTemplate(params, ctx);\n }\n\n private resolveTemplate(raw: any, ctx: Record<string, any>): any {\n if (typeof raw === 'string') {\n const singleExpr = raw.match(/^\\$\\{([^}]+)\\}$/);\n if (singleExpr) return this.lookup(ctx, singleExpr[1].trim());\n return raw.replace(/\\$\\{([^}]+)\\}/g, (_m, path) => {\n const v = this.lookup(ctx, path.trim());\n return v != null ? String(v) : '';\n });\n }\n if (Array.isArray(raw)) return raw.map((v) => this.resolveTemplate(v, ctx));\n if (raw && typeof raw === 'object') {\n const out: any = {};\n for (const [k, v] of Object.entries(raw)) out[k] = this.resolveTemplate(v, ctx);\n return out;\n }\n return raw;\n }\n\n private lookup(ctx: any, path: string): any {\n return path.split('.').reduce((acc: any, key: string) => acc?.[key], ctx);\n }\n\n private applyWidgetShell(key: string, result: any): void {\n const payload = result && result.shell !== undefined ? result : { shell: result };\n const normalized = payload.shell && Object.keys(payload.shell).length ? payload.shell : undefined;\n const widgets = this.widgets().map((w) => (w.key === key ? { ...w, shell: normalized } : w));\n this.widgets.set(widgets);\n const parsed = this.parsePage(this.page) || ({ widgets } as GridPageDefinition);\n const next: GridPageDefinition = this.applyPageShellPreset(parsed, widgets, payload);\n this.page = next;\n this.pageChange.emit(next);\n }\n\n private applyPageShellPreset(page: GridPageDefinition, widgets: GridWidgetInstance[], payload: any): GridPageDefinition {\n if (!payload?.applyToAll || !payload?.pagePreset) return { ...page, widgets };\n const context = { ...(page.context || {}) } as any;\n const ui = { ...(context.ui || {}) } as any;\n const shell = { ...(ui.shell || {}) } as any;\n shell.preset = payload.pagePreset;\n ui.shell = shell;\n context.ui = ui;\n return { ...page, context, widgets };\n }\n\n private applyEditShellActions(widgets: GridWidgetInstance[]): GridWidgetInstance[] {\n if (!this.enableCustomization) return widgets;\n return widgets.map((w) => {\n if (!w.shell || w.shell.kind === 'none') return w;\n const shell = { ...w.shell };\n const actions = [...(shell.actions || [])];\n if (!actions.some((a) => a.id === 'widget-settings')) {\n actions.push({\n id: 'widget-settings',\n icon: 'settings',\n label: 'Configurar Card',\n placement: 'window',\n variant: 'icon',\n tooltip: 'Configurar Card',\n });\n }\n if (shell.showHeader === false) shell.showHeader = true;\n return { ...w, shell: { ...shell, actions } };\n });\n }\n\n showSettings(): boolean { return !!this.enableCustomization; }\n\n private storageKey(identity?: PageIdentity | null): string | null {\n const id = this.componentKeyId(identity || undefined);\n return id ? `grid-page:${id}` : null;\n }\n\n private componentKeyId(identity?: PageIdentity): string | null {\n const scopeId = this.buildPageScopeId(identity);\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-dynamic-gridster-page',\n componentId: scopeId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n return key;\n }\n\n private buildPageScopeId(identity?: PageIdentity): string {\n if (!identity) return 'default';\n const app = identity.appId || 'app';\n const tenant = identity.tenantId || '*';\n const user = identity.userId || '*';\n const parts = [app, tenant, user];\n if (identity.locale) parts.push(identity.locale);\n return parts.join(':');\n }\n}\n","/*\n * Public API Surface of @praxisui/page-builder\n */\n\n// Temporary minimal export for build isolation\nexport * from './lib/shim';\nexport * from './lib/editor/confirm-dialog.component';\nexport * from './lib/editor/tile-toolbar.component';\nexport * from './lib/editor/floating-toolbar.component';\nexport * from './lib/editor/component-palette-dialog.component';\nexport * from './lib/editor/connection-builder.component';\nexport * from './lib/editor/widget-shell-editor.component';\nexport * from './lib/editor/dynamic-page-config-editor.component';\nexport * from './lib/ai/page-builder-ai-capabilities';\nexport * from './lib/ai/page-builder-ai-catalog';\nexport * from './lib/ai/page-builder-ai-catalog.tokens';\nexport * from './lib/ai/page-builder-ai-catalog.providers';\nexport * from './lib/dynamic-gridster-page.component';\nexport { WidgetShellComponent } from '@praxisui/core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i5","i6","i9","i10","i11","i13","BUILTIN_PRESET_OPTIONS","i8","i7"],"mappings":"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"}