@praxisui/stepper 3.0.0-beta.7 → 3.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"praxisui-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 <div class=\"status-banner\" *ngIf=\"statusMessage as status\">\n <strong>{{ status.title }}</strong>\n <span>{{ status.body }}</span>\n </div>\n\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>Block ID legado (avançado)</mat-label>\n <input matInput [(ngModel)]=\"model.blockId\" placeholder=\"Ex.: ft-edit-wizard:access:block:hero\" />\n <mat-hint>Identificador operacional legado do wizard para telemetria/E2E e compatibilidade com editor/adapter. No modelo convergido, instanceId será a convenção editorial preferencial.</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 .status-banner {\n display: grid;\n gap: 4px;\n padding: 10px 12px;\n border-radius: 10px;\n border: 1px solid var(--md-sys-color-outline-variant);\n background: var(--md-sys-color-surface-container-low);\n color: var(--md-sys-color-on-surface-variant);\n font-size: 12px;\n }\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 get statusMessage(): { title: string; body: string } | null {\n switch (this.wizardWidgetId) {\n case 'praxis-wizard-content':\n return {\n title: 'Legado em deprecação',\n body: 'Este bloco continua suportado para compatibilidade, mas novo authoring deve preferir widget:rich-text-block. O shape atual do wizard segue válido neste ciclo.',\n };\n case 'praxis-wizard-inline-notice':\n return {\n title: 'Semântica em aberto',\n body: 'Este bloco permanece ativo no wizard até a definição final entre legal-notice e um eventual info-callout compartilhado.',\n };\n case 'praxis-wizard-benefits':\n return {\n title: 'Mantido temporariamente',\n body: 'Ainda não existe equivalente canônico compartilhado para este grid no backlog editorial atual.',\n };\n case 'praxis-wizard-divider':\n return {\n title: 'Mantido temporariamente',\n body: 'Este divisor continua como bloco legado do wizard enquanto não houver equivalente compartilhado priorizado.',\n };\n default:\n return null;\n }\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 { ChangeDetectorRef, 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 { 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 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=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">Fundamentos</div>\n <div class=\"editor-title\">Defina o comportamento base do stepper</div>\n <div class=\"editor-subtitle\">Ajuste orientação, densidade, animação e classes utilitárias sem misturar decisões estruturais com customização avançada.</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">Layout e navegação</div>\n <div class=\"section-subtitle\">Controla como as etapas aparecem e como o usuário percorre o fluxo.</div>\n </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 </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 </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 </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 </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 </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Etapa inicial</mat-label>\n <input matInput type=\"number\" [(ngModel)]=\"config.selectedIndex\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n </div>\n <div class=\"toggle-group\">\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 <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">Classes e integração visual</span>\n <span class=\"section-subtitle\">Use apenas quando precisar aplicar CSS escopado no host.</span>\n </summary>\n <div class=\"detail-grid disclosure-body\">\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>Classe do stepper</mat-label>\n <input matInput [(ngModel)]=\"config.stepperClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: meu-stepper\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe do cabeçalho</mat-label>\n <input matInput [(ngModel)]=\"config.headerClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-header\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Classe do conteúdo</mat-label>\n <input matInput [(ngModel)]=\"config.contentClass\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: stepper-content\" />\n </mat-form-field>\n </div>\n </details>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Etapas\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">Estrutura do fluxo</div>\n <div class=\"editor-title\">Defina a narrativa de cada etapa</div>\n <div class=\"editor-subtitle\">Organize títulos, estados e conteúdo da etapa sem misturar configuração técnica com ações de montagem.</div>\n </div>\n <div class=\"editor-intro-meta\">\n <div class=\"meta-pill\">\n <span class=\"meta-label\">Etapas</span>\n <strong>{{ config.steps.length }}</strong>\n </div>\n </div>\n </div>\n <div class=\"pdx-steps\">\n <div class=\"pdx-steps-header\">\n <div>\n <div class=\"section-title\">Mapa de etapas</div>\n <div class=\"section-subtitle\">Arraste para reordenar e selecione uma etapa para editar o conteúdo.</div>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"addStep()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>Adicionar etapa</button>\n </div>\n <div class=\"steps-workspace\" *ngIf=\"activeStep as step; else noSteps\">\n <div\n cdkDropList\n role=\"listbox\"\n aria-label=\"Lista de etapas\"\n (cdkDropListDropped)=\"drop($event)\"\n class=\"pdx-step-list\">\n <div\n class=\"pdx-step-item\"\n *ngFor=\"let s of config.steps; let i = index\"\n cdkDrag\n role=\"option\"\n [attr.aria-selected]=\"activeStep === s\"\n [attr.tabindex]=\"activeStep === s ? 0 : -1\"\n [class.active]=\"activeStep === s\"\n (click)=\"setActive(s)\"\n (keydown.enter)=\"onStepItemEnter($event, s)\"\n (keydown.space)=\"onStepItemSpace($event, s)\"\n (keydown.arrowdown)=\"focusAdjacentStep($event, i, 1)\"\n (keydown.arrowup)=\"focusAdjacentStep($event, i, -1)\">\n <div class=\"drag-handle\" cdkDragHandle><mat-icon [praxisIcon]=\"'drag_indicator'\"></mat-icon></div>\n <div class=\"step-summary\">\n <div class=\"step-summary-head\">\n <div class=\"step-summary-index\">Etapa {{ i + 1 }}</div>\n <div class=\"step-summary-title\">{{ s.label || 'Sem título' }}</div>\n </div>\n <div class=\"step-summary-sub\">{{ s.id || 'Sem identificador' }}</div>\n <div class=\"step-summary-flags\">\n <span class=\"summary-chip\" *ngIf=\"s.optional\">Opcional</span>\n <span class=\"summary-chip\" *ngIf=\"s.completed\">Concluída</span>\n <span class=\"summary-chip summary-chip-warn\" *ngIf=\"s.hasError\">Erro</span>\n <span class=\"summary-chip\" *ngIf=\"s.form\">Formulário</span>\n </div>\n </div>\n <div class=\"pdx-actions\">\n <button mat-icon-button color=\"warn\" (click)=\"removeStep(i); $event.stopPropagation()\" matTooltip=\"Remover\" [attr.aria-label]=\"'Remover etapa ' + (s.label || (i + 1))\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"pdx-active-step\">\n <div class=\"hdr\">\n <div class=\"active-step-head\">\n <div class=\"eyebrow\">Etapa selecionada</div>\n <div class=\"title\">Editando: {{ step.label }}</div>\n <div class=\"section-subtitle\">Ajuste conteúdo principal primeiro. Configurações secundárias ficam recolhidas para reduzir ruído.</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">Dados principais</div>\n <div class=\"detail-grid\">\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>Título da etapa</mat-label>\n <input matInput [(ngModel)]=\"step.label\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Identificador</mat-label>\n <input matInput [(ngModel)]=\"step.id\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone ou estado</mat-label>\n <input matInput [(ngModel)]=\"step.state\" (ngModelChange)=\"markDirty()\" placeholder=\"Ex.: number, done, edit\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>Mensagem de erro</mat-label>\n <input matInput [(ngModel)]=\"step.errorMessage\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n </div>\n <div class=\"toggle-group\">\n <mat-slide-toggle [(ngModel)]=\"step.optional\" (ngModelChange)=\"markDirty()\">Etapa opcional</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.editable\" (ngModelChange)=\"markDirty()\">Permitir voltar e editar</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.completed\" (ngModelChange)=\"markDirty()\">Marcar como concluída</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.hasError\" (ngModelChange)=\"markDirty()\">Marcar como com erro</mat-slide-toggle>\n </div>\n </div>\n\n <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">Acessibilidade e detalhes técnicos</span>\n <span class=\"section-subtitle\">Rótulos auxiliares e metadados menos usados.</span>\n </summary>\n <div class=\"detail-grid disclosure-body\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto alternativo</mat-label>\n <input matInput [(ngModel)]=\"step.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>ID que descreve</mat-label>\n <input matInput [(ngModel)]=\"step.ariaLabelledby\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n </div>\n </details>\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\">Use blocos de apoio para contextualizar a etapa antes ou depois do formulário.</div>\n </div>\n </div>\n\n <div class=\"zone-grid\">\n <div class=\"zone-column\">\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\">{{ editorialWidgetStatus(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-icon-button (click)=\"editWidget(w)\" matTooltip=\"Editar bloco\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"moveEditorialWidget(w, 'before', 'after')\" matTooltip=\"Mover para depois do formulário\">\n <mat-icon [praxisIcon]=\"'south'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicateEditorialWidget(w, 'before')\" matTooltip=\"Duplicar bloco\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'before')\" matTooltip=\"Remover bloco\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\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-column\">\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\">{{ editorialWidgetStatus(w) }}</div>\n <div class=\"meta\" *ngIf=\"widgetBlockId(w) as blockId\">ID: {{ blockId }}</div>\n </div>\n <div class=\"actions\">\n <button mat-icon-button (click)=\"editWidget(w)\" matTooltip=\"Editar bloco\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"moveEditorialWidget(w, 'after', 'before')\" matTooltip=\"Mover para antes do formulário\">\n <mat-icon [praxisIcon]=\"'north'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicateEditorialWidget(w, 'after')\" matTooltip=\"Duplicar bloco\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'after')\" matTooltip=\"Remover bloco\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\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 <div class=\"form-row-card\">\n <div class=\"form-row-main\">\n <mat-icon [praxisIcon]=\"'dynamic_form'\"></mat-icon>\n <div>\n <div class=\"name\">Formulário principal</div>\n <div class=\"sub\">{{ step.form.formId || step.id || '—' }}</div>\n </div>\n </div>\n <div class=\"form-row-actions\">\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 </div>\n </div>\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\">Atalhos para montar experiências mais ricas sem perder clareza no fluxo.</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-row-item\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'account_tree'\"></mat-icon>\n <div>\n <div class=\"cta-title\">Lista em árvore</div>\n <div class=\"cta-desc\">Dados hierárquicos com seleção simples.</div>\n </div>\n </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-row-item\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'swap_horiz'\"></mat-icon>\n <div>\n <div class=\"cta-title\">Transferência de itens</div>\n <div class=\"cta-desc\">Mover itens entre listas para seleção múltipla.</div>\n </div>\n </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-row-item\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'search'\"></mat-icon>\n <div>\n <div class=\"cta-title\">Seleção com busca</div>\n <div class=\"cta-desc\">Seleção com busca local ou remota.</div>\n </div>\n </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-row-item\">\n <div class=\"cta-head\">\n <mat-icon [praxisIcon]=\"'upload_file'\"></mat-icon>\n <div>\n <div class=\"cta-title\">Upload de arquivos</div>\n <div class=\"cta-desc\">Anexos com validação e fluxo de upload.</div>\n </div>\n </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-icon-button (click)=\"editWidget(w)\" [disabled]=\"!canEditWidget(w)\" matTooltip=\"Editar componente\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeAdvancedWidget(w)\" matTooltip=\"Remover componente\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\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\t </div>\n\t </div>\n\t\t </div>\n\t\t </div>\n\t\t <ng-template #noSteps>\n\t <div class=\"muted\">Nenhuma etapa definida.</div>\n\t </ng-template>\n\t </div>\n </mat-tab>\n\n <mat-tab label=\"Navegação\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">Ações padrão</div>\n <div class=\"editor-title\">Configure a navegação entre etapas</div>\n <div class=\"editor-subtitle\">Defina quando os botões padrão aparecem e como eles se apresentam visualmente no fluxo.</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">Comportamento dos botões</div>\n <div class=\"section-subtitle\">Aparência e alinhamento da navegação padrão do stepper.</div>\n </div>\n <div class=\"toggle-group\">\n <mat-slide-toggle [(ngModel)]=\"navigationCfg.visible\" (ngModelChange)=\"markDirty()\">Mostrar navegação padrão</mat-slide-toggle>\n </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()\" [disabled]=\"!navigationCfg.visible\">\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()\" [disabled]=\"!navigationCfg.visible\">\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()\" [disabled]=\"!navigationCfg.visible\">\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 </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">Rótulos e ícones</div>\n <div class=\"section-subtitle\">Ajuste a cópia e os ícones usados nas ações de voltar e avançar.</div>\n </div>\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\" [disabled]=\"!navigationCfg.visible\" />\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\" [disabled]=\"!navigationCfg.visible\" />\n </mat-form-field>\n </div>\n <div class=\"inline-actions-grid\">\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone de Voltar</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('prevIcon')\" [disabled]=\"!navigationCfg.visible\" aria-label=\"Escolher ícone do botão Voltar\">\n <mat-icon *ngIf=\"navigationCfg.prevIcon\" [fontIcon]=\"navigationCfg.prevIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.prevIcon\">Escolher</ng-container>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone de Próximo</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('nextIcon')\" [disabled]=\"!navigationCfg.visible\" aria-label=\"Escolher ícone do botão Próximo\">\n <mat-icon *ngIf=\"navigationCfg.nextIcon\" [fontIcon]=\"navigationCfg.nextIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.nextIcon\">Escolher</ng-container>\n </button>\n </div>\n </div>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Aparência\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">Tema visual</div>\n <div class=\"editor-title\">Personalize aparência sem perder consistência</div>\n <div class=\"editor-subtitle\">Comece pelos ajustes rápidos. Tokens e snippet SCSS ficam recolhidos para cenários avançados.</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">Ajustes rápidos</div>\n <div class=\"section-subtitle\">Controles mais comuns para tamanho, peso tipográfico e tema.</div>\n </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 </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 </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 <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>Classe de tema</mat-label>\n <input matInput [(ngModel)]=\"appearance.themeClass\" (ngModelChange)=\"onAppearanceChange()\" placeholder=\"Ex.: theme-stepper-custom\" />\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 </mat-form-field>\n </div>\n <div class=\"inline-actions-grid icon-picker-grid\">\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone do número</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('number')\" aria-label=\"Escolher ícone do número\">\n <mat-icon *ngIf=\"icons.number; else pick\" [fontIcon]=\"icons.number\"></mat-icon>\n <ng-template #pick>Escolher</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone concluído</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('done')\" aria-label=\"Escolher ícone de concluído\">\n <mat-icon *ngIf=\"icons.done; else pick2\" [fontIcon]=\"icons.done\"></mat-icon>\n <ng-template #pick2>Escolher</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone edição</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('edit')\" aria-label=\"Escolher ícone de edição\">\n <mat-icon *ngIf=\"icons.edit; else pick3\" [fontIcon]=\"icons.edit\"></mat-icon>\n <ng-template #pick3>Escolher</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">Ícone de erro</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('error')\" aria-label=\"Escolher ícone de erro\">\n <mat-icon *ngIf=\"icons.error; else pick4\" [fontIcon]=\"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=\"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 </div>\n <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">Tokens avançados e snippet SCSS</span>\n <span class=\"section-subtitle\">Use quando precisar sair do ajuste rápido e controlar o tema com granularidade.</span>\n </summary>\n <div class=\"disclosure-body\">\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=\"code-card\">\n <div class=\"code-head\">Snippet SCSS</div>\n <pre class=\"code\"><code>{{ scssSnippet() }}</code></pre>\n </div>\n </div>\n </details>\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: 16px;\n display: grid;\n gap: 16px;\n background: var(--md-sys-color-surface);\n border: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 78%, transparent);\n border-radius: 16px;\n }\n .help { color: var(--md-sys-color-on-surface-variant); font-size: 13px; }\n .editor-intro {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n align-items: flex-start;\n padding: 4px 2px 2px;\n }\n .editor-intro-copy { display: grid; gap: 6px; max-width: 760px; }\n .eyebrow {\n font-size: 11px;\n letter-spacing: .08em;\n text-transform: uppercase;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 600;\n }\n .editor-title {\n font-size: 22px;\n line-height: 1.15;\n font-weight: 650;\n color: var(--md-sys-color-on-surface);\n }\n .editor-subtitle {\n max-width: 72ch;\n color: var(--md-sys-color-on-surface-variant);\n line-height: 1.45;\n font-size: 14px;\n }\n .editor-intro-meta { display: flex; gap: 8px; align-items: flex-start; }\n .meta-pill {\n display: grid;\n gap: 2px;\n min-width: 88px;\n padding: 10px 12px;\n border-radius: 14px;\n border: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 70%, transparent);\n background: var(--md-sys-color-surface-container-low);\n }\n .meta-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .06em;\n color: var(--md-sys-color-on-surface-variant);\n }\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 .settings-group {\n display: grid;\n gap: 14px;\n padding: 2px 0 4px;\n }\n .settings-group + .settings-group,\n .settings-group + .disclosure,\n .disclosure + .settings-group {\n padding-top: 18px;\n border-top: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);\n }\n .group-head {\n display: grid;\n gap: 4px;\n max-width: 72ch;\n }\n .inline-actions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n align-items: start;\n }\n .inline-action-item {\n display: grid;\n gap: 8px;\n align-content: start;\n min-width: 0;\n }\n .pdx-steps {\n display: grid;\n gap: 12px;\n padding: 4px 0 2px;\n }\n .steps-workspace {\n display: grid;\n grid-template-columns: minmax(260px, 320px) minmax(0, 1fr);\n gap: 24px;\n align-items: start;\n }\n .pdx-steps-header { display:flex; justify-content: space-between; align-items: center; gap: 16px; }\n .pdx-step-list { display: grid; gap: 10px; }\n .pdx-step-item {\n display:grid;\n grid-template-columns: 20px 1fr auto;\n gap: 10px;\n align-items: start;\n padding: 12px;\n border: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 68%, transparent);\n border-radius: 14px;\n background: var(--md-sys-color-surface);\n cursor: pointer;\n outline: none;\n }\n .pdx-step-item.active {\n border-color: color-mix(in srgb, var(--md-sys-color-primary) 55%, var(--md-sys-color-outline-variant));\n background: color-mix(in srgb, var(--md-sys-color-primary-container) 26%, var(--md-sys-color-surface));\n box-shadow: none;\n }\n .pdx-step-item:focus-visible {\n border-color: var(--md-sys-color-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent);\n }\n .drag-handle { display:flex; align-items:center; color: var(--md-sys-color-on-surface-variant); }\n .step-summary { display: grid; gap: 8px; min-width: 0; }\n .step-summary-head { display: grid; gap: 2px; }\n .step-summary-index {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: .06em;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 600;\n }\n .step-summary-title {\n font-size: 15px;\n line-height: 1.3;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n }\n .step-summary-sub {\n font-size: 12px;\n color: var(--md-sys-color-on-surface-variant);\n font-family: var(--md-ref-typeface-plain, monospace);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .step-summary-flags { display: flex; gap: 6px; flex-wrap: wrap; }\n .summary-chip {\n display: inline-flex;\n align-items: center;\n min-height: 22px;\n padding: 0 8px;\n border-radius: 999px;\n background: var(--md-sys-color-surface-container-high);\n color: var(--md-sys-color-on-surface-variant);\n font-size: 11px;\n font-weight: 600;\n }\n .summary-chip-warn {\n background: color-mix(in srgb, var(--md-sys-color-error-container) 60%, transparent);\n color: var(--md-sys-color-on-error-container);\n }\n .pdx-active-step {\n display: grid;\n gap: 18px;\n min-width: 0;\n }\n .pdx-active-step .hdr { display:flex; gap: 12px; align-items: flex-start; justify-content: space-between; }\n .active-step-head { display: grid; gap: 4px; }\n .pdx-content-editor { display: grid; gap: 16px; }\n .section {\n display: grid;\n gap: 12px;\n padding: 0;\n border: none;\n border-radius: 0;\n background: transparent;\n }\n .section-body { display: grid; gap: 12px; }\n .section-title { font-weight: 600; font-size: 15px; color: var(--md-sys-color-on-surface); }\n .section-subtitle { font-size: 13px; color: var(--md-sys-color-on-surface-variant); line-height: 1.45; }\n .section-head { display: flex; gap: 12px; align-items: center; justify-content: space-between; flex-wrap: wrap; }\n .editorial-section {\n padding-bottom: 6px;\n border-bottom: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 68%, transparent);\n }\n .detail-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n }\n .field-span-2 { grid-column: span 2; }\n .toggle-group {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n padding-top: 4px;\n }\n .disclosure {\n padding: 0 0 12px;\n border-bottom: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 62%, transparent);\n }\n .disclosure summary {\n list-style: none;\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 16px;\n cursor: pointer;\n padding: 0;\n position: relative;\n }\n .disclosure summary::-webkit-details-marker { display: none; }\n .disclosure summary::after {\n content: 'expand_more';\n font-family: 'Material Icons';\n font-size: 18px;\n color: var(--md-sys-color-on-surface-variant);\n transition: transform 160ms ease;\n }\n .disclosure[open] summary::after { transform: rotate(180deg); }\n .disclosure summary:focus-visible {\n outline: 2px solid color-mix(in srgb, var(--md-sys-color-primary) 58%, transparent);\n outline-offset: 4px;\n border-radius: 8px;\n }\n .disclosure-body { padding-top: 12px; }\n .widget-list { display: grid; gap: 8px; }\n .widget-item {\n display:grid;\n grid-template-columns: 20px 1fr auto;\n align-items: start;\n gap: 12px;\n padding: 10px 0;\n border: none;\n border-radius: 0;\n background: transparent;\n border-bottom: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 56%, transparent);\n }\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); line-height: 1.45; }\n .widget-item .info .meta {\n margin-top: 2px;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant);\n font-family: var(--md-ref-typeface-plain, monospace);\n opacity: .85;\n }\n .widget-item .actions {\n display:flex;\n gap: 2px;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: flex-start;\n opacity: .92;\n }\n .editorial-item { align-items: start; }\n .editorial-item .actions { justify-content: flex-end; }\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(220px,1fr)); gap: 8px; margin-bottom: 4px; }\n .cta-row-item {\n display: grid;\n gap: 10px;\n padding: 12px 0;\n border-bottom: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 56%, transparent);\n }\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-column {\n display: grid;\n gap: 10px;\n min-width: 0;\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-column + .zone-column {\n padding-left: 16px;\n border-left: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 56%, transparent);\n }\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 .form-row-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 0;\n border-bottom: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 56%, transparent);\n }\n .form-row-main {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n .form-row-actions {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n justify-content: flex-end;\n }\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 .cta-row-item .cta-head { display: grid; grid-template-columns: 20px 1fr; align-items: start; gap: 10px; }\n .cta-row-item .cta-title { font-weight: 600; color: var(--md-sys-color-on-surface); }\n .cta-row-item .cta-desc { font-size: 12px; color: var(--md-sys-color-on-surface-variant); line-height: 1.45; margin-top: 2px; }\n .cta-row-item .cta-actions { display: flex; gap: 8px; align-items: center; }\n .widget-item:last-child,\n .cta-row-item:last-child,\n .form-row-card:last-child { border-bottom: none; }\n\n @media (max-width: 900px) {\n .editor-intro { flex-direction: column; }\n .steps-workspace {\n grid-template-columns: 1fr;\n gap: 20px;\n }\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-end; }\n .form-row-card { flex-direction: column; align-items: flex-start; }\n .form-row-actions { justify-content: flex-start; }\n .zone-column + .zone-column {\n padding-left: 0;\n border-left: none;\n padding-top: 12px;\n border-top: 1px solid color-mix(in srgb, var(--md-sys-color-outline-variant) 56%, transparent);\n }\n }\n\n @media (max-width: 640px) {\n .tab-pad { padding: 14px; }\n .editor-title { font-size: 20px; }\n .pdx-active-step .hdr { align-items: flex-start; flex-direction: column; }\n .detail-grid { grid-template-columns: 1fr; }\n .field-span-2 { grid-column: auto; }\n .toggle-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 .widget-item .actions { justify-content: flex-start; }\n .disclosure summary { flex-direction: column; align-items: flex-start; }\n }\n `,\n ],\n})\nexport class PraxisStepperConfigEditor implements SettingsValueProvider {\n config: StepperMetadata = { steps: [], orientation: 'horizontal', headerPosition: 'top', linear: false };\n activeStepRef: StepConfig | null = null;\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 private readonly cdr = inject(ChangeDetectorRef);\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 this.ensureActiveStep();\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.ensureActiveStep();\n this.markDirty();\n }\n setActive(step: StepConfig): void {\n if (this.activeStepRef === step) return;\n this.commitFocusedFieldBeforeSwitch();\n this.activeStepRef = null;\n this.cdr.detectChanges();\n queueMicrotask(() => {\n this.activeStepRef = step;\n this.cdr.markForCheck();\n });\n }\n onStepItemEnter(event: Event, step: StepConfig): void {\n event.preventDefault();\n this.setActive(step);\n }\n onStepItemSpace(event: Event, step: StepConfig): void {\n event.preventDefault();\n this.setActive(step);\n }\n focusAdjacentStep(event: Event, index: number, delta: number): void {\n event.preventDefault();\n const nextIndex = Math.max(0, Math.min(index + delta, this.config.steps.length - 1));\n const nextStep = this.config.steps[nextIndex];\n if (!nextStep) return;\n this.setActive(nextStep);\n queueMicrotask(() => {\n const currentItem = event.currentTarget as HTMLElement | null;\n const nextItem = currentItem?.parentElement?.children.item(nextIndex) as HTMLElement | null;\n nextItem?.focus();\n });\n }\n addStep(): void {\n const n = this.config.steps.length + 1;\n const step = { id: `step${n}`, label: `Passo ${n}` } as StepConfig;\n this.config.steps.push(step);\n this.activeStepRef = step;\n this.markDirty();\n }\n removeStep(idx: number): void {\n const removed = this.config.steps[idx];\n this.config.steps.splice(idx, 1);\n if (removed && this.activeStepRef === removed) {\n this.activeStepRef = this.config.steps[idx] || this.config.steps[idx - 1] || null;\n }\n this.ensureActiveStep();\n this.markDirty();\n }\n\n // ------- Active step helpers -------\n get activeIndex(): number {\n this.ensureActiveStep();\n return this.activeStepRef ? this.config.steps.indexOf(this.activeStepRef) : -1;\n }\n get activeStep(): StepConfig | null {\n this.ensureActiveStep();\n return this.activeStepRef;\n }\n private ensureActiveStep(): void {\n if (this.activeStepRef && this.config.steps.includes(this.activeStepRef)) return;\n this.activeStepRef = this.config.steps[0] || null;\n }\n private commitFocusedFieldBeforeSwitch(): void {\n const activeElement = typeof document !== 'undefined' ? (document.activeElement as HTMLElement | null) : null;\n if (activeElement?.closest('.pdx-active-step')) {\n activeElement.blur();\n }\n }\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 editorialWidgetStatus(w: WidgetDefinition): string {\n switch (w.id) {\n case 'praxis-wizard-content':\n return 'Legado em deprecação: novo authoring deve preferir widget:rich-text-block. O bloco continua suportado por compatibilidade neste ciclo.';\n case 'praxis-wizard-inline-notice':\n return 'Mantido no ciclo atual: semântica final ainda em definição entre legal-notice e info-callout.';\n case 'praxis-wizard-benefits':\n return 'Mantido temporariamente: ainda sem equivalente canônico no backlog editorial.';\n case 'praxis-wizard-divider':\n return 'Mantido temporariamente: separador legado sem equivalente compartilhado priorizado.';\n default:\n return 'Widget editorial do wizard.';\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.config.editorialContext', category: 'steps', valueKind: 'object', description: 'Contexto editorial compartilhado entre blocos hospedados pelo Dynamic Form da etapa.' },\n { path: 'steps[].form.config.formBlocksBefore', category: 'steps', valueKind: 'array', description: 'Blocos editoriais hospedados antes do formulario da etapa.' },\n { path: 'steps[].form.config.formBlocksBeforeActions', category: 'steps', valueKind: 'array', description: 'Blocos editoriais hospedados depois das seções e antes da área principal de ações do formulario da etapa.' },\n { path: 'steps[].form.config.formBlocksAfter', category: 'steps', valueKind: 'array', description: 'Blocos editoriais hospedados depois do formulario inteiro da etapa.' },\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.3',\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[].form.config tambem pode usar a surface editorial do dynamic-form: formBlocksBefore, formBlocksBeforeActions, formBlocksAfter e editorialContext.',\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=\"enableCustomization\">\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=\"enableCustomization\"\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.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 --mat-stepper-header-hover-state-layer-color: color-mix(\n in srgb,\n var(--md-sys-color-on-surface) 8%,\n transparent\n );\n --mat-stepper-header-focus-state-layer-color: transparent;\n --mat-stepper-header-hover-state-layer-shape: 14px;\n --mat-stepper-header-focus-state-layer-shape: 14px;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header {\n margin: 0;\n }\n ::ng-deep .pdx-stepper-ft-light .mat-step-header .mat-step-header-ripple {\n display: none;\n }\n ::ng-deep .ft-stepper {\n background: transparent;\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() enableCustomization = 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: 12px 16px;\n align-items: start;\n }\n .pwx-benefits-grid.is-boxed {\n padding: 12px 14px;\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 min-height: 0;\n }\n .pwx-benefit-icon {\n width: 24px;\n min-width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n color: var(--praxis-wizard-accent, var(--md-sys-color-primary));\n }\n .pwx-benefit-icon mat-icon {\n width: 24px;\n height: 24px;\n font-size: 24px;\n line-height: 24px;\n display: block;\n overflow: visible;\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, EDITORIAL_WIDGET_TAG } 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: 'enableCustomization', type: 'boolean', default: false, label: 'Modo de customização', description: 'Exibe controles de customizaçã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 editorial de benefícios com ícones/títulos/texto. Mantido temporariamente enquanto não há equivalente canônico compartilhado no backlog editorial.',\n icon: 'view_module',\n inputs: [\n { name: 'blockId', type: 'string', label: 'Block ID legado', description: 'Identificador operacional legado do wizard, usado hoje para telemetria/e2e e compatibilidade com editor/adapter.' },\n { name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador opcional da convenção editorial nova. Preferencial no modelo convergido, sem substituir automaticamente o blockId legado neste ciclo.' },\n { name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional para telemetria agregada do bloco editorial.' },\n { name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional para o bloco editorial.' },\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', EDITORIAL_WIDGET_TAG],\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 legado do wizard com título/subtítulo/texto. Está formalmente em deprecação para novo authoring e converge para widget:rich-text-block, mas continua suportado para leitura e edição de configurações existentes neste ciclo.',\n icon: 'article',\n inputs: [\n { name: 'blockId', type: 'string', label: 'Block ID legado', description: 'Identificador operacional legado do wizard, usado hoje para telemetria/e2e e compatibilidade com editor/adapter.' },\n { name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador opcional da convenção editorial nova. Preferencial no modelo convergido, sem substituir automaticamente o blockId legado neste ciclo.' },\n { name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional para telemetria agregada do bloco editorial.' },\n { name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional para o bloco editorial.' },\n { name: 'contentFormat', type: \"'plain' | 'markdown'\", label: 'Formato do conteúdo (futuro)', description: 'Input declared-only para convergência com a fundação editorial. Não altera o comportamento operacional atual do componente neste ciclo.' },\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', 'deprecated', EDITORIAL_WIDGET_TAG],\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: 'Bloco editorial inline para aviso curto em wizard. Mantido temporariamente até a semântica final convergir entre legal-notice e eventual info-callout compartilhado.',\n icon: 'info',\n inputs: [\n { name: 'blockId', type: 'string', label: 'Block ID legado', description: 'Identificador operacional legado do wizard, usado hoje para telemetria/e2e e compatibilidade com editor/adapter.' },\n { name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador opcional da convenção editorial nova. Preferencial no modelo convergido, sem substituir automaticamente o blockId legado neste ciclo.' },\n { name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional para telemetria agregada do bloco editorial.' },\n { name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional para o bloco editorial.' },\n { name: 'text', type: 'string', label: 'Texto' },\n { name: 'tone', type: \"'neutral' | 'info' | 'warning'\", label: 'Tom' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'notice', EDITORIAL_WIDGET_TAG],\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 editorial visual para fluxo. Mantido temporariamente enquanto não há equivalente compartilhado priorizado.',\n icon: 'horizontal_rule',\n inputs: [\n { name: 'blockId', type: 'string', label: 'Block ID legado', description: 'Identificador operacional legado do wizard, usado hoje para telemetria/e2e e compatibilidade com editor/adapter.' },\n { name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador opcional da convenção editorial nova. Preferencial no modelo convergido, sem substituir automaticamente o blockId legado neste ciclo.' },\n { name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional para telemetria agregada do bloco editorial.' },\n { name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional para o bloco editorial.' },\n { name: 'label', type: 'string', label: 'Rótulo' },\n ],\n outputs: [],\n tags: ['widget', 'wizard', 'divider', EDITORIAL_WIDGET_TAG],\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\": \"advanced-onboarding-wizard\",\n \"brand\": \"PRAXIS UI\",\n \"progress\": {\n \"variant\": \"line\",\n \"showLabels\": true,\n \"labelPosition\": \"bottom\"\n },\n \"cta\": {\n \"label\": \"Continuar\",\n \"action\": \"next\",\n \"secondaryLabel\": \"Voltar\",\n \"secondaryAction\": \"prev\",\n \"sticky\": true\n },\n \"preferences\": {\n \"stepId\": \"preferences\",\n \"storageKey\": \"praxis:advanced-wizard\",\n \"persistFields\": [\"novidadesProduto\", \"eventosConteudo\", \"recomendacoes\"]\n },\n \"theme\": {\n \"praxis-wizard-card-bg\": \"#fff7ef\",\n \"md-sys-color-surface\": \"#fff7ef\",\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\": \"Georgia, \\\\\\\"Times New Roman\\\\\\\", serif\",\n \"ft-font-body\": \"\\\\\\\"Source Sans 3\\\\\\\", \\\\\\\"Segoe UI\\\\\\\", 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\": \"Acesso\",\n \"title\": \"Crie sua conta\",\n \"subtitle\": \"Ative seu acesso em poucos passos e personalize a experiência desde o início.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"benefitsGrid\",\n \"title\": \"Por que se cadastrar?\",\n \"columns\": 4,\n \"boxed\": true,\n \"items\": [\n {\n \"icon\": \"format_quote\",\n \"title\": \"Conteúdo relevante\",\n \"text\": \"Receba atualizações, novidades e materiais selecionados para o seu perfil.\"\n },\n {\n \"icon\": \"edit_note\",\n \"title\": \"Fluxo guiado\",\n \"text\": \"Conclua o cadastro com uma jornada simples, clara e orientada por etapas.\"\n },\n {\n \"icon\": \"bookmarks\",\n \"title\": \"Preferências salvas\",\n \"text\": \"Defina suas escolhas iniciais e retome o processo sem perder o progresso.\"\n },\n {\n \"icon\": \"mail\",\n \"title\": \"Comunicação sob controle\",\n \"text\": \"Escolha como deseja receber novidades, alertas e recomendações.\"\n }\n ]\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Ao continuar, você concorda com os termos de uso e com a política de privacidade da plataforma.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Começar cadastro\",\n \"action\": \"next\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"access-section\",\n \"rows\": [\n {\n \"columns\": [\n {\n \"fields\": [\"confirmAge\", \"receberNovidades\"]\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\": \"Confirmo que li e aceito os termos de uso e a política de privacidade.\",\n \"value\": true\n }\n ]\n },\n {\n \"name\": \"receberNovidades\",\n \"label\": \"Receber novidades por e-mail\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Você pode alterar essa preferência a qualquer momento nas configurações da conta.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n },\n {\n \"id\": \"account\",\n \"label\": \"Conta\",\n \"title\": \"Configure seu acesso\",\n \"subtitle\": \"Esses dados serão usados para criar e proteger sua conta.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Use um e-mail válido para confirmar o cadastro e recuperar o acesso quando necessário.\",\n \"tone\": \"info\"\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Mensagens de segurança e comunicações operacionais continuam ativas mesmo se você desativar novidades.\"\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\": [\"aceitaComunicacoes\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"required\": true,\n \"placeholder\": \"Digite seu e-mail\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"required\": true,\n \"placeholder\": \"Crie uma senha\",\n \"hint\": \"Use 8 ou mais caracteres, combinando letras, números e símbolos.\",\n \"validators\": {\n \"minLength\": 8\n },\n \"revealToggle\": {\n \"enabled\": true,\n \"style\": \"icon\",\n \"showLabel\": \"Mostrar senha\",\n \"hideLabel\": \"Ocultar senha\",\n \"ariaLabel\": \"Alternar visibilidade da senha\",\n \"iconShow\": \"visibility\",\n \"iconHide\": \"visibility_off\"\n }\n },\n {\n \"name\": \"aceitaComunicacoes\",\n \"label\": \"Receber comunicações da plataforma\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Inclui novidades de produto, convites para eventos e conteúdos de apoio.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n },\n {\n \"id\": \"preferences\",\n \"label\": \"Preferências\",\n \"title\": \"Personalize sua experiência\",\n \"subtitle\": \"Você pode alterar essas configurações a qualquer momento no painel da conta.\",\n \"description\": \"Escolha quais comunicações e recomendações fazem sentido para o seu contexto.\",\n \"zones\": {\n \"footer\": [\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Alertas de segurança e mensagens essenciais sobre a conta permanecem ativos para garantir a operação.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Concluir cadastro\",\n \"action\": \"submit\",\n \"secondaryLabel\": \"Voltar\",\n \"secondaryAction\": \"prev\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"prefs-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"novidadesProduto\"] },\n { \"fields\": [\"eventosConteudo\"] },\n { \"fields\": [\"recomendacoes\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"novidadesProduto\",\n \"label\": \"Novidades de produto\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Receba lancamentos, melhorias e comunicados importantes sobre a plataforma.\"\n },\n {\n \"name\": \"eventosConteudo\",\n \"label\": \"Eventos e conteúdos especiais\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Seja avisado sobre webinars, materiais técnicos e convites para trilhas de capacitação.\"\n },\n {\n \"name\": \"recomendacoes\",\n \"label\": \"Recomendações personalizadas\",\n \"controlType\": \"toggle\",\n \"defaultValue\": false,\n \"hint\": \"Receba sugestões de recursos e exemplos com base nas suas preferências de uso.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n }\n ]\n}`;\n\nexport const FT_WIZARD_CONFIG = JSON.parse(FT_WIZARD_JSON) as WizardFormConfig;\n","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 disableRipple: true,\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: 'widget:rich-text-block',\n inputs: {\n instanceId: baseId,\n title: block.title,\n subtitle: block.subtitle,\n contentFormat: 'plain',\n content: joinContentParts(block.text, 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\nfunction joinContentParts(text?: string, caption?: string): string {\n const parts = [text, caption]\n .map((value) => (typeof value === 'string' ? value.trim() : ''))\n .filter(Boolean);\n return parts.join('\\n\\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 [enableCustomization]=\"enableCustomization\"\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() enableCustomization = 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() completed = this.submit;\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 || 'PRAXIS UI');\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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"}