@praxisui/stepper 1.0.0-beta.47 → 1.0.0-beta.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -3
- package/fesm2022/praxisui-stepper.mjs +94 -15
- package/fesm2022/praxisui-stepper.mjs.map +1 -1
- package/index.d.ts +22 -4
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"praxisui-stepper.mjs","sources":["../../../projects/praxis-stepper/src/lib/select-quick-config.dialog.ts","../../../projects/praxis-stepper/src/lib/wizard-widget-config.dialog.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper-config-editor.ts","../../../projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts","../../../projects/praxis-stepper/src/lib/ai/stepper-ai.adapter.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-benefits-grid.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-content-block.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-inline-notice.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-divider.component.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts","../../../projects/praxis-stepper/src/lib/wizard/ft-wizard-config.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-form.adapter.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-cta-bar.component.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-form.component.ts","../../../projects/praxis-stepper/src/public-api.ts","../../../projects/praxis-stepper/src/praxisui-stepper.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface SelectQuickConfigResult {\n label?: string;\n name?: string;\n resourcePath?: string;\n optionLabelKey?: string;\n optionValueKey?: string;\n multiple?: boolean;\n required?: boolean;\n}\n\n@Component({\n selector: 'praxis-select-quick-config-dialog',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatCheckboxModule, MatButtonModule],\n template: `\n <h2 mat-dialog-title>Configurar Select (busca)</h2>\n <div mat-dialog-content class=\"g gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"model.label\" placeholder=\"Ex.: Cliente\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Nome</mat-label>\n <input matInput [(ngModel)]=\"model.name\" placeholder=\"Ex.: customerId\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>resourcePath</mat-label>\n <input matInput [(ngModel)]=\"model.resourcePath\" placeholder=\"Ex.: customers\" />\n </mat-form-field>\n <div class=\"g g-auto-220 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>optionLabelKey</mat-label>\n <input matInput [(ngModel)]=\"model.optionLabelKey\" placeholder=\"Ex.: name\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>optionValueKey</mat-label>\n <input matInput [(ngModel)]=\"model.optionValueKey\" placeholder=\"Ex.: id\" />\n </mat-form-field>\n </div>\n <div class=\"row gap-16 ai-center\">\n <mat-checkbox [(ngModel)]=\"model.multiple\">Múltipla seleção</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"model.required\">Obrigatório</mat-checkbox>\n </div>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-button (click)=\"cancel()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" (click)=\"confirm()\">Adicionar</button>\n </div>\n `,\n styles: [\n `\n .g { display: grid; }\n .gap-12 { gap: 12px; }\n .w-full { width: 100%; }\n .row { display: flex; }\n .ai-center { align-items: center; }\n .gap-16 { gap: 16px; }\n .g-auto-220 { grid-template-columns: repeat(auto-fit, minmax(220px,1fr)); }\n `,\n ],\n})\nexport class SelectQuickConfigDialogComponent {\n model: SelectQuickConfigResult = {\n label: '',\n name: '',\n resourcePath: '',\n optionLabelKey: 'label',\n optionValueKey: 'id',\n multiple: false,\n required: false,\n };\n\n constructor(\n private ref: MatDialogRef<SelectQuickConfigDialogComponent, SelectQuickConfigResult>,\n @Inject(MAT_DIALOG_DATA) data?: { from?: Partial<SelectQuickConfigResult> },\n ) {\n if (data?.from) this.model = { ...this.model, ...data.from };\n }\n\n cancel(): void { this.ref.close(); }\n confirm(): void { this.ref.close(this.model); }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\ntype WizardWidgetId =\n | 'praxis-wizard-benefits'\n | 'praxis-wizard-content'\n | 'praxis-wizard-inline-notice'\n | 'praxis-wizard-divider';\n\ninterface WizardBenefitItemDraft {\n icon?: string;\n title?: string;\n text?: string;\n}\n\ninterface WizardWidgetDraft {\n blockId?: string;\n title?: string;\n subtitle?: string;\n text?: string;\n caption?: string;\n tone?: 'neutral' | 'info' | 'warning';\n label?: string;\n columns?: number;\n boxed?: boolean;\n items?: WizardBenefitItemDraft[];\n}\n\nexport interface WizardWidgetConfigDialogData {\n widgetId: string;\n inputs?: Record<string, any>;\n}\n\nexport interface WizardWidgetConfigDialogResult {\n inputs: Record<string, any>;\n}\n\n@Component({\n selector: 'praxis-wizard-widget-config-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatCheckboxModule,\n MatButtonModule,\n ],\n template: `\n <h2 mat-dialog-title>{{ dialogTitle }}</h2>\n\n <div mat-dialog-content class=\"dialog-grid\">\n <ng-container [ngSwitch]=\"wizardWidgetId\">\n <ng-container *ngSwitchCase=\"'praxis-wizard-inline-notice'\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"model.text\" placeholder=\"Mensagem do aviso\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tom</mat-label>\n <select matNativeControl [(ngModel)]=\"model.tone\">\n <option value=\"neutral\">Neutro</option>\n <option value=\"info\">Informativo</option>\n <option value=\"warning\">Atenção</option>\n </select>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-content'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"model.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Subtítulo</mat-label>\n <input matInput [(ngModel)]=\"model.subtitle\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"model.text\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Legenda</mat-label>\n <input matInput [(ngModel)]=\"model.caption\" />\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-divider'\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"model.label\" placeholder=\"Opcional\" />\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-benefits'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"model.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [(ngModel)]=\"model.columns\" />\n </mat-form-field>\n <mat-checkbox [(ngModel)]=\"model.boxed\">Cards com contorno</mat-checkbox>\n\n <div class=\"benefits\">\n <div class=\"benefits-head\">\n <strong>Itens de benefício</strong>\n <button mat-stroked-button type=\"button\" (click)=\"addBenefit()\">Adicionar item</button>\n </div>\n <div class=\"benefit-card\" *ngFor=\"let item of benefits; let i = index\">\n <div class=\"benefit-head\">\n <span>Item {{ i + 1 }}</span>\n <button mat-button color=\"warn\" type=\"button\" (click)=\"removeBenefit(i)\">Remover</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [(ngModel)]=\"item.icon\" placeholder=\"Ex.: info\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"item.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"item.text\" />\n </mat-form-field>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <details class=\"advanced full\">\n <summary>Avançado</summary>\n <div class=\"advanced-body\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>ID estável (avançado)</mat-label>\n <input matInput [(ngModel)]=\"model.blockId\" placeholder=\"Ex.: ft-edit-wizard:access:block:hero\" />\n <mat-hint>Use como chave estável de telemetria/E2E. Evite alterar após publicar.</mat-hint>\n </mat-form-field>\n </div>\n </details>\n </div>\n\n <div mat-dialog-actions align=\"end\">\n <button mat-button type=\"button\" (click)=\"cancel()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"save()\">Salvar</button>\n </div>\n `,\n styles: [\n `\n .dialog-grid {\n display: grid;\n gap: 12px;\n min-width: min(760px, 92vw);\n }\n .full { grid-column: 1 / -1; }\n .benefits {\n display: grid;\n gap: 10px;\n border-top: 1px solid var(--md-sys-color-outline-variant);\n padding-top: 8px;\n }\n .benefits-head {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n .benefit-card {\n display: grid;\n gap: 8px;\n grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));\n padding: 10px;\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-lowest);\n }\n .benefit-head {\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .advanced {\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n padding: 8px 10px;\n background: var(--md-sys-color-surface-container-lowest);\n }\n .advanced > summary {\n cursor: pointer;\n font-weight: 600;\n list-style: none;\n }\n .advanced > summary::-webkit-details-marker { display: none; }\n .advanced-body {\n margin-top: 10px;\n display: grid;\n gap: 8px;\n }\n `,\n ],\n})\nexport class WizardWidgetConfigDialogComponent {\n readonly wizardWidgetId: WizardWidgetId | null;\n readonly dialogTitle: string;\n readonly model: WizardWidgetDraft;\n private readonly originalInputs: Record<string, any>;\n\n constructor(\n private readonly ref: MatDialogRef<WizardWidgetConfigDialogComponent, WizardWidgetConfigDialogResult>,\n @Inject(MAT_DIALOG_DATA) data?: WizardWidgetConfigDialogData,\n ) {\n const id = (data?.widgetId || '') as WizardWidgetId;\n this.wizardWidgetId = this.isWizardWidgetId(id) ? id : null;\n this.originalInputs = { ...(data?.inputs || {}) };\n this.model = this.buildDraft(this.originalInputs);\n this.dialogTitle = this.resolveTitle(this.wizardWidgetId);\n }\n\n get benefits(): WizardBenefitItemDraft[] {\n if (!Array.isArray(this.model.items)) this.model.items = [];\n return this.model.items;\n }\n\n addBenefit(): void {\n this.benefits.push({ title: '', text: '', icon: '' });\n }\n\n removeBenefit(index: number): void {\n this.benefits.splice(index, 1);\n }\n\n cancel(): void {\n this.ref.close();\n }\n\n save(): void {\n const next = { ...this.originalInputs, ...this.buildInputsForWidget() };\n if (typeof next.blockId === 'string') {\n next.blockId = next.blockId.trim();\n }\n if (!next.blockId) delete next.blockId;\n this.ref.close({ inputs: next });\n }\n\n private isWizardWidgetId(value: string): value is WizardWidgetId {\n return (\n value === 'praxis-wizard-benefits'\n || value === 'praxis-wizard-content'\n || value === 'praxis-wizard-inline-notice'\n || value === 'praxis-wizard-divider'\n );\n }\n\n private resolveTitle(id: WizardWidgetId | null): string {\n switch (id) {\n case 'praxis-wizard-benefits':\n return 'Editar grade de benefícios';\n case 'praxis-wizard-content':\n return 'Editar bloco de conteúdo';\n case 'praxis-wizard-inline-notice':\n return 'Editar aviso inline';\n case 'praxis-wizard-divider':\n return 'Editar divisor';\n default:\n return 'Editar Widget do Wizard';\n }\n }\n\n private buildDraft(inputs: Record<string, any>): WizardWidgetDraft {\n return {\n blockId: inputs.blockId || '',\n title: inputs.title || '',\n subtitle: inputs.subtitle || '',\n text: inputs.text || '',\n caption: inputs.caption || '',\n tone: inputs.tone || 'neutral',\n label: inputs.label || '',\n columns: Number.isFinite(Number(inputs.columns)) ? Number(inputs.columns) : 4,\n boxed: !!inputs.boxed,\n items: Array.isArray(inputs.items)\n ? inputs.items.map((item: any) => ({ icon: item?.icon || '', title: item?.title || '', text: item?.text || '' }))\n : [],\n };\n }\n\n private buildInputsForWidget(): Record<string, any> {\n if (!this.wizardWidgetId) return { ...this.model };\n const base: Record<string, any> = {};\n if (this.model.blockId?.trim()) base.blockId = this.model.blockId.trim();\n\n switch (this.wizardWidgetId) {\n case 'praxis-wizard-inline-notice':\n base.text = this.model.text || '';\n base.tone = this.model.tone || 'neutral';\n return base;\n case 'praxis-wizard-content':\n base.title = this.model.title || '';\n base.subtitle = this.model.subtitle || '';\n base.text = this.model.text || '';\n base.caption = this.model.caption || '';\n return base;\n case 'praxis-wizard-divider':\n base.label = this.model.label || '';\n return base;\n case 'praxis-wizard-benefits':\n base.title = this.model.title || '';\n base.columns = this.safeColumns(this.model.columns);\n base.boxed = !!this.model.boxed;\n base.items = this.benefits\n .map((item) => ({\n icon: item.icon || '',\n title: item.title || '',\n text: item.text || '',\n }))\n .filter((item) => item.title || item.text || item.icon);\n return base;\n default:\n return base;\n }\n }\n\n private safeColumns(value?: number): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 1) return 1;\n return Math.floor(parsed);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DragDropModule, CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BehaviorSubject } from 'rxjs';\nimport { SETTINGS_PANEL_DATA, SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { StepperMetadata, StepConfig } from './praxis-stepper';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport { PraxisDynamicFormConfigEditor } from '@praxisui/dynamic-form';\nimport { PraxisListConfigEditor } from '@praxisui/list';\nimport { PraxisFilesUploadConfigEditor } from '@praxisui/files-upload';\nimport { IconPickerService } from '@praxisui/core';\nimport { ComponentPaletteDialogComponent } from '@praxisui/page-builder';\nimport { SelectQuickConfigDialogComponent, SelectQuickConfigResult } from './select-quick-config.dialog';\nimport { WizardWidgetConfigDialogComponent, WizardWidgetConfigDialogResult } from './wizard-widget-config.dialog';\n\ntype WizardWidgetId =\n | 'praxis-wizard-benefits'\n | 'praxis-wizard-content'\n | 'praxis-wizard-inline-notice'\n | 'praxis-wizard-divider';\n\ntype EditorialZone = 'before' | 'after';\n\n@Component({\n selector: 'praxis-stepper-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n PraxisIconDirective,\n MatButtonModule,\n MatSlideToggleModule,\n DragDropModule,\n MatTooltipModule,\n MatChipsModule,\n MatCardModule,\n MatButtonToggleModule,\n MatDialogModule,\n MatMenuModule,\n MatTabsModule,\n ],\n template: `\n <div class=\"pdx-editor\">\n <mat-tab-group>\n <mat-tab label=\"Geral\">\n <div class=\"tab-pad\">\n <div class=\"help\">Configure o funcionamento e a aparência básica do passo a passo.</div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Orientação</mat-label>\n <select matNativeControl [(ngModel)]=\"config.orientation\" (ngModelChange)=\"markDirty()\">\n <option value=\"horizontal\">Horizontal</option>\n <option value=\"vertical\">Vertical</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Horizontal: cabeçalho no topo • Vertical: lista à esquerda'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição dos títulos</mat-label>\n <select matNativeControl [(ngModel)]=\"config.headerPosition\" (ngModelChange)=\"markDirty()\">\n <option value=\"top\">Acima</option>\n <option value=\"bottom\">Abaixo</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Válido na orientação horizontal'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição do rótulo</mat-label>\n <select matNativeControl [(ngModel)]=\"config.labelPosition\" (ngModelChange)=\"markDirty()\" [disabled]=\"config.orientation !== 'horizontal'\">\n <option value=\"end\">Ao lado</option>\n <option value=\"bottom\">Abaixo</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Como o texto aparece no cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <select matNativeControl [(ngModel)]=\"config.color\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"primary\">Primária</option>\n <option value=\"accent\">Acento</option>\n <option value=\"warn\">Alerta</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplicável a temas Material 2 (M2)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Duração da animação</mat-label>\n <input matInput [(ngModel)]=\"config.animationDuration\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: 300ms\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Tempo da transição entre etapas'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Etapa selecionada</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"config.selectedIndex\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Índice inicia em 0 (primeira etapa)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <select matNativeControl [(ngModel)]=\"config.density\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"comfortable\">Confortável</option>\n <option value=\"compact\">Compacta</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Controla espaçamentos e alturas'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do stepper (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.stepperClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: meu-stepper\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Permite estilizar com CSS escopado'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do cabeçalho (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.headerClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-header\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use para ajustes finos de aparência'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do conteúdo (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.contentClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-content\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplica uma classe à área de conteúdo'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div class=\"pdx-toggles\">\n <mat-slide-toggle [(ngModel)]=\"config.linear\" (ngModelChange)=\"markDirty()\">Respeitar ordem (linear)</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"config.disableRipple\" (ngModelChange)=\"markDirty()\">Desativar efeitos de clique</mat-slide-toggle>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Etapas\">\n <div class=\"tab-pad\">\n <div class=\"help\">Gerencie as etapas: nomes, mensagens e conteúdo. Arraste para reordenar.</div>\n <div class=\"pdx-steps\">\n <div class=\"pdx-steps-header\">\n <div class=\"title\">Etapas ({{ config.steps.length }})</div>\n <button mat-button (click)=\"addStep()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>Adicionar etapa</button>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" class=\"pdx-step-list\">\n <div class=\"pdx-step-item\" *ngFor=\"let s of config.steps; let i = index\" cdkDrag [class.active]=\"activeIndex === i\" (click)=\"setActive(i)\">\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"pdx-fields\">\n <mat-form-field appearance=\"outline\" class=\"min-180\">\n <mat-label>Título da etapa</mat-label>\n <input matInput [(ngModel)]=\"s.label\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Como aparecerá no cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Identificador (opcional)</mat-label>\n <input matInput [(ngModel)]=\"s.id\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Útil para automações'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto alternativo (acessibilidade)</mat-label>\n <input matInput [(ngModel)]=\"s.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Lido por leitores de tela'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>ID que descreve (opcional)</mat-label>\n <input matInput [(ngModel)]=\"s.ariaLabelledby\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'ID de um elemento que descreve a etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone/estado do marcador</mat-label>\n <input matInput [(ngModel)]=\"s.state\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: number, done, edit\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Controla o ícone do passo (quando aplicável)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem de erro</mat-label>\n <input matInput [(ngModel)]=\"s.errorMessage\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Mostrada quando há erro na etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <div class=\"pdx-flag-group\">\n <mat-slide-toggle [(ngModel)]=\"s.optional\" (ngModelChange)=\"markDirty()\">Etapa opcional</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.editable\" (ngModelChange)=\"markDirty()\">Permitir voltar e editar</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.completed\" (ngModelChange)=\"markDirty()\">Marcar como concluída</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.hasError\" (ngModelChange)=\"markDirty()\">Marcar como com erro</mat-slide-toggle>\n </div>\n </div>\n <div class=\"pdx-actions\">\n <button mat-icon-button color=\"warn\" (click)=\"removeStep(i)\" matTooltip=\"Remover\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"pdx-active-step\" *ngIf=\"activeStep as step; else noSteps\">\n <div class=\"hdr\">\n <div class=\"title\">Editando: {{ step.label }}</div>\n <mat-button-toggle-group [(ngModel)]=\"activeIndex\" (ngModelChange)=\"onActiveIndexChange()\" [hideSingleSelectionIndicator]=\"true\">\n <mat-button-toggle *ngFor=\"let s of config.steps; let i = index\" [value]=\"i\">{{ i + 1 }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"pdx-content-editor\">\n <div class=\"section editorial-section\">\n <div class=\"section-head\">\n <div>\n <div class=\"section-title\">Conteúdo editorial</div>\n <div class=\"section-subtitle\">Organize os blocos narrativos da etapa antes ou depois do formulário.</div>\n </div>\n </div>\n\n <div class=\"zone-grid\">\n <div class=\"zone-card\">\n <div class=\"zone-head\">\n <div class=\"zone-title\">Antes do formulário</div>\n <div class=\"zone-actions\">\n <span class=\"zone-count\">{{ editorialBeforeWidgets(step).length }}</span>\n <button mat-stroked-button [matMenuTriggerFor]=\"beforeEditorialMenu\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Adicionar\n </button>\n <mat-menu #beforeEditorialMenu=\"matMenu\">\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-benefits', 'before')\">\n <mat-icon [praxisIcon]=\"'view_module'\"></mat-icon>\n Grade de benefícios\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'before')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n Bloco de conteúdo\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'before')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n Aviso inline\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'before')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n Divisor\n </button>\n </mat-menu>\n </div>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"dropEditorialBefore($event)\" class=\"widget-list\">\n <div class=\"widget-item editorial-item\" *ngFor=\"let w of editorialBeforeWidgets(step)\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ editorialWidgetSummary(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button (click)=\"moveEditorialWidget(w, 'before', 'after')\">\n <mat-icon [praxisIcon]=\"'arrow_downward'\"></mat-icon>\n Mover para depois\n </button>\n <button mat-button (click)=\"duplicateEditorialWidget(w, 'before')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n Duplicar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'before')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialBeforeWidgets(step).length\">Nenhum bloco nesta zona.</div>\n </div>\n </div>\n\n <div class=\"zone-card\">\n <div class=\"zone-head\">\n <div class=\"zone-title\">Depois do formulário</div>\n <div class=\"zone-actions\">\n <span class=\"zone-count\">{{ editorialAfterWidgets(step).length }}</span>\n <button mat-stroked-button [matMenuTriggerFor]=\"afterEditorialMenu\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Adicionar\n </button>\n <mat-menu #afterEditorialMenu=\"matMenu\">\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-benefits', 'after')\">\n <mat-icon [praxisIcon]=\"'view_module'\"></mat-icon>\n Grade de benefícios\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'after')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n Bloco de conteúdo\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'after')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n Aviso inline\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'after')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n Divisor\n </button>\n </mat-menu>\n </div>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"dropEditorialAfter($event)\" class=\"widget-list\">\n <div class=\"widget-item editorial-item\" *ngFor=\"let w of editorialAfterWidgets(step)\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ editorialWidgetSummary(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button (click)=\"moveEditorialWidget(w, 'after', 'before')\">\n <mat-icon [praxisIcon]=\"'arrow_upward'\"></mat-icon>\n Mover para antes\n </button>\n <button mat-button (click)=\"duplicateEditorialWidget(w, 'after')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n Duplicar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'after')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialAfterWidgets(step).length\">Nenhum bloco nesta zona.</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">Formulário da etapa</div>\n <div class=\"section-body\">\n <ng-container *ngIf=\"step.form; else addFormBtn\">\n <mat-card appearance=\"outlined\" class=\"mini-card\">\n <mat-card-header>\n <mat-icon mat-card-avatar [praxisIcon]=\"'dynamic_form'\"></mat-icon>\n <mat-card-title>Formulário principal</mat-card-title>\n <mat-card-subtitle>{{ step.form.formId || step.id || '—' }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-actions align=\"end\">\n <button mat-button (click)=\"editMainForm()\"><mat-icon [praxisIcon]=\"'tune'\"></mat-icon> Editar</button>\n <button mat-button color=\"warn\" (click)=\"removeMainForm()\"><mat-icon [praxisIcon]=\"'delete'\"></mat-icon> Remover</button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n <ng-template #addFormBtn>\n <button mat-stroked-button color=\"primary\" (click)=\"addMainForm()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon> Adicionar formulário</button>\n </ng-template>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-head\">\n <div>\n <div class=\"section-title\">Componentes avançados</div>\n <div class=\"section-subtitle\">Use para cenários de seleção e integrações específicas.</div>\n </div>\n <button mat-stroked-button (click)=\"openMoreComponents()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Mais componentes\n </button>\n </div>\n <div class=\"section-body\">\n <div class=\"cta-grid\">\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'account_tree'\"></mat-icon>\n <div class=\"cta-title\">Lista em árvore</div>\n </div>\n <div class=\"cta-desc\">Exiba dados hierárquicos com seleção simples.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addTreeList()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir árvore\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'swap_horiz'\"></mat-icon>\n <div class=\"cta-title\">Transferência de itens</div>\n </div>\n <div class=\"cta-desc\">Mover itens entre listas (ideal para múltipla seleção).</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addTransferListQuick()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir transferência\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n <div class=\"cta-title\">Seleção com busca</div>\n </div>\n <div class=\"cta-desc\">Campo de seleção com busca remota/local.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addSearchableSelect()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir seletor\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'upload_file'\"></mat-icon>\n <div class=\"cta-title\">Upload de arquivos</div>\n </div>\n <div class=\"cta-desc\">Anexe documentos com validação de upload.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addFilesUpload()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir upload\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"widget-list advanced-list\">\n <div class=\"widget-item\" *ngFor=\"let w of advancedWidgets(step)\">\n <div class=\"drag-handle\"><mat-icon [praxisIcon]=\"'extension'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ w.id }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\" [disabled]=\"!canEditWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeAdvancedWidget(w)\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!advancedWidgets(step).length\">Nenhum componente avançado adicionado.</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noSteps>\n <div class=\"muted\">Nenhuma etapa definida.</div>\n </ng-template>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Navegação\">\n <div class=\"tab-pad\">\n <div class=\"help\">Personalize os botões de avançar e voltar exibidos em cada etapa.</div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo dos botões</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.variant\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão (elevado)</option>\n <option value=\"basic\">Texto</option>\n <option value=\"flat\">Plano</option>\n <option value=\"stroked\">Contornado</option>\n <option value=\"raised\">Elevado</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.color\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"primary\">Primária</option>\n <option value=\"accent\">Acento</option>\n <option value=\"warn\">Alerta</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Alinhamento</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.align\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Direita</option>\n <option value=\"start\">Esquerda</option>\n <option value=\"center\">Centro</option>\n <option value=\"space-between\">Espaçado</option>\n <option value=\"end\">Direita</option>\n </select>\n </mat-form-field>\n </div>\n\n <div class=\"pdx-toggles\">\n <mat-slide-toggle [(ngModel)]=\"navigationCfg.visible\" (ngModelChange)=\"markDirty()\">Mostrar navegação padrão</mat-slide-toggle>\n </div>\n\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto do botão Voltar</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.prevLabel\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: Voltar\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto do botão Próximo</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.nextLabel\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: Próximo\" />\n </mat-form-field>\n </div>\n\n <div class=\"icons-grid\">\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de Voltar</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('prevIcon')\">\n <mat-icon *ngIf=\"navigationCfg.prevIcon\" [praxisIcon]=\"navigationCfg.prevIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.prevIcon\">Escolher</ng-container>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de Próximo</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('nextIcon')\">\n <mat-icon *ngIf=\"navigationCfg.nextIcon\" [praxisIcon]=\"navigationCfg.nextIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.nextIcon\">Escolher</ng-container>\n </button>\n </div>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Aparência\">\n <div class=\"tab-pad\">\n <div class=\"help\">Personalize cores, tipografia e ícones. Para ajustes comuns, use os campos abaixo; para maior controle, edite os tokens. Copie o SCSS e cole no arquivo de tema.</div>\n <div class=\"quick-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura do cabeçalho (px)</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerHeightPx\" (ngModelChange)=\"setHeaderHeightPx($event)\" placeholder=\"Ex.: 48\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Altura do item do cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do texto (px)</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerLabelTextSizePx\" (ngModelChange)=\"setHeaderLabelTextSizePx($event)\" placeholder=\"Ex.: 14\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Tamanho do título da etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do texto</mat-label>\n <select matNativeControl [ngModel]=\"headerLabelTextWeight\" (ngModelChange)=\"setHeaderLabelTextWeight($event)\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"400\">Normal</option>\n <option value=\"500\">Médio</option>\n <option value=\"600\">Seminegrito</option>\n <option value=\"700\">Negrito</option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe de tema (opcional)</mat-label>\n <input matInput [(ngModel)]=\"appearance.themeClass\" (ngModelChange)=\"onAppearanceChange()\" placeholder=\"Ex.: theme-stepper-custom\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplica as cores apenas dentro desse seletor'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Conjunto de ícones</mat-label>\n <select matNativeControl [(ngModel)]=\"appearance.iconsSet\" (ngModelChange)=\"onAppearanceChange()\">\n <option [ngValue]=\"undefined\">Material Icons (padrão)</option>\n <option value=\"material-symbols-outlined\">Material Symbols (Outlined)</option>\n <option value=\"material-symbols-rounded\">Material Symbols (Rounded)</option>\n <option value=\"material-symbols-sharp\">Material Symbols (Sharp)</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Selecione se usar ícones do Material Symbols'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div class=\"icons-grid\">\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone do número</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('number')\">\n <mat-icon *ngIf=\"icons.number; else pick\" [praxisIcon]=\"icons.number\"></mat-icon>\n <ng-template #pick>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone concluído</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('done')\">\n <mat-icon *ngIf=\"icons.done; else pick2\" [praxisIcon]=\"icons.done\"></mat-icon>\n <ng-template #pick2>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone edição</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('edit')\">\n <mat-icon *ngIf=\"icons.edit; else pick3\" [praxisIcon]=\"icons.edit\"></mat-icon>\n <ng-template #pick3>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de erro</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('error')\">\n <mat-icon *ngIf=\"icons.error; else pick4\" [praxisIcon]=\"icons.error\"></mat-icon>\n <ng-template #pick4>Escolher</ng-template>\n </button>\n </div>\n </div>\n <div class=\"icons-hint\" *ngIf=\"symbolsLikelySelected.length && !appearance.iconsSet\">\n <div class=\"muted\">\n Dica: {{ symbolsLikelySelected.join(', ') }} são ícones do Material Symbols. Selecione um conjunto Symbols abaixo ou clique em\n <button mat-button color=\"primary\" type=\"button\" (click)=\"setIconsSetToSymbols()\">Usar Material Symbols (Outlined)</button>.\n </div>\n </div>\n <div class=\"tokens-grid\">\n <div class=\"token-item\" *ngFor=\"let key of stepperTokenKeys\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{ key }}</mat-label>\n <input matInput [ngModel]=\"appearance.tokens?.[key]\" (ngModelChange)=\"onTokenChange(key, $event)\" placeholder=\"valor CSS ou var(--token)\" />\n </mat-form-field>\n </div>\n </div>\n <div class=\"pdx-appearance-actions\">\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('neutral')\">Preset: neutro</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('primary')\">Preset: primário</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('high-contrast')\">Preset: alto contraste</button>\n <button mat-button type=\"button\" (click)=\"clearTokens()\">Limpar tokens</button>\n </div>\n <mat-card appearance=\"outlined\" class=\"code-card\">\n <div class=\"code-head\">Snippet SCSS</div>\n <pre class=\"code\"><code>{{ scssSnippet() }}</code></pre>\n </mat-card>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .pdx-editor { display: grid; gap: 16px; }\n .pdx-editor .mat-mdc-form-field { width: 100%; }\n .pdx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px,1fr)); gap: 12px; }\n .pdx-toggles { display:flex; gap: 12px; flex-wrap: wrap; }\n .tab-pad {\n padding: 12px;\n display: grid;\n gap: 12px;\n background: var(--md-sys-color-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .help { color: var(--md-sys-color-on-surface-variant); font-size: 13px; }\n .quick-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); gap: 12px; margin-bottom: 6px; }\n .icons-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); gap: 12px; margin: 8px 0; }\n .icon-item { display: grid; gap: 6px; align-content: start; }\n .icons-hint { margin-top: 4px; }\n .pdx-steps { display: grid; gap: 8px; }\n .pdx-steps-header { display:flex; justify-content: space-between; align-items: center; }\n .pdx-step-list { display: grid; gap: 8px; }\n .pdx-step-item {\n display:grid;\n grid-template-columns: 24px 1fr auto;\n gap: 8px;\n align-items: start;\n padding: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 10px;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n }\n .pdx-step-item.active {\n border-color: var(--md-sys-color-primary);\n box-shadow: var(--mat-elevation-level2);\n }\n .drag-handle { display:flex; align-items:center; color: var(--md-sys-color-on-surface-variant); }\n .pdx-fields { display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(160px,1fr)); }\n .pdx-flag-group { display:flex; gap: 10px; align-items:center; }\n .pdx-active-step { display: grid; gap: 12px; padding-top: 8px; border-top: 1px dashed var(--md-sys-color-outline-variant); }\n .pdx-active-step .hdr { display:flex; gap: 12px; align-items: center; justify-content: space-between; }\n .pdx-content-editor { display: grid; gap: 16px; }\n .section {\n display: grid;\n gap: 8px;\n padding: 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n background: var(--md-sys-color-surface-container-lowest);\n }\n .section-body { display: grid; gap: 8px; }\n .section-title { font-weight: 600; opacity: .85; }\n .section-subtitle { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .section-head { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; }\n .editorial-section {\n background: var(--md-sys-color-surface-container-low);\n border-color: var(--md-sys-color-primary);\n }\n .mini-card { display: block; }\n .widget-list { display: grid; gap: 8px; }\n .widget-item { display:grid; grid-template-columns: 24px 1fr auto; align-items: center; gap: 8px; padding: 8px; border: 1px solid var(--md-sys-color-outline-variant); border-radius: 8px; background: var(--md-sys-color-surface); }\n .widget-item .info { display: grid; gap: 2px; min-width: 0; }\n .widget-item .info .name { font-weight: 600; }\n .widget-item .info .sub { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .widget-item .info .meta { font-size: 11px; color: var(--md-sys-color-on-surface-variant); font-family: var(--md-ref-typeface-plain, monospace); opacity: .85; }\n .widget-item .actions { display:flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }\n .editorial-item { align-items: start; }\n .editorial-item .actions { justify-content: flex-start; }\n .cta-row { display:flex; gap: 8px; align-items: center; }\n .spacer { flex: 1 1 auto; }\n .muted { color: var(--md-sys-color-on-surface-variant); }\n .cta-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px,1fr)); gap: 12px; margin-bottom: 8px; }\n .cta-card { display: grid; gap: 8px; padding: 12px; border-radius: 12px; border: 1px solid var(--md-sys-color-outline-variant); background: var(--md-sys-color-surface); }\n .cta-card .cta-head { display: flex; align-items: center; gap: 8px; }\n .cta-card .cta-title { font-weight: 600; }\n .cta-card .cta-desc { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .cta-card .cta-actions { display: flex; gap: 8px; align-items: center; }\n .tokens-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px,1fr)); gap: 12px; margin: 8px 0; }\n .token-item { display: contents; }\n .pdx-appearance { margin-top: 8px; display: grid; gap: 8px; }\n .pdx-appearance-actions { display:flex; gap: 8px; flex-wrap: wrap; }\n .zone-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }\n .zone-card {\n display: grid;\n gap: 8px;\n padding: 12px;\n border-radius: 10px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface);\n }\n .zone-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .zone-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }\n .zone-title { font-weight: 600; }\n .zone-count {\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface);\n }\n .advanced-list { margin-top: 4px; }\n .code-card { margin-top: 8px; }\n .code-head { font-weight: 600; margin-bottom: 4px; }\n .code { white-space: pre; overflow: auto; background: var(--md-sys-color-surface-container-highest); }\n .w-full { grid-column: 1 / -1; }\n .min-180 { min-width: 180px; }\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 @media (max-width: 900px) {\n .pdx-step-item { grid-template-columns: 20px 1fr; }\n .pdx-actions { grid-column: 1 / -1; justify-self: end; }\n .widget-item { grid-template-columns: 20px 1fr; }\n .widget-item .actions { grid-column: 1 / -1; justify-content: flex-start; }\n }\n\n @media (max-width: 640px) {\n .pdx-active-step .hdr { align-items: flex-start; flex-direction: column; }\n .pdx-flag-group { flex-direction: column; align-items: flex-start; }\n .zone-head { align-items: flex-start; flex-direction: column; }\n .zone-actions { justify-content: flex-start; }\n }\n `,\n ],\n})\nexport class PraxisStepperConfigEditor implements SettingsValueProvider {\n config: StepperMetadata = { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n activeIndex = 0;\n\n // SettingsValueProvider observables\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n private readonly settings = inject(SettingsPanelService);\n private readonly dialog = inject(MatDialog);\n private readonly iconPicker: IconPickerService = inject(IconPickerService);\n\n constructor(@Inject(SETTINGS_PANEL_DATA) data?: any) {\n let seed: StepperMetadata | string | undefined = data?.config ?? data;\n // Normalize when seed is a JSON string\n if (typeof seed === 'string') {\n try { seed = JSON.parse(seed) as StepperMetadata; } catch { seed = undefined; }\n }\n if (seed && typeof seed === 'object') {\n // shallow clone to detach references\n this.config = JSON.parse(JSON.stringify(seed)) as StepperMetadata;\n if (!Array.isArray((this.config as any).steps)) {\n (this.config as any).steps = [] as StepConfig[];\n }\n } else {\n this.config.steps = [ { id: 'step1', label: 'Novo passo' } as StepConfig ];\n this.isDirty$.next(true);\n }\n }\n\n markDirty(): void { this.isDirty$.next(true); this.validate(); }\n\n validate(): void {\n const valid = Array.isArray(this.config.steps) && this.config.steps.every(s => !!s.label);\n this.isValid$.next(valid);\n }\n\n // ------- Appearance (theming tokens) -------\n get navigationCfg(): NonNullable<StepperMetadata['navigation']> {\n const nav = (this.config.navigation ??= {} as any);\n return nav as any;\n }\n get appearance(): NonNullable<StepperMetadata['appearance']> {\n const ap = (this.config.appearance ??= {} as any);\n (ap.tokens ??= {} as any);\n return ap as any;\n }\n\n stepperTokenKeys: string[] = [\n 'container-color',\n 'line-color',\n 'header-label-text-color',\n 'header-optional-label-text-color',\n 'header-icon-foreground-color',\n 'header-icon-background-color',\n 'header-done-state-icon-background-color',\n 'header-done-state-icon-foreground-color',\n 'header-edit-state-icon-background-color',\n 'header-edit-state-icon-foreground-color',\n 'header-error-state-icon-background-color',\n 'header-error-state-icon-foreground-color',\n 'header-error-state-label-text-color',\n 'header-focus-state-layer-color',\n 'header-hover-state-layer-color',\n 'header-label-text-font',\n 'header-label-text-size',\n 'header-label-text-weight',\n 'header-selected-state-label-text-size',\n 'header-selected-state-label-text-weight',\n 'container-text-font',\n 'header-height',\n 'header-focus-state-layer-shape',\n 'header-hover-state-layer-shape',\n 'header-selected-state-icon-background-color',\n 'header-selected-state-icon-foreground-color',\n 'header-selected-state-label-text-color',\n ];\n\n onAppearanceChange(): void { this.markDirty(); }\n\n onTokenChange(key: string, value: string): void {\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n if (!value) {\n delete (tokens as any)[key];\n } else {\n (tokens as any)[key] = value;\n }\n this.onAppearanceChange();\n }\n\n clearTokens(): void {\n if (!this.config.appearance) return;\n this.config.appearance.tokens = {} as any;\n this.onAppearanceChange();\n }\n\n applyPreset(id: 'primary' | 'neutral' | 'high-contrast'): void {\n const presets: Record<string, Record<string, string>> = {\n primary: {\n 'container-color': 'var(--md-sys-color-surface-container)',\n 'header-label-text-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-on-primary)',\n 'line-color': 'var(--md-sys-color-primary)',\n },\n neutral: {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'line-color': 'var(--md-sys-color-outline-variant)',\n },\n 'high-contrast': {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-surface)',\n 'line-color': 'var(--md-sys-color-on-surface)',\n },\n };\n const preset = presets[id] || {};\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n for (const [k, v] of Object.entries(preset)) {\n (tokens as any)[k] = v;\n }\n this.onAppearanceChange();\n }\n\n scssSnippet(): string {\n const tokens = this.config.appearance?.tokens || {};\n const entries = Object.entries(tokens).filter(([, v]) => !!v);\n const selector = this.config.appearance?.themeClass ? `.${this.config.appearance.themeClass}` : ':root';\n const map = entries.map(([k, v]) => ` ${k}: ${v},`).join('\\n');\n return `${selector} {\\n @include mat.stepper-overrides((\\n${map}\\n ));\\n}`;\n }\n\n // ===== Quick editors for common tokens =====\n get headerHeightPx(): number | undefined {\n const raw = this.appearance.tokens?.['header-height'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderHeightPx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-height'];\n } else {\n (this.appearance.tokens as any)['header-height'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextSizePx(): number | undefined {\n const raw = this.appearance.tokens?.['header-label-text-size'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderLabelTextSizePx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-label-text-size'];\n } else {\n (this.appearance.tokens as any)['header-label-text-size'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextWeight(): string | undefined {\n return (this.appearance.tokens as any)['header-label-text-weight'];\n }\n setHeaderLabelTextWeight(v: string | undefined): void {\n if (!v) {\n delete (this.appearance.tokens as any)['header-label-text-weight'];\n } else {\n (this.appearance.tokens as any)['header-label-text-weight'] = v;\n }\n this.onAppearanceChange();\n }\n\n // ===== Icons (using IconPickerService) =====\n get icons(): NonNullable<NonNullable<StepperMetadata['appearance']>['icons']> {\n const ap = this.appearance as any;\n ap.icons ||= {};\n return ap.icons as any;\n }\n\n async pickNavIcon(field: 'prevIcon' | 'nextIcon'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.config.navigation ||= {} as any)[field] = picked;\n this.onAppearanceChange();\n }\n }\n async pickIcon(kind: 'number' | 'done' | 'edit' | 'error'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.icons as any)[kind] = picked;\n this.onAppearanceChange();\n }\n }\n\n // ===== Icon set suggestions =====\n private symbolsLikely(name?: string): boolean {\n if (!name) return false;\n // Heurística simples: counter_1..10 e replace_image são típicos do Material Symbols.\n if (/^counter_\\d+$/.test(name)) return true;\n if (name === 'replace_image') return true;\n return false;\n }\n get symbolsLikelySelected(): string[] {\n const names = [this.icons.number, this.icons.done, this.icons.edit, this.icons.error].filter(Boolean) as string[];\n return names.filter((n) => this.symbolsLikely(n));\n }\n setIconsSetToSymbols(): void {\n this.appearance.iconsSet = 'material-symbols-outlined';\n this.onAppearanceChange();\n }\n drop(ev: CdkDragDrop<StepConfig[]>): void {\n moveItemInArray(this.config.steps, ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n setActive(i: number): void { this.activeIndex = i; }\n onActiveIndexChange(): void { this.activeIndex = Math.max(0, Math.min(this.activeIndex, (this.config.steps.length || 1) - 1)); }\n addStep(): void {\n const n = this.config.steps.length + 1;\n this.config.steps.push({ id: `step${n}`, label: `Passo ${n}` });\n this.markDirty();\n }\n removeStep(idx: number): void {\n this.config.steps.splice(idx, 1);\n this.markDirty();\n }\n\n // ------- Active step helpers -------\n get activeStep(): StepConfig | null { return this.config.steps?.[this.activeIndex] || null; }\n ensureWidgets(): WidgetDefinition[] { const s = this.activeStep!; if (!s.widgets) s.widgets = []; return s.widgets!; }\n ensureWidgetsBeforeForm(): WidgetDefinition[] { const s = this.activeStep!; if (!s.widgetsBeforeForm) s.widgetsBeforeForm = []; return s.widgetsBeforeForm!; }\n displayWidgetName(w: WidgetDefinition): string { switch (w.id) {\n case 'praxis-list': return 'Lista (seleção)';\n case 'pdx-material-searchable-select': return 'Seleção com busca';\n case 'praxis-files-upload': return 'Upload de arquivos';\n case 'praxis-dynamic-form': return 'Formulário';\n case 'praxis-wizard-benefits': return 'Grade de benefícios';\n case 'praxis-wizard-content': return 'Bloco de conteúdo';\n case 'praxis-wizard-inline-notice': return 'Aviso inline';\n case 'praxis-wizard-divider': return 'Divisor';\n default: return (w.inputs as any)?.title || (w.inputs as any)?.label || 'Widget';\n } }\n\n editorialBeforeWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgetsBeforeForm || []).filter((w) => this.isWizardWidgetId(w.id));\n }\n\n editorialAfterWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgets || []).filter((w) => this.isWizardWidgetId(w.id));\n }\n\n advancedWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgets || []).filter((w) => !this.isWizardWidgetId(w.id));\n }\n\n widgetBlockId(w: WidgetDefinition): string | null {\n const blockId = String((w.inputs as any)?.blockId || '').trim();\n return blockId || null;\n }\n\n editorialWidgetSummary(w: WidgetDefinition): string {\n const inputs = (w.inputs as any) || {};\n const shorten = (value: string | undefined, max = 72): string => {\n const text = (value || '').trim();\n if (!text) return '';\n return text.length > max ? `${text.slice(0, max - 1)}…` : text;\n };\n\n switch (w.id) {\n case 'praxis-wizard-benefits': {\n const count = Array.isArray(inputs.items) ? inputs.items.length : 0;\n const cols = Number.isFinite(Number(inputs.columns)) ? Number(inputs.columns) : 4;\n return `${count} item(ns) • ${cols} coluna(s)`;\n }\n case 'praxis-wizard-content': {\n const text = shorten(inputs.title || inputs.subtitle || inputs.text || inputs.caption, 90);\n return text || 'Sem conteúdo';\n }\n case 'praxis-wizard-inline-notice': {\n const tone = this.toneLabel(inputs.tone);\n const text = shorten(inputs.text, 90);\n return text ? `${tone} • ${text}` : tone;\n }\n case 'praxis-wizard-divider':\n return inputs.label ? `Rótulo: ${inputs.label}` : 'Divisor sem rótulo';\n default:\n return '';\n }\n }\n\n addEditorialWidget(id: WizardWidgetId, zone: EditorialZone = 'before'): void {\n const step = this.activeStep; if (!step) return;\n const defaults = this.defaultEditorialInputs(id, step, zone);\n this.openWizardWidgetDialog(id, defaults).subscribe((result) => {\n if (!result?.inputs) return;\n const wd: WidgetDefinition = {\n id,\n inputs: { ...defaults, ...result.inputs },\n };\n if (zone === 'before') this.ensureWidgetsBeforeForm().push(wd);\n else this.ensureWidgets().push(wd);\n this.markDirty();\n });\n }\n\n dropEditorialBefore(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const step = this.activeStep; if (!step) return;\n const list = this.ensureWidgetsBeforeForm();\n this.reorderSubset(list, (w) => this.isWizardWidgetId(w.id), ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n\n dropEditorialAfter(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const step = this.activeStep; if (!step) return;\n const list = this.ensureWidgets();\n this.reorderSubset(list, (w) => this.isWizardWidgetId(w.id), ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n\n moveEditorialWidget(w: WidgetDefinition, from: EditorialZone, to: EditorialZone): void {\n if (from === to) return;\n const fromList = from === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const toList = to === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = fromList.indexOf(w);\n if (idx < 0) return;\n fromList.splice(idx, 1);\n toList.push(w);\n this.markDirty();\n }\n\n duplicateEditorialWidget(w: WidgetDefinition, zone: EditorialZone): void {\n const step = this.activeStep; if (!step || !this.isWizardWidgetId(w.id)) return;\n const clone = JSON.parse(JSON.stringify(w)) as WidgetDefinition;\n const inputs = (clone.inputs = { ...((clone.inputs as any) || {}) });\n inputs.blockId = this.nextEditorialBlockId(step, w.id, zone);\n\n const list = zone === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = list.indexOf(w);\n if (idx >= 0) list.splice(idx + 1, 0, clone);\n else list.push(clone);\n this.markDirty();\n }\n\n removeEditorialWidget(w: WidgetDefinition, zone: EditorialZone): void {\n const list = zone === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = list.indexOf(w);\n if (idx < 0) return;\n list.splice(idx, 1);\n this.markDirty();\n }\n\n removeAdvancedWidget(w: WidgetDefinition): void {\n const widgets = this.ensureWidgets();\n const idx = widgets.indexOf(w);\n if (idx < 0) return;\n widgets.splice(idx, 1);\n this.markDirty();\n }\n\n dropWidget(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const arr = this.ensureWidgets();\n moveItemInArray(arr, ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n removeWidget(idx: number): void {\n const arr = this.ensureWidgets();\n arr.splice(idx, 1);\n this.markDirty();\n }\n\n canEditWidget(w: WidgetDefinition): boolean {\n return (\n w.id === 'praxis-dynamic-form'\n || w.id === 'praxis-list'\n || w.id === 'pdx-material-searchable-select'\n || w.id === 'praxis-files-upload'\n || this.isWizardWidgetId(w.id)\n );\n }\n\n private defaultEditorialInputs(id: WizardWidgetId, step: StepConfig, zone: EditorialZone): Record<string, any> {\n const blockId = this.nextEditorialBlockId(step, id, zone);\n switch (id) {\n case 'praxis-wizard-benefits':\n return {\n blockId,\n title: '',\n columns: 4,\n boxed: true,\n items: [{ icon: '', title: 'Novo benefício', text: '' }],\n };\n case 'praxis-wizard-content':\n return {\n blockId,\n title: '',\n subtitle: '',\n text: '',\n caption: '',\n };\n case 'praxis-wizard-inline-notice':\n return {\n blockId,\n text: '',\n tone: 'neutral',\n };\n case 'praxis-wizard-divider':\n return {\n blockId,\n label: '',\n };\n default:\n return { blockId };\n }\n }\n\n private nextEditorialBlockId(step: StepConfig, id: WizardWidgetId, zone: EditorialZone): string {\n const stepPart = this.normalizeBlockIdPart(step.id || `step-${this.activeIndex + 1}`);\n const kind = id.replace('praxis-wizard-', '');\n const prefix = `${stepPart}:${zone}:${kind}:`;\n const used = new Set<string>();\n let max = 0;\n\n const allWidgets = [ ...(step.widgetsBeforeForm || []), ...(step.widgets || []) ];\n allWidgets.forEach((widget) => {\n const blockId = String((widget.inputs as any)?.blockId || '').trim();\n if (!blockId.startsWith(prefix)) return;\n used.add(blockId);\n const suffix = Number(blockId.slice(prefix.length));\n if (Number.isFinite(suffix)) {\n max = Math.max(max, suffix);\n }\n });\n\n let nextIdx = Math.max(1, max + 1);\n let candidate = `${prefix}${nextIdx}`;\n while (used.has(candidate)) {\n nextIdx += 1;\n candidate = `${prefix}${nextIdx}`;\n }\n return candidate;\n }\n\n private normalizeBlockIdPart(value: string): string {\n const normalized = (value || '')\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9:_-]/g, '');\n return normalized || `step-${this.activeIndex + 1}`;\n }\n\n private toneLabel(value: string | undefined): string {\n switch (value) {\n case 'info': return 'Informativo';\n case 'warning': return 'Atenção';\n default: return 'Neutro';\n }\n }\n\n private reorderSubset(\n list: WidgetDefinition[],\n pick: (item: WidgetDefinition) => boolean,\n fromSubsetIndex: number,\n toSubsetIndex: number,\n ): void {\n const subsetIndices: number[] = [];\n list.forEach((item, index) => {\n if (pick(item)) subsetIndices.push(index);\n });\n const fromReal = subsetIndices[fromSubsetIndex];\n const toReal = subsetIndices[toSubsetIndex];\n if (fromReal == null || toReal == null) return;\n\n const [moved] = list.splice(fromReal, 1);\n let insertAt = toReal;\n if (fromReal < toReal) insertAt -= 1;\n list.splice(insertAt, 0, moved);\n }\n\n // ------- Main form -------\n addMainForm(): void {\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:form:${step.id || this.activeIndex}` , title: 'Configurar Formulário da Etapa', content: { component: PraxisDynamicFormConfigEditor, inputs: { formConfig: step.form?.config || { sections: [] }, formId: step.form?.formId || step.id, mode: step.form?.mode || 'create' } } });\n const apply = (val: any) => {\n const v = val || {};\n step.form = {\n config: v.formConfig || step.form?.config || { sections: [] },\n formId: v?.formId || step.form?.formId || step.id,\n mode: (v?.inputsPatch?.mode as any) || step.form?.mode || 'create',\n } as any;\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n editMainForm(): void { this.addMainForm(); }\n removeMainForm(): void { const s = this.activeStep; if (!s) return; delete s.form; this.markDirty(); }\n\n // ------- Curated widgets -------\n addListSelection(): void {\n const step = this.activeStep; if (!step) return;\n const current: any = { ...(this.ensureWidgets().find(w => w.id === 'praxis-list')?.inputs?.config || {}) };\n // Ensure minimal selection setup\n current.selection = current.selection || { mode: 'single', return: 'value' };\n const ref = this.settings.open({ id: `stepper:list:${step.id || this.activeIndex}`, title: 'Configurar Lista (seleção)', content: { component: PraxisListConfigEditor, inputs: { config: current, listId: step.id || 'list' } } });\n const apply = (val: any) => {\n const cfg = (val && (val.config || val)) || current;\n const wd: WidgetDefinition = { id: 'praxis-list', inputs: { config: cfg, listId: `${step.id || 'step'}-list-${Date.now()}` } };\n const arr = this.ensureWidgets();\n arr.push(wd);\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n addSearchableSelect(): void {\n const step = this.activeStep; if (!step) return;\n const dlg = this.dialog.open(SelectQuickConfigDialogComponent, { width: '520px', data: { } });\n dlg.afterClosed().subscribe((res: SelectQuickConfigResult | undefined) => {\n if (!res) return;\n const meta = {\n name: res.name || 'selection',\n label: res.label || 'Seleção',\n required: !!res.required,\n searchable: true,\n multiple: !!res.multiple,\n resourcePath: res.resourcePath || undefined,\n optionLabelKey: res.optionLabelKey || 'label',\n optionValueKey: res.optionValueKey || 'id',\n loadOn: 'open',\n } as any;\n const wd: WidgetDefinition = { id: 'pdx-material-searchable-select', inputs: { metadata: meta } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n });\n }\n\n addFilesUpload(): void {\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:upload:${step.id || this.activeIndex}`, title: 'Configurar Upload de Arquivos', content: { component: PraxisFilesUploadConfigEditor, inputs: {} } });\n const apply = (cfg: any) => {\n const wd: WidgetDefinition = { id: 'praxis-files-upload', inputs: { config: cfg, filesUploadId: `${step.id || 'step'}-upload-${Date.now()}` } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n openMoreComponents(): void {\n const dlg = this.dialog.open(ComponentPaletteDialogComponent, { width: '560px', data: { title: 'Adicionar componente à etapa', allowedWidgetIds: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'] } as any });\n dlg.afterClosed().subscribe((id: string | undefined) => {\n if (!id) return;\n switch (id) {\n case 'praxis-dynamic-form': this.addMainForm(); break;\n case 'praxis-list': this.addListSelection(); break;\n case 'pdx-material-searchable-select': this.addSearchableSelect(); break;\n case 'praxis-files-upload': this.addFilesUpload(); break;\n default:\n // Fallback: insert minimal widget with no inputs\n this.ensureWidgets().push({ id });\n this.markDirty();\n }\n });\n }\n\n // Quick CTAs\n addTreeList(): void {\n const step = this.activeStep; if (!step) return;\n const cfg: any = { mode: 'tree', selection: { mode: 'single' } };\n const wd: WidgetDefinition = { id: 'praxis-list', inputs: { config: cfg, listId: `${step.id || 'step'}-list-${Date.now()}` } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n }\n\n addTransferListQuick(): void {\n const step = this.activeStep; if (!step) return;\n // Seed a simple form with a transfer list field\n const formConfig: any = {\n sections: [\n { rows: [ [ { name: 'items', label: 'Itens', controlType: 'TRANSFER_LIST', transferOptions: { source: [], target: [] } } ] ] }\n ]\n };\n const ref = this.settings.open({ id: `stepper:transfer:${step.id || this.activeIndex}`, title: 'Configurar Transferência de Itens', content: { component: PraxisDynamicFormConfigEditor, inputs: { formConfig, formId: step.id || 'transfer' } } });\n const apply = (val: any) => {\n const v = val || {};\n step.form = { config: v.formConfig || formConfig, formId: v?.formId || step.id, mode: (v?.inputsPatch?.mode as any) || 'create' } as any;\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n editWidget(w: WidgetDefinition): void {\n switch (w.id) {\n case 'praxis-dynamic-form':\n // treat as embedded form\n this.addMainForm();\n break;\n case 'praxis-list': {\n const cfg = (w.inputs as any)?.config || {};\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:list:${step.id || this.activeIndex}`, title: 'Configurar Lista (seleção)', content: { component: PraxisListConfigEditor, inputs: { config: cfg, listId: step.id || 'list' } } });\n const apply = (val: any) => {\n const next = (val && (val.config || val)) || cfg;\n (w.inputs as any) = { ...(w.inputs || {}), config: next };\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n break; }\n case 'pdx-material-searchable-select': {\n const meta = (w.inputs as any)?.metadata || {};\n const dlg = this.dialog.open(SelectQuickConfigDialogComponent, { width: '520px', data: { from: meta } });\n dlg.afterClosed().subscribe((res: SelectQuickConfigResult | undefined) => {\n if (!res) return;\n const next = { ...meta, ...res, searchable: true };\n (w.inputs as any) = { ...(w.inputs || {}), metadata: next };\n this.markDirty();\n });\n break; }\n case 'praxis-files-upload': {\n const cfg = (w.inputs as any)?.config || {};\n const ref = this.settings.open({ id: `stepper:upload:edit`, title: 'Configurar Upload de Arquivos', content: { component: PraxisFilesUploadConfigEditor, inputs: { ...cfg } } });\n const apply = (val: any) => { (w.inputs as any) = { ...(w.inputs || {}), config: val }; this.markDirty(); };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n break; }\n case 'praxis-wizard-benefits':\n case 'praxis-wizard-content':\n case 'praxis-wizard-inline-notice':\n case 'praxis-wizard-divider': {\n this.openWizardWidgetEditor(w);\n break;\n }\n default:\n // No editor available\n break;\n }\n }\n\n private openWizardWidgetEditor(w: WidgetDefinition): void {\n if (!this.isWizardWidgetId(w.id)) return;\n this.openWizardWidgetDialog(w.id, { ...((w.inputs as Record<string, any>) || {}) }).subscribe((result) => {\n if (!result?.inputs) return;\n (w.inputs as any) = { ...(w.inputs || {}), ...result.inputs };\n this.markDirty();\n });\n }\n\n private openWizardWidgetDialog(\n widgetId: WizardWidgetId,\n inputs: Record<string, any>,\n ) {\n const dialogRef = this.dialog.open<\n WizardWidgetConfigDialogComponent,\n { widgetId: string; inputs?: Record<string, any> },\n WizardWidgetConfigDialogResult | undefined\n >(WizardWidgetConfigDialogComponent, {\n width: '760px',\n data: {\n widgetId,\n inputs: { ...inputs },\n },\n });\n return dialogRef.afterClosed();\n }\n\n private isWizardWidgetId(id: string): id is 'praxis-wizard-benefits' | 'praxis-wizard-content' | 'praxis-wizard-inline-notice' | 'praxis-wizard-divider' {\n return (\n id === 'praxis-wizard-benefits'\n || id === 'praxis-wizard-content'\n || id === 'praxis-wizard-inline-notice'\n || id === 'praxis-wizard-divider'\n );\n }\n\n // SettingsValueProvider\n getSettingsValue(): any { return this.config; }\n onSave(): any { return this.getSettingsValue(); }\n reset(): void {\n this.isBusy$.next(true);\n try {\n this.config = { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n this.isDirty$.next(true);\n this.isValid$.next(true);\n } finally {\n this.isBusy$.next(false);\n }\n }\n}\n","/**\n * Capabilities catalog for Praxis Stepper (StepperMetadata).\n * Paths follow StepperMetadata shape (patch merged at config root).\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 navigation: true;\n steps: true;\n meta: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n orientation: ['horizontal', 'vertical'],\n headerPosition: ['top', 'bottom'],\n labelPosition: ['bottom', 'end'],\n density: ['default', 'comfortable', 'compact'],\n matColor: ['primary', 'accent', 'warn'],\n navVariant: ['basic', 'flat', 'stroked', 'raised'],\n navAlign: ['start', 'center', 'end', 'space-between'],\n formMode: ['create', 'edit', 'view'],\n schemaSource: ['resource', 'filter'],\n iconsSet: ['material-symbols-outlined', 'material-symbols-rounded', 'material-symbols-sharp'],\n widgetId: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'],\n stepperTokenKey: [\n 'container-color',\n 'line-color',\n 'header-label-text-color',\n 'header-optional-label-text-color',\n 'header-icon-foreground-color',\n 'header-icon-background-color',\n 'header-done-state-icon-background-color',\n 'header-done-state-icon-foreground-color',\n 'header-edit-state-icon-background-color',\n 'header-edit-state-icon-foreground-color',\n 'header-error-state-icon-background-color',\n 'header-error-state-icon-foreground-color',\n 'header-error-state-label-text-color',\n 'header-focus-state-layer-color',\n 'header-hover-state-layer-color',\n 'header-label-text-font',\n 'header-label-text-size',\n 'header-label-text-weight',\n 'header-selected-state-label-text-size',\n 'header-selected-state-label-text-weight',\n 'container-text-font',\n 'header-height',\n 'header-focus-state-layer-shape',\n 'header-hover-state-layer-shape',\n 'header-selected-state-icon-background-color',\n 'header-selected-state-icon-foreground-color',\n 'header-selected-state-label-text-color',\n ],\n};\n\nconst CAPS: Capability[] = [\n { path: 'orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.orientation, description: 'Orientation of the stepper.' },\n { path: 'linear', category: 'behavior', valueKind: 'boolean', description: 'Require sequential completion of steps.' },\n { path: 'headerPosition', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.headerPosition, description: 'Header position (vertical only).' },\n { path: 'labelPosition', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.labelPosition, description: 'Label position for horizontal stepper.' },\n { path: 'color', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.matColor, description: 'Material color palette.' },\n { path: 'disableRipple', category: 'behavior', valueKind: 'boolean', description: 'Disable ripple for headers.' },\n { path: 'animationDuration', category: 'behavior', valueKind: 'string', description: 'Animation duration, e.g. 300ms.' },\n { path: 'selectedIndex', category: 'behavior', valueKind: 'number', description: 'Current step index.' },\n\n { path: 'density', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.density, description: 'Density preset.' },\n { path: 'stepperClass', category: 'appearance', valueKind: 'string', description: 'CSS class for stepper root.' },\n { path: 'headerClass', category: 'appearance', valueKind: 'string', description: 'CSS class for header.' },\n { path: 'contentClass', category: 'appearance', valueKind: 'string', description: 'CSS class for content area.' },\n\n { path: 'appearance', category: 'appearance', valueKind: 'object', description: 'Appearance settings.' },\n { path: 'appearance.themeClass', category: 'appearance', valueKind: 'string', description: 'Theme CSS class for root.' },\n { path: 'appearance.tokens', category: 'appearance', valueKind: 'object', description: 'Token map for theme overrides.' },\n { path: 'appearance.tokens.[token]', category: 'appearance', valueKind: 'string', allowedValues: ENUMS.stepperTokenKey, description: 'Token value (CSS value or var).', safetyNotes: 'Token keys follow mat.stepper-overrides.' },\n { path: 'appearance.icons', category: 'appearance', valueKind: 'object', description: 'Stepper icon overrides.' },\n { path: 'appearance.icons.number', category: 'appearance', valueKind: 'string', description: 'Icon for number state.' },\n { path: 'appearance.icons.done', category: 'appearance', valueKind: 'string', description: 'Icon for done state.' },\n { path: 'appearance.icons.edit', category: 'appearance', valueKind: 'string', description: 'Icon for edit state.' },\n { path: 'appearance.icons.error', category: 'appearance', valueKind: 'string', description: 'Icon for error state.' },\n { path: 'appearance.iconsSet', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.iconsSet, description: 'Icon set class name (Material Symbols).' },\n\n { path: 'navigation', category: 'navigation', valueKind: 'object', description: 'Footer navigation config.' },\n { path: 'navigation.visible', category: 'navigation', valueKind: 'boolean', description: 'Show navigation buttons.' },\n { path: 'navigation.prevLabel', category: 'navigation', valueKind: 'string', description: 'Previous button label.' },\n { path: 'navigation.nextLabel', category: 'navigation', valueKind: 'string', description: 'Next button label.' },\n { path: 'navigation.prevIcon', category: 'navigation', valueKind: 'string', description: 'Previous button icon.' },\n { path: 'navigation.nextIcon', category: 'navigation', valueKind: 'string', description: 'Next button icon.' },\n { path: 'navigation.variant', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.navVariant, description: 'Button variant.' },\n { path: 'navigation.color', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.matColor, description: 'Button color.' },\n { path: 'navigation.align', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.navAlign, description: 'Navigation alignment.' },\n\n { path: 'steps', category: 'steps', valueKind: 'array', description: 'Step definitions.' },\n { path: 'steps[]', category: 'steps', valueKind: 'object', description: 'Step definition.' },\n { path: 'steps[].id', category: 'steps', valueKind: 'string', description: 'Step id.' },\n { path: 'steps[].label', category: 'steps', valueKind: 'string', description: 'Step label.' },\n { path: 'steps[].description', category: 'steps', valueKind: 'string', description: 'Step description.' },\n { path: 'steps[].optional', category: 'steps', valueKind: 'boolean', description: 'Mark step as optional.' },\n { path: 'steps[].editable', category: 'steps', valueKind: 'boolean', description: 'Allow editing completed steps.' },\n { path: 'steps[].completed', category: 'steps', valueKind: 'boolean', description: 'Force completed state.' },\n { path: 'steps[].hasError', category: 'steps', valueKind: 'boolean', description: 'Force error state.' },\n { path: 'steps[].stateIcon', category: 'steps', valueKind: 'string', description: 'Custom state icon key.' },\n { path: 'steps[].state', category: 'steps', valueKind: 'string', description: 'Custom state name for matStepperIcon.' },\n { path: 'steps[].errorMessage', category: 'steps', valueKind: 'string', description: 'Error message shown in header.' },\n { path: 'steps[].ariaLabel', category: 'accessibility', valueKind: 'string', description: 'ARIA label for step header.' },\n { path: 'steps[].ariaLabelledby', category: 'accessibility', valueKind: 'string', description: 'ARIA labelledby for step header.' },\n { path: 'steps[].form', category: 'steps', valueKind: 'object', description: 'Optional Dynamic Form config for step.' },\n { path: 'steps[].form.resourcePath', category: 'steps', valueKind: 'string', description: 'Resource path for Dynamic Form.' },\n { path: 'steps[].form.resourceId', category: 'steps', valueKind: 'string', description: 'Resource id for Dynamic Form (string or number).', example: '123', safetyNotes: 'Accepts string or number.' },\n { path: 'steps[].form.mode', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.formMode, description: 'Form mode.' },\n { path: 'steps[].form.config', category: 'steps', valueKind: 'object', description: 'FormConfig for Dynamic Form.', safetyNotes: 'Use the form catalog for nested paths and FieldMetadata details.' },\n { path: 'steps[].form.schemaSource', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.schemaSource, description: 'Schema source for Dynamic Form.' },\n { path: 'steps[].form.formId', category: 'steps', valueKind: 'string', description: 'Form id for Dynamic Form.' },\n { path: 'steps[].widgets', category: 'steps', valueKind: 'array', description: 'WidgetDefinition list for step content.' },\n { path: 'steps[].widgets[]', category: 'steps', valueKind: 'object', description: 'WidgetDefinition item.' },\n { path: 'steps[].widgets[].id', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.widgetId, description: 'Component registry id for widget.', safetyNotes: 'Use ids registered in ComponentMetadataRegistry.' },\n { path: 'steps[].widgets[].inputs', category: 'steps', valueKind: 'object', description: 'Inputs bound into the widget instance.' },\n { path: 'steps[].widgets[].outputs', category: 'steps', valueKind: 'object', description: 'Outputs mapped to actions.' },\n { path: 'steps[].widgets[].outputs.[outputName]', category: 'steps', valueKind: 'object', description: 'Output action mapping (ActionDefinition or \"emit\").', safetyNotes: 'Use string \"emit\" to forward the output without mapping.' },\n { path: 'steps[].widgets[].bindingOrder', category: 'steps', valueKind: 'array', description: 'Explicit input binding order.' },\n { path: 'steps[].widgets[].bindingOrder[]', category: 'steps', valueKind: 'string', description: 'Input name applied first.' },\n];\n\nexport const STEPPER_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.2',\n enums: ENUMS,\n targets: [\n 'praxis-stepper',\n 'mat-stepper',\n 'stepper',\n 'praxis-stepper-config-editor',\n 'praxis-select-quick-config-dialog',\n ],\n notes: [\n 'steps[] should be merged by id or label to avoid replacing all steps.',\n 'steps[].form.config uses FormConfig (see form catalog) and may include sections/actions/fieldMetadata.',\n 'steps[].widgets[].id must be a ComponentMetadataRegistry id (see component-registry catalog).',\n 'appearance.tokens is a free-form map; host may validate/sanitize.',\n 'When editing steps[].form.config.fieldMetadata, use FieldMetadata base if no controlType catalog exists.',\n ],\n capabilities: CAPS,\n};\n","import { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { deepMerge } from '@praxisui/core';\nimport { PraxisStepper, StepperMetadata } from '../praxis-stepper';\nimport { STEPPER_AI_CAPABILITIES } from './stepper-ai-capabilities';\n\nexport class StepperAiAdapter extends BaseAiAdapter<StepperMetadata> {\n componentName = 'Praxis Stepper';\n\n constructor(private stepper: PraxisStepper) {\n super();\n }\n\n getCurrentConfig(): StepperMetadata {\n const current = this.stepper._config?.() ?? { steps: [] };\n return this.cloneConfig(current);\n }\n\n getCapabilities(): Capability[] {\n return STEPPER_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getRuntimeState(): Record<string, any> {\n const cfg = this.stepper._config?.();\n const steps = cfg?.steps || [];\n return {\n stepsCount: steps.length,\n selectedIndex: this.stepper.selectedIndexComputed?.() ?? 0,\n linear: !!cfg?.linear,\n orientation: cfg?.orientation || 'horizontal',\n hasForms: steps.some((s) => !!s.form),\n };\n }\n\n createSnapshot(): StepperMetadata {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: StepperMetadata): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(this.cloneConfig(snapshot));\n }\n\n async applyPatch(patch: Partial<StepperMetadata>): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const next = this.smartMergeStepperConfig(current, patch);\n this.applyConfig(next);\n return { 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: StepperMetadata): void {\n const apply = (this.stepper as any).applyConfigFromAdapter;\n if (typeof apply === 'function') {\n apply.call(this.stepper, config);\n return;\n }\n this.stepper.config = config;\n }\n\n private smartMergeStepperConfig(base: StepperMetadata, patch: Partial<StepperMetadata>): StepperMetadata {\n const result = deepMerge(base, patch);\n\n if (patch.steps && Array.isArray(patch.steps)) {\n const merged = this.mergeByKey(\n base.steps || [],\n patch.steps,\n (s) => s.id || s.label || '',\n );\n result.steps = merged;\n }\n\n return result;\n }\n\n private mergeByKey<T extends Record<string, any>>(\n baseArr: T[],\n patchArr: T[],\n keyFn: (item: T) => string,\n ): T[] {\n const merged = baseArr.map((orig) => {\n const key = keyFn(orig);\n const match = key ? patchArr.find((p) => keyFn(p) === key) : undefined;\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n\n patchArr.forEach((item) => {\n const key = keyFn(item);\n if (!key || !baseArr.find((o) => keyFn(o) === key)) {\n merged.push(item);\n }\n });\n\n return merged;\n }\n\n private cloneConfig(config: StepperMetadata): StepperMetadata {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, computed, signal, inject, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatStepper, MatStepperModule } from '@angular/material/stepper';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n PraxisIconDirective,\n ASYNC_CONFIG_STORAGE,\n AsyncConfigStorage,\n ComponentKeyService,\n LoggerService,\n} from '@praxisui/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PraxisDynamicForm } from '@praxisui/dynamic-form';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { PraxisStepperConfigEditor } from './praxis-stepper-config-editor';\nimport { DynamicWidgetLoaderDirective } from '@praxisui/core';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport type { FormConfig, FormReadyEvent, FormValueChangeEvent } from '@praxisui/core';\nimport { EmptyStateCardComponent } from '@praxisui/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { StepperAiAdapter } from './ai/stepper-ai.adapter';\nimport { take } from 'rxjs/operators';\n\nexport type StepOrientation = 'horizontal' | 'vertical';\nexport type StepHeaderPosition = 'top' | 'bottom';\n\nexport interface StepConfig {\n id?: string;\n label: string;\n optional?: boolean;\n editable?: boolean;\n completed?: boolean;\n hasError?: boolean;\n stateIcon?: string;\n state?: string; // usado com <ng-template matStepperIcon=\"state\">\n errorMessage?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n // Integração opcional com Dynamic Form por etapa\n form?: {\n resourcePath?: string;\n resourceId?: string | number;\n mode?: 'create' | 'edit' | 'view';\n config?: FormConfig;\n schemaSource?: 'resource' | 'filter';\n formId?: string;\n };\n // Futuro: stepControlKey?: string; // para integração com FormGroup externo\n // Futuro: widgets?: any[]; // children (Gridster)\n /** Widgets rendered before the step form (if present). */\n widgetsBeforeForm?: WidgetDefinition[];\n widgets?: WidgetDefinition[];\n description?: string;\n}\n\nexport interface StepperMetadata {\n orientation?: StepOrientation;\n linear?: boolean;\n headerPosition?: StepHeaderPosition;\n labelPosition?: 'bottom' | 'end';\n color?: ThemePalette;\n disableRipple?: boolean;\n animationDuration?: string;\n selectedIndex?: number;\n steps: StepConfig[];\n // Styling hooks\n density?: 'default' | 'comfortable' | 'compact';\n stepperClass?: string;\n headerClass?: string;\n contentClass?: string;\n // Appearance tokens (pass-through for theming via mat.stepper-overrides)\n appearance?: {\n preset?: 'ft-light';\n themeClass?: string;\n tokens?: Record<string, string>;\n icons?: {\n number?: string;\n done?: string;\n edit?: string;\n error?: string;\n };\n iconsSet?: string; // ex.: 'material-symbols-outlined' | 'material-symbols-rounded' | 'material-symbols-sharp'\n };\n navigation?: {\n visible?: boolean;\n prevLabel?: string;\n nextLabel?: string;\n prevIcon?: string;\n nextIcon?: string;\n variant?: 'basic' | 'flat' | 'stroked' | 'raised';\n color?: ThemePalette;\n align?: 'start' | 'center' | 'end' | 'space-between';\n };\n}\n\n@Component({\n selector: 'praxis-stepper',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatStepperModule, MatButtonModule, MatIconModule, PraxisIconDirective, PraxisDynamicForm, DynamicWidgetLoaderDirective, EmptyStateCardComponent, PraxisAiAssistantComponent],\n host: {\n '[class]': 'densityClass()'\n },\n template: `\n <div class=\"stepper-ai-assistant\" *ngIf=\"editModeEnabled\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n </div>\n <ng-container *ngIf=\"steps().length > 0; else emptyState\">\n <mat-stepper\n [linear]=\"linear()\"\n [orientation]=\"orientation()\"\n [headerPosition]=\"headerPosition()\"\n [labelPosition]=\"labelPos()\"\n [disableRipple]=\"disableRipple()\"\n [color]=\"stepperColor()\"\n [animationDuration]=\"animationDuration()\"\n [selectedIndex]=\"selectedIndexComputed()\"\n (selectionChange)=\"onSelectionChange($event)\"\n (animationDone)=\"onAnimationDone()\"\n [class]=\"stepperClassList()\"\n >\n <!-- Projeção de ícones customizados do header: <ng-template matStepperIcon=\"done\"> ... </ng-template> -->\n <ng-content></ng-content>\n <!-- Overrides de ícones via configuração (appearance.icons) -->\n <ng-template *ngIf=\"icons()?.number as icn\" matStepperIcon=\"number\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.done as icn\" matStepperIcon=\"done\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.edit as icn\" matStepperIcon=\"edit\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.error as icn\" matStepperIcon=\"error\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <mat-step *ngFor=\"let step of steps(); let i = index; trackBy: trackStep\"\n [stepControl]=\"$any(formGroupFor(i))\"\n [id]=\"step.id || ''\"\n [aria-label]=\"step.ariaLabel || ''\"\n [aria-labelledby]=\"step.ariaLabelledby || ''\"\n [label]=\"step.label\"\n [optional]=\"step.optional || false\"\n [editable]=\"step.editable ?? true\"\n [completed]=\"computedCompleted(i, step)\"\n [hasError]=\"computedHasError(i, step)\"\n [errorMessage]=\"step.errorMessage || ''\"\n [state]=\"step.state || step.stateIcon || ''\"\n >\n <ng-template matStepLabel>\n <ng-container *ngIf=\"stepLabelTpl; else plainLabel\"\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: step, index: i }\"\n ></ng-container>\n <ng-template #plainLabel>{{ step.label }}</ng-template>\n </ng-template>\n <div [class]=\"contentClassList()\">\n <ng-container *ngFor=\"let wd of step.widgetsBeforeForm || []\"\n [dynamicWidgetLoader]=\"wd\"\n [context]=\"stepperContext\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onChildWidgetEvent(i, wd, $event)\"></ng-container>\n <praxis-dynamic-form *ngIf=\"step.form as f\"\n [resourcePath]=\"f.resourcePath\"\n [resourceId]=\"$any(f.resourceId)\"\n [mode]=\"f.mode || 'create'\"\n [config]=\"f.config || { sections: [] }\"\n [schemaSource]=\"f.schemaSource || 'resource'\"\n [formId]=\"f.formId\"\n (formReady)=\"onFormReady(i, $event)\"\n (valueChange)=\"onFormValueChange(i, $event)\"\n ></praxis-dynamic-form>\n <ng-container *ngFor=\"let wd of step.widgets || []\"\n [dynamicWidgetLoader]=\"wd\"\n [context]=\"stepperContext\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onChildWidgetEvent(i, wd, $event)\"></ng-container>\n <ng-container *ngIf=\"isStepEmpty(step)\">\n <praxis-empty-state-card\n [inline]=\"true\"\n icon=\"dashboard_customize\"\n title=\"Sem conteúdo nesta etapa\"\n description=\"Adicione um formulário ou widgets a esta etapa, ou abra o editor para configurar.\"\n [primaryAction]=\"{ label: 'Abrir editor', icon: 'tune', action: openEditor.bind(this) }\"\n ></praxis-empty-state-card>\n </ng-container>\n </div>\n <div *ngIf=\"navVisible()\" [class]=\"navActionsClass()\">\n <!-- PREV button (hidden on first step) -->\n <ng-container *ngIf=\"selectedIndexComputed() > 0\">\n <ng-container [ngSwitch]=\"navVariant()\">\n <button *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchDefault mat-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n </ng-container>\n </ng-container>\n\n <!-- NEXT button -->\n <ng-container [ngSwitch]=\"navVariant()\">\n <button *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchDefault mat-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n </ng-container>\n </div>\n </mat-step>\n </mat-stepper>\n </ng-container>\n <ng-template #emptyState>\n <praxis-empty-state-card\n icon=\"view_timeline\"\n [inline]=\"true\"\n title=\"Stepper sem etapas\"\n description=\"Adicione etapas para começar. Você pode configurar formulários ou widgets em cada etapa.\"\n [primaryAction]=\"primaryCta\"\n [secondaryActions]=\"secondaryCtas\"\n ></praxis-empty-state-card>\n </ng-template>\n <button\n *ngIf=\"editModeEnabled\"\n mat-fab\n class=\"edit-fab\"\n aria-label=\"Editar stepper\"\n (click)=\"openEditor()\"\n >\n <mat-icon fontIcon=\"edit\"></mat-icon>\n </button>\n `,\n styles: [\n `\n :host { display: block; position: relative; }\n .praxis-stepper {\n width: 100%;\n background: var(--md-sys-color-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 16px;\n padding: 12px;\n box-shadow: var(--mat-elevation-level1);\n }\n .praxis-stepper.pdx-stepper-ft-light {\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n :host(.density-compact) ::ng-deep .mat-step-header { min-height: 36px; }\n :host(.density-compact) .pdx-step-actions { padding-top: 4px; gap: 6px; }\n :host(.density-comfortable) ::ng-deep .mat-step-header { min-height: 44px; }\n .pdx-step-content {\n padding: 12px 4px 8px;\n color: var(--md-sys-color-on-surface);\n }\n .pdx-step-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n }\n ::ng-deep .praxis-stepper .mat-step-header {\n border-radius: 999px;\n margin: 4px 0;\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-label {\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .praxis-stepper .mat-step-header:hover {\n background: var(--md-sys-color-primary-container);\n }\n ::ng-deep .praxis-stepper .mat-step-header.cdk-keyboard-focused,\n ::ng-deep .praxis-stepper .mat-step-header.cdk-program-focused {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n ::ng-deep .praxis-stepper .mat-step-icon {\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-selected {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-state-done {\n background: var(--md-sys-color-tertiary);\n color: var(--md-sys-color-on-tertiary);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-state-error {\n background: var(--md-sys-color-error);\n color: var(--md-sys-color-on-error);\n }\n ::ng-deep .praxis-stepper .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n }\n ::ng-deep .praxis-stepper .mat-stepper-vertical-line::before {\n border-left-color: var(--md-sys-color-outline-variant);\n }\n ::ng-deep .pdx-stepper-ft-light .mat-stepper-horizontal {\n background: transparent;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-horizontal-stepper-header-container {\n margin-bottom: 14px;\n justify-content: flex-start;\n align-items: center;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header {\n min-height: 28px;\n font-size: 0.75rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-label.mat-step-label-active,\n ::ng-deep .pdx-stepper-ft-light .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon {\n height: 16px;\n width: 16px;\n font-size: 9px;\n background: transparent;\n border: 1px solid var(--md-sys-color-outline-variant);\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon .mat-icon {\n display: none;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-content {\n font-weight: 600;\n font-size: 9px;\n line-height: 1;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-state-done,\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-selected {\n background: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n border-color: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n color: var(--praxis-wizard-accent-on, var(--md-sys-color-on-primary, #ffffff));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n border-top-width: 1px;\n margin: 0 8px;\n flex: 1 1 0;\n margin-top: 0;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header {\n padding: 0 6px;\n flex: 0 0 auto;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-keyboard-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-program-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-mouse-focused {\n outline: none;\n box-shadow: none;\n background: transparent;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header:hover {\n background: transparent;\n }\n ::ng-deep .ft-stepper {\n background: transparent;\n }\n ::ng-deep .ft-stepper .mat-horizontal-stepper-header-container {\n margin-bottom: 16px;\n }\n ::ng-deep .ft-stepper .mat-step-header {\n font-size: 0.8rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .ft-stepper .mat-step-label.mat-step-label-active,\n ::ng-deep .ft-stepper .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .ft-stepper .mat-step-icon {\n height: 22px;\n width: 22px;\n font-size: 11px;\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n border: 2px solid var(--md-sys-color-outline-variant);\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .ft-stepper .mat-step-icon-state-done,\n ::ng-deep .ft-stepper .mat-step-icon-selected {\n background: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n border-color: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n color: var(--praxis-wizard-accent-on, var(--md-sys-color-on-primary, #ffffff));\n }\n ::ng-deep .ft-stepper .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n }\n .ft-stepper-content {\n padding: 0;\n }\n .ft-stepper-content .form-section {\n border: none;\n padding: 0;\n background: transparent;\n }\n .nav-align-start { justify-content: flex-start; }\n .nav-align-center { justify-content: center; }\n .nav-align-end { justify-content: flex-end; }\n .nav-align-space-between { justify-content: space-between; }\n .edit-fab { position: absolute; right: 12px; bottom: 12px; z-index: 2; }\n .stepper-ai-assistant { position: absolute; right: 12px; bottom: 72px; z-index: 3; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisStepper implements OnInit {\n // Templates projetados\n @ContentChild('stepLabelTpl', { read: TemplateRef }) stepLabelTpl?: TemplateRef<any>;\n // Dados e estado\n _config = signal<StepperMetadata | null>(null);\n private _selectedIndex = signal<number>(0);\n private _formGroups = new Map<number, FormGroup>();\n private _formValidity = new Map<number, boolean>();\n\n // CTA models for empty state\n primaryCta = { label: 'Configurar Stepper', icon: 'tune', color: 'primary' as const, action: () => this.openEditor() };\n secondaryCtas = [{ label: 'Adicionar etapa inicial', icon: 'add', action: () => this.addFirstStep() }];\n\n // API de entrada\n @Input({ required: true }) stepperId!: string;\n @Input() componentInstanceId?: string;\n @Input() set config(c: StepperMetadata | string | null) {\n let next: StepperMetadata | null = null;\n if (typeof c === 'string') {\n try { next = JSON.parse(c) as StepperMetadata; } catch { next = null; }\n } else {\n next = c as StepperMetadata | null;\n }\n this._config.set(next);\n if (next?.selectedIndex != null) this._selectedIndex.set(next.selectedIndex);\n this.persistConfig(next);\n }\n @Input() set selectedIndexInput(i: number | null) {\n if (i != null) this._selectedIndex.set(i);\n }\n // Suporte a two-way binding [(selectedIndex)] como no Material\n @Input() set selectedIndex(i: number | null) {\n if (i != null) this._selectedIndex.set(i);\n }\n @Input() disableRippleInput = false;\n @Input() editModeEnabled = false;\n // Paridade com API do Material\n @Input() labelPosition?: 'bottom' | 'end';\n @Input() color?: ThemePalette;\n /**\n * Validação remota opcional por etapa. Retorne ok=false com fieldErrors/formErrors para bloquear avanço.\n */\n @Input() serverValidate?: (args: { step: StepConfig; stepIndex: number; formGroup?: FormGroup; formData?: any }) => Promise<{\n ok: boolean; fieldErrors?: Record<string, string[]>; formErrors?: string[]; errorMessage?: string;\n }>;\n\n // Emissões\n @Output() selectedIndexChange = new EventEmitter<number>();\n @Output() widgetEvent = new EventEmitter<{ stepId?: string; stepIndex?: number; sourceId: string; output?: string; payload?: any }>();\n @Output() stepFormReady = new EventEmitter<{ stepIndex: number; stepId?: string; event: FormReadyEvent }>();\n @Output() stepFormValueChange = new EventEmitter<{ stepIndex: number; stepId?: string; event: FormValueChangeEvent }>();\n @Input() stepperContext?: Record<string, any>;\n private readonly settings = inject(SettingsPanelService);\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly logger = inject(LoggerService);\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private warnedMissingId = false;\n @Output() animationDone = new EventEmitter<void>();\n public aiAdapter = new StepperAiAdapter(this);\n\n // Computed getters\n steps = computed(() => this._config()?.steps || []);\n orientation = computed<StepOrientation>(() => this._config()?.orientation || 'horizontal');\n headerPosition = computed<StepHeaderPosition>(() => this._config()?.headerPosition || 'top');\n // labelPosition: default 'end' no Material\n labelPos = computed<'bottom' | 'end'>(() => this._config()?.labelPosition ?? this.labelPosition ?? 'end');\n linear = computed<boolean>(() => !!this._config()?.linear);\n disableRipple = computed<boolean>(() => this._config()?.disableRipple ?? this.disableRippleInput);\n animationDuration = computed<string>(() => this._config()?.animationDuration || '300ms');\n stepperColor = computed<ThemePalette | undefined>(() => this._config()?.color ?? this.color);\n icons = computed(() => this._config()?.appearance?.icons);\n iconsSet = computed(() => this._config()?.appearance?.iconsSet);\n // Navigation helpers\n private nav = computed(() => this._config()?.navigation || {});\n navVisible = () => this.nav()?.visible !== false; // default true\n navVariant = () => (this.nav()?.variant || 'raised') as 'basic' | 'flat' | 'stroked' | 'raised';\n navColor = () => (this.nav()?.color || 'primary') as ThemePalette;\n navPrevLabel = () => this.nav()?.prevLabel || 'Voltar';\n navNextLabel = () => this.nav()?.nextLabel || 'Próximo';\n navPrevIcon = () => this.nav()?.prevIcon;\n navNextIcon = () => this.nav()?.nextIcon;\n stepperClassList = () => {\n const cfg = this._config();\n return [\n 'praxis-stepper',\n cfg?.stepperClass,\n cfg?.headerClass,\n cfg?.appearance?.themeClass,\n cfg?.appearance?.preset === 'ft-light' ? 'pdx-stepper-ft-light' : null,\n ].filter(Boolean).join(' ');\n };\n contentClassList = () => {\n const cfg = this._config();\n return ['pdx-step-content', cfg?.contentClass].filter(Boolean).join(' ');\n };\n navActionsClass = () => `pdx-step-actions ${this.navAlignClass()}`;\n navAlignClass = () => {\n const a = this.nav()?.align || 'end';\n switch (a) {\n case 'start': return 'nav-align-start';\n case 'center': return 'nav-align-center';\n case 'space-between': return 'nav-align-space-between';\n case 'end':\n default: return 'nav-align-end';\n }\n };\n isNextDisabled(i: number): boolean {\n return this.linear() && this._formValidity.get(i) === false;\n }\n private clampIndex(idx: number): number {\n const len = this.steps().length;\n const max = Math.max(0, len - 1);\n if (Number.isNaN(idx)) return 0;\n return Math.min(Math.max(0, idx), max);\n }\n selectedIndexComputed = computed<number>(() => this.clampIndex(this._selectedIndex()));\n densityClass = () => {\n const d = this._config()?.density;\n if (d === 'compact') return 'density-compact';\n if (d === 'comfortable') return 'density-comfortable';\n return '';\n };\n\n // Handlers\n @Output() selectionChange = new EventEmitter<any>();\n trackStep = (_: number, s: StepConfig) => s.id || _;\n onSelectionChange(ev: any) {\n const idx = this.clampIndex(ev?.selectedIndex ?? 0);\n this._selectedIndex.set(idx);\n this.selectedIndexChange.emit(idx);\n this.selectionChange.emit(ev);\n }\n\n // API programática básica\n goTo(index: number): void {\n const clamped = this.clampIndex(index);\n this._selectedIndex.set(clamped);\n this.selectedIndexChange.emit(clamped);\n }\n next(): void {\n const curr = this._selectedIndex();\n const len = this.steps().length;\n if (curr < len - 1) this.goTo(curr + 1);\n }\n prev(): void {\n const curr = this._selectedIndex();\n if (curr > 0) this.goTo(curr - 1);\n }\n reset(): void { this.goTo(0); }\n\n // Alias para compatibilidade nominal com MatStepper\n previous(): void { this.prev(); }\n\n // Dynamic Form integration\n onFormReady(stepIndex: number, ev: FormReadyEvent) {\n this._formGroups.set(stepIndex, ev.formGroup);\n this._formValidity.set(stepIndex, ev.formGroup.valid);\n this.stepFormReady.emit({\n stepIndex,\n stepId: this.steps()[stepIndex]?.id,\n event: ev,\n });\n }\n onFormValueChange(stepIndex: number, ev: FormValueChangeEvent) {\n this._formValidity.set(stepIndex, ev.isValid);\n this.stepFormValueChange.emit({\n stepIndex,\n stepId: this.steps()[stepIndex]?.id,\n event: ev,\n });\n }\n formGroupFor(i: number): FormGroup | undefined {\n return this._formGroups.get(i);\n }\n computedCompleted(i: number, step: StepConfig): boolean {\n if (typeof step.completed === 'boolean') return step.completed;\n const v = this._formValidity.get(i);\n return v === true;\n }\n computedHasError(i: number, step: StepConfig): boolean {\n if (typeof step.hasError === 'boolean') return step.hasError;\n const v = this._formValidity.get(i);\n return v === false;\n }\n onChildWidgetEvent(stepIndex: number, wd: WidgetDefinition, e: { sourceId: string; output?: string; payload?: any }) {\n this.widgetEvent.emit({ stepIndex, stepId: this.steps()[stepIndex]?.id, sourceId: e.sourceId, output: e.output, payload: e.payload });\n }\n\n isStepEmpty(step: StepConfig): boolean {\n const hasForm = !!step.form;\n const hasWidgetsBefore = Array.isArray(step.widgetsBeforeForm) && step.widgetsBeforeForm.length > 0;\n const hasWidgets = Array.isArray(step.widgets) && step.widgets.length > 0;\n return !hasForm && !hasWidgets && !hasWidgetsBefore;\n }\n\n openEditor(): void {\n const cfg = this._config() || { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n const key = this.storageKey() || this.stepperId || 'default';\n const ref = this.settings.open({\n id: `praxis-stepper-editor:${key}`,\n title: 'Configurar Stepper',\n content: { component: PraxisStepperConfigEditor, inputs: { config: cfg } },\n });\n const apply = (value: any) => {\n const nextCfg: StepperMetadata = value?.config || value;\n if (nextCfg) {\n // Deep clone to ensure change detection and avoid mutating editor instance\n const cloned = JSON.parse(JSON.stringify(nextCfg)) as StepperMetadata;\n this._config.set(cloned);\n // Clamp selection after changes\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n this.persistConfig(cloned);\n }\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n public applyConfigFromAdapter(next: StepperMetadata): void {\n const cloned = JSON.parse(JSON.stringify(next)) as StepperMetadata;\n this._config.set(cloned);\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n this.persistConfig(cloned);\n }\n\n // CTA helpers\n addFirstStep(): void {\n const current = this._config() || { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n if ((current.steps || []).length > 0) return;\n const next: StepperMetadata = {\n ...current,\n steps: [\n { id: 'step1', label: 'Etapa 1', description: 'Clique em Configurar para editar esta etapa.' },\n ],\n };\n this._config.set(next);\n // Seleciona a primeira etapa\n this._selectedIndex.set(0);\n this.persistConfig(next);\n }\n\n // Navegação com validação remota opcional\n async onNext(i: number): Promise<void> {\n // Em modo linear, bloquear quando inválido\n if (this.linear() && this._formValidity.get(i) === false) {\n const fg = this._formGroups.get(i);\n if (fg) {\n fg.markAllAsTouched();\n fg.updateValueAndValidity({ emitEvent: true });\n }\n return;\n }\n const step = this.steps()[i];\n const fg = this._formGroups.get(i);\n const data = fg?.getRawValue();\n if (this.serverValidate) {\n const res = await this.serverValidate({ step, stepIndex: i, formGroup: fg, formData: data });\n if (!res.ok) {\n this.applyServerErrors(fg, res.fieldErrors, res.formErrors);\n // Atualizar erro visual\n step.errorMessage = res.errorMessage || (res.formErrors && res.formErrors[0]) || 'Erro de validação';\n this._formValidity.set(i, false);\n return;\n }\n }\n this.next();\n }\n onPrev(): void { this.prev(); }\n\n onAnimationDone(): void { this.animationDone.emit(); }\n\n private applyServerErrors(fg?: FormGroup, fieldErrors?: Record<string, string[]>, formErrors?: string[]): void {\n if (!fg) return;\n if (fieldErrors) {\n for (const [key, messages] of Object.entries(fieldErrors)) {\n const ctrl = fg.get(key);\n if (ctrl) {\n const prev = ctrl.errors || {};\n ctrl.setErrors({ ...prev, server: messages });\n ctrl.markAsTouched();\n }\n }\n }\n if (formErrors && formErrors.length) {\n const prev = fg.errors || {};\n fg.setErrors({ ...prev, server: formErrors });\n }\n fg.updateValueAndValidity({ emitEvent: true });\n }\n\n private persistConfig(config?: StepperMetadata | null): void {\n const key = this.storageKey();\n if (!key || !config) return;\n this.storage.saveConfig(key, config).pipe(take(1)).subscribe({ error: () => {} });\n }\n\n private storageKey(): string | null {\n const id = this.componentKeyId();\n return id ? `stepper-config:${id}` : null;\n }\n\n private componentKeyId(): string | null {\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-stepper',\n componentId: this.stepperId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n this.logger.warnOnce(\n '[PraxisStepper] stepperId is required for config persistence.',\n {\n context: {\n lib: 'praxis-stepper',\n component: 'PraxisStepper',\n },\n data: {\n stepperId: this.stepperId,\n componentInstanceId: this.componentInstanceId,\n },\n dedupeKey: 'praxis-stepper:missing-stepper-id',\n },\n );\n }\n\n ngOnInit(): void {\n const key = this.storageKey();\n if (!key) return;\n this.storage.loadConfig<StepperMetadata>(key).pipe(take(1)).subscribe((stored) => {\n if (!stored) return;\n const cloned = JSON.parse(JSON.stringify(stored)) as StepperMetadata;\n this._config.set(cloned);\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface PraxisWizardBenefitItem {\n icon?: string;\n title: string;\n text?: string;\n}\n\n@Component({\n selector: 'praxis-wizard-benefits-grid',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule, MatIconModule],\n template: `\n <section class=\"pwx-benefits\">\n @if (title) {\n <h3 class=\"pwx-benefits-title\">{{ title }}</h3>\n }\n <div class=\"pwx-benefits-grid\" [class.is-boxed]=\"boxed\" [style.--pwx-columns]=\"columns || 4\">\n <div class=\"pwx-benefit\" *ngFor=\"let item of items\">\n <div class=\"pwx-benefit-icon\" *ngIf=\"item.icon\">\n <mat-icon [fontIcon]=\"item.icon\"></mat-icon>\n </div>\n <div class=\"pwx-benefit-body\">\n <div class=\"pwx-benefit-title\">{{ item.title }}</div>\n <div class=\"pwx-benefit-text\" *ngIf=\"item.text\">{{ item.text }}</div>\n </div>\n </div>\n </div>\n </section>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-benefits { display: flex; flex-direction: column; gap: 10px; }\n .pwx-benefits-title {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n letter-spacing: 0.02em;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .pwx-benefits-title::before,\n .pwx-benefits-title::after {\n content: '';\n height: 1px;\n flex: 1;\n background: var(--md-sys-color-outline-variant);\n }\n .pwx-benefits-grid {\n display: grid;\n grid-template-columns: repeat(var(--pwx-columns), minmax(0, 1fr));\n gap: 14px 18px;\n }\n .pwx-benefits-grid.is-boxed {\n padding: 10px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 6px;\n background: var(--md-sys-color-surface);\n }\n .pwx-benefit {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n }\n .pwx-benefit-icon {\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--praxis-wizard-accent, var(--md-sys-color-primary));\n }\n .pwx-benefit-title { font-weight: 600; font-size: 0.88rem; color: var(--md-sys-color-on-surface); }\n .pwx-benefit-text { font-size: 0.82rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); line-height: 1.35; }\n\n @media (max-width: 720px) {\n .pwx-benefits-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n }\n @media (max-width: 480px) {\n .pwx-benefits-grid { grid-template-columns: 1fr; }\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardBenefitsGridComponent {\n @Input() blockId?: string;\n @Input() title?: string;\n @Input() items: PraxisWizardBenefitItem[] = [];\n @Input() columns?: number;\n @Input() boxed = true;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-content-block',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <section class=\"pwx-content\">\n @if (title) {\n <h3 class=\"pwx-content-title\">{{ title }}</h3>\n }\n @if (subtitle) {\n <div class=\"pwx-content-subtitle\">{{ subtitle }}</div>\n }\n @if (text) {\n <p class=\"pwx-content-text\">{{ text }}</p>\n }\n @if (caption) {\n <div class=\"pwx-content-caption\">{{ caption }}</div>\n }\n </section>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-content { display: flex; flex-direction: column; gap: 6px; }\n .pwx-content-title { margin: 0; font-size: 1.05rem; font-weight: 600; color: var(--md-sys-color-on-surface); }\n .pwx-content-subtitle { font-size: 0.95rem; color: var(--md-sys-color-on-surface); }\n .pwx-content-text { margin: 0; font-size: 0.88rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); }\n .pwx-content-caption { font-size: 0.78rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardContentBlockComponent {\n @Input() blockId?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() caption?: string;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-inline-notice',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <div class=\"pwx-inline\" [ngClass]=\"toneClass\">\n {{ text }}\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-inline {\n font-size: 0.82rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n line-height: 1.4;\n }\n .pwx-inline.info { color: var(--md-sys-color-on-surface); }\n .pwx-inline.warning { color: var(--md-sys-color-error); }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardInlineNoticeComponent {\n @Input() blockId?: string;\n @Input() text = '';\n @Input() tone: 'neutral' | 'info' | 'warning' = 'neutral';\n\n get toneClass(): string {\n return this.tone !== 'neutral' ? this.tone : '';\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-divider',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <div class=\"pwx-divider\">\n <span *ngIf=\"label\" class=\"pwx-divider-label\">{{ label }}</span>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-divider {\n position: relative;\n height: 1px;\n background: var(--praxis-wizard-divider, var(--md-sys-color-outline-variant));\n margin: 16px 0;\n }\n .pwx-divider-label {\n position: absolute;\n top: -0.65rem;\n left: 50%;\n transform: translateX(-50%);\n padding: 0 8px;\n font-size: 0.75rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardDividerComponent {\n @Input() blockId?: string;\n @Input() label?: string;\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { PraxisStepper } from './praxis-stepper';\nimport { PraxisWizardBenefitsGridComponent } from './wizard/blocks/praxis-wizard-benefits-grid.component';\nimport { PraxisWizardContentBlockComponent } from './wizard/blocks/praxis-wizard-content-block.component';\nimport { PraxisWizardInlineNoticeComponent } from './wizard/blocks/praxis-wizard-inline-notice.component';\nimport { PraxisWizardDividerComponent } from './wizard/blocks/praxis-wizard-divider.component';\n\nexport const PRAXIS_STEPPER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-stepper',\n selector: 'praxis-stepper',\n component: PraxisStepper,\n friendlyName: 'Praxis Stepper',\n description: 'Stepper configurável (horizontal/vertical/linear) com passos e conteúdo dinâmico.',\n icon: 'format_list_numbered',\n inputs: [\n { name: 'stepperId', type: 'string', label: 'ID do Stepper', description: 'Identificador para persistência (obrigatório)' },\n { name: 'componentInstanceId', type: 'string', label: 'ID da instância', description: 'Identificador opcional para múltiplas instâncias na mesma rota' },\n { name: 'config', type: 'StepperMetadata', label: 'Configuração', description: 'Configuração JSON com passos e opções' },\n { name: 'selectedIndex', type: 'number', label: '[(selectedIndex)] Índice selecionado' },\n { name: 'selectedIndexInput', type: 'number', label: 'Índice selecionado (legacy)' },\n { name: 'disableRippleInput', type: 'boolean', default: false, label: 'Desabilitar ripple' },\n { name: 'editModeEnabled', type: 'boolean', default: false, label: 'Modo de edição', description: 'Exibe controles de edição e assistente AI no runtime' },\n { name: 'labelPosition', type: \"'bottom' | 'end'\", label: 'Posição do rótulo (horizontal)' },\n { name: 'color', type: 'ThemePalette', label: 'Cor (M2)' },\n { name: 'appearance', type: '{ themeClass?: string; tokens?: Record<string,string>; icons?: { number?: string; done?: string; edit?: string; error?: string }; iconsSet?: string }', label: 'Aparência (tokens, themeClass, ícones, conjunto)' },\n { name: 'serverValidate', type: '(args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>', label: 'Validação remota (opt-in)' },\n { name: 'density', type: \"'default' | 'comfortable' | 'compact'\", label: 'Densidade' },\n { name: 'stepperClass', type: 'string', label: 'Classe CSS (stepper)' },\n { name: 'headerClass', type: 'string', label: 'Classe CSS (header)' },\n { name: 'contentClass', type: 'string', label: 'Classe CSS (conteúdo)' },\n { name: 'stepperContext', type: 'Record<string, any>', label: 'Contexto', description: 'Contexto compartilhado para widgets internos' },\n { name: 'navigation', type: \"{ visible?: boolean; prevLabel?: string; nextLabel?: string; prevIcon?: string; nextIcon?: string; variant?: 'basic'|'flat'|'stroked'|'raised'; color?: ThemePalette; align?: 'start'|'center'|'end'|'space-between' }\", label: 'Navegação (botões)'\n },\n ],\n outputs: [\n { name: 'selectionChange', type: 'any', label: 'Troca de seleção' },\n { name: 'selectedIndexChange', type: 'number', label: 'Índice selecionado (change)' },\n { name: 'animationDone', type: 'void', label: 'Animação concluída' },\n { name: 'widgetEvent', type: '{ stepId?: string; stepIndex?: number; sourceId: string; output?: string; payload?: any }', label: 'Evento interno' },\n { name: 'stepFormReady', type: '{ stepId?: string; stepIndex: number; event: FormReadyEvent }', label: 'Form ready (por etapa)' },\n { name: 'stepFormValueChange', type: '{ stepId?: string; stepIndex: number; event: FormValueChangeEvent }', label: 'Form value change (por etapa)' },\n ],\n actions: [\n {\n id: 'select-step',\n label: 'Selecionar etapa',\n icon: 'flag',\n description: 'Emite alteração do índice selecionado',\n emit: 'selectedIndexChange',\n payloadSchema: {\n type: 'number',\n example: 0,\n },\n scope: 'any',\n },\n {\n id: 'step-change',\n label: 'Troca de etapa',\n icon: 'swap_vert',\n description: 'Emite evento ao trocar de etapa',\n emit: 'selectionChange',\n payloadSchema: {\n type: 'object',\n properties: {\n selectedIndex: { type: 'number', description: 'Índice selecionado' },\n previouslySelectedIndex: { type: 'number', description: 'Índice anterior' },\n },\n required: ['selectedIndex'],\n example: { selectedIndex: 1, previouslySelectedIndex: 0 },\n },\n scope: 'any',\n },\n ],\n tags: ['widget', 'container', 'stepper', 'configurable'],\n lib: '@praxisui/stepper',\n layoutHints: { recommendedCols: 8, recommendedRows: 6, minCols: 4, minRows: 4 },\n};\n\nexport const PRAXIS_WIZARD_BENEFITS_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-benefits',\n selector: 'praxis-wizard-benefits-grid',\n component: PraxisWizardBenefitsGridComponent,\n friendlyName: 'Wizard Benefits Grid',\n description: 'Grid de benefícios com ícones/títulos/texto (uso editorial).',\n icon: 'view_module',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'title', type: 'string', label: 'Título' },\n { name: 'items', type: 'Array<{ icon?: string; title: string; text?: string }>', label: 'Itens' },\n { name: 'columns', type: 'number', label: 'Colunas' },\n { name: 'boxed', type: 'boolean', label: 'Boxed' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'content', 'benefits'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_CONTENT_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-content',\n selector: 'praxis-wizard-content-block',\n component: PraxisWizardContentBlockComponent,\n friendlyName: 'Wizard Content Block',\n description: 'Bloco editorial com título/subtítulo/texto.',\n icon: 'article',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'title', type: 'string', label: 'Título' },\n { name: 'subtitle', type: 'string', label: 'Subtítulo' },\n { name: 'text', type: 'string', label: 'Texto' },\n { name: 'caption', type: 'string', label: 'Legenda' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'content'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_NOTICE_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-inline-notice',\n selector: 'praxis-wizard-inline-notice',\n component: PraxisWizardInlineNoticeComponent,\n friendlyName: 'Wizard Inline Notice',\n description: 'Texto legal/nota inline para wizards.',\n icon: 'info',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'text', type: 'string', label: 'Texto' },\n { name: 'tone', type: \"'neutral' | 'info' | 'warning'\", label: 'Tom' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'notice'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_DIVIDER_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-divider',\n selector: 'praxis-wizard-divider',\n component: PraxisWizardDividerComponent,\n friendlyName: 'Wizard Divider',\n description: 'Separador visual para fluxo.',\n icon: 'horizontal_rule',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'label', type: 'string', label: 'Rótulo' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'divider'],\n lib: '@praxisui/stepper',\n};\n\nexport function providePraxisStepperMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_STEPPER_COMPONENT_METADATA);\n registry.register(PRAXIS_WIZARD_BENEFITS_METADATA);\n registry.register(PRAXIS_WIZARD_CONTENT_METADATA);\n registry.register(PRAXIS_WIZARD_NOTICE_METADATA);\n registry.register(PRAXIS_WIZARD_DIVIDER_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import type { WizardFormConfig } from './praxis-wizard-form.types';\n\nexport const FT_WIZARD_JSON = `{\n \"id\": \"ft-edit-wizard\",\n \"brand\": \"FINANCIAL TIMES\",\n \"progress\": {\n \"variant\": \"line\",\n \"showLabels\": true,\n \"labelPosition\": \"bottom\"\n },\n \"cta\": {\n \"label\": \"Continue\",\n \"action\": \"next\",\n \"secondaryLabel\": \"Back\",\n \"secondaryAction\": \"prev\",\n \"sticky\": true\n },\n \"preferences\": {\n \"stepId\": \"preferences\",\n \"storageKey\": \"praxis:ft-wizard\",\n \"persistFields\": [\"topStories\", \"invitesOffers\", \"recommendations\"]\n },\n \"theme\": {\n \"praxis-wizard-card-bg\": \"#fff1e5\",\n \"md-sys-color-surface\": \"#fff1e5\",\n \"md-sys-color-on-surface\": \"#33302e\",\n \"praxis-wizard-accent\": \"#0d7680\",\n \"praxis-wizard-border\": \"#cfcfcf\",\n \"md-sys-color-outline-variant\": \"#cfcfcf\",\n \"ft-font-head\": \"\\\\\\\"Financier Display\\\\\\\", Georgia, serif\",\n \"ft-font-body\": \"\\\\\\\"Metric\\\\\\\", \\\\\\\"Helvetica Neue\\\\\\\", Helvetica, Arial, sans-serif\",\n \"ft-radius\": \"0\",\n \"ft-shadow\": \"none\",\n \"ft-header-border\": \"1px solid #cfcfcf\"\n },\n \"steps\": [\n {\n \"id\": \"access\",\n \"label\": \"Access\",\n \"title\": \"Create an FT Edit account\",\n \"subtitle\": \"Get access in a couple of steps and upgrade later for the full FT experience.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"benefitsGrid\",\n \"title\": \"Why register?\",\n \"columns\": 4,\n \"boxed\": true,\n \"items\": [\n {\n \"icon\": \"format_quote\",\n \"title\": \"Beyond the headlines\",\n \"text\": \"Insightful news, thought-provoking opinion and fascinating features.\"\n },\n {\n \"icon\": \"edit_note\",\n \"title\": \"Curated daily editions\",\n \"text\": \"Eight fresh articles a day chosen for you by our senior editors.\"\n },\n {\n \"icon\": \"bookmarks\",\n \"title\": \"Never miss a great story\",\n \"text\": \"Explore previous editions from the past week.\"\n },\n {\n \"icon\": \"mail\",\n \"title\": \"Receive the FT Edit newsletter\",\n \"text\": \"A daily round-up delivered straight to your inbox.\"\n }\n ]\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"For more information about how we use your data, please refer to our privacy and cookie policies.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Register with email\",\n \"action\": \"next\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"access-section\",\n \"rows\": [\n {\n \"columns\": [\n {\n \"fields\": [\"confirmAge\", \"editNewsletter\"]\n }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"confirmAge\",\n \"label\": \"\",\n \"controlType\": \"checkbox\",\n \"required\": true,\n \"layout\": \"horizontal\",\n \"options\": [\n {\n \"label\": \"I confirm I am 16+ years old and agree to the Terms & Conditions.\",\n \"value\": true\n }\n ]\n },\n {\n \"name\": \"editNewsletter\",\n \"label\": \"FT Edit newsletter\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"All new members also start receiving our daily FT Edit newsletter.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n },\n {\n \"id\": \"account\",\n \"label\": \"Account\",\n \"title\": \"Create an FT Edit account\",\n \"subtitle\": \"This address will be used to create your account.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"All new members also start receiving our daily FT Edit newsletter.\",\n \"tone\": \"info\"\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"We will send you service messages about your account, security or legal notifications.\"\n }\n ]\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"account-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"email\", \"password\"] },\n { \"fields\": [\"newsletterOptIn\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"email\",\n \"label\": \"Email address\",\n \"controlType\": \"email\",\n \"required\": true,\n \"placeholder\": \"Enter your email address\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"required\": true,\n \"placeholder\": \"Enter a password\",\n \"hint\": \"Use 8 or more characters. You can use letters, numbers or symbols.\",\n \"validators\": {\n \"minLength\": 8\n },\n \"revealToggle\": {\n \"enabled\": true,\n \"style\": \"text\",\n \"showLabel\": \"Show password\",\n \"hideLabel\": \"Hide password\",\n \"ariaLabel\": \"Toggle password visibility\"\n }\n },\n {\n \"name\": \"newsletterOptIn\",\n \"label\": \"Stay up to date\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"All new members also start receiving our daily FT Edit newsletter.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n },\n {\n \"id\": \"preferences\",\n \"label\": \"Preferences\",\n \"title\": \"Stay up to date\",\n \"subtitle\": \"You can update these any time in your Contact Preferences.\",\n \"description\": \"We will send you service messages about your account, security or legal notifications.\",\n \"zones\": {\n \"footer\": [\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"inlineNotice\",\n \"text\": \"We will send you service messages about your account, security or legal notifications.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Create an FT Edit account\",\n \"action\": \"submit\",\n \"secondaryLabel\": \"Back\",\n \"secondaryAction\": \"prev\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"prefs-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"topStories\"] },\n { \"fields\": [\"invitesOffers\"] },\n { \"fields\": [\"recommendations\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"topStories\",\n \"label\": \"Top stories & features\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Get the most from the Financial Times with personalised special reports, recommended reads and latest feature announcements.\"\n },\n {\n \"name\": \"invitesOffers\",\n \"label\": \"Invites & offers from the FT\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Receive exclusive personalised event invitations, carefully-curated offers and promotions from the Financial Times.\"\n },\n {\n \"name\": \"recommendations\",\n \"label\": \"Personal recommendations\",\n \"controlType\": \"toggle\",\n \"defaultValue\": false,\n \"hint\": \"Tailored reading lists based on what you follow.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n }\n ]\n}`;\n\nexport const FT_WIZARD_CONFIG = JSON.parse(FT_WIZARD_JSON) as WizardFormConfig;","import type { StepperMetadata, StepConfig } from '../praxis-stepper';\nimport type { WizardBlock, WizardFormConfig, WizardStepConfig } from './praxis-wizard-form.types';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport type { PraxisListConfig } from '@praxisui/list';\n\nconst defaultCardSkin: PraxisListConfig['skin'] = {\n type: 'elevated',\n radius: '12px',\n border: '1px solid var(--md-sys-color-outline-variant, #e0e0e0)',\n shadow: '0 1px 2px rgba(0,0,0,0.06)',\n};\n\nconst defaultCardLayout: PraxisListConfig['layout'] = {\n variant: 'cards',\n density: 'comfortable',\n lines: 2,\n model: 'standard',\n dividers: 'none',\n};\n\nconst defaultCardTemplating: PraxisListConfig['templating'] = {\n primary: { type: 'text', expr: '${item.title}', class: 'ft-card-title' },\n secondary: { type: 'text', expr: '${item.description}', class: 'ft-card-desc' },\n};\n\nexport function buildStepperConfig(wizard: WizardFormConfig): StepperMetadata {\n const steps: StepConfig[] = wizard.steps.map((step) => buildStep(step, wizard.id));\n return {\n orientation: 'horizontal',\n linear: true,\n headerPosition: 'top',\n labelPosition: wizard.progress?.labelPosition ?? 'bottom',\n density: 'compact',\n stepperClass: 'ft-stepper',\n headerClass: 'ft-stepper-header',\n contentClass: 'ft-stepper-content',\n appearance: {\n preset: 'ft-light',\n },\n navigation: { visible: false },\n steps,\n };\n}\n\nfunction buildStep(step: WizardStepConfig, wizardId: string): StepConfig {\n const blocks = buildBlocks(mergeBlocks(step), wizardId, step.id);\n const beforeWidgets = [\n ...blocks.before,\n ...(step.cards?.length ? [buildCardsWidget(step, wizardId)] : []),\n ];\n const widgetsBeforeForm: WidgetDefinition[] | undefined = beforeWidgets.length ? beforeWidgets : undefined;\n const widgetsAfterForm: WidgetDefinition[] | undefined = blocks.after.length ? blocks.after : undefined;\n\n return {\n id: step.id,\n label: step.label,\n description: step.subtitle || step.description,\n optional: step.optional,\n widgetsBeforeForm,\n widgets: widgetsAfterForm,\n form: step.form\n ? {\n formId: step.form.formId || `${wizardId}:${step.id}`,\n config: step.form.config,\n mode: 'create',\n }\n : undefined,\n };\n}\n\nfunction buildCardsWidget(step: WizardStepConfig, wizardId: string): WidgetDefinition {\n const cfg: PraxisListConfig = {\n id: `${wizardId}:${step.id}:cards`,\n dataSource: { data: step.cards || [] },\n layout: { ...defaultCardLayout },\n skin: { ...defaultCardSkin },\n templating: { ...defaultCardTemplating },\n ui: { showSearch: false, showSort: false, showRange: false },\n };\n\n return {\n id: 'praxis-list',\n inputs: {\n listId: cfg.id,\n config: cfg,\n },\n };\n}\n\nfunction mergeBlocks(step: WizardStepConfig): WizardBlock[] | undefined {\n const out: WizardBlock[] = [];\n const hasZones = !!(step.zones?.intro?.length || step.zones?.body?.length || step.zones?.footer?.length);\n if (hasZones) {\n // Contrato atual: `zones` é o modelo canônico e substitui `blocks` legado\n // quando ambos coexistem no payload, evitando renderização duplicada.\n if (step.zones?.intro?.length) {\n out.push(...step.zones.intro.map((b) => ({ ...b, placement: 'beforeForm' as const })));\n }\n if (step.zones?.body?.length) {\n out.push(...step.zones.body.map((b) => ({ ...b, placement: 'beforeForm' as const })));\n }\n if (step.zones?.footer?.length) {\n out.push(...step.zones.footer.map((b) => ({ ...b, placement: 'afterForm' as const })));\n }\n return out;\n }\n if (step.blocks?.length) out.push(...step.blocks);\n return out.length ? out : undefined;\n}\n\nfunction buildBlocks(blocks: WizardBlock[] | undefined, wizardId: string, stepId: string): {\n before: WidgetDefinition[];\n after: WidgetDefinition[];\n} {\n if (!blocks || blocks.length === 0) return { before: [], after: [] };\n const before: WidgetDefinition[] = [];\n const after: WidgetDefinition[] = [];\n\n blocks.forEach((block, index) => {\n const placement = block.placement ?? 'beforeForm';\n const def = toWidget(block, wizardId, stepId, index);\n if (!def) return;\n if (placement === 'afterForm') after.push(def);\n else before.push(def);\n });\n\n return { before, after };\n}\n\nfunction resolveBlockRuntimeId(block: WizardBlock, wizardId: string, stepId: string, index: number): string {\n const explicitId = typeof block.id === 'string' ? block.id.trim() : '';\n return explicitId\n ? `${wizardId}:${stepId}:block:${explicitId}`\n : `${wizardId}:${stepId}:block:${index}`;\n}\n\nfunction toWidget(block: WizardBlock, wizardId: string, stepId: string, index: number): WidgetDefinition | null {\n const baseId = resolveBlockRuntimeId(block, wizardId, stepId, index);\n switch (block.type) {\n case 'benefitsGrid':\n return {\n id: 'praxis-wizard-benefits',\n inputs: {\n blockId: baseId,\n title: block.title,\n items: block.items,\n columns: block.columns,\n boxed: block.boxed,\n },\n };\n case 'contentBlock':\n return {\n id: 'praxis-wizard-content',\n inputs: {\n blockId: baseId,\n title: block.title,\n subtitle: block.subtitle,\n text: block.text,\n caption: block.caption,\n },\n };\n case 'inlineNotice':\n return {\n id: 'praxis-wizard-inline-notice',\n inputs: {\n blockId: baseId,\n text: block.text,\n tone: block.tone,\n },\n };\n case 'divider':\n return {\n id: 'praxis-wizard-divider',\n inputs: {\n blockId: baseId,\n label: block.label ?? '',\n },\n };\n default:\n return null;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'praxis-wizard-cta-bar',\n standalone: true,\n imports: [CommonModule, MatButtonModule],\n template: `\n <div class=\"pwx-cta\" [class.is-sticky]=\"sticky\" [class.has-secondary]=\"showSecondary\">\n <button\n *ngIf=\"showSecondary\"\n mat-button\n type=\"button\"\n class=\"pwx-cta-secondary\"\n (click)=\"secondaryClick.emit()\"\n [attr.aria-label]=\"secondaryLabel\"\n >\n {{ secondaryLabel }}\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"pwx-cta-primary\"\n [disabled]=\"primaryDisabled\"\n (click)=\"primaryClick.emit()\"\n [attr.aria-label]=\"primaryLabel\"\n >\n {{ primaryLabel }}\n </button>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-cta {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 12px;\n padding-top: 16px;\n }\n .pwx-cta:not(.has-secondary) {\n justify-content: center;\n }\n .pwx-cta.is-sticky {\n position: sticky;\n bottom: 0;\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n padding: 12px 0 8px;\n border-top: 1px solid var(--praxis-wizard-border, var(--md-sys-color-outline-variant));\n }\n .pwx-cta.has-secondary .pwx-cta-primary { min-width: 200px; }\n .pwx-cta-primary {\n min-width: 240px;\n height: 36px;\n border-radius: 4px;\n font-weight: 600;\n text-transform: none;\n padding: 0 18px;\n }\n .pwx-cta-secondary {\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n text-transform: none;\n font-weight: 500;\n padding: 0 4px;\n min-width: auto;\n }\n @media (max-width: 600px) {\n .pwx-cta { flex-direction: column; align-items: stretch; }\n .pwx-cta-primary { width: 100%; }\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardCtaBarComponent {\n @Input() primaryLabel = 'Continue';\n @Input() primaryDisabled = false;\n @Input() secondaryLabel = 'Back';\n @Input() showSecondary = false;\n @Input() sticky = false;\n\n @Output() primaryClick = new EventEmitter<void>();\n @Output() secondaryClick = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, computed, inject, signal, isDevMode, effect, ElementRef, Renderer2 } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n CONFIG_STORAGE,\n ConsoleLoggerSink,\n createCorporateLoggerConfig,\n LoggerService,\n type ConfigStorage,\n} from '@praxisui/core';\nimport { PraxisStepper } from '../praxis-stepper';\nimport type { WizardCtaConfig, WizardFormConfig, WizardStepConfig } from './praxis-wizard-form.types';\nimport { buildStepperConfig } from './praxis-wizard-form.adapter';\nimport { PraxisWizardCtaBarComponent } from './praxis-wizard-cta-bar.component';\n\ninterface WizardPersistedState {\n selectedIndex?: number;\n preferences?: Record<string, any>;\n}\n\nconst PRAXIS_WIZARD_LOGGER = new LoggerService(\n createCorporateLoggerConfig(isDevMode() ? 'dev' : 'prod'),\n [new ConsoleLoggerSink()],\n);\n\nfunction logWizardConfigIssue(message: string): void {\n PRAXIS_WIZARD_LOGGER.warnOnce(\n `[PraxisWizard] ${message}`,\n {\n context: {\n lib: 'praxis-stepper',\n component: 'PraxisWizardFormComponent',\n },\n dedupeKey: `praxis-wizard:config:${message}`,\n },\n );\n}\n\nfunction validateWizardConfig(cfg: WizardFormConfig | null): WizardFormConfig | null {\n if (!cfg) return null;\n const errors: string[] = [];\n if (!cfg.id) errors.push('config.id is required.');\n if (!cfg.steps || cfg.steps.length === 0) errors.push('config.steps must have at least one step.');\n cfg.steps?.forEach((step, idx) => {\n if (!step.id) errors.push(`steps[${idx}].id is required.`);\n if (!step.label) errors.push(`steps[${idx}].label is required.`);\n const hasZones = !!(step.zones?.intro?.length || step.zones?.body?.length || step.zones?.footer?.length);\n const hasBlocks = !!(step.blocks && step.blocks.length > 0);\n if (hasZones && hasBlocks) {\n errors.push(`steps[${idx}] cannot use both 'zones' and 'blocks'.`);\n }\n });\n if (errors.length) {\n errors.forEach((err) => logWizardConfigIssue(err));\n if (isDevMode()) {\n throw new Error(`[PraxisWizard] Invalid configuration:\\\\n${errors.join('\\\\n')}`);\n }\n }\n return cfg;\n}\n\n@Component({\n selector: 'praxis-wizard-form',\n standalone: true,\n imports: [CommonModule, MatCardModule, MatIconModule, PraxisStepper, PraxisWizardCtaBarComponent],\n template: `\n <section class=\"ft-wizard-shell\" [attr.data-wizard-id]=\"wizardId\">\n <div class=\"ft-wizard-header\">\n <div class=\"ft-brand\">{{ wizardBrand() }}</div>\n </div>\n\n <mat-card class=\"ft-wizard-card\">\n <div class=\"ft-card-header\">\n <h2>{{ activeTitle() }}</h2>\n @if (activeSubtitle()) {\n <p>{{ activeSubtitle() }}</p>\n }\n @if (activeDescription()) {\n <p class=\"ft-card-description\">{{ activeDescription() }}</p>\n }\n </div>\n\n <praxis-stepper\n #stepper\n [stepperId]=\"wizardId\"\n [config]=\"stepperConfig()\"\n [selectedIndex]=\"selectedIndex()\"\n [editModeEnabled]=\"editModeEnabled\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n (stepFormValueChange)=\"onStepFormValueChange($event)\"\n ></praxis-stepper>\n\n <praxis-wizard-cta-bar\n [primaryLabel]=\"primaryLabel()\"\n [primaryDisabled]=\"isPrimaryDisabled()\"\n [secondaryLabel]=\"secondaryLabel()\"\n [showSecondary]=\"showSecondaryAction()\"\n [sticky]=\"resolvedCta().sticky ?? false\"\n (primaryClick)=\"onPrimaryAction()\"\n (secondaryClick)=\"onSecondaryAction()\"\n ></praxis-wizard-cta-bar>\n </mat-card>\n </section>\n `,\n styleUrls: ['./praxis-wizard-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardFormComponent {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly storage = inject<ConfigStorage>(CONFIG_STORAGE);\n\n constructor() {\n effect(() => {\n const cfg = this.wizard();\n const theme = cfg?.theme;\n if (theme) {\n Object.entries(theme).forEach(([key, value]) => {\n this.renderer.setStyle(this.el.nativeElement, `--${key}`, value);\n });\n }\n });\n }\n\n @ViewChild('stepper', { static: true }) stepper?: PraxisStepper;\n\n @Input({ required: true }) wizardId!: string;\n\n @Input() editModeEnabled = false;\n\n @Input() set config(cfg: WizardFormConfig | string | null) {\n if (!cfg) {\n this._config.set(null);\n return;\n }\n if (typeof cfg === 'string') {\n try {\n this._config.set(validateWizardConfig(JSON.parse(cfg) as WizardFormConfig));\n } catch {\n this._config.set(null);\n }\n return;\n }\n this._config.set(validateWizardConfig(cfg));\n }\n\n @Output() submit = new EventEmitter<{ wizardId: string; values: Record<string, any> }>();\n\n private readonly _config = signal<WizardFormConfig | null>(null);\n private readonly persistedState = signal<WizardPersistedState | null>(null);\n readonly selectedIndex = signal(0);\n\n readonly wizard = computed(() => {\n const cfg = this._config();\n if (!cfg) return null;\n const persisted = this.persistedState()?.preferences;\n if (!persisted) return cfg;\n return applyPreferenceDefaults(cfg, persisted);\n });\n\n readonly stepperConfig = computed(() => {\n const cfg = this.wizard();\n return cfg ? buildStepperConfig(cfg) : null;\n });\n\n readonly activeStep = computed(() => {\n const w = this.wizard();\n return w?.steps?.[this.selectedIndex()] || null;\n });\n\n wizardBrand = computed(() => this.wizard()?.brand || 'FINANCIAL TIMES');\n activeTitle = computed(() => this.activeStep()?.title || this.wizard()?.title || '');\n activeSubtitle = computed(() => this.activeStep()?.subtitle || this.wizard()?.subtitle || '');\n activeDescription = computed(() => this.activeStep()?.description || this.wizard()?.description || '');\n\n readonly resolvedCta = computed<Partial<WizardCtaConfig>>(() => {\n const stepCta = this.activeStep()?.cta;\n const globalCta = this.wizard()?.cta;\n return { ...(globalCta || {}), ...(stepCta || {}) } as Partial<WizardCtaConfig>;\n });\n primaryLabel = computed(() => this.resolvedCta().label ?? 'Continue');\n primaryAction = computed(() => this.resolvedCta().action ?? 'next');\n secondaryLabel = computed(() => this.resolvedCta().secondaryLabel ?? 'Back');\n secondaryAction = computed(() => this.resolvedCta().secondaryAction ?? 'prev');\n\n showSecondaryAction(): boolean {\n const action = this.secondaryAction();\n if (action === 'cancel') return true;\n return action === 'prev' && this.selectedIndex() > 0;\n }\n\n isPrimaryDisabled(): boolean {\n const action = this.primaryAction();\n if (action === 'next') return !!this.stepper?.isNextDisabled(this.selectedIndex());\n if (action === 'submit') return !!this.stepper?.isNextDisabled(this.selectedIndex());\n return false;\n }\n\n onPrimaryAction(): void {\n this.focusPrimaryAction();\n const action = this.primaryAction();\n if (action === 'next') {\n this.stepper?.next();\n return;\n }\n if (action === 'submit') {\n this.submit.emit({ wizardId: this.wizardId, values: this.collectValues() });\n return;\n }\n }\n\n onSecondaryAction(): void {\n this.focusSecondaryAction();\n if (this.secondaryAction() === 'prev') {\n this.stepper?.prev();\n return;\n }\n if (this.secondaryAction() === 'cancel') {\n this.resetProgress();\n }\n }\n\n onSelectedIndexChange(idx: number): void {\n this.selectedIndex.set(idx);\n this.persistState();\n }\n\n onStepFormValueChange(ev: { stepIndex: number; stepId?: string; event: { formData?: any } }): void {\n const wizard = this.wizard();\n if (!wizard?.preferences) return;\n const prefStepId = wizard.preferences.stepId;\n if (!prefStepId || prefStepId !== ev.stepId) return;\n const values = pickPreferenceValues(ev.event?.formData, wizard.preferences.persistFields);\n this.persistState({ preferences: values });\n }\n\n ngOnInit(): void {\n this.loadPersistedState();\n }\n\n private collectValues(): Record<string, any> {\n const values: Record<string, any> = {};\n const steps = this.wizard()?.steps || [];\n steps.forEach((step, idx) => {\n const form = this.stepper?.formGroupFor(idx);\n if (form) values[step.id] = form.getRawValue();\n });\n return values;\n }\n\n private loadPersistedState(): void {\n if (!this.storageKey()) return;\n const stored = this.storage.loadConfig<WizardPersistedState>(this.storageKey());\n if (!stored) return;\n this.persistedState.set(stored);\n if (typeof stored.selectedIndex === 'number') {\n this.selectedIndex.set(stored.selectedIndex);\n }\n }\n\n private persistState(partial?: WizardPersistedState): void {\n if (!this.storageKey()) return;\n const next: WizardPersistedState = {\n selectedIndex: this.selectedIndex(),\n preferences: this.persistedState()?.preferences,\n ...partial,\n };\n this.persistedState.set(next);\n this.storage.saveConfig(this.storageKey(), next);\n }\n\n private storageKey(): string {\n const cfg = this.wizard();\n const base = cfg?.preferences?.storageKey || `praxis:wizard:${cfg?.id || this.wizardId}`;\n return `${base}:state`;\n }\n\n private resetProgress(): void {\n const key = this.storageKey();\n if (key) this.storage.clearConfig(key);\n this.persistedState.set(null);\n this.selectedIndex.set(0);\n this.stepper?.reset();\n }\n\n private focusPrimaryAction(): void {\n if (typeof document === 'undefined') return;\n const host = document.querySelector(`[data-wizard-id=\"${this.wizardId}\"]`) || document;\n const el = host.querySelector('.pwx-cta-primary') as HTMLElement | null;\n el?.focus();\n }\n\n private focusSecondaryAction(): void {\n if (typeof document === 'undefined') return;\n const host = document.querySelector(`[data-wizard-id=\"${this.wizardId}\"]`) || document;\n const el = host.querySelector('.pwx-cta-secondary') as HTMLElement | null;\n el?.focus();\n }\n}\n\nfunction pickPreferenceValues(value: any, fields?: string[]): Record<string, any> {\n if (!value || !fields || fields.length === 0) return value || {};\n const out: Record<string, any> = {};\n fields.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(value, key)) out[key] = value[key];\n });\n return out;\n}\n\nfunction applyPreferenceDefaults(cfg: WizardFormConfig, values: Record<string, any>): WizardFormConfig {\n const pref = cfg.preferences;\n if (!pref?.stepId || !values) return cfg;\n const steps = cfg.steps.map((step) => {\n if (step.id !== pref.stepId || !step.form?.config?.fieldMetadata) return step;\n const fieldMetadata = step.form.config.fieldMetadata.map((meta) => {\n if (meta.name && Object.prototype.hasOwnProperty.call(values, meta.name)) {\n return { ...meta, defaultValue: values[meta.name] };\n }\n return meta;\n });\n return {\n ...step,\n form: {\n ...step.form,\n config: {\n ...step.form.config,\n fieldMetadata,\n },\n },\n };\n });\n return { ...cfg, steps };\n}\n","/*\n * Public API Surface of praxis-stepper\n */\n\nexport * from './lib/praxis-stepper';\nexport * from './lib/praxis-stepper.metadata';\nexport * from './lib/praxis-stepper-config-editor';\nexport * from './lib/wizard/ft-wizard-config';\nexport * from './lib/wizard/praxis-wizard-form.component';\nexport * from './lib/wizard/praxis-wizard-form.types';\nexport * from './lib/ai/stepper-ai-capabilities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i5","i6","i7","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"praxisui-stepper.mjs","sources":["../../../projects/praxis-stepper/src/lib/select-quick-config.dialog.ts","../../../projects/praxis-stepper/src/lib/wizard-widget-config.dialog.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper-config-editor.ts","../../../projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts","../../../projects/praxis-stepper/src/lib/ai/stepper-ai.adapter.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-benefits-grid.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-content-block.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-inline-notice.component.ts","../../../projects/praxis-stepper/src/lib/wizard/blocks/praxis-wizard-divider.component.ts","../../../projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts","../../../projects/praxis-stepper/src/lib/wizard/ft-wizard-config.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-form.adapter.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-cta-bar.component.ts","../../../projects/praxis-stepper/src/lib/wizard/praxis-wizard-form.component.ts","../../../projects/praxis-stepper/src/public-api.ts","../../../projects/praxis-stepper/src/praxisui-stepper.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface SelectQuickConfigResult {\n label?: string;\n name?: string;\n resourcePath?: string;\n optionLabelKey?: string;\n optionValueKey?: string;\n multiple?: boolean;\n required?: boolean;\n}\n\n@Component({\n selector: 'praxis-select-quick-config-dialog',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDialogModule, MatFormFieldModule, MatInputModule, MatCheckboxModule, MatButtonModule],\n template: `\n <h2 mat-dialog-title>Configurar Select (busca)</h2>\n <div mat-dialog-content class=\"g gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"model.label\" placeholder=\"Ex.: Cliente\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Nome</mat-label>\n <input matInput [(ngModel)]=\"model.name\" placeholder=\"Ex.: customerId\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>resourcePath</mat-label>\n <input matInput [(ngModel)]=\"model.resourcePath\" placeholder=\"Ex.: customers\" />\n </mat-form-field>\n <div class=\"g g-auto-220 gap-12\">\n <mat-form-field appearance=\"outline\">\n <mat-label>optionLabelKey</mat-label>\n <input matInput [(ngModel)]=\"model.optionLabelKey\" placeholder=\"Ex.: name\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>optionValueKey</mat-label>\n <input matInput [(ngModel)]=\"model.optionValueKey\" placeholder=\"Ex.: id\" />\n </mat-form-field>\n </div>\n <div class=\"row gap-16 ai-center\">\n <mat-checkbox [(ngModel)]=\"model.multiple\">Múltipla seleção</mat-checkbox>\n <mat-checkbox [(ngModel)]=\"model.required\">Obrigatório</mat-checkbox>\n </div>\n </div>\n <div mat-dialog-actions align=\"end\">\n <button mat-button (click)=\"cancel()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" (click)=\"confirm()\">Adicionar</button>\n </div>\n `,\n styles: [\n `\n .g { display: grid; }\n .gap-12 { gap: 12px; }\n .w-full { width: 100%; }\n .row { display: flex; }\n .ai-center { align-items: center; }\n .gap-16 { gap: 16px; }\n .g-auto-220 { grid-template-columns: repeat(auto-fit, minmax(220px,1fr)); }\n `,\n ],\n})\nexport class SelectQuickConfigDialogComponent {\n model: SelectQuickConfigResult = {\n label: '',\n name: '',\n resourcePath: '',\n optionLabelKey: 'label',\n optionValueKey: 'id',\n multiple: false,\n required: false,\n };\n\n constructor(\n private ref: MatDialogRef<SelectQuickConfigDialogComponent, SelectQuickConfigResult>,\n @Inject(MAT_DIALOG_DATA) data?: { from?: Partial<SelectQuickConfigResult> },\n ) {\n if (data?.from) this.model = { ...this.model, ...data.from };\n }\n\n cancel(): void { this.ref.close(); }\n confirm(): void { this.ref.close(this.model); }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\ntype WizardWidgetId =\n | 'praxis-wizard-benefits'\n | 'praxis-wizard-content'\n | 'praxis-wizard-inline-notice'\n | 'praxis-wizard-divider';\n\ninterface WizardBenefitItemDraft {\n icon?: string;\n title?: string;\n text?: string;\n}\n\ninterface WizardWidgetDraft {\n blockId?: string;\n title?: string;\n subtitle?: string;\n text?: string;\n caption?: string;\n tone?: 'neutral' | 'info' | 'warning';\n label?: string;\n columns?: number;\n boxed?: boolean;\n items?: WizardBenefitItemDraft[];\n}\n\nexport interface WizardWidgetConfigDialogData {\n widgetId: string;\n inputs?: Record<string, any>;\n}\n\nexport interface WizardWidgetConfigDialogResult {\n inputs: Record<string, any>;\n}\n\n@Component({\n selector: 'praxis-wizard-widget-config-dialog',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatCheckboxModule,\n MatButtonModule,\n ],\n template: `\n <h2 mat-dialog-title>{{ dialogTitle }}</h2>\n\n <div mat-dialog-content class=\"dialog-grid\">\n <ng-container [ngSwitch]=\"wizardWidgetId\">\n <ng-container *ngSwitchCase=\"'praxis-wizard-inline-notice'\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"model.text\" placeholder=\"Mensagem do aviso\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tom</mat-label>\n <select matNativeControl [(ngModel)]=\"model.tone\">\n <option value=\"neutral\">Neutro</option>\n <option value=\"info\">Informativo</option>\n <option value=\"warning\">Atenção</option>\n </select>\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-content'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"model.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Subtítulo</mat-label>\n <input matInput [(ngModel)]=\"model.subtitle\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"model.text\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Legenda</mat-label>\n <input matInput [(ngModel)]=\"model.caption\" />\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-divider'\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Rótulo</mat-label>\n <input matInput [(ngModel)]=\"model.label\" placeholder=\"Opcional\" />\n </mat-form-field>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'praxis-wizard-benefits'\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"model.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Colunas</mat-label>\n <input matInput type=\"number\" min=\"1\" [(ngModel)]=\"model.columns\" />\n </mat-form-field>\n <mat-checkbox [(ngModel)]=\"model.boxed\">Cards com contorno</mat-checkbox>\n\n <div class=\"benefits\">\n <div class=\"benefits-head\">\n <strong>Itens de benefício</strong>\n <button mat-stroked-button type=\"button\" (click)=\"addBenefit()\">Adicionar item</button>\n </div>\n <div class=\"benefit-card\" *ngFor=\"let item of benefits; let i = index\">\n <div class=\"benefit-head\">\n <span>Item {{ i + 1 }}</span>\n <button mat-button color=\"warn\" type=\"button\" (click)=\"removeBenefit(i)\">Remover</button>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone</mat-label>\n <input matInput [(ngModel)]=\"item.icon\" placeholder=\"Ex.: info\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Título</mat-label>\n <input matInput [(ngModel)]=\"item.title\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput [(ngModel)]=\"item.text\" />\n </mat-form-field>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <details class=\"advanced full\">\n <summary>Avançado</summary>\n <div class=\"advanced-body\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>ID estável (avançado)</mat-label>\n <input matInput [(ngModel)]=\"model.blockId\" placeholder=\"Ex.: ft-edit-wizard:access:block:hero\" />\n <mat-hint>Use como chave estável de telemetria/E2E. Evite alterar após publicar.</mat-hint>\n </mat-form-field>\n </div>\n </details>\n </div>\n\n <div mat-dialog-actions align=\"end\">\n <button mat-button type=\"button\" (click)=\"cancel()\">Cancelar</button>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"save()\">Salvar</button>\n </div>\n `,\n styles: [\n `\n .dialog-grid {\n display: grid;\n gap: 12px;\n min-width: min(760px, 92vw);\n }\n .full { grid-column: 1 / -1; }\n .benefits {\n display: grid;\n gap: 10px;\n border-top: 1px solid var(--md-sys-color-outline-variant);\n padding-top: 8px;\n }\n .benefits-head {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n .benefit-card {\n display: grid;\n gap: 8px;\n grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));\n padding: 10px;\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-lowest);\n }\n .benefit-head {\n grid-column: 1 / -1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n }\n .advanced {\n border-radius: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n padding: 8px 10px;\n background: var(--md-sys-color-surface-container-lowest);\n }\n .advanced > summary {\n cursor: pointer;\n font-weight: 600;\n list-style: none;\n }\n .advanced > summary::-webkit-details-marker { display: none; }\n .advanced-body {\n margin-top: 10px;\n display: grid;\n gap: 8px;\n }\n `,\n ],\n})\nexport class WizardWidgetConfigDialogComponent {\n readonly wizardWidgetId: WizardWidgetId | null;\n readonly dialogTitle: string;\n readonly model: WizardWidgetDraft;\n private readonly originalInputs: Record<string, any>;\n\n constructor(\n private readonly ref: MatDialogRef<WizardWidgetConfigDialogComponent, WizardWidgetConfigDialogResult>,\n @Inject(MAT_DIALOG_DATA) data?: WizardWidgetConfigDialogData,\n ) {\n const id = (data?.widgetId || '') as WizardWidgetId;\n this.wizardWidgetId = this.isWizardWidgetId(id) ? id : null;\n this.originalInputs = { ...(data?.inputs || {}) };\n this.model = this.buildDraft(this.originalInputs);\n this.dialogTitle = this.resolveTitle(this.wizardWidgetId);\n }\n\n get benefits(): WizardBenefitItemDraft[] {\n if (!Array.isArray(this.model.items)) this.model.items = [];\n return this.model.items;\n }\n\n addBenefit(): void {\n this.benefits.push({ title: '', text: '', icon: '' });\n }\n\n removeBenefit(index: number): void {\n this.benefits.splice(index, 1);\n }\n\n cancel(): void {\n this.ref.close();\n }\n\n save(): void {\n const next = { ...this.originalInputs, ...this.buildInputsForWidget() };\n if (typeof next.blockId === 'string') {\n next.blockId = next.blockId.trim();\n }\n if (!next.blockId) delete next.blockId;\n this.ref.close({ inputs: next });\n }\n\n private isWizardWidgetId(value: string): value is WizardWidgetId {\n return (\n value === 'praxis-wizard-benefits'\n || value === 'praxis-wizard-content'\n || value === 'praxis-wizard-inline-notice'\n || value === 'praxis-wizard-divider'\n );\n }\n\n private resolveTitle(id: WizardWidgetId | null): string {\n switch (id) {\n case 'praxis-wizard-benefits':\n return 'Editar grade de benefícios';\n case 'praxis-wizard-content':\n return 'Editar bloco de conteúdo';\n case 'praxis-wizard-inline-notice':\n return 'Editar aviso inline';\n case 'praxis-wizard-divider':\n return 'Editar divisor';\n default:\n return 'Editar Widget do Wizard';\n }\n }\n\n private buildDraft(inputs: Record<string, any>): WizardWidgetDraft {\n return {\n blockId: inputs.blockId || '',\n title: inputs.title || '',\n subtitle: inputs.subtitle || '',\n text: inputs.text || '',\n caption: inputs.caption || '',\n tone: inputs.tone || 'neutral',\n label: inputs.label || '',\n columns: Number.isFinite(Number(inputs.columns)) ? Number(inputs.columns) : 4,\n boxed: !!inputs.boxed,\n items: Array.isArray(inputs.items)\n ? inputs.items.map((item: any) => ({ icon: item?.icon || '', title: item?.title || '', text: item?.text || '' }))\n : [],\n };\n }\n\n private buildInputsForWidget(): Record<string, any> {\n if (!this.wizardWidgetId) return { ...this.model };\n const base: Record<string, any> = {};\n if (this.model.blockId?.trim()) base.blockId = this.model.blockId.trim();\n\n switch (this.wizardWidgetId) {\n case 'praxis-wizard-inline-notice':\n base.text = this.model.text || '';\n base.tone = this.model.tone || 'neutral';\n return base;\n case 'praxis-wizard-content':\n base.title = this.model.title || '';\n base.subtitle = this.model.subtitle || '';\n base.text = this.model.text || '';\n base.caption = this.model.caption || '';\n return base;\n case 'praxis-wizard-divider':\n base.label = this.model.label || '';\n return base;\n case 'praxis-wizard-benefits':\n base.title = this.model.title || '';\n base.columns = this.safeColumns(this.model.columns);\n base.boxed = !!this.model.boxed;\n base.items = this.benefits\n .map((item) => ({\n icon: item.icon || '',\n title: item.title || '',\n text: item.text || '',\n }))\n .filter((item) => item.title || item.text || item.icon);\n return base;\n default:\n return base;\n }\n }\n\n private safeColumns(value?: number): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 1) return 1;\n return Math.floor(parsed);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { PraxisIconDirective } from '@praxisui/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DragDropModule, CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { BehaviorSubject } from 'rxjs';\nimport { SETTINGS_PANEL_DATA, SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';\nimport { StepperMetadata, StepConfig } from './praxis-stepper';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport { PraxisDynamicFormConfigEditor } from '@praxisui/dynamic-form';\nimport { PraxisListConfigEditor } from '@praxisui/list';\nimport { PraxisFilesUploadConfigEditor } from '@praxisui/files-upload';\nimport { IconPickerService } from '@praxisui/core';\nimport { ComponentPaletteDialogComponent } from '@praxisui/page-builder';\nimport { SelectQuickConfigDialogComponent, SelectQuickConfigResult } from './select-quick-config.dialog';\nimport { WizardWidgetConfigDialogComponent, WizardWidgetConfigDialogResult } from './wizard-widget-config.dialog';\n\ntype WizardWidgetId =\n | 'praxis-wizard-benefits'\n | 'praxis-wizard-content'\n | 'praxis-wizard-inline-notice'\n | 'praxis-wizard-divider';\n\ntype EditorialZone = 'before' | 'after';\n\n@Component({\n selector: 'praxis-stepper-config-editor',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n PraxisIconDirective,\n MatButtonModule,\n MatSlideToggleModule,\n DragDropModule,\n MatTooltipModule,\n MatChipsModule,\n MatCardModule,\n MatButtonToggleModule,\n MatDialogModule,\n MatMenuModule,\n MatTabsModule,\n ],\n template: `\n <div class=\"pdx-editor\">\n <mat-tab-group>\n <mat-tab label=\"Geral\">\n <div class=\"tab-pad\">\n <div class=\"help\">Configure o funcionamento e a aparência básica do passo a passo.</div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Orientação</mat-label>\n <select matNativeControl [(ngModel)]=\"config.orientation\" (ngModelChange)=\"markDirty()\">\n <option value=\"horizontal\">Horizontal</option>\n <option value=\"vertical\">Vertical</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Horizontal: cabeçalho no topo • Vertical: lista à esquerda'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição dos títulos</mat-label>\n <select matNativeControl [(ngModel)]=\"config.headerPosition\" (ngModelChange)=\"markDirty()\">\n <option value=\"top\">Acima</option>\n <option value=\"bottom\">Abaixo</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Válido na orientação horizontal'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição do rótulo</mat-label>\n <select matNativeControl [(ngModel)]=\"config.labelPosition\" (ngModelChange)=\"markDirty()\" [disabled]=\"config.orientation !== 'horizontal'\">\n <option value=\"end\">Ao lado</option>\n <option value=\"bottom\">Abaixo</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Como o texto aparece no cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <select matNativeControl [(ngModel)]=\"config.color\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"primary\">Primária</option>\n <option value=\"accent\">Acento</option>\n <option value=\"warn\">Alerta</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplicável a temas Material 2 (M2)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Duração da animação</mat-label>\n <input matInput [(ngModel)]=\"config.animationDuration\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: 300ms\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Tempo da transição entre etapas'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Etapa selecionada</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"config.selectedIndex\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Índice inicia em 0 (primeira etapa)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Densidade</mat-label>\n <select matNativeControl [(ngModel)]=\"config.density\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"comfortable\">Confortável</option>\n <option value=\"compact\">Compacta</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Controla espaçamentos e alturas'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do stepper (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.stepperClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: meu-stepper\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Permite estilizar com CSS escopado'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do cabeçalho (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.headerClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-header\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Use para ajustes finos de aparência'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe do conteúdo (opcional)</mat-label>\n <input matInput [(ngModel)]=\"config.contentClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-content\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplica uma classe à área de conteúdo'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div class=\"pdx-toggles\">\n <mat-slide-toggle [(ngModel)]=\"config.linear\" (ngModelChange)=\"markDirty()\">Respeitar ordem (linear)</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"config.disableRipple\" (ngModelChange)=\"markDirty()\">Desativar efeitos de clique</mat-slide-toggle>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Etapas\">\n <div class=\"tab-pad\">\n <div class=\"help\">Gerencie as etapas: nomes, mensagens e conteúdo. Arraste para reordenar.</div>\n <div class=\"pdx-steps\">\n <div class=\"pdx-steps-header\">\n <div class=\"title\">Etapas ({{ config.steps.length }})</div>\n <button mat-button (click)=\"addStep()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>Adicionar etapa</button>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\" class=\"pdx-step-list\">\n <div class=\"pdx-step-item\" *ngFor=\"let s of config.steps; let i = index\" cdkDrag [class.active]=\"activeIndex === i\" (click)=\"setActive(i)\">\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"pdx-fields\">\n <mat-form-field appearance=\"outline\" class=\"min-180\">\n <mat-label>Título da etapa</mat-label>\n <input matInput [(ngModel)]=\"s.label\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Como aparecerá no cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Identificador (opcional)</mat-label>\n <input matInput [(ngModel)]=\"s.id\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Útil para automações'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto alternativo (acessibilidade)</mat-label>\n <input matInput [(ngModel)]=\"s.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Lido por leitores de tela'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>ID que descreve (opcional)</mat-label>\n <input matInput [(ngModel)]=\"s.ariaLabelledby\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'ID de um elemento que descreve a etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone/estado do marcador</mat-label>\n <input matInput [(ngModel)]=\"s.state\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: number, done, edit\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Controla o ícone do passo (quando aplicável)'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mensagem de erro</mat-label>\n <input matInput [(ngModel)]=\"s.errorMessage\" (ngModelChange)=\"markDirty()\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Mostrada quando há erro na etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <div class=\"pdx-flag-group\">\n <mat-slide-toggle [(ngModel)]=\"s.optional\" (ngModelChange)=\"markDirty()\">Etapa opcional</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.editable\" (ngModelChange)=\"markDirty()\">Permitir voltar e editar</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.completed\" (ngModelChange)=\"markDirty()\">Marcar como concluída</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"s.hasError\" (ngModelChange)=\"markDirty()\">Marcar como com erro</mat-slide-toggle>\n </div>\n </div>\n <div class=\"pdx-actions\">\n <button mat-icon-button color=\"warn\" (click)=\"removeStep(i)\" matTooltip=\"Remover\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"pdx-active-step\" *ngIf=\"activeStep as step; else noSteps\">\n <div class=\"hdr\">\n <div class=\"title\">Editando: {{ step.label }}</div>\n <mat-button-toggle-group [(ngModel)]=\"activeIndex\" (ngModelChange)=\"onActiveIndexChange()\" [hideSingleSelectionIndicator]=\"true\">\n <mat-button-toggle *ngFor=\"let s of config.steps; let i = index\" [value]=\"i\">{{ i + 1 }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"pdx-content-editor\">\n <div class=\"section editorial-section\">\n <div class=\"section-head\">\n <div>\n <div class=\"section-title\">Conteúdo editorial</div>\n <div class=\"section-subtitle\">Organize os blocos narrativos da etapa antes ou depois do formulário.</div>\n </div>\n </div>\n\n <div class=\"zone-grid\">\n <div class=\"zone-card\">\n <div class=\"zone-head\">\n <div class=\"zone-title\">Antes do formulário</div>\n <div class=\"zone-actions\">\n <span class=\"zone-count\">{{ editorialBeforeWidgets(step).length }}</span>\n <button mat-stroked-button [matMenuTriggerFor]=\"beforeEditorialMenu\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Adicionar\n </button>\n <mat-menu #beforeEditorialMenu=\"matMenu\">\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-benefits', 'before')\">\n <mat-icon [praxisIcon]=\"'view_module'\"></mat-icon>\n Grade de benefícios\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'before')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n Bloco de conteúdo\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'before')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n Aviso inline\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'before')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n Divisor\n </button>\n </mat-menu>\n </div>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"dropEditorialBefore($event)\" class=\"widget-list\">\n <div class=\"widget-item editorial-item\" *ngFor=\"let w of editorialBeforeWidgets(step)\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ editorialWidgetSummary(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button (click)=\"moveEditorialWidget(w, 'before', 'after')\">\n <mat-icon [praxisIcon]=\"'arrow_downward'\"></mat-icon>\n Mover para depois\n </button>\n <button mat-button (click)=\"duplicateEditorialWidget(w, 'before')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n Duplicar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'before')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialBeforeWidgets(step).length\">Nenhum bloco nesta zona.</div>\n </div>\n </div>\n\n <div class=\"zone-card\">\n <div class=\"zone-head\">\n <div class=\"zone-title\">Depois do formulário</div>\n <div class=\"zone-actions\">\n <span class=\"zone-count\">{{ editorialAfterWidgets(step).length }}</span>\n <button mat-stroked-button [matMenuTriggerFor]=\"afterEditorialMenu\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Adicionar\n </button>\n <mat-menu #afterEditorialMenu=\"matMenu\">\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-benefits', 'after')\">\n <mat-icon [praxisIcon]=\"'view_module'\"></mat-icon>\n Grade de benefícios\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'after')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n Bloco de conteúdo\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'after')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n Aviso inline\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'after')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n Divisor\n </button>\n </mat-menu>\n </div>\n </div>\n <div cdkDropList (cdkDropListDropped)=\"dropEditorialAfter($event)\" class=\"widget-list\">\n <div class=\"widget-item editorial-item\" *ngFor=\"let w of editorialAfterWidgets(step)\" cdkDrag>\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ editorialWidgetSummary(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button (click)=\"moveEditorialWidget(w, 'after', 'before')\">\n <mat-icon [praxisIcon]=\"'arrow_upward'\"></mat-icon>\n Mover para antes\n </button>\n <button mat-button (click)=\"duplicateEditorialWidget(w, 'after')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n Duplicar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'after')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialAfterWidgets(step).length\">Nenhum bloco nesta zona.</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">Formulário da etapa</div>\n <div class=\"section-body\">\n <ng-container *ngIf=\"step.form; else addFormBtn\">\n <mat-card appearance=\"outlined\" class=\"mini-card\">\n <mat-card-header>\n <mat-icon mat-card-avatar [praxisIcon]=\"'dynamic_form'\"></mat-icon>\n <mat-card-title>Formulário principal</mat-card-title>\n <mat-card-subtitle>{{ step.form.formId || step.id || '—' }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-actions align=\"end\">\n <button mat-button (click)=\"editMainForm()\"><mat-icon [praxisIcon]=\"'tune'\"></mat-icon> Editar</button>\n <button mat-button color=\"warn\" (click)=\"removeMainForm()\"><mat-icon [praxisIcon]=\"'delete'\"></mat-icon> Remover</button>\n </mat-card-actions>\n </mat-card>\n </ng-container>\n <ng-template #addFormBtn>\n <button mat-stroked-button color=\"primary\" (click)=\"addMainForm()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon> Adicionar formulário</button>\n </ng-template>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-head\">\n <div>\n <div class=\"section-title\">Componentes avançados</div>\n <div class=\"section-subtitle\">Use para cenários de seleção e integrações específicas.</div>\n </div>\n <button mat-stroked-button (click)=\"openMoreComponents()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Mais componentes\n </button>\n </div>\n <div class=\"section-body\">\n <div class=\"cta-grid\">\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'account_tree'\"></mat-icon>\n <div class=\"cta-title\">Lista em árvore</div>\n </div>\n <div class=\"cta-desc\">Exiba dados hierárquicos com seleção simples.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addTreeList()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir árvore\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'swap_horiz'\"></mat-icon>\n <div class=\"cta-title\">Transferência de itens</div>\n </div>\n <div class=\"cta-desc\">Mover itens entre listas (ideal para múltipla seleção).</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addTransferListQuick()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir transferência\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n <div class=\"cta-title\">Seleção com busca</div>\n </div>\n <div class=\"cta-desc\">Campo de seleção com busca remota/local.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addSearchableSelect()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir seletor\n </button>\n </div>\n </div>\n <div class=\"cta-card mat-elevation-z2\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'upload_file'\"></mat-icon>\n <div class=\"cta-title\">Upload de arquivos</div>\n </div>\n <div class=\"cta-desc\">Anexe documentos com validação de upload.</div>\n <div class=\"cta-actions\">\n <button mat-stroked-button (click)=\"addFilesUpload()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n Inserir upload\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"widget-list advanced-list\">\n <div class=\"widget-item\" *ngFor=\"let w of advancedWidgets(step)\">\n <div class=\"drag-handle\"><mat-icon [praxisIcon]=\"'extension'\"></mat-icon></div>\n <div class=\"info\">\n <div class=\"name\">{{ displayWidgetName(w) }}</div>\n <div class=\"sub\">{{ w.id }}</div>\n </div>\n <div class=\"actions\">\n <button mat-button (click)=\"editWidget(w)\" [disabled]=\"!canEditWidget(w)\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n Editar\n </button>\n <button mat-button color=\"warn\" (click)=\"removeAdvancedWidget(w)\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n Remover\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!advancedWidgets(step).length\">Nenhum componente avançado adicionado.</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noSteps>\n <div class=\"muted\">Nenhuma etapa definida.</div>\n </ng-template>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Navegação\">\n <div class=\"tab-pad\">\n <div class=\"help\">Personalize os botões de avançar e voltar exibidos em cada etapa.</div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Estilo dos botões</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.variant\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão (elevado)</option>\n <option value=\"basic\">Texto</option>\n <option value=\"flat\">Plano</option>\n <option value=\"stroked\">Contornado</option>\n <option value=\"raised\">Elevado</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.color\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"primary\">Primária</option>\n <option value=\"accent\">Acento</option>\n <option value=\"warn\">Alerta</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Alinhamento</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.align\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">Direita</option>\n <option value=\"start\">Esquerda</option>\n <option value=\"center\">Centro</option>\n <option value=\"space-between\">Espaçado</option>\n <option value=\"end\">Direita</option>\n </select>\n </mat-form-field>\n </div>\n\n <div class=\"pdx-toggles\">\n <mat-slide-toggle [(ngModel)]=\"navigationCfg.visible\" (ngModelChange)=\"markDirty()\">Mostrar navegação padrão</mat-slide-toggle>\n </div>\n\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto do botão Voltar</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.prevLabel\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: Voltar\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto do botão Próximo</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.nextLabel\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: Próximo\" />\n </mat-form-field>\n </div>\n\n <div class=\"icons-grid\">\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de Voltar</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('prevIcon')\">\n <mat-icon *ngIf=\"navigationCfg.prevIcon\" [praxisIcon]=\"navigationCfg.prevIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.prevIcon\">Escolher</ng-container>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de Próximo</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('nextIcon')\">\n <mat-icon *ngIf=\"navigationCfg.nextIcon\" [praxisIcon]=\"navigationCfg.nextIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.nextIcon\">Escolher</ng-container>\n </button>\n </div>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Aparência\">\n <div class=\"tab-pad\">\n <div class=\"help\">Personalize cores, tipografia e ícones. Para ajustes comuns, use os campos abaixo; para maior controle, edite os tokens. Copie o SCSS e cole no arquivo de tema.</div>\n <div class=\"quick-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Altura do cabeçalho (px)</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerHeightPx\" (ngModelChange)=\"setHeaderHeightPx($event)\" placeholder=\"Ex.: 48\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Altura do item do cabeçalho'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Tamanho do texto (px)</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerLabelTextSizePx\" (ngModelChange)=\"setHeaderLabelTextSizePx($event)\" placeholder=\"Ex.: 14\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Tamanho do título da etapa'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Peso do texto</mat-label>\n <select matNativeControl [ngModel]=\"headerLabelTextWeight\" (ngModelChange)=\"setHeaderLabelTextWeight($event)\">\n <option [ngValue]=\"undefined\">Padrão</option>\n <option value=\"400\">Normal</option>\n <option value=\"500\">Médio</option>\n <option value=\"600\">Seminegrito</option>\n <option value=\"700\">Negrito</option>\n </select>\n </mat-form-field>\n </div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Classe de tema (opcional)</mat-label>\n <input matInput [(ngModel)]=\"appearance.themeClass\" (ngModelChange)=\"onAppearanceChange()\" placeholder=\"Ex.: theme-stepper-custom\" />\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Aplica as cores apenas dentro desse seletor'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Conjunto de ícones</mat-label>\n <select matNativeControl [(ngModel)]=\"appearance.iconsSet\" (ngModelChange)=\"onAppearanceChange()\">\n <option [ngValue]=\"undefined\">Material Icons (padrão)</option>\n <option value=\"material-symbols-outlined\">Material Symbols (Outlined)</option>\n <option value=\"material-symbols-rounded\">Material Symbols (Rounded)</option>\n <option value=\"material-symbols-sharp\">Material Symbols (Sharp)</option>\n </select>\n <button\n mat-icon-button\n matSuffix\n class=\"help-icon-button\"\n type=\"button\"\n [matTooltip]=\"'Selecione se usar ícones do Material Symbols'\"\n matTooltipPosition=\"above\"\n >\n <mat-icon [praxisIcon]=\"'help_outline'\"></mat-icon>\n </button>\n </mat-form-field>\n </div>\n <div class=\"icons-grid\">\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone do número</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('number')\">\n <mat-icon *ngIf=\"icons.number; else pick\" [praxisIcon]=\"icons.number\"></mat-icon>\n <ng-template #pick>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone concluído</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('done')\">\n <mat-icon *ngIf=\"icons.done; else pick2\" [praxisIcon]=\"icons.done\"></mat-icon>\n <ng-template #pick2>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone edição</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('edit')\">\n <mat-icon *ngIf=\"icons.edit; else pick3\" [praxisIcon]=\"icons.edit\"></mat-icon>\n <ng-template #pick3>Escolher</ng-template>\n </button>\n </div>\n <div class=\"icon-item\">\n <div class=\"icon-head\">Ícone de erro</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('error')\">\n <mat-icon *ngIf=\"icons.error; else pick4\" [praxisIcon]=\"icons.error\"></mat-icon>\n <ng-template #pick4>Escolher</ng-template>\n </button>\n </div>\n </div>\n <div class=\"icons-hint\" *ngIf=\"symbolsLikelySelected.length && !appearance.iconsSet\">\n <div class=\"muted\">\n Dica: {{ symbolsLikelySelected.join(', ') }} são ícones do Material Symbols. Selecione um conjunto Symbols abaixo ou clique em\n <button mat-button color=\"primary\" type=\"button\" (click)=\"setIconsSetToSymbols()\">Usar Material Symbols (Outlined)</button>.\n </div>\n </div>\n <div class=\"tokens-grid\">\n <div class=\"token-item\" *ngFor=\"let key of stepperTokenKeys\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{ key }}</mat-label>\n <input matInput [ngModel]=\"appearance.tokens?.[key]\" (ngModelChange)=\"onTokenChange(key, $event)\" placeholder=\"valor CSS ou var(--token)\" />\n </mat-form-field>\n </div>\n </div>\n <div class=\"pdx-appearance-actions\">\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('neutral')\">Preset: neutro</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('primary')\">Preset: primário</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('high-contrast')\">Preset: alto contraste</button>\n <button mat-button type=\"button\" (click)=\"clearTokens()\">Limpar tokens</button>\n </div>\n <mat-card appearance=\"outlined\" class=\"code-card\">\n <div class=\"code-head\">Snippet SCSS</div>\n <pre class=\"code\"><code>{{ scssSnippet() }}</code></pre>\n </mat-card>\n </div>\n </mat-tab>\n </mat-tab-group>\n </div>\n `,\n styles: [\n `\n .pdx-editor { display: grid; gap: 16px; }\n .pdx-editor .mat-mdc-form-field { width: 100%; }\n .pdx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px,1fr)); gap: 12px; }\n .pdx-toggles { display:flex; gap: 12px; flex-wrap: wrap; }\n .tab-pad {\n padding: 12px;\n display: grid;\n gap: 12px;\n background: var(--md-sys-color-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n }\n .help { color: var(--md-sys-color-on-surface-variant); font-size: 13px; }\n .quick-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); gap: 12px; margin-bottom: 6px; }\n .icons-grid { display:grid; grid-template-columns: repeat(auto-fit, minmax(200px,1fr)); gap: 12px; margin: 8px 0; }\n .icon-item { display: grid; gap: 6px; align-content: start; }\n .icons-hint { margin-top: 4px; }\n .pdx-steps { display: grid; gap: 8px; }\n .pdx-steps-header { display:flex; justify-content: space-between; align-items: center; }\n .pdx-step-list { display: grid; gap: 8px; }\n .pdx-step-item {\n display:grid;\n grid-template-columns: 24px 1fr auto;\n gap: 8px;\n align-items: start;\n padding: 8px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 10px;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n }\n .pdx-step-item.active {\n border-color: var(--md-sys-color-primary);\n box-shadow: var(--mat-elevation-level2);\n }\n .drag-handle { display:flex; align-items:center; color: var(--md-sys-color-on-surface-variant); }\n .pdx-fields { display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(160px,1fr)); }\n .pdx-flag-group { display:flex; gap: 10px; align-items:center; }\n .pdx-active-step { display: grid; gap: 12px; padding-top: 8px; border-top: 1px dashed var(--md-sys-color-outline-variant); }\n .pdx-active-step .hdr { display:flex; gap: 12px; align-items: center; justify-content: space-between; }\n .pdx-content-editor { display: grid; gap: 16px; }\n .section {\n display: grid;\n gap: 8px;\n padding: 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 12px;\n background: var(--md-sys-color-surface-container-lowest);\n }\n .section-body { display: grid; gap: 8px; }\n .section-title { font-weight: 600; opacity: .85; }\n .section-subtitle { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .section-head { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; }\n .editorial-section {\n background: var(--md-sys-color-surface-container-low);\n border-color: var(--md-sys-color-primary);\n }\n .mini-card { display: block; }\n .widget-list { display: grid; gap: 8px; }\n .widget-item { display:grid; grid-template-columns: 24px 1fr auto; align-items: center; gap: 8px; padding: 8px; border: 1px solid var(--md-sys-color-outline-variant); border-radius: 8px; background: var(--md-sys-color-surface); }\n .widget-item .info { display: grid; gap: 2px; min-width: 0; }\n .widget-item .info .name { font-weight: 600; }\n .widget-item .info .sub { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .widget-item .info .meta { font-size: 11px; color: var(--md-sys-color-on-surface-variant); font-family: var(--md-ref-typeface-plain, monospace); opacity: .85; }\n .widget-item .actions { display:flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }\n .editorial-item { align-items: start; }\n .editorial-item .actions { justify-content: flex-start; }\n .cta-row { display:flex; gap: 8px; align-items: center; }\n .spacer { flex: 1 1 auto; }\n .muted { color: var(--md-sys-color-on-surface-variant); }\n .cta-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px,1fr)); gap: 12px; margin-bottom: 8px; }\n .cta-card { display: grid; gap: 8px; padding: 12px; border-radius: 12px; border: 1px solid var(--md-sys-color-outline-variant); background: var(--md-sys-color-surface); }\n .cta-card .cta-head { display: flex; align-items: center; gap: 8px; }\n .cta-card .cta-title { font-weight: 600; }\n .cta-card .cta-desc { font-size: 12px; color: var(--md-sys-color-on-surface-variant); }\n .cta-card .cta-actions { display: flex; gap: 8px; align-items: center; }\n .tokens-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px,1fr)); gap: 12px; margin: 8px 0; }\n .token-item { display: contents; }\n .pdx-appearance { margin-top: 8px; display: grid; gap: 8px; }\n .pdx-appearance-actions { display:flex; gap: 8px; flex-wrap: wrap; }\n .zone-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; }\n .zone-card {\n display: grid;\n gap: 8px;\n padding: 12px;\n border-radius: 10px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface);\n }\n .zone-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n .zone-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }\n .zone-title { font-weight: 600; }\n .zone-count {\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface);\n }\n .advanced-list { margin-top: 4px; }\n .code-card { margin-top: 8px; }\n .code-head { font-weight: 600; margin-bottom: 4px; }\n .code { white-space: pre; overflow: auto; background: var(--md-sys-color-surface-container-highest); }\n .w-full { grid-column: 1 / -1; }\n .min-180 { min-width: 180px; }\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 @media (max-width: 900px) {\n .pdx-step-item { grid-template-columns: 20px 1fr; }\n .pdx-actions { grid-column: 1 / -1; justify-self: end; }\n .widget-item { grid-template-columns: 20px 1fr; }\n .widget-item .actions { grid-column: 1 / -1; justify-content: flex-start; }\n }\n\n @media (max-width: 640px) {\n .pdx-active-step .hdr { align-items: flex-start; flex-direction: column; }\n .pdx-flag-group { flex-direction: column; align-items: flex-start; }\n .zone-head { align-items: flex-start; flex-direction: column; }\n .zone-actions { justify-content: flex-start; }\n }\n `,\n ],\n})\nexport class PraxisStepperConfigEditor implements SettingsValueProvider {\n config: StepperMetadata = { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n activeIndex = 0;\n\n // SettingsValueProvider observables\n isDirty$ = new BehaviorSubject<boolean>(false);\n isValid$ = new BehaviorSubject<boolean>(true);\n isBusy$ = new BehaviorSubject<boolean>(false);\n\n private readonly settings = inject(SettingsPanelService);\n private readonly dialog = inject(MatDialog);\n private readonly iconPicker: IconPickerService = inject(IconPickerService);\n\n constructor(@Inject(SETTINGS_PANEL_DATA) data?: any) {\n let seed: StepperMetadata | string | undefined = data?.config ?? data;\n // Normalize when seed is a JSON string\n if (typeof seed === 'string') {\n try { seed = JSON.parse(seed) as StepperMetadata; } catch { seed = undefined; }\n }\n if (seed && typeof seed === 'object') {\n // shallow clone to detach references\n this.config = JSON.parse(JSON.stringify(seed)) as StepperMetadata;\n if (!Array.isArray((this.config as any).steps)) {\n (this.config as any).steps = [] as StepConfig[];\n }\n } else {\n this.config.steps = [ { id: 'step1', label: 'Novo passo' } as StepConfig ];\n this.isDirty$.next(true);\n }\n }\n\n markDirty(): void { this.isDirty$.next(true); this.validate(); }\n\n validate(): void {\n const valid = Array.isArray(this.config.steps) && this.config.steps.every(s => !!s.label);\n this.isValid$.next(valid);\n }\n\n // ------- Appearance (theming tokens) -------\n get navigationCfg(): NonNullable<StepperMetadata['navigation']> {\n const nav = (this.config.navigation ??= {} as any);\n return nav as any;\n }\n get appearance(): NonNullable<StepperMetadata['appearance']> {\n const ap = (this.config.appearance ??= {} as any);\n (ap.tokens ??= {} as any);\n return ap as any;\n }\n\n stepperTokenKeys: string[] = [\n 'container-color',\n 'line-color',\n 'header-label-text-color',\n 'header-optional-label-text-color',\n 'header-icon-foreground-color',\n 'header-icon-background-color',\n 'header-done-state-icon-background-color',\n 'header-done-state-icon-foreground-color',\n 'header-edit-state-icon-background-color',\n 'header-edit-state-icon-foreground-color',\n 'header-error-state-icon-background-color',\n 'header-error-state-icon-foreground-color',\n 'header-error-state-label-text-color',\n 'header-focus-state-layer-color',\n 'header-hover-state-layer-color',\n 'header-label-text-font',\n 'header-label-text-size',\n 'header-label-text-weight',\n 'header-selected-state-label-text-size',\n 'header-selected-state-label-text-weight',\n 'container-text-font',\n 'header-height',\n 'header-focus-state-layer-shape',\n 'header-hover-state-layer-shape',\n 'header-selected-state-icon-background-color',\n 'header-selected-state-icon-foreground-color',\n 'header-selected-state-label-text-color',\n ];\n\n onAppearanceChange(): void { this.markDirty(); }\n\n onTokenChange(key: string, value: string): void {\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n if (!value) {\n delete (tokens as any)[key];\n } else {\n (tokens as any)[key] = value;\n }\n this.onAppearanceChange();\n }\n\n clearTokens(): void {\n if (!this.config.appearance) return;\n this.config.appearance.tokens = {} as any;\n this.onAppearanceChange();\n }\n\n applyPreset(id: 'primary' | 'neutral' | 'high-contrast'): void {\n const presets: Record<string, Record<string, string>> = {\n primary: {\n 'container-color': 'var(--md-sys-color-surface-container)',\n 'header-label-text-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-on-primary)',\n 'line-color': 'var(--md-sys-color-primary)',\n },\n neutral: {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'line-color': 'var(--md-sys-color-outline-variant)',\n },\n 'high-contrast': {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-surface)',\n 'line-color': 'var(--md-sys-color-on-surface)',\n },\n };\n const preset = presets[id] || {};\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n for (const [k, v] of Object.entries(preset)) {\n (tokens as any)[k] = v;\n }\n this.onAppearanceChange();\n }\n\n scssSnippet(): string {\n const tokens = this.config.appearance?.tokens || {};\n const entries = Object.entries(tokens).filter(([, v]) => !!v);\n const selector = this.config.appearance?.themeClass ? `.${this.config.appearance.themeClass}` : ':root';\n const map = entries.map(([k, v]) => ` ${k}: ${v},`).join('\\n');\n return `${selector} {\\n @include mat.stepper-overrides((\\n${map}\\n ));\\n}`;\n }\n\n // ===== Quick editors for common tokens =====\n get headerHeightPx(): number | undefined {\n const raw = this.appearance.tokens?.['header-height'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderHeightPx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-height'];\n } else {\n (this.appearance.tokens as any)['header-height'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextSizePx(): number | undefined {\n const raw = this.appearance.tokens?.['header-label-text-size'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderLabelTextSizePx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-label-text-size'];\n } else {\n (this.appearance.tokens as any)['header-label-text-size'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextWeight(): string | undefined {\n return (this.appearance.tokens as any)['header-label-text-weight'];\n }\n setHeaderLabelTextWeight(v: string | undefined): void {\n if (!v) {\n delete (this.appearance.tokens as any)['header-label-text-weight'];\n } else {\n (this.appearance.tokens as any)['header-label-text-weight'] = v;\n }\n this.onAppearanceChange();\n }\n\n // ===== Icons (using IconPickerService) =====\n get icons(): NonNullable<NonNullable<StepperMetadata['appearance']>['icons']> {\n const ap = this.appearance as any;\n ap.icons ||= {};\n return ap.icons as any;\n }\n\n async pickNavIcon(field: 'prevIcon' | 'nextIcon'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.config.navigation ||= {} as any)[field] = picked;\n this.onAppearanceChange();\n }\n }\n async pickIcon(kind: 'number' | 'done' | 'edit' | 'error'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.icons as any)[kind] = picked;\n this.onAppearanceChange();\n }\n }\n\n // ===== Icon set suggestions =====\n private symbolsLikely(name?: string): boolean {\n if (!name) return false;\n // Heurística simples: counter_1..10 e replace_image são típicos do Material Symbols.\n if (/^counter_\\d+$/.test(name)) return true;\n if (name === 'replace_image') return true;\n return false;\n }\n get symbolsLikelySelected(): string[] {\n const names = [this.icons.number, this.icons.done, this.icons.edit, this.icons.error].filter(Boolean) as string[];\n return names.filter((n) => this.symbolsLikely(n));\n }\n setIconsSetToSymbols(): void {\n this.appearance.iconsSet = 'material-symbols-outlined';\n this.onAppearanceChange();\n }\n drop(ev: CdkDragDrop<StepConfig[]>): void {\n moveItemInArray(this.config.steps, ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n setActive(i: number): void { this.activeIndex = i; }\n onActiveIndexChange(): void { this.activeIndex = Math.max(0, Math.min(this.activeIndex, (this.config.steps.length || 1) - 1)); }\n addStep(): void {\n const n = this.config.steps.length + 1;\n this.config.steps.push({ id: `step${n}`, label: `Passo ${n}` });\n this.markDirty();\n }\n removeStep(idx: number): void {\n this.config.steps.splice(idx, 1);\n this.markDirty();\n }\n\n // ------- Active step helpers -------\n get activeStep(): StepConfig | null { return this.config.steps?.[this.activeIndex] || null; }\n ensureWidgets(): WidgetDefinition[] { const s = this.activeStep!; if (!s.widgets) s.widgets = []; return s.widgets!; }\n ensureWidgetsBeforeForm(): WidgetDefinition[] { const s = this.activeStep!; if (!s.widgetsBeforeForm) s.widgetsBeforeForm = []; return s.widgetsBeforeForm!; }\n displayWidgetName(w: WidgetDefinition): string { switch (w.id) {\n case 'praxis-list': return 'Lista (seleção)';\n case 'pdx-material-searchable-select': return 'Seleção com busca';\n case 'praxis-files-upload': return 'Upload de arquivos';\n case 'praxis-dynamic-form': return 'Formulário';\n case 'praxis-wizard-benefits': return 'Grade de benefícios';\n case 'praxis-wizard-content': return 'Bloco de conteúdo';\n case 'praxis-wizard-inline-notice': return 'Aviso inline';\n case 'praxis-wizard-divider': return 'Divisor';\n default: return (w.inputs as any)?.title || (w.inputs as any)?.label || 'Widget';\n } }\n\n editorialBeforeWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgetsBeforeForm || []).filter((w) => this.isWizardWidgetId(w.id));\n }\n\n editorialAfterWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgets || []).filter((w) => this.isWizardWidgetId(w.id));\n }\n\n advancedWidgets(step: StepConfig): WidgetDefinition[] {\n return (step.widgets || []).filter((w) => !this.isWizardWidgetId(w.id));\n }\n\n widgetBlockId(w: WidgetDefinition): string | null {\n const blockId = String((w.inputs as any)?.blockId || '').trim();\n return blockId || null;\n }\n\n editorialWidgetSummary(w: WidgetDefinition): string {\n const inputs = (w.inputs as any) || {};\n const shorten = (value: string | undefined, max = 72): string => {\n const text = (value || '').trim();\n if (!text) return '';\n return text.length > max ? `${text.slice(0, max - 1)}…` : text;\n };\n\n switch (w.id) {\n case 'praxis-wizard-benefits': {\n const count = Array.isArray(inputs.items) ? inputs.items.length : 0;\n const cols = Number.isFinite(Number(inputs.columns)) ? Number(inputs.columns) : 4;\n return `${count} item(ns) • ${cols} coluna(s)`;\n }\n case 'praxis-wizard-content': {\n const text = shorten(inputs.title || inputs.subtitle || inputs.text || inputs.caption, 90);\n return text || 'Sem conteúdo';\n }\n case 'praxis-wizard-inline-notice': {\n const tone = this.toneLabel(inputs.tone);\n const text = shorten(inputs.text, 90);\n return text ? `${tone} • ${text}` : tone;\n }\n case 'praxis-wizard-divider':\n return inputs.label ? `Rótulo: ${inputs.label}` : 'Divisor sem rótulo';\n default:\n return '';\n }\n }\n\n addEditorialWidget(id: WizardWidgetId, zone: EditorialZone = 'before'): void {\n const step = this.activeStep; if (!step) return;\n const defaults = this.defaultEditorialInputs(id, step, zone);\n this.openWizardWidgetDialog(id, defaults).subscribe((result) => {\n if (!result?.inputs) return;\n const wd: WidgetDefinition = {\n id,\n inputs: { ...defaults, ...result.inputs },\n };\n if (zone === 'before') this.ensureWidgetsBeforeForm().push(wd);\n else this.ensureWidgets().push(wd);\n this.markDirty();\n });\n }\n\n dropEditorialBefore(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const step = this.activeStep; if (!step) return;\n const list = this.ensureWidgetsBeforeForm();\n this.reorderSubset(list, (w) => this.isWizardWidgetId(w.id), ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n\n dropEditorialAfter(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const step = this.activeStep; if (!step) return;\n const list = this.ensureWidgets();\n this.reorderSubset(list, (w) => this.isWizardWidgetId(w.id), ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n\n moveEditorialWidget(w: WidgetDefinition, from: EditorialZone, to: EditorialZone): void {\n if (from === to) return;\n const fromList = from === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const toList = to === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = fromList.indexOf(w);\n if (idx < 0) return;\n fromList.splice(idx, 1);\n toList.push(w);\n this.markDirty();\n }\n\n duplicateEditorialWidget(w: WidgetDefinition, zone: EditorialZone): void {\n const step = this.activeStep; if (!step || !this.isWizardWidgetId(w.id)) return;\n const clone = JSON.parse(JSON.stringify(w)) as WidgetDefinition;\n const inputs = (clone.inputs = { ...((clone.inputs as any) || {}) });\n inputs.blockId = this.nextEditorialBlockId(step, w.id, zone);\n\n const list = zone === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = list.indexOf(w);\n if (idx >= 0) list.splice(idx + 1, 0, clone);\n else list.push(clone);\n this.markDirty();\n }\n\n removeEditorialWidget(w: WidgetDefinition, zone: EditorialZone): void {\n const list = zone === 'before' ? this.ensureWidgetsBeforeForm() : this.ensureWidgets();\n const idx = list.indexOf(w);\n if (idx < 0) return;\n list.splice(idx, 1);\n this.markDirty();\n }\n\n removeAdvancedWidget(w: WidgetDefinition): void {\n const widgets = this.ensureWidgets();\n const idx = widgets.indexOf(w);\n if (idx < 0) return;\n widgets.splice(idx, 1);\n this.markDirty();\n }\n\n dropWidget(ev: CdkDragDrop<WidgetDefinition[]>): void {\n const arr = this.ensureWidgets();\n moveItemInArray(arr, ev.previousIndex, ev.currentIndex);\n this.markDirty();\n }\n removeWidget(idx: number): void {\n const arr = this.ensureWidgets();\n arr.splice(idx, 1);\n this.markDirty();\n }\n\n canEditWidget(w: WidgetDefinition): boolean {\n return (\n w.id === 'praxis-dynamic-form'\n || w.id === 'praxis-list'\n || w.id === 'pdx-material-searchable-select'\n || w.id === 'praxis-files-upload'\n || this.isWizardWidgetId(w.id)\n );\n }\n\n private defaultEditorialInputs(id: WizardWidgetId, step: StepConfig, zone: EditorialZone): Record<string, any> {\n const blockId = this.nextEditorialBlockId(step, id, zone);\n switch (id) {\n case 'praxis-wizard-benefits':\n return {\n blockId,\n title: '',\n columns: 4,\n boxed: true,\n items: [{ icon: '', title: 'Novo benefício', text: '' }],\n };\n case 'praxis-wizard-content':\n return {\n blockId,\n title: '',\n subtitle: '',\n text: '',\n caption: '',\n };\n case 'praxis-wizard-inline-notice':\n return {\n blockId,\n text: '',\n tone: 'neutral',\n };\n case 'praxis-wizard-divider':\n return {\n blockId,\n label: '',\n };\n default:\n return { blockId };\n }\n }\n\n private nextEditorialBlockId(step: StepConfig, id: WizardWidgetId, zone: EditorialZone): string {\n const stepPart = this.normalizeBlockIdPart(step.id || `step-${this.activeIndex + 1}`);\n const kind = id.replace('praxis-wizard-', '');\n const prefix = `${stepPart}:${zone}:${kind}:`;\n const used = new Set<string>();\n let max = 0;\n\n const allWidgets = [ ...(step.widgetsBeforeForm || []), ...(step.widgets || []) ];\n allWidgets.forEach((widget) => {\n const blockId = String((widget.inputs as any)?.blockId || '').trim();\n if (!blockId.startsWith(prefix)) return;\n used.add(blockId);\n const suffix = Number(blockId.slice(prefix.length));\n if (Number.isFinite(suffix)) {\n max = Math.max(max, suffix);\n }\n });\n\n let nextIdx = Math.max(1, max + 1);\n let candidate = `${prefix}${nextIdx}`;\n while (used.has(candidate)) {\n nextIdx += 1;\n candidate = `${prefix}${nextIdx}`;\n }\n return candidate;\n }\n\n private normalizeBlockIdPart(value: string): string {\n const normalized = (value || '')\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, '-')\n .replace(/[^a-z0-9:_-]/g, '');\n return normalized || `step-${this.activeIndex + 1}`;\n }\n\n private toneLabel(value: string | undefined): string {\n switch (value) {\n case 'info': return 'Informativo';\n case 'warning': return 'Atenção';\n default: return 'Neutro';\n }\n }\n\n private reorderSubset(\n list: WidgetDefinition[],\n pick: (item: WidgetDefinition) => boolean,\n fromSubsetIndex: number,\n toSubsetIndex: number,\n ): void {\n const subsetIndices: number[] = [];\n list.forEach((item, index) => {\n if (pick(item)) subsetIndices.push(index);\n });\n const fromReal = subsetIndices[fromSubsetIndex];\n const toReal = subsetIndices[toSubsetIndex];\n if (fromReal == null || toReal == null) return;\n\n const [moved] = list.splice(fromReal, 1);\n let insertAt = toReal;\n if (fromReal < toReal) insertAt -= 1;\n list.splice(insertAt, 0, moved);\n }\n\n // ------- Main form -------\n addMainForm(): void {\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:form:${step.id || this.activeIndex}` , title: 'Configurar Formulário da Etapa', content: { component: PraxisDynamicFormConfigEditor, inputs: { formConfig: step.form?.config || { sections: [] }, formId: step.form?.formId || step.id, mode: step.form?.mode || 'create' } } });\n const apply = (val: any) => {\n const v = val || {};\n step.form = {\n config: v.formConfig || step.form?.config || { sections: [] },\n formId: v?.formId || step.form?.formId || step.id,\n mode: (v?.inputsPatch?.mode as any) || step.form?.mode || 'create',\n } as any;\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n editMainForm(): void { this.addMainForm(); }\n removeMainForm(): void { const s = this.activeStep; if (!s) return; delete s.form; this.markDirty(); }\n\n // ------- Curated widgets -------\n addListSelection(): void {\n const step = this.activeStep; if (!step) return;\n const current: any = { ...(this.ensureWidgets().find(w => w.id === 'praxis-list')?.inputs?.config || {}) };\n // Ensure minimal selection setup\n current.selection = current.selection || { mode: 'single', return: 'value' };\n const ref = this.settings.open({ id: `stepper:list:${step.id || this.activeIndex}`, title: 'Configurar Lista (seleção)', content: { component: PraxisListConfigEditor, inputs: { config: current, listId: step.id || 'list' } } });\n const apply = (val: any) => {\n const cfg = (val && (val.config || val)) || current;\n const wd: WidgetDefinition = { id: 'praxis-list', inputs: { config: cfg, listId: `${step.id || 'step'}-list-${Date.now()}` } };\n const arr = this.ensureWidgets();\n arr.push(wd);\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n addSearchableSelect(): void {\n const step = this.activeStep; if (!step) return;\n const dlg = this.dialog.open(SelectQuickConfigDialogComponent, { width: '520px', data: { } });\n dlg.afterClosed().subscribe((res: SelectQuickConfigResult | undefined) => {\n if (!res) return;\n const meta = {\n name: res.name || 'selection',\n label: res.label || 'Seleção',\n required: !!res.required,\n searchable: true,\n multiple: !!res.multiple,\n resourcePath: res.resourcePath || undefined,\n optionLabelKey: res.optionLabelKey || 'label',\n optionValueKey: res.optionValueKey || 'id',\n loadOn: 'open',\n } as any;\n const wd: WidgetDefinition = { id: 'pdx-material-searchable-select', inputs: { metadata: meta } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n });\n }\n\n addFilesUpload(): void {\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:upload:${step.id || this.activeIndex}`, title: 'Configurar Upload de Arquivos', content: { component: PraxisFilesUploadConfigEditor, inputs: {} } });\n const apply = (cfg: any) => {\n const wd: WidgetDefinition = { id: 'praxis-files-upload', inputs: { config: cfg, filesUploadId: `${step.id || 'step'}-upload-${Date.now()}` } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n openMoreComponents(): void {\n const dlg = this.dialog.open(ComponentPaletteDialogComponent, { width: '560px', data: { title: 'Adicionar componente à etapa', allowedWidgetIds: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'] } as any });\n dlg.afterClosed().subscribe((id: string | undefined) => {\n if (!id) return;\n switch (id) {\n case 'praxis-dynamic-form': this.addMainForm(); break;\n case 'praxis-list': this.addListSelection(); break;\n case 'pdx-material-searchable-select': this.addSearchableSelect(); break;\n case 'praxis-files-upload': this.addFilesUpload(); break;\n default:\n // Fallback: insert minimal widget with no inputs\n this.ensureWidgets().push({ id });\n this.markDirty();\n }\n });\n }\n\n // Quick CTAs\n addTreeList(): void {\n const step = this.activeStep; if (!step) return;\n const cfg: any = { mode: 'tree', selection: { mode: 'single' } };\n const wd: WidgetDefinition = { id: 'praxis-list', inputs: { config: cfg, listId: `${step.id || 'step'}-list-${Date.now()}` } };\n this.ensureWidgets().push(wd);\n this.markDirty();\n }\n\n addTransferListQuick(): void {\n const step = this.activeStep; if (!step) return;\n // Seed a simple form with a transfer list field\n const formConfig: any = {\n sections: [\n { rows: [ [ { name: 'items', label: 'Itens', controlType: 'TRANSFER_LIST', transferOptions: { source: [], target: [] } } ] ] }\n ]\n };\n const ref = this.settings.open({ id: `stepper:transfer:${step.id || this.activeIndex}`, title: 'Configurar Transferência de Itens', content: { component: PraxisDynamicFormConfigEditor, inputs: { formConfig, formId: step.id || 'transfer' } } });\n const apply = (val: any) => {\n const v = val || {};\n step.form = { config: v.formConfig || formConfig, formId: v?.formId || step.id, mode: (v?.inputsPatch?.mode as any) || 'create' } as any;\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n editWidget(w: WidgetDefinition): void {\n switch (w.id) {\n case 'praxis-dynamic-form':\n // treat as embedded form\n this.addMainForm();\n break;\n case 'praxis-list': {\n const cfg = (w.inputs as any)?.config || {};\n const step = this.activeStep; if (!step) return;\n const ref = this.settings.open({ id: `stepper:list:${step.id || this.activeIndex}`, title: 'Configurar Lista (seleção)', content: { component: PraxisListConfigEditor, inputs: { config: cfg, listId: step.id || 'list' } } });\n const apply = (val: any) => {\n const next = (val && (val.config || val)) || cfg;\n (w.inputs as any) = { ...(w.inputs || {}), config: next };\n this.markDirty();\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n break; }\n case 'pdx-material-searchable-select': {\n const meta = (w.inputs as any)?.metadata || {};\n const dlg = this.dialog.open(SelectQuickConfigDialogComponent, { width: '520px', data: { from: meta } });\n dlg.afterClosed().subscribe((res: SelectQuickConfigResult | undefined) => {\n if (!res) return;\n const next = { ...meta, ...res, searchable: true };\n (w.inputs as any) = { ...(w.inputs || {}), metadata: next };\n this.markDirty();\n });\n break; }\n case 'praxis-files-upload': {\n const cfg = (w.inputs as any)?.config || {};\n const ref = this.settings.open({ id: `stepper:upload:edit`, title: 'Configurar Upload de Arquivos', content: { component: PraxisFilesUploadConfigEditor, inputs: { ...cfg } } });\n const apply = (val: any) => { (w.inputs as any) = { ...(w.inputs || {}), config: val }; this.markDirty(); };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n break; }\n case 'praxis-wizard-benefits':\n case 'praxis-wizard-content':\n case 'praxis-wizard-inline-notice':\n case 'praxis-wizard-divider': {\n this.openWizardWidgetEditor(w);\n break;\n }\n default:\n // No editor available\n break;\n }\n }\n\n private openWizardWidgetEditor(w: WidgetDefinition): void {\n if (!this.isWizardWidgetId(w.id)) return;\n this.openWizardWidgetDialog(w.id, { ...((w.inputs as Record<string, any>) || {}) }).subscribe((result) => {\n if (!result?.inputs) return;\n (w.inputs as any) = { ...(w.inputs || {}), ...result.inputs };\n this.markDirty();\n });\n }\n\n private openWizardWidgetDialog(\n widgetId: WizardWidgetId,\n inputs: Record<string, any>,\n ) {\n const dialogRef = this.dialog.open<\n WizardWidgetConfigDialogComponent,\n { widgetId: string; inputs?: Record<string, any> },\n WizardWidgetConfigDialogResult | undefined\n >(WizardWidgetConfigDialogComponent, {\n width: '760px',\n data: {\n widgetId,\n inputs: { ...inputs },\n },\n });\n return dialogRef.afterClosed();\n }\n\n private isWizardWidgetId(id: string): id is 'praxis-wizard-benefits' | 'praxis-wizard-content' | 'praxis-wizard-inline-notice' | 'praxis-wizard-divider' {\n return (\n id === 'praxis-wizard-benefits'\n || id === 'praxis-wizard-content'\n || id === 'praxis-wizard-inline-notice'\n || id === 'praxis-wizard-divider'\n );\n }\n\n // SettingsValueProvider\n getSettingsValue(): any { return this.config; }\n onSave(): any { return this.getSettingsValue(); }\n reset(): void {\n this.isBusy$.next(true);\n try {\n this.config = { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n this.isDirty$.next(true);\n this.isValid$.next(true);\n } finally {\n this.isBusy$.next(false);\n }\n }\n}\n","/**\n * Capabilities catalog for Praxis Stepper (StepperMetadata).\n * Paths follow StepperMetadata shape (patch merged at config root).\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 navigation: true;\n steps: true;\n meta: true;\n }\n}\n\nexport type CapabilityCategory = AiCapabilityCategory;\nexport type ValueKind = AiValueKind;\n\nexport interface Capability extends AiCapability {\n category: CapabilityCategory;\n}\n\nexport interface CapabilityCatalog extends AiCapabilityCatalog {\n capabilities: Capability[];\n}\n\nconst ENUMS: Record<string, Array<string | number>> = {\n orientation: ['horizontal', 'vertical'],\n headerPosition: ['top', 'bottom'],\n labelPosition: ['bottom', 'end'],\n density: ['default', 'comfortable', 'compact'],\n matColor: ['primary', 'accent', 'warn'],\n navVariant: ['basic', 'flat', 'stroked', 'raised'],\n navAlign: ['start', 'center', 'end', 'space-between'],\n formMode: ['create', 'edit', 'view'],\n schemaSource: ['resource', 'filter'],\n iconsSet: ['material-symbols-outlined', 'material-symbols-rounded', 'material-symbols-sharp'],\n widgetId: ['praxis-dynamic-form', 'praxis-list', 'pdx-material-searchable-select', 'praxis-files-upload'],\n stepperTokenKey: [\n 'container-color',\n 'line-color',\n 'header-label-text-color',\n 'header-optional-label-text-color',\n 'header-icon-foreground-color',\n 'header-icon-background-color',\n 'header-done-state-icon-background-color',\n 'header-done-state-icon-foreground-color',\n 'header-edit-state-icon-background-color',\n 'header-edit-state-icon-foreground-color',\n 'header-error-state-icon-background-color',\n 'header-error-state-icon-foreground-color',\n 'header-error-state-label-text-color',\n 'header-focus-state-layer-color',\n 'header-hover-state-layer-color',\n 'header-label-text-font',\n 'header-label-text-size',\n 'header-label-text-weight',\n 'header-selected-state-label-text-size',\n 'header-selected-state-label-text-weight',\n 'container-text-font',\n 'header-height',\n 'header-focus-state-layer-shape',\n 'header-hover-state-layer-shape',\n 'header-selected-state-icon-background-color',\n 'header-selected-state-icon-foreground-color',\n 'header-selected-state-label-text-color',\n ],\n};\n\nconst CAPS: Capability[] = [\n { path: 'orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.orientation, description: 'Orientation of the stepper.' },\n { path: 'linear', category: 'behavior', valueKind: 'boolean', description: 'Require sequential completion of steps.' },\n { path: 'headerPosition', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.headerPosition, description: 'Header position (vertical only).' },\n { path: 'labelPosition', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.labelPosition, description: 'Label position for horizontal stepper.' },\n { path: 'color', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.matColor, description: 'Material color palette.' },\n { path: 'disableRipple', category: 'behavior', valueKind: 'boolean', description: 'Disable ripple for headers.' },\n { path: 'animationDuration', category: 'behavior', valueKind: 'string', description: 'Animation duration, e.g. 300ms.' },\n { path: 'selectedIndex', category: 'behavior', valueKind: 'number', description: 'Current step index.' },\n\n { path: 'density', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.density, description: 'Density preset.' },\n { path: 'stepperClass', category: 'appearance', valueKind: 'string', description: 'CSS class for stepper root.' },\n { path: 'headerClass', category: 'appearance', valueKind: 'string', description: 'CSS class for header.' },\n { path: 'contentClass', category: 'appearance', valueKind: 'string', description: 'CSS class for content area.' },\n\n { path: 'appearance', category: 'appearance', valueKind: 'object', description: 'Appearance settings.' },\n { path: 'appearance.themeClass', category: 'appearance', valueKind: 'string', description: 'Theme CSS class for root.' },\n { path: 'appearance.tokens', category: 'appearance', valueKind: 'object', description: 'Token map for theme overrides.' },\n { path: 'appearance.tokens.[token]', category: 'appearance', valueKind: 'string', allowedValues: ENUMS.stepperTokenKey, description: 'Token value (CSS value or var).', safetyNotes: 'Token keys follow mat.stepper-overrides.' },\n { path: 'appearance.icons', category: 'appearance', valueKind: 'object', description: 'Stepper icon overrides.' },\n { path: 'appearance.icons.number', category: 'appearance', valueKind: 'string', description: 'Icon for number state.' },\n { path: 'appearance.icons.done', category: 'appearance', valueKind: 'string', description: 'Icon for done state.' },\n { path: 'appearance.icons.edit', category: 'appearance', valueKind: 'string', description: 'Icon for edit state.' },\n { path: 'appearance.icons.error', category: 'appearance', valueKind: 'string', description: 'Icon for error state.' },\n { path: 'appearance.iconsSet', category: 'appearance', valueKind: 'enum', allowedValues: ENUMS.iconsSet, description: 'Icon set class name (Material Symbols).' },\n\n { path: 'navigation', category: 'navigation', valueKind: 'object', description: 'Footer navigation config.' },\n { path: 'navigation.visible', category: 'navigation', valueKind: 'boolean', description: 'Show navigation buttons.' },\n { path: 'navigation.prevLabel', category: 'navigation', valueKind: 'string', description: 'Previous button label.' },\n { path: 'navigation.nextLabel', category: 'navigation', valueKind: 'string', description: 'Next button label.' },\n { path: 'navigation.prevIcon', category: 'navigation', valueKind: 'string', description: 'Previous button icon.' },\n { path: 'navigation.nextIcon', category: 'navigation', valueKind: 'string', description: 'Next button icon.' },\n { path: 'navigation.variant', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.navVariant, description: 'Button variant.' },\n { path: 'navigation.color', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.matColor, description: 'Button color.' },\n { path: 'navigation.align', category: 'navigation', valueKind: 'enum', allowedValues: ENUMS.navAlign, description: 'Navigation alignment.' },\n\n { path: 'steps', category: 'steps', valueKind: 'array', description: 'Step definitions.' },\n { path: 'steps[]', category: 'steps', valueKind: 'object', description: 'Step definition.' },\n { path: 'steps[].id', category: 'steps', valueKind: 'string', description: 'Step id.' },\n { path: 'steps[].label', category: 'steps', valueKind: 'string', description: 'Step label.' },\n { path: 'steps[].description', category: 'steps', valueKind: 'string', description: 'Step description.' },\n { path: 'steps[].optional', category: 'steps', valueKind: 'boolean', description: 'Mark step as optional.' },\n { path: 'steps[].editable', category: 'steps', valueKind: 'boolean', description: 'Allow editing completed steps.' },\n { path: 'steps[].completed', category: 'steps', valueKind: 'boolean', description: 'Force completed state.' },\n { path: 'steps[].hasError', category: 'steps', valueKind: 'boolean', description: 'Force error state.' },\n { path: 'steps[].stateIcon', category: 'steps', valueKind: 'string', description: 'Custom state icon key.' },\n { path: 'steps[].state', category: 'steps', valueKind: 'string', description: 'Custom state name for matStepperIcon.' },\n { path: 'steps[].errorMessage', category: 'steps', valueKind: 'string', description: 'Error message shown in header.' },\n { path: 'steps[].ariaLabel', category: 'accessibility', valueKind: 'string', description: 'ARIA label for step header.' },\n { path: 'steps[].ariaLabelledby', category: 'accessibility', valueKind: 'string', description: 'ARIA labelledby for step header.' },\n { path: 'steps[].form', category: 'steps', valueKind: 'object', description: 'Optional Dynamic Form config for step.' },\n { path: 'steps[].form.resourcePath', category: 'steps', valueKind: 'string', description: 'Resource path for Dynamic Form.' },\n { path: 'steps[].form.resourceId', category: 'steps', valueKind: 'string', description: 'Resource id for Dynamic Form (string or number).', example: '123', safetyNotes: 'Accepts string or number.' },\n { path: 'steps[].form.mode', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.formMode, description: 'Form mode.' },\n { path: 'steps[].form.config', category: 'steps', valueKind: 'object', description: 'FormConfig for Dynamic Form.', safetyNotes: 'Use the form catalog for nested paths and FieldMetadata details.' },\n { path: 'steps[].form.schemaSource', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.schemaSource, description: 'Schema source for Dynamic Form.' },\n { path: 'steps[].form.formId', category: 'steps', valueKind: 'string', description: 'Form id for Dynamic Form.' },\n { path: 'steps[].widgets', category: 'steps', valueKind: 'array', description: 'WidgetDefinition list for step content.' },\n { path: 'steps[].widgets[]', category: 'steps', valueKind: 'object', description: 'WidgetDefinition item.' },\n { path: 'steps[].widgets[].id', category: 'steps', valueKind: 'enum', allowedValues: ENUMS.widgetId, description: 'Component registry id for widget.', safetyNotes: 'Use ids registered in ComponentMetadataRegistry.' },\n { path: 'steps[].widgets[].inputs', category: 'steps', valueKind: 'object', description: 'Inputs bound into the widget instance.' },\n { path: 'steps[].widgets[].outputs', category: 'steps', valueKind: 'object', description: 'Outputs mapped to actions.' },\n { path: 'steps[].widgets[].outputs.[outputName]', category: 'steps', valueKind: 'object', description: 'Output action mapping (ActionDefinition or \"emit\").', safetyNotes: 'Use string \"emit\" to forward the output without mapping.' },\n { path: 'steps[].widgets[].bindingOrder', category: 'steps', valueKind: 'array', description: 'Explicit input binding order.' },\n { path: 'steps[].widgets[].bindingOrder[]', category: 'steps', valueKind: 'string', description: 'Input name applied first.' },\n];\n\nexport const STEPPER_AI_CAPABILITIES: CapabilityCatalog = {\n version: 'v1.2',\n enums: ENUMS,\n targets: [\n 'praxis-stepper',\n 'mat-stepper',\n 'stepper',\n 'praxis-stepper-config-editor',\n 'praxis-select-quick-config-dialog',\n ],\n notes: [\n 'steps[] should be merged by id or label to avoid replacing all steps.',\n 'steps[].form.config uses FormConfig (see form catalog) and may include sections/actions/fieldMetadata.',\n 'steps[].widgets[].id must be a ComponentMetadataRegistry id (see component-registry catalog).',\n 'appearance.tokens is a free-form map; host may validate/sanitize.',\n 'When editing steps[].form.config.fieldMetadata, use FieldMetadata base if no controlType catalog exists.',\n ],\n capabilities: CAPS,\n};\n","import { BaseAiAdapter, Capability, PatchResult } from '@praxisui/ai';\nimport { deepMerge } from '@praxisui/core';\nimport { PraxisStepper, StepperMetadata } from '../praxis-stepper';\nimport { STEPPER_AI_CAPABILITIES } from './stepper-ai-capabilities';\n\nexport class StepperAiAdapter extends BaseAiAdapter<StepperMetadata> {\n componentName = 'Praxis Stepper';\n\n constructor(private stepper: PraxisStepper) {\n super();\n }\n\n getCurrentConfig(): StepperMetadata {\n const current = this.stepper._config?.() ?? { steps: [] };\n return this.cloneConfig(current);\n }\n\n getCapabilities(): Capability[] {\n return STEPPER_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getRuntimeState(): Record<string, any> {\n const cfg = this.stepper._config?.();\n const steps = cfg?.steps || [];\n return {\n stepsCount: steps.length,\n selectedIndex: this.stepper.selectedIndexComputed?.() ?? 0,\n linear: !!cfg?.linear,\n orientation: cfg?.orientation || 'horizontal',\n hasForms: steps.some((s) => !!s.form),\n };\n }\n\n createSnapshot(): StepperMetadata {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: StepperMetadata): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(this.cloneConfig(snapshot));\n }\n\n async applyPatch(patch: Partial<StepperMetadata>): Promise<PatchResult> {\n try {\n const current = this.getCurrentConfig();\n const next = this.smartMergeStepperConfig(current, patch);\n this.applyConfig(next);\n return { 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: StepperMetadata): void {\n const apply = (this.stepper as any).applyConfigFromAdapter;\n if (typeof apply === 'function') {\n apply.call(this.stepper, config);\n return;\n }\n this.stepper.config = config;\n }\n\n private smartMergeStepperConfig(base: StepperMetadata, patch: Partial<StepperMetadata>): StepperMetadata {\n const result = deepMerge(base, patch);\n\n if (patch.steps && Array.isArray(patch.steps)) {\n const merged = this.mergeByKey(\n base.steps || [],\n patch.steps,\n (s) => s.id || s.label || '',\n );\n result.steps = merged;\n }\n\n return result;\n }\n\n private mergeByKey<T extends Record<string, any>>(\n baseArr: T[],\n patchArr: T[],\n keyFn: (item: T) => string,\n ): T[] {\n const merged = baseArr.map((orig) => {\n const key = keyFn(orig);\n const match = key ? patchArr.find((p) => keyFn(p) === key) : undefined;\n return match ? deepMerge(orig as any, match as any) : orig;\n });\n\n patchArr.forEach((item) => {\n const key = keyFn(item);\n if (!key || !baseArr.find((o) => keyFn(o) === key)) {\n merged.push(item);\n }\n });\n\n return merged;\n }\n\n private cloneConfig(config: StepperMetadata): StepperMetadata {\n try {\n return structuredClone(config);\n } catch {\n return JSON.parse(JSON.stringify(config));\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Input, Output, Renderer2, TemplateRef, computed, signal, inject, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { MatStepper, MatStepperModule } from '@angular/material/stepper';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n PraxisIconDirective,\n ASYNC_CONFIG_STORAGE,\n AsyncConfigStorage,\n ComponentKeyService,\n LoggerService,\n} from '@praxisui/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PraxisDynamicForm } from '@praxisui/dynamic-form';\nimport { SettingsPanelService } from '@praxisui/settings-panel';\nimport { PraxisStepperConfigEditor } from './praxis-stepper-config-editor';\nimport { DynamicWidgetLoaderDirective } from '@praxisui/core';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport type { FormConfig, FormReadyEvent, FormValueChangeEvent } from '@praxisui/core';\nimport { EmptyStateCardComponent } from '@praxisui/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { PraxisAiAssistantComponent } from '@praxisui/ai';\nimport { StepperAiAdapter } from './ai/stepper-ai.adapter';\nimport { take } from 'rxjs/operators';\n\nexport type StepOrientation = 'horizontal' | 'vertical';\nexport type StepHeaderPosition = 'top' | 'bottom';\n\nexport interface StepConfig {\n id?: string;\n label: string;\n optional?: boolean;\n editable?: boolean;\n completed?: boolean;\n hasError?: boolean;\n stateIcon?: string;\n state?: string; // usado com <ng-template matStepperIcon=\"state\">\n errorMessage?: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n // Integração opcional com Dynamic Form por etapa\n form?: {\n resourcePath?: string;\n resourceId?: string | number;\n mode?: 'create' | 'edit' | 'view';\n config?: FormConfig;\n schemaSource?: 'resource' | 'filter';\n formId?: string;\n };\n // Futuro: stepControlKey?: string; // para integração com FormGroup externo\n // Futuro: widgets?: any[]; // children (Gridster)\n /** Widgets rendered before the step form (if present). */\n widgetsBeforeForm?: WidgetDefinition[];\n widgets?: WidgetDefinition[];\n description?: string;\n}\n\nexport interface StepperMetadata {\n orientation?: StepOrientation;\n linear?: boolean;\n headerPosition?: StepHeaderPosition;\n labelPosition?: 'bottom' | 'end';\n color?: ThemePalette;\n disableRipple?: boolean;\n animationDuration?: string;\n selectedIndex?: number;\n steps: StepConfig[];\n // Styling hooks\n density?: 'default' | 'comfortable' | 'compact';\n stepperClass?: string;\n headerClass?: string;\n contentClass?: string;\n // Appearance tokens (pass-through for theming via mat.stepper-overrides)\n appearance?: {\n preset?: 'ft-light';\n themeClass?: string;\n tokens?: Record<string, string>;\n icons?: {\n number?: string;\n done?: string;\n edit?: string;\n error?: string;\n };\n iconsSet?: string; // ex.: 'material-symbols-outlined' | 'material-symbols-rounded' | 'material-symbols-sharp'\n };\n navigation?: {\n visible?: boolean;\n prevLabel?: string;\n nextLabel?: string;\n prevIcon?: string;\n nextIcon?: string;\n variant?: 'basic' | 'flat' | 'stroked' | 'raised';\n color?: ThemePalette;\n align?: 'start' | 'center' | 'end' | 'space-between';\n };\n}\n\n@Component({\n selector: 'praxis-stepper',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatStepperModule, MatButtonModule, MatIconModule, PraxisIconDirective, PraxisDynamicForm, DynamicWidgetLoaderDirective, EmptyStateCardComponent, PraxisAiAssistantComponent],\n host: {\n '[class]': 'densityClass()'\n },\n template: `\n <div class=\"stepper-ai-assistant\" *ngIf=\"editModeEnabled\">\n <praxis-ai-assistant [adapter]=\"aiAdapter\"></praxis-ai-assistant>\n </div>\n <ng-container *ngIf=\"steps().length > 0; else emptyState\">\n <mat-stepper\n #stepperRoot\n [linear]=\"linear()\"\n [orientation]=\"orientation()\"\n [headerPosition]=\"headerPosition()\"\n [labelPosition]=\"labelPos()\"\n [disableRipple]=\"disableRipple()\"\n [color]=\"stepperColor()\"\n [animationDuration]=\"animationDuration()\"\n [selectedIndex]=\"selectedIndexComputed()\"\n (selectionChange)=\"onSelectionChange($event)\"\n (animationDone)=\"onAnimationDone()\"\n [class]=\"stepperClassList()\"\n >\n <!-- Projeção de ícones customizados do header: <ng-template matStepperIcon=\"done\"> ... </ng-template> -->\n <ng-content></ng-content>\n <!-- Overrides de ícones via configuração (appearance.icons) -->\n <ng-template *ngIf=\"icons()?.number as icn\" matStepperIcon=\"number\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.done as icn\" matStepperIcon=\"done\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.edit as icn\" matStepperIcon=\"edit\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <ng-template *ngIf=\"icons()?.error as icn\" matStepperIcon=\"error\">\n <mat-icon [praxisIcon]=\"icn\"></mat-icon>\n </ng-template>\n <mat-step *ngFor=\"let step of steps(); let i = index; trackBy: trackStep\"\n [stepControl]=\"$any(formGroupFor(i))\"\n [id]=\"step.id || ''\"\n [aria-label]=\"step.ariaLabel || ''\"\n [aria-labelledby]=\"step.ariaLabelledby || ''\"\n [label]=\"step.label\"\n [optional]=\"step.optional || false\"\n [editable]=\"step.editable ?? true\"\n [completed]=\"computedCompleted(i, step)\"\n [hasError]=\"computedHasError(i, step)\"\n [errorMessage]=\"step.errorMessage || ''\"\n [state]=\"step.state || step.stateIcon || ''\"\n >\n <ng-template matStepLabel>\n <ng-container *ngIf=\"stepLabelTpl; else plainLabel\"\n [ngTemplateOutlet]=\"stepLabelTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: step, index: i }\"\n ></ng-container>\n <ng-template #plainLabel>{{ step.label }}</ng-template>\n </ng-template>\n <div [class]=\"contentClassList()\">\n <ng-container *ngFor=\"let wd of step.widgetsBeforeForm || []\"\n [dynamicWidgetLoader]=\"wd\"\n [context]=\"stepperContext\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onChildWidgetEvent(i, wd, $event)\"></ng-container>\n <praxis-dynamic-form *ngIf=\"step.form as f\"\n [resourcePath]=\"f.resourcePath\"\n [resourceId]=\"$any(f.resourceId)\"\n [mode]=\"f.mode || 'create'\"\n [config]=\"f.config || { sections: [] }\"\n [schemaSource]=\"f.schemaSource || 'resource'\"\n [formId]=\"f.formId\"\n (formReady)=\"onFormReady(i, $event)\"\n (valueChange)=\"onFormValueChange(i, $event)\"\n ></praxis-dynamic-form>\n <ng-container *ngFor=\"let wd of step.widgets || []\"\n [dynamicWidgetLoader]=\"wd\"\n [context]=\"stepperContext\"\n [strictValidation]=\"true\"\n [autoWireOutputs]=\"true\"\n (widgetEvent)=\"onChildWidgetEvent(i, wd, $event)\"></ng-container>\n <ng-container *ngIf=\"isStepEmpty(step)\">\n <praxis-empty-state-card\n [inline]=\"true\"\n icon=\"dashboard_customize\"\n title=\"Sem conteúdo nesta etapa\"\n description=\"Adicione um formulário ou widgets a esta etapa, ou abra o editor para configurar.\"\n [primaryAction]=\"{ label: 'Abrir editor', icon: 'tune', action: openEditor.bind(this) }\"\n ></praxis-empty-state-card>\n </ng-container>\n </div>\n <div *ngIf=\"navVisible()\" [class]=\"navActionsClass()\">\n <!-- PREV button (hidden on first step) -->\n <ng-container *ngIf=\"selectedIndexComputed() > 0\">\n <ng-container [ngSwitch]=\"navVariant()\">\n <button *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n <button *ngSwitchDefault mat-button [color]=\"navColor()\" type=\"button\" (click)=\"onPrev()\">\n <mat-icon *ngIf=\"navPrevIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n {{ navPrevLabel() }}\n </button>\n </ng-container>\n </ng-container>\n\n <!-- NEXT button -->\n <ng-container [ngSwitch]=\"navVariant()\">\n <button *ngSwitchCase=\"'flat'\" mat-flat-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchCase=\"'stroked'\" mat-stroked-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchCase=\"'raised'\" mat-raised-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n <button *ngSwitchDefault mat-button [color]=\"navColor()\" type=\"button\" (click)=\"onNext(i)\" [disabled]=\"isNextDisabled(i)\">\n {{ navNextLabel() }}\n <mat-icon *ngIf=\"navNextIcon() as ic\" [praxisIcon]=\"ic\"></mat-icon>\n </button>\n </ng-container>\n </div>\n </mat-step>\n </mat-stepper>\n </ng-container>\n <ng-template #emptyState>\n <praxis-empty-state-card\n icon=\"view_timeline\"\n [inline]=\"true\"\n title=\"Stepper sem etapas\"\n description=\"Adicione etapas para começar. Você pode configurar formulários ou widgets em cada etapa.\"\n [primaryAction]=\"primaryCta\"\n [secondaryActions]=\"secondaryCtas\"\n ></praxis-empty-state-card>\n </ng-template>\n <button\n *ngIf=\"editModeEnabled\"\n mat-fab\n class=\"edit-fab\"\n aria-label=\"Editar stepper\"\n (click)=\"openEditor()\"\n >\n <mat-icon fontIcon=\"edit\"></mat-icon>\n </button>\n `,\n styles: [\n `\n :host { display: block; position: relative; }\n .praxis-stepper {\n width: 100%;\n background: var(--md-sys-color-surface);\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 16px;\n padding: 12px;\n box-shadow: var(--mat-elevation-level1);\n }\n .praxis-stepper.pdx-stepper-ft-light {\n background: transparent;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n :host(.density-compact) ::ng-deep .mat-step-header { min-height: 36px; }\n :host(.density-compact) .pdx-step-actions { padding-top: 4px; gap: 6px; }\n :host(.density-comfortable) ::ng-deep .mat-step-header { min-height: 44px; }\n .pdx-step-content {\n padding: 12px 4px 8px;\n color: var(--md-sys-color-on-surface);\n }\n .pdx-step-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n }\n ::ng-deep .praxis-stepper .mat-step-header {\n border-radius: 999px;\n margin: 4px 0;\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-label {\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .praxis-stepper .mat-step-header:hover {\n background: var(--md-sys-color-primary-container);\n }\n ::ng-deep .praxis-stepper .mat-step-header.cdk-keyboard-focused,\n ::ng-deep .praxis-stepper .mat-step-header.cdk-program-focused {\n outline: 2px solid var(--md-sys-color-primary);\n outline-offset: 2px;\n }\n ::ng-deep .praxis-stepper .mat-step-icon {\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-selected {\n background: var(--md-sys-color-primary);\n color: var(--md-sys-color-on-primary);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-state-done {\n background: var(--md-sys-color-tertiary);\n color: var(--md-sys-color-on-tertiary);\n }\n ::ng-deep .praxis-stepper .mat-step-icon-state-error {\n background: var(--md-sys-color-error);\n color: var(--md-sys-color-on-error);\n }\n ::ng-deep .praxis-stepper .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n }\n ::ng-deep .praxis-stepper .mat-stepper-vertical-line::before {\n border-left-color: var(--md-sys-color-outline-variant);\n }\n ::ng-deep .pdx-stepper-ft-light .mat-stepper-horizontal {\n background: transparent;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-horizontal-stepper-header-container {\n margin-bottom: 14px;\n justify-content: flex-start;\n align-items: center;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header {\n min-height: 28px;\n font-size: 0.75rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-label.mat-step-label-active,\n ::ng-deep .pdx-stepper-ft-light .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon {\n height: 16px;\n width: 16px;\n font-size: 9px;\n background: transparent;\n border: 1px solid var(--md-sys-color-outline-variant);\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon .mat-icon {\n display: none;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-content {\n font-weight: 600;\n font-size: 9px;\n line-height: 1;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-state-done,\n ::ng-deep .pdx-stepper-ft-light .mat-step-icon-selected {\n background: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n border-color: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n color: var(--praxis-wizard-accent-on, var(--md-sys-color-on-primary, #ffffff));\n }\n ::ng-deep .pdx-stepper-ft-light .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n border-top-width: 1px;\n margin: 0 8px;\n flex: 1 1 0;\n margin-top: 0;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header {\n padding: 0 6px;\n flex: 0 0 auto;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-keyboard-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-program-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-focused,\n ::ng-deep .pdx-stepper-ft-light .mat-step-header.cdk-mouse-focused {\n outline: none;\n box-shadow: none;\n background: transparent;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header:hover {\n background: transparent;\n }\n ::ng-deep .ft-stepper {\n background: transparent;\n }\n ::ng-deep .ft-stepper .mat-horizontal-stepper-header-container {\n margin-bottom: 16px;\n }\n ::ng-deep .ft-stepper .mat-step-header {\n font-size: 0.8rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .ft-stepper .mat-step-label.mat-step-label-active,\n ::ng-deep .ft-stepper .mat-step-label.mat-step-label-selected {\n color: var(--md-sys-color-on-surface);\n font-weight: 600;\n }\n ::ng-deep .ft-stepper .mat-step-icon {\n height: 22px;\n width: 22px;\n font-size: 11px;\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n border: 2px solid var(--md-sys-color-outline-variant);\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n }\n ::ng-deep .ft-stepper .mat-step-icon-state-done,\n ::ng-deep .ft-stepper .mat-step-icon-selected {\n background: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n border-color: var(--praxis-wizard-accent, var(--md-sys-color-primary, currentColor));\n color: var(--praxis-wizard-accent-on, var(--md-sys-color-on-primary, #ffffff));\n }\n ::ng-deep .ft-stepper .mat-stepper-horizontal-line {\n border-top-color: var(--md-sys-color-outline-variant);\n }\n .ft-stepper-content {\n padding: 0;\n }\n .ft-stepper-content .form-section {\n border: none;\n padding: 0;\n background: transparent;\n }\n .nav-align-start { justify-content: flex-start; }\n .nav-align-center { justify-content: center; }\n .nav-align-end { justify-content: flex-end; }\n .nav-align-space-between { justify-content: space-between; }\n .edit-fab { position: absolute; right: 12px; bottom: 12px; z-index: 2; }\n .stepper-ai-assistant { position: absolute; right: 12px; bottom: 72px; z-index: 3; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisStepper implements OnInit, AfterViewInit {\n // Templates projetados\n @ContentChild('stepLabelTpl', { read: TemplateRef }) stepLabelTpl?: TemplateRef<any>;\n // Dados e estado\n _config = signal<StepperMetadata | null>(null);\n private _selectedIndex = signal<number>(0);\n private _formGroups = new Map<number, FormGroup>();\n private _formValidity = new Map<number, boolean>();\n private readonly hostElement = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private appliedHeaderClasses: string[] = [];\n private appliedTokenNames: string[] = [];\n\n // CTA models for empty state\n primaryCta = { label: 'Configurar Stepper', icon: 'tune', color: 'primary' as const, action: () => this.openEditor() };\n secondaryCtas = [{ label: 'Adicionar etapa inicial', icon: 'add', action: () => this.addFirstStep() }];\n\n // API de entrada\n @Input({ required: true }) stepperId!: string;\n @Input() componentInstanceId?: string;\n @Input() set config(c: StepperMetadata | string | null) {\n let next: StepperMetadata | null = null;\n if (typeof c === 'string') {\n try { next = JSON.parse(c) as StepperMetadata; } catch { next = null; }\n } else {\n next = c as StepperMetadata | null;\n }\n this._config.set(next);\n if (next?.selectedIndex != null) this._selectedIndex.set(next.selectedIndex);\n this.persistConfig(next);\n this.scheduleDomSync();\n }\n @Input() set selectedIndexInput(i: number | null) {\n if (i != null) this._selectedIndex.set(i);\n }\n // Suporte a two-way binding [(selectedIndex)] como no Material\n @Input() set selectedIndex(i: number | null) {\n if (i != null) this._selectedIndex.set(i);\n }\n @Input() disableRippleInput = false;\n @Input() editModeEnabled = false;\n // Paridade com API do Material\n @Input() labelPosition?: 'bottom' | 'end';\n @Input() color?: ThemePalette;\n /**\n * Validação remota opcional por etapa. Retorne ok=false com fieldErrors/formErrors para bloquear avanço.\n */\n @Input() serverValidate?: (args: { step: StepConfig; stepIndex: number; formGroup?: FormGroup; formData?: any }) => Promise<{\n ok: boolean; fieldErrors?: Record<string, string[]>; formErrors?: string[]; errorMessage?: string;\n }>;\n\n // Emissões\n @Output() selectedIndexChange = new EventEmitter<number>();\n @Output() widgetEvent = new EventEmitter<{ stepId?: string; stepIndex?: number; sourceId: string; output?: string; payload?: any }>();\n @Output() stepFormReady = new EventEmitter<{ stepIndex: number; stepId?: string; event: FormReadyEvent }>();\n @Output() stepFormValueChange = new EventEmitter<{ stepIndex: number; stepId?: string; event: FormValueChangeEvent }>();\n @Input() stepperContext?: Record<string, any>;\n private readonly settings = inject(SettingsPanelService);\n private readonly storage = inject<AsyncConfigStorage>(ASYNC_CONFIG_STORAGE);\n private readonly componentKeys = inject(ComponentKeyService);\n private readonly logger = inject(LoggerService);\n private readonly route = (() => { try { return inject(ActivatedRoute); } catch { return undefined as ActivatedRoute | undefined; } })();\n private warnedMissingId = false;\n @Output() animationDone = new EventEmitter<void>();\n public aiAdapter = new StepperAiAdapter(this);\n\n // Computed getters\n steps = computed(() => this._config()?.steps || []);\n orientation = computed<StepOrientation>(() => this._config()?.orientation || 'horizontal');\n headerPosition = computed<StepHeaderPosition>(() => this._config()?.headerPosition || 'top');\n // labelPosition: default 'end' no Material\n labelPos = computed<'bottom' | 'end'>(() => this._config()?.labelPosition ?? this.labelPosition ?? 'end');\n linear = computed<boolean>(() => !!this._config()?.linear);\n disableRipple = computed<boolean>(() => this._config()?.disableRipple ?? this.disableRippleInput);\n animationDuration = computed<string>(() => this._config()?.animationDuration || '300ms');\n stepperColor = computed<ThemePalette | undefined>(() => this._config()?.color ?? this.color);\n icons = computed(() => this._config()?.appearance?.icons);\n iconsSet = computed(() => this._config()?.appearance?.iconsSet);\n // Navigation helpers\n private nav = computed(() => this._config()?.navigation || {});\n navVisible = () => this.nav()?.visible !== false; // default true\n navVariant = () => (this.nav()?.variant || 'raised') as 'basic' | 'flat' | 'stroked' | 'raised';\n navColor = () => (this.nav()?.color || 'primary') as ThemePalette;\n navPrevLabel = () => this.nav()?.prevLabel || 'Voltar';\n navNextLabel = () => this.nav()?.nextLabel || 'Próximo';\n navPrevIcon = () => this.nav()?.prevIcon;\n navNextIcon = () => this.nav()?.nextIcon;\n stepperClassList = () => {\n const cfg = this._config();\n return [\n 'praxis-stepper',\n cfg?.stepperClass,\n cfg?.appearance?.themeClass,\n cfg?.appearance?.preset === 'ft-light' ? 'pdx-stepper-ft-light' : null,\n ].filter(Boolean).join(' ');\n };\n contentClassList = () => {\n const cfg = this._config();\n return ['pdx-step-content', cfg?.contentClass].filter(Boolean).join(' ');\n };\n navActionsClass = () => `pdx-step-actions ${this.navAlignClass()}`;\n navAlignClass = () => {\n const a = this.nav()?.align || 'end';\n switch (a) {\n case 'start': return 'nav-align-start';\n case 'center': return 'nav-align-center';\n case 'space-between': return 'nav-align-space-between';\n case 'end':\n default: return 'nav-align-end';\n }\n };\n isNextDisabled(i: number): boolean {\n return this.linear() && this._formValidity.get(i) === false;\n }\n private clampIndex(idx: number): number {\n const len = this.steps().length;\n const max = Math.max(0, len - 1);\n if (Number.isNaN(idx)) return 0;\n return Math.min(Math.max(0, idx), max);\n }\n selectedIndexComputed = computed<number>(() => this.clampIndex(this._selectedIndex()));\n densityClass = () => {\n const d = this._config()?.density;\n if (d === 'compact') return 'density-compact';\n if (d === 'comfortable') return 'density-comfortable';\n return '';\n };\n\n // Handlers\n @Output() selectionChange = new EventEmitter<any>();\n trackStep = (_: number, s: StepConfig) => s.id || _;\n onSelectionChange(ev: any) {\n const idx = this.clampIndex(ev?.selectedIndex ?? 0);\n this._selectedIndex.set(idx);\n this.selectedIndexChange.emit(idx);\n this.selectionChange.emit(ev);\n }\n\n // API programática básica\n goTo(index: number): void {\n const clamped = this.clampIndex(index);\n this._selectedIndex.set(clamped);\n this.selectedIndexChange.emit(clamped);\n }\n next(): void {\n const curr = this._selectedIndex();\n const len = this.steps().length;\n if (curr < len - 1) this.goTo(curr + 1);\n }\n prev(): void {\n const curr = this._selectedIndex();\n if (curr > 0) this.goTo(curr - 1);\n }\n reset(): void { this.goTo(0); }\n\n // Alias para compatibilidade nominal com MatStepper\n previous(): void { this.prev(); }\n\n // Dynamic Form integration\n onFormReady(stepIndex: number, ev: FormReadyEvent) {\n this._formGroups.set(stepIndex, ev.formGroup);\n this._formValidity.set(stepIndex, ev.formGroup.valid);\n this.stepFormReady.emit({\n stepIndex,\n stepId: this.steps()[stepIndex]?.id,\n event: ev,\n });\n }\n onFormValueChange(stepIndex: number, ev: FormValueChangeEvent) {\n this._formValidity.set(stepIndex, ev.isValid);\n this.stepFormValueChange.emit({\n stepIndex,\n stepId: this.steps()[stepIndex]?.id,\n event: ev,\n });\n }\n formGroupFor(i: number): FormGroup | undefined {\n return this._formGroups.get(i);\n }\n computedCompleted(i: number, step: StepConfig): boolean {\n if (typeof step.completed === 'boolean') return step.completed;\n const v = this._formValidity.get(i);\n return v === true;\n }\n computedHasError(i: number, step: StepConfig): boolean {\n if (typeof step.hasError === 'boolean') return step.hasError;\n const v = this._formValidity.get(i);\n return v === false;\n }\n onChildWidgetEvent(stepIndex: number, wd: WidgetDefinition, e: { sourceId: string; output?: string; payload?: any }) {\n this.widgetEvent.emit({ stepIndex, stepId: this.steps()[stepIndex]?.id, sourceId: e.sourceId, output: e.output, payload: e.payload });\n }\n\n isStepEmpty(step: StepConfig): boolean {\n const hasForm = !!step.form;\n const hasWidgetsBefore = Array.isArray(step.widgetsBeforeForm) && step.widgetsBeforeForm.length > 0;\n const hasWidgets = Array.isArray(step.widgets) && step.widgets.length > 0;\n return !hasForm && !hasWidgets && !hasWidgetsBefore;\n }\n\n openEditor(): void {\n const cfg = this._config() || { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n const key = this.storageKey() || this.stepperId || 'default';\n const ref = this.settings.open({\n id: `praxis-stepper-editor:${key}`,\n title: 'Configurar Stepper',\n content: { component: PraxisStepperConfigEditor, inputs: { config: cfg } },\n });\n const apply = (value: any) => {\n const nextCfg: StepperMetadata = value?.config || value;\n if (nextCfg) {\n // Deep clone to ensure change detection and avoid mutating editor instance\n const cloned = JSON.parse(JSON.stringify(nextCfg)) as StepperMetadata;\n this._config.set(cloned);\n // Clamp selection after changes\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n this.persistConfig(cloned);\n this.scheduleDomSync();\n }\n };\n ref.applied$.subscribe(apply);\n ref.saved$.subscribe(apply);\n }\n\n public applyConfigFromAdapter(next: StepperMetadata): void {\n const cloned = JSON.parse(JSON.stringify(next)) as StepperMetadata;\n this._config.set(cloned);\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n this.persistConfig(cloned);\n this.scheduleDomSync();\n }\n\n // CTA helpers\n addFirstStep(): void {\n const current = this._config() || { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n if ((current.steps || []).length > 0) return;\n const next: StepperMetadata = {\n ...current,\n steps: [\n { id: 'step1', label: 'Etapa 1', description: 'Clique em Configurar para editar esta etapa.' },\n ],\n };\n this._config.set(next);\n // Seleciona a primeira etapa\n this._selectedIndex.set(0);\n this.persistConfig(next);\n this.scheduleDomSync();\n }\n\n // Navegação com validação remota opcional\n async onNext(i: number): Promise<void> {\n await this.nextWithValidation(i);\n }\n\n async validateStep(i: number = this.selectedIndexComputed()): Promise<boolean> {\n // Em modo linear, bloquear quando inválido\n if (this.linear() && this._formValidity.get(i) === false) {\n const fg = this._formGroups.get(i);\n if (fg) {\n fg.markAllAsTouched();\n fg.updateValueAndValidity({ emitEvent: true });\n }\n return false;\n }\n const step = this.steps()[i];\n if (!step) {\n return true;\n }\n const fg = this._formGroups.get(i);\n const data = fg?.getRawValue();\n if (this.serverValidate) {\n const res = await this.serverValidate({ step, stepIndex: i, formGroup: fg, formData: data });\n if (!res.ok) {\n this.applyServerErrors(fg, res.fieldErrors, res.formErrors);\n // Atualizar erro visual\n step.errorMessage = res.errorMessage || (res.formErrors && res.formErrors[0]) || 'Erro de validação';\n this._formValidity.set(i, false);\n return false;\n }\n }\n return true;\n }\n\n async nextWithValidation(i: number = this.selectedIndexComputed()): Promise<boolean> {\n const isValid = await this.validateStep(i);\n if (!isValid) {\n return false;\n }\n this.next();\n return true;\n }\n onPrev(): void { this.prev(); }\n\n onAnimationDone(): void { this.animationDone.emit(); }\n\n private applyServerErrors(fg?: FormGroup, fieldErrors?: Record<string, string[]>, formErrors?: string[]): void {\n if (!fg) return;\n if (fieldErrors) {\n for (const [key, messages] of Object.entries(fieldErrors)) {\n const ctrl = fg.get(key);\n if (ctrl) {\n const prev = ctrl.errors || {};\n ctrl.setErrors({ ...prev, server: messages });\n ctrl.markAsTouched();\n }\n }\n }\n if (formErrors && formErrors.length) {\n const prev = fg.errors || {};\n fg.setErrors({ ...prev, server: formErrors });\n }\n fg.updateValueAndValidity({ emitEvent: true });\n }\n\n private persistConfig(config?: StepperMetadata | null): void {\n const key = this.storageKey();\n if (!key || !config) return;\n this.storage.saveConfig(key, config).pipe(take(1)).subscribe({ error: () => {} });\n }\n\n private storageKey(): string | null {\n const id = this.componentKeyId();\n return id ? `stepper-config:${id}` : null;\n }\n\n private componentKeyId(): string | null {\n const key = this.componentKeys.buildComponentId({\n componentType: 'praxis-stepper',\n componentId: this.stepperId,\n instanceKey: this.componentInstanceId,\n componentRef: this,\n route: this.route,\n requireComponentId: true,\n });\n if (!key) this.warnMissingId();\n return key;\n }\n\n private warnMissingId(): void {\n if (this.warnedMissingId) return;\n this.warnedMissingId = true;\n this.logger.warnOnce(\n '[PraxisStepper] stepperId is required for config persistence.',\n {\n context: {\n lib: 'praxis-stepper',\n component: 'PraxisStepper',\n },\n data: {\n stepperId: this.stepperId,\n componentInstanceId: this.componentInstanceId,\n },\n dedupeKey: 'praxis-stepper:missing-stepper-id',\n },\n );\n }\n\n ngOnInit(): void {\n const key = this.storageKey();\n if (!key) return;\n this.storage.loadConfig<StepperMetadata>(key).pipe(take(1)).subscribe((stored) => {\n if (!stored) return;\n const cloned = JSON.parse(JSON.stringify(stored)) as StepperMetadata;\n this._config.set(cloned);\n const sel = typeof cloned.selectedIndex === 'number' ? cloned.selectedIndex : this._selectedIndex();\n this._selectedIndex.set(this.clampIndex(sel));\n this.scheduleDomSync();\n });\n }\n\n ngAfterViewInit(): void {\n this.scheduleDomSync();\n }\n\n private scheduleDomSync(): void {\n queueMicrotask(() => {\n this.syncAppearanceTokens();\n this.syncHeaderClasses();\n });\n }\n\n private syncAppearanceTokens(): void {\n const host = this.hostElement.nativeElement;\n const nextTokens = this._config()?.appearance?.tokens ?? {};\n const nextTokenNames = new Set(Object.keys(nextTokens).map((name) => this.resolveCssTokenName(name)));\n\n this.appliedTokenNames\n .filter((name) => !nextTokenNames.has(name))\n .forEach((name) => this.renderer.removeStyle(host, name));\n\n Object.entries(nextTokens).forEach(([name, value]) => {\n this.renderer.setStyle(host, this.resolveCssTokenName(name), value);\n });\n\n this.appliedTokenNames = [...nextTokenNames];\n }\n\n private syncHeaderClasses(): void {\n const host = this.hostElement.nativeElement;\n const nextClasses = this.parseClassList(this._config()?.headerClass);\n const targets = host.querySelectorAll('.mat-step-header, .mat-horizontal-stepper-header-container');\n\n targets.forEach((target: Element) => {\n this.appliedHeaderClasses\n .filter((className) => !nextClasses.includes(className))\n .forEach((className) => this.renderer.removeClass(target, className));\n nextClasses.forEach((className) => this.renderer.addClass(target, className));\n });\n\n this.appliedHeaderClasses = nextClasses;\n }\n\n private parseClassList(value?: string): string[] {\n return (value ?? '')\n .split(/\\s+/)\n .map((className) => className.trim())\n .filter(Boolean);\n }\n\n private resolveCssTokenName(name: string): string {\n return name.startsWith('--') ? name : `--${name}`;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\n\nexport interface PraxisWizardBenefitItem {\n icon?: string;\n title: string;\n text?: string;\n}\n\n@Component({\n selector: 'praxis-wizard-benefits-grid',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule, MatIconModule],\n template: `\n <section class=\"pwx-benefits\">\n @if (title) {\n <h3 class=\"pwx-benefits-title\">{{ title }}</h3>\n }\n <div class=\"pwx-benefits-grid\" [class.is-boxed]=\"boxed\" [style.--pwx-columns]=\"columns || 4\">\n <div class=\"pwx-benefit\" *ngFor=\"let item of items\">\n <div class=\"pwx-benefit-icon\" *ngIf=\"item.icon\">\n <mat-icon [fontIcon]=\"item.icon\"></mat-icon>\n </div>\n <div class=\"pwx-benefit-body\">\n <div class=\"pwx-benefit-title\">{{ item.title }}</div>\n <div class=\"pwx-benefit-text\" *ngIf=\"item.text\">{{ item.text }}</div>\n </div>\n </div>\n </div>\n </section>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-benefits { display: flex; flex-direction: column; gap: 10px; }\n .pwx-benefits-title {\n margin: 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n letter-spacing: 0.02em;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n .pwx-benefits-title::before,\n .pwx-benefits-title::after {\n content: '';\n height: 1px;\n flex: 1;\n background: var(--md-sys-color-outline-variant);\n }\n .pwx-benefits-grid {\n display: grid;\n grid-template-columns: repeat(var(--pwx-columns), minmax(0, 1fr));\n gap: 14px 18px;\n }\n .pwx-benefits-grid.is-boxed {\n padding: 10px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n border-radius: 6px;\n background: var(--md-sys-color-surface);\n }\n .pwx-benefit {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n }\n .pwx-benefit-icon {\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--praxis-wizard-accent, var(--md-sys-color-primary));\n }\n .pwx-benefit-title { font-weight: 600; font-size: 0.88rem; color: var(--md-sys-color-on-surface); }\n .pwx-benefit-text { font-size: 0.82rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); line-height: 1.35; }\n\n @media (max-width: 720px) {\n .pwx-benefits-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n }\n @media (max-width: 480px) {\n .pwx-benefits-grid { grid-template-columns: 1fr; }\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardBenefitsGridComponent {\n @Input() blockId?: string;\n @Input() title?: string;\n @Input() items: PraxisWizardBenefitItem[] = [];\n @Input() columns?: number;\n @Input() boxed = true;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-content-block',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <section class=\"pwx-content\">\n @if (title) {\n <h3 class=\"pwx-content-title\">{{ title }}</h3>\n }\n @if (subtitle) {\n <div class=\"pwx-content-subtitle\">{{ subtitle }}</div>\n }\n @if (text) {\n <p class=\"pwx-content-text\">{{ text }}</p>\n }\n @if (caption) {\n <div class=\"pwx-content-caption\">{{ caption }}</div>\n }\n </section>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-content { display: flex; flex-direction: column; gap: 6px; }\n .pwx-content-title { margin: 0; font-size: 1.05rem; font-weight: 600; color: var(--md-sys-color-on-surface); }\n .pwx-content-subtitle { font-size: 0.95rem; color: var(--md-sys-color-on-surface); }\n .pwx-content-text { margin: 0; font-size: 0.88rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); }\n .pwx-content-caption { font-size: 0.78rem; color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant)); }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardContentBlockComponent {\n @Input() blockId?: string;\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() text?: string;\n @Input() caption?: string;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-inline-notice',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <div class=\"pwx-inline\" [ngClass]=\"toneClass\">\n {{ text }}\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-inline {\n font-size: 0.82rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n line-height: 1.4;\n }\n .pwx-inline.info { color: var(--md-sys-color-on-surface); }\n .pwx-inline.warning { color: var(--md-sys-color-error); }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardInlineNoticeComponent {\n @Input() blockId?: string;\n @Input() text = '';\n @Input() tone: 'neutral' | 'info' | 'warning' = 'neutral';\n\n get toneClass(): string {\n return this.tone !== 'neutral' ? this.tone : '';\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'praxis-wizard-divider',\n standalone: true,\n host: {\n '[attr.data-block-id]': 'blockId || null',\n },\n imports: [CommonModule],\n template: `\n <div class=\"pwx-divider\">\n <span *ngIf=\"label\" class=\"pwx-divider-label\">{{ label }}</span>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-divider {\n position: relative;\n height: 1px;\n background: var(--praxis-wizard-divider, var(--md-sys-color-outline-variant));\n margin: 16px 0;\n }\n .pwx-divider-label {\n position: absolute;\n top: -0.65rem;\n left: 50%;\n transform: translateX(-50%);\n padding: 0 8px;\n font-size: 0.75rem;\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardDividerComponent {\n @Input() blockId?: string;\n @Input() label?: string;\n}\n","import { ComponentDocMeta, ComponentMetadataRegistry } from '@praxisui/core';\nimport { ENVIRONMENT_INITIALIZER, Provider } from '@angular/core';\nimport { PraxisStepper } from './praxis-stepper';\nimport { PraxisWizardBenefitsGridComponent } from './wizard/blocks/praxis-wizard-benefits-grid.component';\nimport { PraxisWizardContentBlockComponent } from './wizard/blocks/praxis-wizard-content-block.component';\nimport { PraxisWizardInlineNoticeComponent } from './wizard/blocks/praxis-wizard-inline-notice.component';\nimport { PraxisWizardDividerComponent } from './wizard/blocks/praxis-wizard-divider.component';\n\nexport const PRAXIS_STEPPER_COMPONENT_METADATA: ComponentDocMeta = {\n id: 'praxis-stepper',\n selector: 'praxis-stepper',\n component: PraxisStepper,\n friendlyName: 'Praxis Stepper',\n description: 'Stepper configurável (horizontal/vertical/linear) com passos e conteúdo dinâmico.',\n icon: 'format_list_numbered',\n inputs: [\n { name: 'stepperId', type: 'string', label: 'ID do Stepper', description: 'Identificador para persistência (obrigatório)' },\n { name: 'componentInstanceId', type: 'string', label: 'ID da instância', description: 'Identificador opcional para múltiplas instâncias na mesma rota' },\n {\n name: 'config',\n type: 'StepperMetadata',\n label: 'Configuração',\n description: 'Configuração JSON com passos, aparência, densidade, classes CSS e navegação',\n },\n { name: 'selectedIndex', type: 'number', label: '[(selectedIndex)] Índice selecionado' },\n { name: 'selectedIndexInput', type: 'number', label: 'Índice selecionado (legacy)' },\n { name: 'disableRippleInput', type: 'boolean', default: false, label: 'Desabilitar ripple' },\n { name: 'editModeEnabled', type: 'boolean', default: false, label: 'Modo de edição', description: 'Exibe controles de edição e assistente AI no runtime' },\n { name: 'labelPosition', type: \"'bottom' | 'end'\", label: 'Posição do rótulo (horizontal)' },\n { name: 'color', type: 'ThemePalette', label: 'Cor (M2)' },\n { name: 'serverValidate', type: '(args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>', label: 'Validação remota (opt-in)' },\n { name: 'stepperContext', type: 'Record<string, any>', label: 'Contexto', description: 'Contexto compartilhado para widgets internos' },\n ],\n outputs: [\n { name: 'selectionChange', type: 'any', label: 'Troca de seleção' },\n { name: 'selectedIndexChange', type: 'number', label: 'Índice selecionado (change)' },\n { name: 'animationDone', type: 'void', label: 'Animação concluída' },\n { name: 'widgetEvent', type: '{ stepId?: string; stepIndex?: number; sourceId: string; output?: string; payload?: any }', label: 'Evento interno' },\n { name: 'stepFormReady', type: '{ stepId?: string; stepIndex: number; event: FormReadyEvent }', label: 'Form ready (por etapa)' },\n { name: 'stepFormValueChange', type: '{ stepId?: string; stepIndex: number; event: FormValueChangeEvent }', label: 'Form value change (por etapa)' },\n ],\n actions: [\n {\n id: 'select-step',\n label: 'Selecionar etapa',\n icon: 'flag',\n description: 'Emite alteração do índice selecionado',\n emit: 'selectedIndexChange',\n payloadSchema: {\n type: 'number',\n example: 0,\n },\n scope: 'any',\n },\n {\n id: 'step-change',\n label: 'Troca de etapa',\n icon: 'swap_vert',\n description: 'Emite evento ao trocar de etapa',\n emit: 'selectionChange',\n payloadSchema: {\n type: 'object',\n properties: {\n selectedIndex: { type: 'number', description: 'Índice selecionado' },\n previouslySelectedIndex: { type: 'number', description: 'Índice anterior' },\n },\n required: ['selectedIndex'],\n example: { selectedIndex: 1, previouslySelectedIndex: 0 },\n },\n scope: 'any',\n },\n ],\n tags: ['widget', 'container', 'stepper', 'configurable'],\n lib: '@praxisui/stepper',\n layoutHints: { recommendedCols: 8, recommendedRows: 6, minCols: 4, minRows: 4 },\n};\n\nexport const PRAXIS_WIZARD_BENEFITS_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-benefits',\n selector: 'praxis-wizard-benefits-grid',\n component: PraxisWizardBenefitsGridComponent,\n friendlyName: 'Wizard Benefits Grid',\n description: 'Grid de benefícios com ícones/títulos/texto (uso editorial).',\n icon: 'view_module',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'title', type: 'string', label: 'Título' },\n { name: 'items', type: 'Array<{ icon?: string; title: string; text?: string }>', label: 'Itens' },\n { name: 'columns', type: 'number', label: 'Colunas' },\n { name: 'boxed', type: 'boolean', label: 'Boxed' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'content', 'benefits'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_CONTENT_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-content',\n selector: 'praxis-wizard-content-block',\n component: PraxisWizardContentBlockComponent,\n friendlyName: 'Wizard Content Block',\n description: 'Bloco editorial com título/subtítulo/texto.',\n icon: 'article',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'title', type: 'string', label: 'Título' },\n { name: 'subtitle', type: 'string', label: 'Subtítulo' },\n { name: 'text', type: 'string', label: 'Texto' },\n { name: 'caption', type: 'string', label: 'Legenda' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'content'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_NOTICE_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-inline-notice',\n selector: 'praxis-wizard-inline-notice',\n component: PraxisWizardInlineNoticeComponent,\n friendlyName: 'Wizard Inline Notice',\n description: 'Texto legal/nota inline para wizards.',\n icon: 'info',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'text', type: 'string', label: 'Texto' },\n { name: 'tone', type: \"'neutral' | 'info' | 'warning'\", label: 'Tom' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'notice'],\n lib: '@praxisui/stepper',\n};\n\nexport const PRAXIS_WIZARD_DIVIDER_METADATA: ComponentDocMeta = {\n id: 'praxis-wizard-divider',\n selector: 'praxis-wizard-divider',\n component: PraxisWizardDividerComponent,\n friendlyName: 'Wizard Divider',\n description: 'Separador visual para fluxo.',\n icon: 'horizontal_rule',\n inputs: [\n { name: 'blockId', type: 'string', label: 'ID estável (avançado)', description: 'Chave estável para telemetria/e2e.' },\n { name: 'label', type: 'string', label: 'Rótulo' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'divider'],\n lib: '@praxisui/stepper',\n};\n\nexport function providePraxisStepperMetadata(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useFactory: (registry: ComponentMetadataRegistry) => () => {\n registry.register(PRAXIS_STEPPER_COMPONENT_METADATA);\n registry.register(PRAXIS_WIZARD_BENEFITS_METADATA);\n registry.register(PRAXIS_WIZARD_CONTENT_METADATA);\n registry.register(PRAXIS_WIZARD_NOTICE_METADATA);\n registry.register(PRAXIS_WIZARD_DIVIDER_METADATA);\n },\n deps: [ComponentMetadataRegistry],\n } as Provider;\n}\n","import type { WizardFormConfig } from './praxis-wizard-form.types';\n\nexport const FT_WIZARD_JSON = `{\n \"id\": \"ft-edit-wizard\",\n \"brand\": \"FINANCIAL TIMES\",\n \"progress\": {\n \"variant\": \"line\",\n \"showLabels\": true,\n \"labelPosition\": \"bottom\"\n },\n \"cta\": {\n \"label\": \"Continue\",\n \"action\": \"next\",\n \"secondaryLabel\": \"Back\",\n \"secondaryAction\": \"prev\",\n \"sticky\": true\n },\n \"preferences\": {\n \"stepId\": \"preferences\",\n \"storageKey\": \"praxis:ft-wizard\",\n \"persistFields\": [\"topStories\", \"invitesOffers\", \"recommendations\"]\n },\n \"theme\": {\n \"praxis-wizard-card-bg\": \"#fff1e5\",\n \"md-sys-color-surface\": \"#fff1e5\",\n \"md-sys-color-on-surface\": \"#33302e\",\n \"praxis-wizard-accent\": \"#0d7680\",\n \"praxis-wizard-border\": \"#cfcfcf\",\n \"md-sys-color-outline-variant\": \"#cfcfcf\",\n \"ft-font-head\": \"\\\\\\\"Financier Display\\\\\\\", Georgia, serif\",\n \"ft-font-body\": \"\\\\\\\"Metric\\\\\\\", \\\\\\\"Helvetica Neue\\\\\\\", Helvetica, Arial, sans-serif\",\n \"ft-radius\": \"0\",\n \"ft-shadow\": \"none\",\n \"ft-header-border\": \"1px solid #cfcfcf\"\n },\n \"steps\": [\n {\n \"id\": \"access\",\n \"label\": \"Access\",\n \"title\": \"Create an FT Edit account\",\n \"subtitle\": \"Get access in a couple of steps and upgrade later for the full FT experience.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"benefitsGrid\",\n \"title\": \"Why register?\",\n \"columns\": 4,\n \"boxed\": true,\n \"items\": [\n {\n \"icon\": \"format_quote\",\n \"title\": \"Beyond the headlines\",\n \"text\": \"Insightful news, thought-provoking opinion and fascinating features.\"\n },\n {\n \"icon\": \"edit_note\",\n \"title\": \"Curated daily editions\",\n \"text\": \"Eight fresh articles a day chosen for you by our senior editors.\"\n },\n {\n \"icon\": \"bookmarks\",\n \"title\": \"Never miss a great story\",\n \"text\": \"Explore previous editions from the past week.\"\n },\n {\n \"icon\": \"mail\",\n \"title\": \"Receive the FT Edit newsletter\",\n \"text\": \"A daily round-up delivered straight to your inbox.\"\n }\n ]\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"For more information about how we use your data, please refer to our privacy and cookie policies.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Register with email\",\n \"action\": \"next\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"access-section\",\n \"rows\": [\n {\n \"columns\": [\n {\n \"fields\": [\"confirmAge\", \"editNewsletter\"]\n }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"confirmAge\",\n \"label\": \"\",\n \"controlType\": \"checkbox\",\n \"required\": true,\n \"layout\": \"horizontal\",\n \"options\": [\n {\n \"label\": \"I confirm I am 16+ years old and agree to the Terms & Conditions.\",\n \"value\": true\n }\n ]\n },\n {\n \"name\": \"editNewsletter\",\n \"label\": \"FT Edit newsletter\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"All new members also start receiving our daily FT Edit newsletter.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n },\n {\n \"id\": \"account\",\n \"label\": \"Account\",\n \"title\": \"Create an FT Edit account\",\n \"subtitle\": \"This address will be used to create your account.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"All new members also start receiving our daily FT Edit newsletter.\",\n \"tone\": \"info\"\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"We will send you service messages about your account, security or legal notifications.\"\n }\n ]\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"account-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"email\", \"password\"] },\n { \"fields\": [\"newsletterOptIn\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"email\",\n \"label\": \"Email address\",\n \"controlType\": \"email\",\n \"required\": true,\n \"placeholder\": \"Enter your email address\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"required\": true,\n \"placeholder\": \"Enter a password\",\n \"hint\": \"Use 8 or more characters. You can use letters, numbers or symbols.\",\n \"validators\": {\n \"minLength\": 8\n },\n \"revealToggle\": {\n \"enabled\": true,\n \"style\": \"text\",\n \"showLabel\": \"Show password\",\n \"hideLabel\": \"Hide password\",\n \"ariaLabel\": \"Toggle password visibility\"\n }\n },\n {\n \"name\": \"newsletterOptIn\",\n \"label\": \"Stay up to date\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"All new members also start receiving our daily FT Edit newsletter.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n },\n {\n \"id\": \"preferences\",\n \"label\": \"Preferences\",\n \"title\": \"Stay up to date\",\n \"subtitle\": \"You can update these any time in your Contact Preferences.\",\n \"description\": \"We will send you service messages about your account, security or legal notifications.\",\n \"zones\": {\n \"footer\": [\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"inlineNotice\",\n \"text\": \"We will send you service messages about your account, security or legal notifications.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Create an FT Edit account\",\n \"action\": \"submit\",\n \"secondaryLabel\": \"Back\",\n \"secondaryAction\": \"prev\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"prefs-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"topStories\"] },\n { \"fields\": [\"invitesOffers\"] },\n { \"fields\": [\"recommendations\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"topStories\",\n \"label\": \"Top stories & features\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Get the most from the Financial Times with personalised special reports, recommended reads and latest feature announcements.\"\n },\n {\n \"name\": \"invitesOffers\",\n \"label\": \"Invites & offers from the FT\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Receive exclusive personalised event invitations, carefully-curated offers and promotions from the Financial Times.\"\n },\n {\n \"name\": \"recommendations\",\n \"label\": \"Personal recommendations\",\n \"controlType\": \"toggle\",\n \"defaultValue\": false,\n \"hint\": \"Tailored reading lists based on what you follow.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Submit\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancel\" },\n \"reset\": { \"visible\": false, \"label\": \"Reset\" }\n }\n }\n }\n }\n ]\n}`;\n\nexport const FT_WIZARD_CONFIG = JSON.parse(FT_WIZARD_JSON) as WizardFormConfig;","import type { StepperMetadata, StepConfig } from '../praxis-stepper';\nimport type { WizardBlock, WizardFormConfig, WizardStepConfig } from './praxis-wizard-form.types';\nimport type { WidgetDefinition } from '@praxisui/core';\nimport type { PraxisListConfig } from '@praxisui/list';\n\nconst defaultCardSkin: PraxisListConfig['skin'] = {\n type: 'elevated',\n radius: '12px',\n border: '1px solid var(--md-sys-color-outline-variant, #e0e0e0)',\n shadow: '0 1px 2px rgba(0,0,0,0.06)',\n};\n\nconst defaultCardLayout: PraxisListConfig['layout'] = {\n variant: 'cards',\n density: 'comfortable',\n lines: 2,\n model: 'standard',\n dividers: 'none',\n};\n\nconst defaultCardTemplating: PraxisListConfig['templating'] = {\n primary: { type: 'text', expr: '${item.title}', class: 'ft-card-title' },\n secondary: { type: 'text', expr: '${item.description}', class: 'ft-card-desc' },\n};\n\nexport function buildStepperConfig(wizard: WizardFormConfig): StepperMetadata {\n const steps: StepConfig[] = wizard.steps.map((step) => buildStep(step, wizard.id));\n return {\n orientation: 'horizontal',\n linear: true,\n headerPosition: 'top',\n labelPosition: wizard.progress?.labelPosition ?? 'bottom',\n density: 'compact',\n stepperClass: 'ft-stepper',\n headerClass: 'ft-stepper-header',\n contentClass: 'ft-stepper-content',\n appearance: {\n preset: 'ft-light',\n },\n navigation: { visible: false },\n steps,\n };\n}\n\nfunction buildStep(step: WizardStepConfig, wizardId: string): StepConfig {\n const blocks = buildBlocks(mergeBlocks(step), wizardId, step.id);\n const beforeWidgets = [\n ...blocks.before,\n ...(step.cards?.length ? [buildCardsWidget(step, wizardId)] : []),\n ];\n const widgetsBeforeForm: WidgetDefinition[] | undefined = beforeWidgets.length ? beforeWidgets : undefined;\n const widgetsAfterForm: WidgetDefinition[] | undefined = blocks.after.length ? blocks.after : undefined;\n\n return {\n id: step.id,\n label: step.label,\n description: step.subtitle || step.description,\n optional: step.optional,\n widgetsBeforeForm,\n widgets: widgetsAfterForm,\n form: step.form\n ? {\n formId: step.form.formId || `${wizardId}:${step.id}`,\n config: step.form.config,\n mode: 'create',\n }\n : undefined,\n };\n}\n\nfunction buildCardsWidget(step: WizardStepConfig, wizardId: string): WidgetDefinition {\n const cfg: PraxisListConfig = {\n id: `${wizardId}:${step.id}:cards`,\n dataSource: { data: step.cards || [] },\n layout: { ...defaultCardLayout },\n skin: { ...defaultCardSkin },\n templating: { ...defaultCardTemplating },\n ui: { showSearch: false, showSort: false, showRange: false },\n };\n\n return {\n id: 'praxis-list',\n inputs: {\n listId: cfg.id,\n config: cfg,\n },\n };\n}\n\nfunction mergeBlocks(step: WizardStepConfig): WizardBlock[] | undefined {\n const out: WizardBlock[] = [];\n const hasZones = !!(step.zones?.intro?.length || step.zones?.body?.length || step.zones?.footer?.length);\n if (hasZones) {\n // Contrato atual: `zones` é o modelo canônico e substitui `blocks` legado\n // quando ambos coexistem no payload, evitando renderização duplicada.\n if (step.zones?.intro?.length) {\n out.push(...step.zones.intro.map((b) => ({ ...b, placement: 'beforeForm' as const })));\n }\n if (step.zones?.body?.length) {\n out.push(...step.zones.body.map((b) => ({ ...b, placement: 'beforeForm' as const })));\n }\n if (step.zones?.footer?.length) {\n out.push(...step.zones.footer.map((b) => ({ ...b, placement: 'afterForm' as const })));\n }\n return out;\n }\n if (step.blocks?.length) out.push(...step.blocks);\n return out.length ? out : undefined;\n}\n\nfunction buildBlocks(blocks: WizardBlock[] | undefined, wizardId: string, stepId: string): {\n before: WidgetDefinition[];\n after: WidgetDefinition[];\n} {\n if (!blocks || blocks.length === 0) return { before: [], after: [] };\n const before: WidgetDefinition[] = [];\n const after: WidgetDefinition[] = [];\n\n blocks.forEach((block, index) => {\n const placement = block.placement ?? 'beforeForm';\n const def = toWidget(block, wizardId, stepId, index);\n if (!def) return;\n if (placement === 'afterForm') after.push(def);\n else before.push(def);\n });\n\n return { before, after };\n}\n\nfunction resolveBlockRuntimeId(block: WizardBlock, wizardId: string, stepId: string, index: number): string {\n const explicitId = typeof block.id === 'string' ? block.id.trim() : '';\n return explicitId\n ? `${wizardId}:${stepId}:block:${explicitId}`\n : `${wizardId}:${stepId}:block:${index}`;\n}\n\nfunction toWidget(block: WizardBlock, wizardId: string, stepId: string, index: number): WidgetDefinition | null {\n const baseId = resolveBlockRuntimeId(block, wizardId, stepId, index);\n switch (block.type) {\n case 'benefitsGrid':\n return {\n id: 'praxis-wizard-benefits',\n inputs: {\n blockId: baseId,\n title: block.title,\n items: block.items,\n columns: block.columns,\n boxed: block.boxed,\n },\n };\n case 'contentBlock':\n return {\n id: 'praxis-wizard-content',\n inputs: {\n blockId: baseId,\n title: block.title,\n subtitle: block.subtitle,\n text: block.text,\n caption: block.caption,\n },\n };\n case 'inlineNotice':\n return {\n id: 'praxis-wizard-inline-notice',\n inputs: {\n blockId: baseId,\n text: block.text,\n tone: block.tone,\n },\n };\n case 'divider':\n return {\n id: 'praxis-wizard-divider',\n inputs: {\n blockId: baseId,\n label: block.label ?? '',\n },\n };\n default:\n return null;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'praxis-wizard-cta-bar',\n standalone: true,\n imports: [CommonModule, MatButtonModule],\n template: `\n <div class=\"pwx-cta\" [class.is-sticky]=\"sticky\" [class.has-secondary]=\"showSecondary\">\n <button\n *ngIf=\"showSecondary\"\n mat-button\n type=\"button\"\n class=\"pwx-cta-secondary\"\n (click)=\"secondaryClick.emit()\"\n [attr.aria-label]=\"secondaryLabel\"\n >\n {{ secondaryLabel }}\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"pwx-cta-primary\"\n [disabled]=\"primaryDisabled\"\n (click)=\"primaryClick.emit()\"\n [attr.aria-label]=\"primaryLabel\"\n >\n {{ primaryLabel }}\n </button>\n </div>\n `,\n styles: [\n `\n :host { display: block; }\n .pwx-cta {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 12px;\n padding-top: 16px;\n }\n .pwx-cta:not(.has-secondary) {\n justify-content: center;\n }\n .pwx-cta.is-sticky {\n position: sticky;\n bottom: 0;\n background: var(--praxis-wizard-card-bg, var(--md-sys-color-surface));\n padding: 12px 0 8px;\n border-top: 1px solid var(--praxis-wizard-border, var(--md-sys-color-outline-variant));\n }\n .pwx-cta.has-secondary .pwx-cta-primary { min-width: 200px; }\n .pwx-cta-primary {\n min-width: 240px;\n height: 36px;\n border-radius: 4px;\n font-weight: 600;\n text-transform: none;\n padding: 0 18px;\n }\n .pwx-cta-secondary {\n color: var(--praxis-wizard-muted, var(--md-sys-color-on-surface-variant));\n text-transform: none;\n font-weight: 500;\n padding: 0 4px;\n min-width: auto;\n }\n @media (max-width: 600px) {\n .pwx-cta { flex-direction: column; align-items: stretch; }\n .pwx-cta-primary { width: 100%; }\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardCtaBarComponent {\n @Input() primaryLabel = 'Continue';\n @Input() primaryDisabled = false;\n @Input() secondaryLabel = 'Back';\n @Input() showSecondary = false;\n @Input() sticky = false;\n\n @Output() primaryClick = new EventEmitter<void>();\n @Output() secondaryClick = new EventEmitter<void>();\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, computed, inject, signal, isDevMode, effect, ElementRef, Renderer2 } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatIconModule } from '@angular/material/icon';\nimport {\n CONFIG_STORAGE,\n ConsoleLoggerSink,\n createCorporateLoggerConfig,\n LoggerService,\n type ConfigStorage,\n} from '@praxisui/core';\nimport { PraxisStepper } from '../praxis-stepper';\nimport type { WizardCtaConfig, WizardFormConfig, WizardStepConfig } from './praxis-wizard-form.types';\nimport { buildStepperConfig } from './praxis-wizard-form.adapter';\nimport { PraxisWizardCtaBarComponent } from './praxis-wizard-cta-bar.component';\n\ninterface WizardPersistedState {\n selectedIndex?: number;\n preferences?: Record<string, any>;\n}\n\nconst PRAXIS_WIZARD_LOGGER = new LoggerService(\n createCorporateLoggerConfig(isDevMode() ? 'dev' : 'prod'),\n [new ConsoleLoggerSink()],\n);\n\nfunction logWizardConfigIssue(message: string): void {\n PRAXIS_WIZARD_LOGGER.warnOnce(\n `[PraxisWizard] ${message}`,\n {\n context: {\n lib: 'praxis-stepper',\n component: 'PraxisWizardFormComponent',\n },\n dedupeKey: `praxis-wizard:config:${message}`,\n },\n );\n}\n\nfunction validateWizardConfig(cfg: WizardFormConfig | null): WizardFormConfig | null {\n if (!cfg) return null;\n const errors: string[] = [];\n if (!cfg.id) errors.push('config.id is required.');\n if (!cfg.steps || cfg.steps.length === 0) errors.push('config.steps must have at least one step.');\n cfg.steps?.forEach((step, idx) => {\n if (!step.id) errors.push(`steps[${idx}].id is required.`);\n if (!step.label) errors.push(`steps[${idx}].label is required.`);\n const hasZones = !!(step.zones?.intro?.length || step.zones?.body?.length || step.zones?.footer?.length);\n const hasBlocks = !!(step.blocks && step.blocks.length > 0);\n if (hasZones && hasBlocks) {\n errors.push(`steps[${idx}] cannot use both 'zones' and 'blocks'.`);\n }\n });\n if (errors.length) {\n errors.forEach((err) => logWizardConfigIssue(err));\n if (isDevMode()) {\n throw new Error(`[PraxisWizard] Invalid configuration:\\\\n${errors.join('\\\\n')}`);\n }\n }\n return cfg;\n}\n\n@Component({\n selector: 'praxis-wizard-form',\n standalone: true,\n imports: [CommonModule, MatCardModule, MatIconModule, PraxisStepper, PraxisWizardCtaBarComponent],\n template: `\n <section class=\"ft-wizard-shell\" [attr.data-wizard-id]=\"wizardId\">\n <div class=\"ft-wizard-header\">\n <div class=\"ft-brand\">{{ wizardBrand() }}</div>\n </div>\n\n <mat-card class=\"ft-wizard-card\">\n <div class=\"ft-card-header\">\n <h2>{{ activeTitle() }}</h2>\n @if (activeSubtitle()) {\n <p>{{ activeSubtitle() }}</p>\n }\n @if (activeDescription()) {\n <p class=\"ft-card-description\">{{ activeDescription() }}</p>\n }\n </div>\n\n <praxis-stepper\n #stepper\n [stepperId]=\"wizardId\"\n [config]=\"stepperConfig()\"\n [selectedIndex]=\"selectedIndex()\"\n [editModeEnabled]=\"editModeEnabled\"\n (selectedIndexChange)=\"onSelectedIndexChange($event)\"\n (stepFormValueChange)=\"onStepFormValueChange($event)\"\n ></praxis-stepper>\n\n <praxis-wizard-cta-bar\n [primaryLabel]=\"primaryLabel()\"\n [primaryDisabled]=\"isPrimaryDisabled()\"\n [secondaryLabel]=\"secondaryLabel()\"\n [showSecondary]=\"showSecondaryAction()\"\n [sticky]=\"resolvedCta().sticky ?? false\"\n (primaryClick)=\"onPrimaryAction()\"\n (secondaryClick)=\"onSecondaryAction()\"\n ></praxis-wizard-cta-bar>\n </mat-card>\n </section>\n `,\n styleUrls: ['./praxis-wizard-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PraxisWizardFormComponent {\n private readonly el = inject(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly storage = inject<ConfigStorage>(CONFIG_STORAGE);\n\n constructor() {\n effect(() => {\n const cfg = this.wizard();\n const theme = cfg?.theme;\n if (theme) {\n Object.entries(theme).forEach(([key, value]) => {\n this.renderer.setStyle(this.el.nativeElement, `--${key}`, value);\n });\n }\n });\n }\n\n @ViewChild('stepper', { static: true }) stepper?: PraxisStepper;\n\n @Input({ required: true }) wizardId!: string;\n\n @Input() editModeEnabled = false;\n\n @Input() set config(cfg: WizardFormConfig | string | null) {\n if (!cfg) {\n this._config.set(null);\n return;\n }\n if (typeof cfg === 'string') {\n try {\n this._config.set(validateWizardConfig(JSON.parse(cfg) as WizardFormConfig));\n } catch {\n this._config.set(null);\n }\n return;\n }\n this._config.set(validateWizardConfig(cfg));\n }\n\n @Output() submit = new EventEmitter<{ wizardId: string; values: Record<string, any> }>();\n @Output() customAction = new EventEmitter<{ wizardId: string; stepId?: string; stepIndex: number; values: Record<string, any> }>();\n\n private readonly _config = signal<WizardFormConfig | null>(null);\n private readonly persistedState = signal<WizardPersistedState | null>(null);\n readonly selectedIndex = signal(0);\n\n readonly wizard = computed(() => {\n const cfg = this._config();\n if (!cfg) return null;\n const persisted = this.persistedState()?.preferences;\n if (!persisted) return cfg;\n return applyPreferenceDefaults(cfg, persisted);\n });\n\n readonly stepperConfig = computed(() => {\n const cfg = this.wizard();\n return cfg ? buildStepperConfig(cfg) : null;\n });\n\n readonly activeStep = computed(() => {\n const w = this.wizard();\n return w?.steps?.[this.selectedIndex()] || null;\n });\n\n wizardBrand = computed(() => this.wizard()?.brand || 'FINANCIAL TIMES');\n activeTitle = computed(() => this.activeStep()?.title || this.wizard()?.title || '');\n activeSubtitle = computed(() => this.activeStep()?.subtitle || this.wizard()?.subtitle || '');\n activeDescription = computed(() => this.activeStep()?.description || this.wizard()?.description || '');\n\n readonly resolvedCta = computed<Partial<WizardCtaConfig>>(() => {\n const stepCta = this.activeStep()?.cta;\n const globalCta = this.wizard()?.cta;\n return { ...(globalCta || {}), ...(stepCta || {}) } as Partial<WizardCtaConfig>;\n });\n primaryLabel = computed(() => this.resolvedCta().label ?? 'Continue');\n primaryAction = computed(() => this.resolvedCta().action ?? 'next');\n secondaryLabel = computed(() => this.resolvedCta().secondaryLabel ?? 'Back');\n secondaryAction = computed(() => this.resolvedCta().secondaryAction ?? 'prev');\n\n showSecondaryAction(): boolean {\n const action = this.secondaryAction();\n if (action === 'cancel') return true;\n return action === 'prev' && this.selectedIndex() > 0;\n }\n\n isPrimaryDisabled(): boolean {\n const action = this.primaryAction();\n if (action === 'next') return !!this.stepper?.isNextDisabled(this.selectedIndex());\n if (action === 'submit') return !!this.stepper?.isNextDisabled(this.selectedIndex());\n return false;\n }\n\n async onPrimaryAction(): Promise<void> {\n this.focusPrimaryAction();\n const action = this.primaryAction();\n if (action === 'next') {\n await this.stepper?.nextWithValidation(this.selectedIndex());\n return;\n }\n if (action === 'submit') {\n const isValid = await this.stepper?.validateStep(this.selectedIndex());\n if (isValid === false) {\n return;\n }\n this.submit.emit({ wizardId: this.wizardId, values: this.collectValues() });\n return;\n }\n if (action === 'custom') {\n this.customAction.emit({\n wizardId: this.wizardId,\n stepId: this.activeStep()?.id,\n stepIndex: this.selectedIndex(),\n values: this.collectValues(),\n });\n }\n }\n\n onSecondaryAction(): void {\n this.focusSecondaryAction();\n if (this.secondaryAction() === 'prev') {\n this.stepper?.prev();\n return;\n }\n if (this.secondaryAction() === 'cancel') {\n this.resetProgress();\n }\n }\n\n onSelectedIndexChange(idx: number): void {\n this.selectedIndex.set(idx);\n this.persistState();\n }\n\n onStepFormValueChange(ev: { stepIndex: number; stepId?: string; event: { formData?: any } }): void {\n const wizard = this.wizard();\n if (!wizard?.preferences) return;\n const prefStepId = wizard.preferences.stepId;\n if (!prefStepId || prefStepId !== ev.stepId) return;\n const values = pickPreferenceValues(ev.event?.formData, wizard.preferences.persistFields);\n this.persistState({ preferences: values });\n }\n\n ngOnInit(): void {\n this.loadPersistedState();\n }\n\n private collectValues(): Record<string, any> {\n const values: Record<string, any> = {};\n const steps = this.wizard()?.steps || [];\n steps.forEach((step, idx) => {\n const form = this.stepper?.formGroupFor(idx);\n if (form) values[step.id] = form.getRawValue();\n });\n return values;\n }\n\n private loadPersistedState(): void {\n if (!this.storageKey()) return;\n const stored = this.storage.loadConfig<WizardPersistedState>(this.storageKey());\n if (!stored) return;\n this.persistedState.set(stored);\n if (typeof stored.selectedIndex === 'number') {\n this.selectedIndex.set(stored.selectedIndex);\n }\n }\n\n private persistState(partial?: WizardPersistedState): void {\n if (!this.storageKey()) return;\n const next: WizardPersistedState = {\n selectedIndex: this.selectedIndex(),\n preferences: this.persistedState()?.preferences,\n ...partial,\n };\n this.persistedState.set(next);\n this.storage.saveConfig(this.storageKey(), next);\n }\n\n private storageKey(): string {\n const cfg = this.wizard();\n const base = cfg?.preferences?.storageKey || `praxis:wizard:${cfg?.id || this.wizardId}`;\n return `${base}:state`;\n }\n\n private resetProgress(): void {\n const key = this.storageKey();\n if (key) this.storage.clearConfig(key);\n this.persistedState.set(null);\n this.selectedIndex.set(0);\n this.stepper?.reset();\n }\n\n private focusPrimaryAction(): void {\n if (typeof document === 'undefined') return;\n const host = document.querySelector(`[data-wizard-id=\"${this.wizardId}\"]`) || document;\n const el = host.querySelector('.pwx-cta-primary') as HTMLElement | null;\n el?.focus();\n }\n\n private focusSecondaryAction(): void {\n if (typeof document === 'undefined') return;\n const host = document.querySelector(`[data-wizard-id=\"${this.wizardId}\"]`) || document;\n const el = host.querySelector('.pwx-cta-secondary') as HTMLElement | null;\n el?.focus();\n }\n}\n\nfunction pickPreferenceValues(value: any, fields?: string[]): Record<string, any> {\n if (!value || !fields || fields.length === 0) return value || {};\n const out: Record<string, any> = {};\n fields.forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(value, key)) out[key] = value[key];\n });\n return out;\n}\n\nfunction applyPreferenceDefaults(cfg: WizardFormConfig, values: Record<string, any>): WizardFormConfig {\n const pref = cfg.preferences;\n if (!pref?.stepId || !values) return cfg;\n const steps = cfg.steps.map((step) => {\n if (step.id !== pref.stepId || !step.form?.config?.fieldMetadata) return step;\n const fieldMetadata = step.form.config.fieldMetadata.map((meta) => {\n if (meta.name && Object.prototype.hasOwnProperty.call(values, meta.name)) {\n return { ...meta, defaultValue: values[meta.name] };\n }\n return meta;\n });\n return {\n ...step,\n form: {\n ...step.form,\n config: {\n ...step.form.config,\n fieldMetadata,\n },\n },\n };\n });\n return { ...cfg, steps };\n}\n","/*\n * Public API Surface of praxis-stepper\n */\n\nexport * from './lib/praxis-stepper';\nexport * from './lib/praxis-stepper.metadata';\nexport * from './lib/praxis-stepper-config-editor';\nexport * from './lib/wizard/ft-wizard-config';\nexport * from './lib/wizard/praxis-wizard-form.component';\nexport * from './lib/wizard/praxis-wizard-form.types';\nexport * from './lib/ai/stepper-ai-capabilities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i5","i6","i7","i1"],"mappings":"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"}
|