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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5323,4 +5323,3 @@ function applyPreferenceDefaults(cfg, values) {
5323
5323
  */
5324
5324
 
5325
5325
  export { FT_WIZARD_CONFIG, FT_WIZARD_JSON, PRAXIS_STEPPER_COMPONENT_METADATA, PRAXIS_WIZARD_BENEFITS_METADATA, PRAXIS_WIZARD_CONTENT_METADATA, PRAXIS_WIZARD_DIVIDER_METADATA, PRAXIS_WIZARD_NOTICE_METADATA, PraxisStepper, PraxisStepperConfigEditor, PraxisWizardFormComponent, STEPPER_AI_CAPABILITIES, providePraxisStepperMetadata };
5326
- //# sourceMappingURL=praxisui-stepper.mjs.map
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@praxisui/stepper",
3
- "version": "3.0.0-beta.8",
3
+ "version": "3.0.0-beta.9",
4
4
  "description": "Stepper workflows for Praxis UI with integrated forms, lists, uploads and page builder support.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/material": "^20.0.0",
9
9
  "@angular/cdk": "^20.0.0",
10
- "@praxisui/core": "^3.0.0-beta.8",
11
- "@praxisui/dynamic-form": "^3.0.0-beta.8",
12
- "@praxisui/settings-panel": "^3.0.0-beta.8",
13
- "@praxisui/list": "^3.0.0-beta.8",
14
- "@praxisui/files-upload": "^3.0.0-beta.8",
15
- "@praxisui/page-builder": "^3.0.0-beta.8"
10
+ "@praxisui/core": "^3.0.0-beta.9",
11
+ "@praxisui/dynamic-form": "^3.0.0-beta.9",
12
+ "@praxisui/settings-panel": "^3.0.0-beta.9",
13
+ "@praxisui/list": "^3.0.0-beta.9",
14
+ "@praxisui/files-upload": "^3.0.0-beta.9",
15
+ "@praxisui/page-builder": "^3.0.0-beta.9"
16
16
  },
17
17
  "dependencies": {
18
18
  "tslib": "^2.3.0"
@@ -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/i18n/stepper.en.ts","../../../projects/praxis-stepper/src/lib/i18n/stepper.pt.ts","../../../projects/praxis-stepper/src/lib/i18n/stepper.i18n.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 type { PraxisI18nDictionary } from '@praxisui/core';\n\nexport const PRAXIS_STEPPER_EN_US: PraxisI18nDictionary = {\n 'praxis.stepper.editor.tabs.general': 'General',\n 'praxis.stepper.editor.tabs.steps': 'Steps',\n 'praxis.stepper.editor.general.eyebrow': 'Foundations',\n 'praxis.stepper.editor.general.title':\n 'Define the base stepper behavior',\n 'praxis.stepper.editor.general.subtitle':\n 'Adjust orientation, density, animation and utility classes without mixing structural decisions with advanced customization.',\n 'praxis.stepper.editor.general.layoutTitle': 'Layout and navigation',\n 'praxis.stepper.editor.general.layoutSubtitle':\n 'Controls how steps appear and how the user moves through the flow.',\n 'praxis.stepper.editor.general.orientation': 'Orientation',\n 'praxis.stepper.editor.general.orientation.horizontal': 'Horizontal',\n 'praxis.stepper.editor.general.orientation.vertical': 'Vertical',\n 'praxis.stepper.editor.general.headerPosition': 'Title position',\n 'praxis.stepper.editor.general.headerPosition.top': 'Above',\n 'praxis.stepper.editor.general.headerPosition.bottom': 'Below',\n 'praxis.stepper.editor.general.labelPosition': 'Label position',\n 'praxis.stepper.editor.general.labelPosition.end': 'Beside',\n 'praxis.stepper.editor.general.labelPosition.bottom': 'Below',\n 'praxis.stepper.editor.general.density': 'Density',\n 'praxis.stepper.editor.general.density.default': 'Default',\n 'praxis.stepper.editor.general.density.comfortable': 'Comfortable',\n 'praxis.stepper.editor.general.density.compact': 'Compact',\n 'praxis.stepper.editor.general.animationDuration':\n 'Animation duration',\n 'praxis.stepper.editor.general.animationPlaceholder': 'e.g.: 300ms',\n 'praxis.stepper.editor.general.initialStep': 'Initial step',\n 'praxis.stepper.editor.general.linear':\n 'Respect order (linear)',\n 'praxis.stepper.editor.general.disableRipple':\n 'Disable click effects',\n 'praxis.stepper.editor.general.visualTitle':\n 'Classes and visual integration',\n 'praxis.stepper.editor.general.visualSubtitle':\n 'Use only when you need to apply scoped CSS on the host.',\n 'praxis.stepper.editor.general.stepperClass': 'Stepper class',\n 'praxis.stepper.editor.general.stepperClassPlaceholder':\n 'e.g.: my-stepper',\n 'praxis.stepper.editor.general.headerClass': 'Header class',\n 'praxis.stepper.editor.general.headerClassPlaceholder':\n 'e.g.: stepper-header',\n 'praxis.stepper.editor.general.contentClass': 'Content class',\n 'praxis.stepper.editor.general.contentClassPlaceholder':\n 'e.g.: stepper-content',\n 'praxis.stepper.editor.steps.eyebrow': 'Flow structure',\n 'praxis.stepper.editor.steps.title':\n 'Define the narrative of each step',\n 'praxis.stepper.editor.steps.subtitle':\n 'Organize titles, states and step content without mixing technical configuration with assembly actions.',\n 'praxis.stepper.editor.steps.count': 'Steps',\n 'praxis.stepper.editor.steps.mapTitle': 'Step map',\n 'praxis.stepper.editor.steps.mapSubtitle':\n 'Drag to reorder and select a step to edit its content.',\n 'praxis.stepper.editor.steps.add': 'Add step',\n 'praxis.stepper.editor.steps.listAria': 'Step list',\n 'praxis.stepper.editor.steps.stepN': 'Step {{index}}',\n 'praxis.stepper.editor.steps.untitled': 'Untitled',\n 'praxis.stepper.editor.steps.noId': 'No identifier',\n 'praxis.stepper.editor.steps.optional': 'Optional',\n 'praxis.stepper.editor.steps.completed': 'Completed',\n 'praxis.stepper.editor.steps.error': 'Error',\n 'praxis.stepper.editor.steps.form': 'Form',\n 'praxis.stepper.editor.steps.remove': 'Remove',\n 'praxis.stepper.editor.steps.removeAria': 'Remove step {{label}}',\n 'praxis.stepper.editor.steps.selectedEyebrow': 'Selected step',\n 'praxis.stepper.editor.steps.editing': 'Editing: {{label}}',\n 'praxis.stepper.editor.steps.selectedSubtitle':\n 'Adjust the main content first. Secondary settings stay collapsed to reduce noise.',\n 'praxis.stepper.editor.steps.mainData': 'Main data',\n 'praxis.stepper.editor.steps.stepTitle': 'Step title',\n 'praxis.stepper.editor.steps.identifier': 'Identifier',\n 'praxis.stepper.editor.steps.iconOrState': 'Icon or state',\n 'praxis.stepper.editor.steps.iconOrStatePlaceholder':\n 'e.g.: number, done, edit',\n 'praxis.stepper.editor.steps.errorMessage': 'Error message',\n 'praxis.stepper.editor.steps.optionalToggle': 'Optional step',\n 'praxis.stepper.editor.steps.editableToggle':\n 'Allow going back and editing',\n 'praxis.stepper.editor.steps.completedToggle':\n 'Mark as completed',\n 'praxis.stepper.editor.steps.errorToggle': 'Mark as error',\n 'praxis.stepper.editor.steps.accessibilityTitle':\n 'Accessibility and technical details',\n 'praxis.stepper.editor.steps.accessibilitySubtitle':\n 'Auxiliary labels and less-used metadata.',\n 'praxis.stepper.editor.steps.altText': 'Alternative text',\n 'praxis.stepper.editor.steps.describedBy': 'Described-by ID',\n 'praxis.stepper.editor.steps.editorialTitle': 'Editorial content',\n 'praxis.stepper.editor.steps.editorialSubtitle':\n 'Use supporting blocks to contextualize the step before or after the form.',\n 'praxis.stepper.editor.steps.zoneBefore': 'Before form',\n 'praxis.stepper.editor.steps.zoneAfter': 'After form',\n 'praxis.stepper.editor.steps.addBlock': 'Add',\n 'praxis.stepper.editor.steps.widgetBenefits': 'Benefits grid',\n 'praxis.stepper.editor.steps.widgetContent': 'Content block',\n 'praxis.stepper.editor.steps.widgetNotice': 'Inline notice',\n 'praxis.stepper.editor.steps.widgetDivider': 'Divider',\n 'praxis.stepper.editor.steps.editBlock': 'Edit block',\n 'praxis.stepper.editor.steps.moveAfter': 'Move after the form',\n 'praxis.stepper.editor.steps.moveBefore': 'Move before the form',\n 'praxis.stepper.editor.steps.duplicateBlock': 'Duplicate block',\n 'praxis.stepper.editor.steps.removeBlock': 'Remove block',\n 'praxis.stepper.editor.steps.emptyZone': 'No blocks in this zone.',\n 'praxis.stepper.editor.steps.formSectionTitle': 'Step form',\n 'praxis.stepper.editor.steps.mainFormTitle': 'Main form',\n 'praxis.stepper.editor.steps.edit': 'Edit',\n 'praxis.stepper.editor.steps.addForm': 'Add form',\n 'praxis.stepper.editor.steps.advancedTitle': 'Advanced components',\n 'praxis.stepper.editor.steps.advancedSubtitle':\n 'Shortcuts to assemble richer experiences without losing clarity in the flow.',\n 'praxis.stepper.editor.steps.moreComponents': 'More components',\n 'praxis.stepper.editor.steps.treeListTitle': 'Tree list',\n 'praxis.stepper.editor.steps.treeListDesc':\n 'Hierarchical data with simple selection.',\n 'praxis.stepper.editor.steps.insertTree': 'Insert tree',\n 'praxis.stepper.editor.steps.transferTitle': 'Item transfer',\n 'praxis.stepper.editor.steps.transferDesc':\n 'Move items between lists for multi-selection.',\n 'praxis.stepper.editor.steps.insertTransfer': 'Insert transfer',\n 'praxis.stepper.editor.steps.searchTitle': 'Searchable selection',\n 'praxis.stepper.editor.steps.searchDesc':\n 'Selection with local or remote search.',\n 'praxis.stepper.editor.steps.insertSelector': 'Insert selector',\n 'praxis.stepper.editor.steps.uploadTitle': 'File upload',\n 'praxis.stepper.editor.steps.uploadDesc':\n 'Attachments with validation and upload flow.',\n 'praxis.stepper.editor.steps.insertUpload': 'Insert upload',\n 'praxis.stepper.editor.steps.editComponent': 'Edit component',\n 'praxis.stepper.editor.steps.removeComponent': 'Remove component',\n 'praxis.stepper.editor.steps.emptyAdvanced':\n 'No advanced components added.',\n 'praxis.stepper.editor.steps.noSteps': 'No steps defined.',\n 'praxis.stepper.editor.navigation.tab': 'Navigation',\n 'praxis.stepper.editor.navigation.eyebrow': 'Default actions',\n 'praxis.stepper.editor.navigation.title':\n 'Configure navigation between steps',\n 'praxis.stepper.editor.navigation.subtitle':\n 'Define when default buttons appear and how they present visually in the flow.',\n 'praxis.stepper.editor.navigation.behaviorTitle':\n 'Button behavior',\n 'praxis.stepper.editor.navigation.behaviorSubtitle':\n 'Appearance and alignment of the default stepper navigation.',\n 'praxis.stepper.editor.navigation.visible':\n 'Show default navigation',\n 'praxis.stepper.editor.navigation.variant': 'Button style',\n 'praxis.stepper.editor.navigation.variant.default':\n 'Default (raised)',\n 'praxis.stepper.editor.navigation.variant.basic': 'Text',\n 'praxis.stepper.editor.navigation.variant.flat': 'Flat',\n 'praxis.stepper.editor.navigation.variant.stroked': 'Stroked',\n 'praxis.stepper.editor.navigation.variant.raised': 'Raised',\n 'praxis.stepper.editor.navigation.color': 'Color',\n 'praxis.stepper.editor.navigation.color.default': 'Default',\n 'praxis.stepper.editor.navigation.color.primary': 'Primary',\n 'praxis.stepper.editor.navigation.color.accent': 'Accent',\n 'praxis.stepper.editor.navigation.color.warn': 'Warn',\n 'praxis.stepper.editor.navigation.align': 'Alignment',\n 'praxis.stepper.editor.navigation.align.default': 'Right',\n 'praxis.stepper.editor.navigation.align.start': 'Left',\n 'praxis.stepper.editor.navigation.align.center': 'Center',\n 'praxis.stepper.editor.navigation.align.spaceBetween': 'Spaced',\n 'praxis.stepper.editor.navigation.align.end': 'Right',\n 'praxis.stepper.editor.navigation.labelsTitle': 'Labels and icons',\n 'praxis.stepper.editor.navigation.labelsSubtitle':\n 'Adjust the copy and icons used in back and next actions.',\n 'praxis.stepper.editor.navigation.prevLabel': 'Back button text',\n 'praxis.stepper.editor.navigation.prevPlaceholder': 'e.g.: Back',\n 'praxis.stepper.editor.navigation.nextLabel': 'Next button text',\n 'praxis.stepper.editor.navigation.nextPlaceholder': 'e.g.: Next',\n 'praxis.stepper.editor.navigation.prevIcon': 'Back icon',\n 'praxis.stepper.editor.navigation.nextIcon': 'Next icon',\n 'praxis.stepper.editor.navigation.pickPrevIcon':\n 'Choose the Back button icon',\n 'praxis.stepper.editor.navigation.pickNextIcon':\n 'Choose the Next button icon',\n 'praxis.stepper.editor.shared.pick': 'Choose',\n 'praxis.stepper.editor.appearance.tab': 'Appearance',\n 'praxis.stepper.editor.appearance.eyebrow': 'Visual theme',\n 'praxis.stepper.editor.appearance.title':\n 'Customize appearance without losing consistency',\n 'praxis.stepper.editor.appearance.subtitle':\n 'Start with the quick adjustments. Tokens and the SCSS snippet stay collapsed for advanced scenarios.',\n 'praxis.stepper.editor.appearance.quickTitle': 'Quick adjustments',\n 'praxis.stepper.editor.appearance.quickSubtitle':\n 'Most common controls for sizing, typography weight and theme.',\n 'praxis.stepper.editor.appearance.headerHeight':\n 'Header height (px)',\n 'praxis.stepper.editor.appearance.headerHeightPlaceholder':\n 'e.g.: 48',\n 'praxis.stepper.editor.appearance.textSize': 'Text size (px)',\n 'praxis.stepper.editor.appearance.textSizePlaceholder':\n 'e.g.: 14',\n 'praxis.stepper.editor.appearance.textWeight': 'Text weight',\n 'praxis.stepper.editor.appearance.textWeight.default': 'Default',\n 'praxis.stepper.editor.appearance.textWeight.400': 'Normal',\n 'praxis.stepper.editor.appearance.textWeight.500': 'Medium',\n 'praxis.stepper.editor.appearance.textWeight.600': 'Semibold',\n 'praxis.stepper.editor.appearance.textWeight.700': 'Bold',\n 'praxis.stepper.editor.appearance.themeClass': 'Theme class',\n 'praxis.stepper.editor.appearance.themeClassPlaceholder':\n 'e.g.: theme-stepper-custom',\n 'praxis.stepper.editor.appearance.iconSet': 'Icon set',\n 'praxis.stepper.editor.appearance.iconSet.default':\n 'Material Icons (default)',\n 'praxis.stepper.editor.appearance.iconNumber': 'Number icon',\n 'praxis.stepper.editor.appearance.pickIconNumber':\n 'Choose the number icon',\n 'praxis.stepper.editor.appearance.iconDone': 'Completed icon',\n 'praxis.stepper.editor.appearance.pickIconDone':\n 'Choose the completed icon',\n 'praxis.stepper.editor.appearance.iconEdit': 'Edit icon',\n 'praxis.stepper.editor.appearance.pickIconEdit':\n 'Choose the edit icon',\n 'praxis.stepper.editor.appearance.iconError': 'Error icon',\n 'praxis.stepper.editor.appearance.pickIconError':\n 'Choose the error icon',\n 'praxis.stepper.editor.appearance.symbolsHint':\n 'Hint: {{icons}} are Material Symbols icons. Select a Symbols set below or click',\n 'praxis.stepper.editor.appearance.useSymbols':\n 'Use Material Symbols (Outlined)',\n 'praxis.stepper.editor.appearance.presetNeutral': 'Preset: neutral',\n 'praxis.stepper.editor.appearance.presetPrimary': 'Preset: primary',\n 'praxis.stepper.editor.appearance.presetHighContrast':\n 'Preset: high contrast',\n 'praxis.stepper.editor.appearance.clearTokens': 'Clear tokens',\n 'praxis.stepper.editor.appearance.advancedTitle':\n 'Advanced tokens and SCSS snippet',\n 'praxis.stepper.editor.appearance.advancedSubtitle':\n 'Use when you need to go beyond quick adjustments and control the theme with more granularity.',\n 'praxis.stepper.editor.appearance.tokenPlaceholder':\n 'CSS value or var(--token)',\n 'praxis.stepper.editor.appearance.scssSnippet': 'SCSS snippet',\n 'praxis.stepper.editor.dialog.configureStepForm':\n 'Configure Step Form',\n 'praxis.stepper.editor.dialog.configureListSelection':\n 'Configure List (selection)',\n 'praxis.stepper.editor.dialog.configureFilesUpload':\n 'Configure File Upload',\n 'praxis.stepper.editor.dialog.addComponentToStep':\n 'Add component to step',\n 'praxis.stepper.editor.dialog.configureTransfer':\n 'Configure Item Transfer',\n 'praxis.stepper.editor.defaults.newStep': 'New step',\n 'praxis.stepper.editor.defaults.selection': 'Selection',\n 'praxis.stepper.editor.defaults.items': 'Items',\n 'praxis.stepper.editor.defaults.newBenefit': 'New benefit',\n 'praxis.stepper.editor.widgets.listSelection': 'List (selection)',\n 'praxis.stepper.editor.widgets.searchableSelection':\n 'Searchable selection',\n 'praxis.stepper.editor.widgets.fileUpload': 'File upload',\n 'praxis.stepper.editor.widgets.form': 'Form',\n 'praxis.stepper.editor.widgets.benefits': 'Benefits grid',\n 'praxis.stepper.editor.widgets.content': 'Content block',\n 'praxis.stepper.editor.widgets.notice': 'Inline notice',\n 'praxis.stepper.editor.widgets.divider': 'Divider',\n 'praxis.stepper.editor.widgets.default': 'Widget',\n 'praxis.stepper.editor.summary.itemsColumns':\n '{{count}} item(s) • {{cols}} column(s)',\n 'praxis.stepper.editor.summary.noContent': 'No content',\n 'praxis.stepper.editor.summary.labelPrefix': 'Label: {{label}}',\n 'praxis.stepper.editor.summary.dividerNoLabel': 'Divider without label',\n 'praxis.stepper.editor.status.contentLegacy':\n 'Deprecated legacy: new authoring should prefer widget:rich-text-block. This block remains supported for compatibility in this cycle.',\n 'praxis.stepper.editor.status.noticeCurrent':\n 'Kept in the current cycle: final semantics are still being defined between legal-notice and info-callout.',\n 'praxis.stepper.editor.status.benefitsTemporary':\n 'Temporarily kept: still no canonical equivalent in the editorial backlog.',\n 'praxis.stepper.editor.status.dividerTemporary':\n 'Temporarily kept: legacy separator without a prioritized shared equivalent.',\n 'praxis.stepper.editor.status.editorialWidget':\n 'Wizard editorial widget.',\n 'praxis.stepper.editor.tone.info': 'Informational',\n 'praxis.stepper.editor.tone.warning': 'Warning',\n 'praxis.stepper.editor.tone.neutral': 'Neutral',\n};\n","import type { PraxisI18nDictionary } from '@praxisui/core';\n\nexport const PRAXIS_STEPPER_PT_BR: PraxisI18nDictionary = {\n 'praxis.stepper.editor.tabs.general': 'Geral',\n 'praxis.stepper.editor.tabs.steps': 'Etapas',\n 'praxis.stepper.editor.general.eyebrow': 'Fundamentos',\n 'praxis.stepper.editor.general.title':\n 'Defina o comportamento base do stepper',\n 'praxis.stepper.editor.general.subtitle':\n 'Ajuste orientacao, densidade, animacao e classes utilitarias sem misturar decisoes estruturais com customizacao avancada.',\n 'praxis.stepper.editor.general.layoutTitle': 'Layout e navegacao',\n 'praxis.stepper.editor.general.layoutSubtitle':\n 'Controla como as etapas aparecem e como o usuario percorre o fluxo.',\n 'praxis.stepper.editor.general.orientation': 'Orientacao',\n 'praxis.stepper.editor.general.orientation.horizontal': 'Horizontal',\n 'praxis.stepper.editor.general.orientation.vertical': 'Vertical',\n 'praxis.stepper.editor.general.headerPosition': 'Posicao dos titulos',\n 'praxis.stepper.editor.general.headerPosition.top': 'Acima',\n 'praxis.stepper.editor.general.headerPosition.bottom': 'Abaixo',\n 'praxis.stepper.editor.general.labelPosition': 'Posicao do rotulo',\n 'praxis.stepper.editor.general.labelPosition.end': 'Ao lado',\n 'praxis.stepper.editor.general.labelPosition.bottom': 'Abaixo',\n 'praxis.stepper.editor.general.density': 'Densidade',\n 'praxis.stepper.editor.general.density.default': 'Padrao',\n 'praxis.stepper.editor.general.density.comfortable': 'Confortavel',\n 'praxis.stepper.editor.general.density.compact': 'Compacta',\n 'praxis.stepper.editor.general.animationDuration':\n 'Duracao da animacao',\n 'praxis.stepper.editor.general.animationPlaceholder': 'Ex.: 300ms',\n 'praxis.stepper.editor.general.initialStep': 'Etapa inicial',\n 'praxis.stepper.editor.general.linear':\n 'Respeitar ordem (linear)',\n 'praxis.stepper.editor.general.disableRipple':\n 'Desativar efeitos de clique',\n 'praxis.stepper.editor.general.visualTitle':\n 'Classes e integracao visual',\n 'praxis.stepper.editor.general.visualSubtitle':\n 'Use apenas quando precisar aplicar CSS escopado no host.',\n 'praxis.stepper.editor.general.stepperClass': 'Classe do stepper',\n 'praxis.stepper.editor.general.stepperClassPlaceholder':\n 'Ex.: meu-stepper',\n 'praxis.stepper.editor.general.headerClass': 'Classe do cabecalho',\n 'praxis.stepper.editor.general.headerClassPlaceholder':\n 'Ex.: stepper-header',\n 'praxis.stepper.editor.general.contentClass': 'Classe do conteudo',\n 'praxis.stepper.editor.general.contentClassPlaceholder':\n 'Ex.: stepper-content',\n 'praxis.stepper.editor.steps.eyebrow': 'Estrutura do fluxo',\n 'praxis.stepper.editor.steps.title':\n 'Defina a narrativa de cada etapa',\n 'praxis.stepper.editor.steps.subtitle':\n 'Organize titulos, estados e conteudo da etapa sem misturar configuracao tecnica com acoes de montagem.',\n 'praxis.stepper.editor.steps.count': 'Etapas',\n 'praxis.stepper.editor.steps.mapTitle': 'Mapa de etapas',\n 'praxis.stepper.editor.steps.mapSubtitle':\n 'Arraste para reordenar e selecione uma etapa para editar o conteudo.',\n 'praxis.stepper.editor.steps.add': 'Adicionar etapa',\n 'praxis.stepper.editor.steps.listAria': 'Lista de etapas',\n 'praxis.stepper.editor.steps.stepN': 'Etapa {{index}}',\n 'praxis.stepper.editor.steps.untitled': 'Sem titulo',\n 'praxis.stepper.editor.steps.noId': 'Sem identificador',\n 'praxis.stepper.editor.steps.optional': 'Opcional',\n 'praxis.stepper.editor.steps.completed': 'Concluida',\n 'praxis.stepper.editor.steps.error': 'Erro',\n 'praxis.stepper.editor.steps.form': 'Formulario',\n 'praxis.stepper.editor.steps.remove': 'Remover',\n 'praxis.stepper.editor.steps.removeAria': 'Remover etapa {{label}}',\n 'praxis.stepper.editor.steps.selectedEyebrow': 'Etapa selecionada',\n 'praxis.stepper.editor.steps.editing': 'Editando: {{label}}',\n 'praxis.stepper.editor.steps.selectedSubtitle':\n 'Ajuste conteudo principal primeiro. Configuracoes secundarias ficam recolhidas para reduzir ruido.',\n 'praxis.stepper.editor.steps.mainData': 'Dados principais',\n 'praxis.stepper.editor.steps.stepTitle': 'Titulo da etapa',\n 'praxis.stepper.editor.steps.identifier': 'Identificador',\n 'praxis.stepper.editor.steps.iconOrState': 'Icone ou estado',\n 'praxis.stepper.editor.steps.iconOrStatePlaceholder':\n 'Ex.: number, done, edit',\n 'praxis.stepper.editor.steps.errorMessage': 'Mensagem de erro',\n 'praxis.stepper.editor.steps.optionalToggle': 'Etapa opcional',\n 'praxis.stepper.editor.steps.editableToggle':\n 'Permitir voltar e editar',\n 'praxis.stepper.editor.steps.completedToggle':\n 'Marcar como concluida',\n 'praxis.stepper.editor.steps.errorToggle': 'Marcar como com erro',\n 'praxis.stepper.editor.steps.accessibilityTitle':\n 'Acessibilidade e detalhes tecnicos',\n 'praxis.stepper.editor.steps.accessibilitySubtitle':\n 'Rotulos auxiliares e metadados menos usados.',\n 'praxis.stepper.editor.steps.altText': 'Texto alternativo',\n 'praxis.stepper.editor.steps.describedBy': 'ID que descreve',\n 'praxis.stepper.editor.steps.editorialTitle': 'Conteudo editorial',\n 'praxis.stepper.editor.steps.editorialSubtitle':\n 'Use blocos de apoio para contextualizar a etapa antes ou depois do formulario.',\n 'praxis.stepper.editor.steps.zoneBefore': 'Antes do formulario',\n 'praxis.stepper.editor.steps.zoneAfter': 'Depois do formulario',\n 'praxis.stepper.editor.steps.addBlock': 'Adicionar',\n 'praxis.stepper.editor.steps.widgetBenefits': 'Grade de beneficios',\n 'praxis.stepper.editor.steps.widgetContent': 'Bloco de conteudo',\n 'praxis.stepper.editor.steps.widgetNotice': 'Aviso inline',\n 'praxis.stepper.editor.steps.widgetDivider': 'Divisor',\n 'praxis.stepper.editor.steps.editBlock': 'Editar bloco',\n 'praxis.stepper.editor.steps.moveAfter':\n 'Mover para depois do formulario',\n 'praxis.stepper.editor.steps.moveBefore':\n 'Mover para antes do formulario',\n 'praxis.stepper.editor.steps.duplicateBlock': 'Duplicar bloco',\n 'praxis.stepper.editor.steps.removeBlock': 'Remover bloco',\n 'praxis.stepper.editor.steps.emptyZone': 'Nenhum bloco nesta zona.',\n 'praxis.stepper.editor.steps.formSectionTitle': 'Formulario da etapa',\n 'praxis.stepper.editor.steps.mainFormTitle': 'Formulario principal',\n 'praxis.stepper.editor.steps.edit': 'Editar',\n 'praxis.stepper.editor.steps.addForm': 'Adicionar formulario',\n 'praxis.stepper.editor.steps.advancedTitle': 'Componentes avancados',\n 'praxis.stepper.editor.steps.advancedSubtitle':\n 'Atalhos para montar experiencias mais ricas sem perder clareza no fluxo.',\n 'praxis.stepper.editor.steps.moreComponents': 'Mais componentes',\n 'praxis.stepper.editor.steps.treeListTitle': 'Lista em arvore',\n 'praxis.stepper.editor.steps.treeListDesc':\n 'Dados hierarquicos com selecao simples.',\n 'praxis.stepper.editor.steps.insertTree': 'Inserir arvore',\n 'praxis.stepper.editor.steps.transferTitle': 'Transferencia de itens',\n 'praxis.stepper.editor.steps.transferDesc':\n 'Mover itens entre listas para selecao multipla.',\n 'praxis.stepper.editor.steps.insertTransfer':\n 'Inserir transferencia',\n 'praxis.stepper.editor.steps.searchTitle': 'Selecao com busca',\n 'praxis.stepper.editor.steps.searchDesc':\n 'Selecao com busca local ou remota.',\n 'praxis.stepper.editor.steps.insertSelector': 'Inserir seletor',\n 'praxis.stepper.editor.steps.uploadTitle': 'Upload de arquivos',\n 'praxis.stepper.editor.steps.uploadDesc':\n 'Anexos com validacao e fluxo de upload.',\n 'praxis.stepper.editor.steps.insertUpload': 'Inserir upload',\n 'praxis.stepper.editor.steps.editComponent': 'Editar componente',\n 'praxis.stepper.editor.steps.removeComponent': 'Remover componente',\n 'praxis.stepper.editor.steps.emptyAdvanced':\n 'Nenhum componente avancado adicionado.',\n 'praxis.stepper.editor.steps.noSteps': 'Nenhuma etapa definida.',\n 'praxis.stepper.editor.navigation.tab': 'Navegacao',\n 'praxis.stepper.editor.navigation.eyebrow': 'Acoes padrao',\n 'praxis.stepper.editor.navigation.title':\n 'Configure a navegacao entre etapas',\n 'praxis.stepper.editor.navigation.subtitle':\n 'Defina quando os botoes padrao aparecem e como eles se apresentam visualmente no fluxo.',\n 'praxis.stepper.editor.navigation.behaviorTitle':\n 'Comportamento dos botoes',\n 'praxis.stepper.editor.navigation.behaviorSubtitle':\n 'Aparencia e alinhamento da navegacao padrao do stepper.',\n 'praxis.stepper.editor.navigation.visible':\n 'Mostrar navegacao padrao',\n 'praxis.stepper.editor.navigation.variant': 'Estilo dos botoes',\n 'praxis.stepper.editor.navigation.variant.default':\n 'Padrao (elevado)',\n 'praxis.stepper.editor.navigation.variant.basic': 'Texto',\n 'praxis.stepper.editor.navigation.variant.flat': 'Plano',\n 'praxis.stepper.editor.navigation.variant.stroked': 'Contornado',\n 'praxis.stepper.editor.navigation.variant.raised': 'Elevado',\n 'praxis.stepper.editor.navigation.color': 'Cor',\n 'praxis.stepper.editor.navigation.color.default': 'Padrao',\n 'praxis.stepper.editor.navigation.color.primary': 'Primaria',\n 'praxis.stepper.editor.navigation.color.accent': 'Acento',\n 'praxis.stepper.editor.navigation.color.warn': 'Alerta',\n 'praxis.stepper.editor.navigation.align': 'Alinhamento',\n 'praxis.stepper.editor.navigation.align.default': 'Direita',\n 'praxis.stepper.editor.navigation.align.start': 'Esquerda',\n 'praxis.stepper.editor.navigation.align.center': 'Centro',\n 'praxis.stepper.editor.navigation.align.spaceBetween': 'Espacado',\n 'praxis.stepper.editor.navigation.align.end': 'Direita',\n 'praxis.stepper.editor.navigation.labelsTitle': 'Rotulos e icones',\n 'praxis.stepper.editor.navigation.labelsSubtitle':\n 'Ajuste a copia e os icones usados nas acoes de voltar e avancar.',\n 'praxis.stepper.editor.navigation.prevLabel': 'Texto do botao Voltar',\n 'praxis.stepper.editor.navigation.prevPlaceholder': 'Ex.: Voltar',\n 'praxis.stepper.editor.navigation.nextLabel': 'Texto do botao Proximo',\n 'praxis.stepper.editor.navigation.nextPlaceholder': 'Ex.: Proximo',\n 'praxis.stepper.editor.navigation.prevIcon': 'Icone de Voltar',\n 'praxis.stepper.editor.navigation.nextIcon': 'Icone de Proximo',\n 'praxis.stepper.editor.navigation.pickPrevIcon':\n 'Escolher icone do botao Voltar',\n 'praxis.stepper.editor.navigation.pickNextIcon':\n 'Escolher icone do botao Proximo',\n 'praxis.stepper.editor.shared.pick': 'Escolher',\n 'praxis.stepper.editor.appearance.tab': 'Aparencia',\n 'praxis.stepper.editor.appearance.eyebrow': 'Tema visual',\n 'praxis.stepper.editor.appearance.title':\n 'Personalize a aparencia sem perder consistencia',\n 'praxis.stepper.editor.appearance.subtitle':\n 'Comece pelos ajustes rapidos. Tokens e snippet SCSS ficam recolhidos para cenarios avancados.',\n 'praxis.stepper.editor.appearance.quickTitle': 'Ajustes rapidos',\n 'praxis.stepper.editor.appearance.quickSubtitle':\n 'Controles mais comuns para tamanho, peso tipografico e tema.',\n 'praxis.stepper.editor.appearance.headerHeight':\n 'Altura do cabecalho (px)',\n 'praxis.stepper.editor.appearance.headerHeightPlaceholder':\n 'Ex.: 48',\n 'praxis.stepper.editor.appearance.textSize': 'Tamanho do texto (px)',\n 'praxis.stepper.editor.appearance.textSizePlaceholder':\n 'Ex.: 14',\n 'praxis.stepper.editor.appearance.textWeight': 'Peso do texto',\n 'praxis.stepper.editor.appearance.textWeight.default': 'Padrao',\n 'praxis.stepper.editor.appearance.textWeight.400': 'Normal',\n 'praxis.stepper.editor.appearance.textWeight.500': 'Medio',\n 'praxis.stepper.editor.appearance.textWeight.600': 'Seminegrito',\n 'praxis.stepper.editor.appearance.textWeight.700': 'Negrito',\n 'praxis.stepper.editor.appearance.themeClass': 'Classe de tema',\n 'praxis.stepper.editor.appearance.themeClassPlaceholder':\n 'Ex.: theme-stepper-custom',\n 'praxis.stepper.editor.appearance.iconSet': 'Conjunto de icones',\n 'praxis.stepper.editor.appearance.iconSet.default':\n 'Material Icons (padrao)',\n 'praxis.stepper.editor.appearance.iconNumber': 'Icone do numero',\n 'praxis.stepper.editor.appearance.pickIconNumber':\n 'Escolher icone do numero',\n 'praxis.stepper.editor.appearance.iconDone': 'Icone concluido',\n 'praxis.stepper.editor.appearance.pickIconDone':\n 'Escolher icone de concluido',\n 'praxis.stepper.editor.appearance.iconEdit': 'Icone de edicao',\n 'praxis.stepper.editor.appearance.pickIconEdit':\n 'Escolher icone de edicao',\n 'praxis.stepper.editor.appearance.iconError': 'Icone de erro',\n 'praxis.stepper.editor.appearance.pickIconError':\n 'Escolher icone de erro',\n 'praxis.stepper.editor.appearance.symbolsHint':\n 'Dica: {{icons}} sao icones do Material Symbols. Selecione um conjunto Symbols abaixo ou clique em',\n 'praxis.stepper.editor.appearance.useSymbols':\n 'Usar Material Symbols (Outlined)',\n 'praxis.stepper.editor.appearance.presetNeutral': 'Preset: neutro',\n 'praxis.stepper.editor.appearance.presetPrimary': 'Preset: primario',\n 'praxis.stepper.editor.appearance.presetHighContrast':\n 'Preset: alto contraste',\n 'praxis.stepper.editor.appearance.clearTokens': 'Limpar tokens',\n 'praxis.stepper.editor.appearance.advancedTitle':\n 'Tokens avancados e snippet SCSS',\n 'praxis.stepper.editor.appearance.advancedSubtitle':\n 'Use quando precisar sair do ajuste rapido e controlar o tema com granularidade.',\n 'praxis.stepper.editor.appearance.tokenPlaceholder':\n 'valor CSS ou var(--token)',\n 'praxis.stepper.editor.appearance.scssSnippet': 'Snippet SCSS',\n 'praxis.stepper.editor.dialog.configureStepForm':\n 'Configurar Formulario da Etapa',\n 'praxis.stepper.editor.dialog.configureListSelection':\n 'Configurar Lista (selecao)',\n 'praxis.stepper.editor.dialog.configureFilesUpload':\n 'Configurar Upload de Arquivos',\n 'praxis.stepper.editor.dialog.addComponentToStep':\n 'Adicionar componente a etapa',\n 'praxis.stepper.editor.dialog.configureTransfer':\n 'Configurar Transferencia de Itens',\n 'praxis.stepper.editor.defaults.newStep': 'Novo passo',\n 'praxis.stepper.editor.defaults.selection': 'Selecao',\n 'praxis.stepper.editor.defaults.items': 'Itens',\n 'praxis.stepper.editor.defaults.newBenefit': 'Novo beneficio',\n 'praxis.stepper.editor.widgets.listSelection': 'Lista (selecao)',\n 'praxis.stepper.editor.widgets.searchableSelection':\n 'Selecao com busca',\n 'praxis.stepper.editor.widgets.fileUpload': 'Upload de arquivos',\n 'praxis.stepper.editor.widgets.form': 'Formulario',\n 'praxis.stepper.editor.widgets.benefits': 'Grade de beneficios',\n 'praxis.stepper.editor.widgets.content': 'Bloco de conteudo',\n 'praxis.stepper.editor.widgets.notice': 'Aviso inline',\n 'praxis.stepper.editor.widgets.divider': 'Divisor',\n 'praxis.stepper.editor.widgets.default': 'Widget',\n 'praxis.stepper.editor.summary.itemsColumns':\n '{{count}} item(ns) • {{cols}} coluna(s)',\n 'praxis.stepper.editor.summary.noContent': 'Sem conteudo',\n 'praxis.stepper.editor.summary.labelPrefix': 'Rotulo: {{label}}',\n 'praxis.stepper.editor.summary.dividerNoLabel': 'Divisor sem rotulo',\n 'praxis.stepper.editor.status.contentLegacy':\n 'Legado em deprecacao: novo authoring deve preferir widget:rich-text-block. O bloco continua suportado por compatibilidade neste ciclo.',\n 'praxis.stepper.editor.status.noticeCurrent':\n 'Mantido no ciclo atual: semantica final ainda em definicao entre legal-notice e info-callout.',\n 'praxis.stepper.editor.status.benefitsTemporary':\n 'Mantido temporariamente: ainda sem equivalente canonico no backlog editorial.',\n 'praxis.stepper.editor.status.dividerTemporary':\n 'Mantido temporariamente: separador legado sem equivalente compartilhado priorizado.',\n 'praxis.stepper.editor.status.editorialWidget':\n 'Widget editorial do wizard.',\n 'praxis.stepper.editor.tone.info': 'Informativo',\n 'praxis.stepper.editor.tone.warning': 'Atencao',\n 'praxis.stepper.editor.tone.neutral': 'Neutro',\n};\n","import {\n PraxisI18nService,\n providePraxisI18n,\n type PraxisI18nConfig,\n type PraxisI18nDictionary,\n} from '@praxisui/core';\nimport { PRAXIS_STEPPER_EN_US } from './stepper.en';\nimport { PRAXIS_STEPPER_PT_BR } from './stepper.pt';\n\nexport interface PraxisStepperI18nOptions {\n locale?: string;\n fallbackLocale?: string;\n dictionaries?: Record<string, PraxisI18nDictionary>;\n}\n\nexport function createPraxisStepperI18nConfig(\n options: PraxisStepperI18nOptions = {},\n): Partial<PraxisI18nConfig> {\n const dictionaries: Record<string, PraxisI18nDictionary> = {\n 'pt-BR': {\n ...PRAXIS_STEPPER_PT_BR,\n ...(options.dictionaries?.['pt-BR'] ?? {}),\n },\n 'en-US': {\n ...PRAXIS_STEPPER_EN_US,\n ...(options.dictionaries?.['en-US'] ?? {}),\n },\n };\n\n for (const [locale, dictionary] of Object.entries(options.dictionaries ?? {})) {\n if (locale === 'pt-BR' || locale === 'en-US') continue;\n dictionaries[locale] = { ...(dictionaries[locale] ?? {}), ...dictionary };\n }\n\n return {\n locale: options.locale,\n fallbackLocale: options.fallbackLocale ?? 'pt-BR',\n dictionaries,\n };\n}\n\nexport function providePraxisStepperI18n(\n options: PraxisStepperI18nOptions = {},\n) {\n return providePraxisI18n(\n createPraxisStepperI18nConfig(options) as PraxisI18nConfig,\n );\n}\n\nexport function resolvePraxisStepperText(\n i18n: PraxisI18nService,\n key: string,\n fallback: string,\n): string {\n const namespacedKey = key.startsWith('praxis.stepper.')\n ? key\n : `praxis.stepper.${key}`;\n return i18n.t(namespacedKey, undefined, fallback) || fallback;\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, PraxisI18nService } 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';\nimport {\n providePraxisStepperI18n,\n resolvePraxisStepperText,\n} from './i18n/stepper.i18n';\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 providers: [providePraxisStepperI18n()],\n template: `\n <div class=\"pdx-editor\">\n <mat-tab-group>\n <mat-tab [label]=\"tx('editor.tabs.general', 'General')\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">{{ tx('editor.general.eyebrow', 'Foundations') }}</div>\n <div class=\"editor-title\">{{ tx('editor.general.title', 'Define the base stepper behavior') }}</div>\n <div class=\"editor-subtitle\">{{ tx('editor.general.subtitle', 'Adjust orientation, density, animation and utility classes without mixing structural decisions with advanced customization.') }}</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">{{ tx('editor.general.layoutTitle', 'Layout and navigation') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.general.layoutSubtitle', 'Controls how steps appear and how the user moves through the flow.') }}</div>\n </div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.orientation', 'Orientation') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"config.orientation\" (ngModelChange)=\"markDirty()\">\n <option value=\"horizontal\">{{ tx('editor.general.orientation.horizontal', 'Horizontal') }}</option>\n <option value=\"vertical\">{{ tx('editor.general.orientation.vertical', 'Vertical') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.headerPosition', 'Title position') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"config.headerPosition\" (ngModelChange)=\"markDirty()\">\n <option value=\"top\">{{ tx('editor.general.headerPosition.top', 'Above') }}</option>\n <option value=\"bottom\">{{ tx('editor.general.headerPosition.bottom', 'Below') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.labelPosition', 'Label position') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"config.labelPosition\" (ngModelChange)=\"markDirty()\" [disabled]=\"config.orientation !== 'horizontal'\">\n <option value=\"end\">{{ tx('editor.general.labelPosition.end', 'Beside') }}</option>\n <option value=\"bottom\">{{ tx('editor.general.labelPosition.bottom', 'Below') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.density', 'Density') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"config.density\" (ngModelChange)=\"markDirty()\">\n <option [ngValue]=\"undefined\">{{ tx('editor.general.density.default', 'Default') }}</option>\n <option value=\"comfortable\">{{ tx('editor.general.density.comfortable', 'Comfortable') }}</option>\n <option value=\"compact\">{{ tx('editor.general.density.compact', 'Compact') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.animationDuration', 'Animation duration') }}</mat-label>\n <input matInput [(ngModel)]=\"config.animationDuration\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.general.animationPlaceholder', 'e.g.: 300ms')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.initialStep', 'Initial step') }}</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()\">{{ tx('editor.general.linear', 'Respect order (linear)') }}</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"config.disableRipple\" (ngModelChange)=\"markDirty()\">{{ tx('editor.general.disableRipple', 'Disable click effects') }}</mat-slide-toggle>\n </div>\n </div>\n <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">{{ tx('editor.general.visualTitle', 'Classes and visual integration') }}</span>\n <span class=\"section-subtitle\">{{ tx('editor.general.visualSubtitle', 'Use only when you need to apply scoped CSS on the host.') }}</span>\n </summary>\n <div class=\"detail-grid disclosure-body\">\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>{{ tx('editor.general.stepperClass', 'Stepper class') }}</mat-label>\n <input matInput [(ngModel)]=\"config.stepperClass\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.general.stepperClassPlaceholder', 'e.g.: my-stepper')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.headerClass', 'Header class') }}</mat-label>\n <input matInput [(ngModel)]=\"config.headerClass\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.general.headerClassPlaceholder', 'e.g.: stepper-header')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.general.contentClass', 'Content class') }}</mat-label>\n <input matInput [(ngModel)]=\"config.contentClass\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.general.contentClassPlaceholder', 'e.g.: stepper-content')\" />\n </mat-form-field>\n </div>\n </details>\n </div>\n </mat-tab>\n\n <mat-tab [label]=\"tx('editor.tabs.steps', 'Steps')\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">{{ tx('editor.steps.eyebrow', 'Flow structure') }}</div>\n <div class=\"editor-title\">{{ tx('editor.steps.title', 'Define the narrative of each step') }}</div>\n <div class=\"editor-subtitle\">{{ tx('editor.steps.subtitle', 'Organize titles, states and step content without mixing technical configuration with assembly actions.') }}</div>\n </div>\n <div class=\"editor-intro-meta\">\n <div class=\"meta-pill\">\n <span class=\"meta-label\">{{ tx('editor.steps.count', 'Steps') }}</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\">{{ tx('editor.steps.mapTitle', 'Step map') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.steps.mapSubtitle', 'Drag to reorder and select a step to edit its content.') }}</div>\n </div>\n <button mat-flat-button color=\"primary\" (click)=\"addStep()\"><mat-icon [praxisIcon]=\"'add'\"></mat-icon>{{ tx('editor.steps.add', 'Add step') }}</button>\n </div>\n <div class=\"steps-workspace\" *ngIf=\"activeStep as step; else noSteps\">\n <div\n cdkDropList\n role=\"listbox\"\n [attr.aria-label]=\"tx('editor.steps.listAria', 'Step list')\"\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\">{{ stepIndexLabel(i) }}</div>\n <div class=\"step-summary-title\">{{ s.label || tx('editor.steps.untitled', 'Untitled') }}</div>\n </div>\n <div class=\"step-summary-sub\">{{ s.id || tx('editor.steps.noId', 'No identifier') }}</div>\n <div class=\"step-summary-flags\">\n <span class=\"summary-chip\" *ngIf=\"s.optional\">{{ tx('editor.steps.optional', 'Optional') }}</span>\n <span class=\"summary-chip\" *ngIf=\"s.completed\">{{ tx('editor.steps.completed', 'Completed') }}</span>\n <span class=\"summary-chip summary-chip-warn\" *ngIf=\"s.hasError\">{{ tx('editor.steps.error', 'Error') }}</span>\n <span class=\"summary-chip\" *ngIf=\"s.form\">{{ tx('editor.steps.form', 'Form') }}</span>\n </div>\n </div>\n <div class=\"pdx-actions\">\n <button mat-icon-button color=\"warn\" (click)=\"removeStep(i); $event.stopPropagation()\" [matTooltip]=\"tx('editor.steps.remove', 'Remove')\" [attr.aria-label]=\"stepRemoveAria(s, i)\">\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\">{{ tx('editor.steps.selectedEyebrow', 'Selected step') }}</div>\n <div class=\"title\">{{ editingStepTitle(step) }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.steps.selectedSubtitle', 'Adjust the main content first. Secondary settings stay collapsed to reduce noise.') }}</div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">{{ tx('editor.steps.mainData', 'Main data') }}</div>\n <div class=\"detail-grid\">\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>{{ tx('editor.steps.stepTitle', 'Step title') }}</mat-label>\n <input matInput [(ngModel)]=\"step.label\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.steps.identifier', 'Identifier') }}</mat-label>\n <input matInput [(ngModel)]=\"step.id\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.steps.iconOrState', 'Icon or state') }}</mat-label>\n <input matInput [(ngModel)]=\"step.state\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.steps.iconOrStatePlaceholder', 'e.g.: number, done, edit')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>{{ tx('editor.steps.errorMessage', 'Error message') }}</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()\">{{ tx('editor.steps.optionalToggle', 'Optional step') }}</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.editable\" (ngModelChange)=\"markDirty()\">{{ tx('editor.steps.editableToggle', 'Allow going back and editing') }}</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.completed\" (ngModelChange)=\"markDirty()\">{{ tx('editor.steps.completedToggle', 'Mark as completed') }}</mat-slide-toggle>\n <mat-slide-toggle [(ngModel)]=\"step.hasError\" (ngModelChange)=\"markDirty()\">{{ tx('editor.steps.errorToggle', 'Mark as error') }}</mat-slide-toggle>\n </div>\n </div>\n\n <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">{{ tx('editor.steps.accessibilityTitle', 'Accessibility and technical details') }}</span>\n <span class=\"section-subtitle\">{{ tx('editor.steps.accessibilitySubtitle', 'Auxiliary labels and less-used metadata.') }}</span>\n </summary>\n <div class=\"detail-grid disclosure-body\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.steps.altText', 'Alternative text') }}</mat-label>\n <input matInput [(ngModel)]=\"step.ariaLabel\" (ngModelChange)=\"markDirty()\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.steps.describedBy', 'Described-by ID') }}</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\">{{ tx('editor.steps.editorialTitle', 'Editorial content') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.steps.editorialSubtitle', 'Use supporting blocks to contextualize the step before or after the form.') }}</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\">{{ tx('editor.steps.zoneBefore', 'Before form') }}</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 {{ tx('editor.steps.addBlock', 'Add') }}\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 {{ tx('editor.steps.widgetBenefits', 'Benefits grid') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'before')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n {{ tx('editor.steps.widgetContent', 'Content block') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'before')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n {{ tx('editor.steps.widgetNotice', 'Inline notice') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'before')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n {{ tx('editor.steps.widgetDivider', 'Divider') }}\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]=\"tx('editor.steps.editBlock', 'Edit block')\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"moveEditorialWidget(w, 'before', 'after')\" [matTooltip]=\"tx('editor.steps.moveAfter', 'Move after the form')\">\n <mat-icon [praxisIcon]=\"'south'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicateEditorialWidget(w, 'before')\" [matTooltip]=\"tx('editor.steps.duplicateBlock', 'Duplicate block')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'before')\" [matTooltip]=\"tx('editor.steps.removeBlock', 'Remove block')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialBeforeWidgets(step).length\">{{ tx('editor.steps.emptyZone', 'No blocks in this zone.') }}</div>\n </div>\n </div>\n\n <div class=\"zone-column\">\n <div class=\"zone-head\">\n <div class=\"zone-title\">{{ tx('editor.steps.zoneAfter', 'After form') }}</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 {{ tx('editor.steps.addBlock', 'Add') }}\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 {{ tx('editor.steps.widgetBenefits', 'Benefits grid') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-content', 'after')\">\n <mat-icon [praxisIcon]=\"'article'\"></mat-icon>\n {{ tx('editor.steps.widgetContent', 'Content block') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-inline-notice', 'after')\">\n <mat-icon [praxisIcon]=\"'info'\"></mat-icon>\n {{ tx('editor.steps.widgetNotice', 'Inline notice') }}\n </button>\n <button mat-menu-item (click)=\"addEditorialWidget('praxis-wizard-divider', 'after')\">\n <mat-icon [praxisIcon]=\"'horizontal_rule'\"></mat-icon>\n {{ tx('editor.steps.widgetDivider', 'Divider') }}\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]=\"tx('editor.steps.editBlock', 'Edit block')\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"moveEditorialWidget(w, 'after', 'before')\" [matTooltip]=\"tx('editor.steps.moveBefore', 'Move before the form')\">\n <mat-icon [praxisIcon]=\"'north'\"></mat-icon>\n </button>\n <button mat-icon-button (click)=\"duplicateEditorialWidget(w, 'after')\" [matTooltip]=\"tx('editor.steps.duplicateBlock', 'Duplicate block')\">\n <mat-icon [praxisIcon]=\"'content_copy'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeEditorialWidget(w, 'after')\" [matTooltip]=\"tx('editor.steps.removeBlock', 'Remove block')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!editorialAfterWidgets(step).length\">{{ tx('editor.steps.emptyZone', 'No blocks in this zone.') }}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"section\">\n <div class=\"section-title\">{{ tx('editor.steps.formSectionTitle', 'Step form') }}</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\">{{ tx('editor.steps.mainFormTitle', 'Main form') }}</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>{{ tx('editor.steps.edit', 'Edit') }}</button>\n <button mat-button color=\"warn\" (click)=\"removeMainForm()\"><mat-icon [praxisIcon]=\"'delete'\"></mat-icon>{{ tx('editor.steps.remove', 'Remove') }}</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>{{ tx('editor.steps.addForm', 'Add form') }}</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\">{{ tx('editor.steps.advancedTitle', 'Advanced components') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.steps.advancedSubtitle', 'Shortcuts to assemble richer experiences without losing clarity in the flow.') }}</div>\n </div>\n <button mat-stroked-button (click)=\"openMoreComponents()\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n {{ tx('editor.steps.moreComponents', 'More components') }}\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\">{{ tx('editor.steps.treeListTitle', 'Tree list') }}</div>\n <div class=\"cta-desc\">{{ tx('editor.steps.treeListDesc', 'Hierarchical data with simple selection.') }}</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 {{ tx('editor.steps.insertTree', 'Insert tree') }}\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\">{{ tx('editor.steps.transferTitle', 'Item transfer') }}</div>\n <div class=\"cta-desc\">{{ tx('editor.steps.transferDesc', 'Move items between lists for multi-selection.') }}</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 {{ tx('editor.steps.insertTransfer', 'Insert transfer') }}\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\">{{ tx('editor.steps.searchTitle', 'Searchable selection') }}</div>\n <div class=\"cta-desc\">{{ tx('editor.steps.searchDesc', 'Selection with local or remote search.') }}</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 {{ tx('editor.steps.insertSelector', 'Insert selector') }}\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\">{{ tx('editor.steps.uploadTitle', 'File upload') }}</div>\n <div class=\"cta-desc\">{{ tx('editor.steps.uploadDesc', 'Attachments with validation and upload flow.') }}</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 {{ tx('editor.steps.insertUpload', 'Insert 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]=\"tx('editor.steps.editComponent', 'Edit component')\">\n <mat-icon [praxisIcon]=\"'tune'\"></mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"removeAdvancedWidget(w)\" [matTooltip]=\"tx('editor.steps.removeComponent', 'Remove component')\">\n <mat-icon [praxisIcon]=\"'delete'\"></mat-icon>\n </button>\n </div>\n </div>\n <div class=\"empty\" *ngIf=\"!advancedWidgets(step).length\">{{ tx('editor.steps.emptyAdvanced', 'No advanced components added.') }}</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\">{{ tx('editor.steps.noSteps', 'No steps defined.') }}</div>\n\t </ng-template>\n\t </div>\n </mat-tab>\n\n <mat-tab [label]=\"tx('editor.navigation.tab', 'Navigation')\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">{{ tx('editor.navigation.eyebrow', 'Default actions') }}</div>\n <div class=\"editor-title\">{{ tx('editor.navigation.title', 'Configure navigation between steps') }}</div>\n <div class=\"editor-subtitle\">{{ tx('editor.navigation.subtitle', 'Define when default buttons appear and how they present visually in the flow.') }}</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">{{ tx('editor.navigation.behaviorTitle', 'Button behavior') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.navigation.behaviorSubtitle', 'Appearance and alignment of the default stepper navigation.') }}</div>\n </div>\n <div class=\"toggle-group\">\n <mat-slide-toggle [(ngModel)]=\"navigationCfg.visible\" (ngModelChange)=\"markDirty()\">{{ tx('editor.navigation.visible', 'Show default navigation') }}</mat-slide-toggle>\n </div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.navigation.variant', 'Button style') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.variant\" (ngModelChange)=\"markDirty()\" [disabled]=\"!navigationCfg.visible\">\n <option [ngValue]=\"undefined\">{{ tx('editor.navigation.variant.default', 'Default (raised)') }}</option>\n <option value=\"basic\">{{ tx('editor.navigation.variant.basic', 'Text') }}</option>\n <option value=\"flat\">{{ tx('editor.navigation.variant.flat', 'Flat') }}</option>\n <option value=\"stroked\">{{ tx('editor.navigation.variant.stroked', 'Stroked') }}</option>\n <option value=\"raised\">{{ tx('editor.navigation.variant.raised', 'Raised') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.navigation.color', 'Color') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.color\" (ngModelChange)=\"markDirty()\" [disabled]=\"!navigationCfg.visible\">\n <option [ngValue]=\"undefined\">{{ tx('editor.navigation.color.default', 'Default') }}</option>\n <option value=\"primary\">{{ tx('editor.navigation.color.primary', 'Primary') }}</option>\n <option value=\"accent\">{{ tx('editor.navigation.color.accent', 'Accent') }}</option>\n <option value=\"warn\">{{ tx('editor.navigation.color.warn', 'Warn') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.navigation.align', 'Alignment') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"navigationCfg.align\" (ngModelChange)=\"markDirty()\" [disabled]=\"!navigationCfg.visible\">\n <option [ngValue]=\"undefined\">{{ tx('editor.navigation.align.default', 'Right') }}</option>\n <option value=\"start\">{{ tx('editor.navigation.align.start', 'Left') }}</option>\n <option value=\"center\">{{ tx('editor.navigation.align.center', 'Center') }}</option>\n <option value=\"space-between\">{{ tx('editor.navigation.align.spaceBetween', 'Spaced') }}</option>\n <option value=\"end\">{{ tx('editor.navigation.align.end', 'Right') }}</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\">{{ tx('editor.navigation.labelsTitle', 'Labels and icons') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.navigation.labelsSubtitle', 'Adjust the copy and icons used in back and next actions.') }}</div>\n </div>\n <div class=\"pdx-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.navigation.prevLabel', 'Back button text') }}</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.prevLabel\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.navigation.prevPlaceholder', 'e.g.: Back')\" [disabled]=\"!navigationCfg.visible\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.navigation.nextLabel', 'Next button text') }}</mat-label>\n <input matInput [(ngModel)]=\"navigationCfg.nextLabel\" (ngModelChange)=\"markDirty()\" [placeholder]=\"tx('editor.navigation.nextPlaceholder', 'e.g.: Next')\" [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\">{{ tx('editor.navigation.prevIcon', 'Back icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('prevIcon')\" [disabled]=\"!navigationCfg.visible\" [attr.aria-label]=\"tx('editor.navigation.pickPrevIcon', 'Choose the Back button icon')\">\n <mat-icon *ngIf=\"navigationCfg.prevIcon\" [fontIcon]=\"navigationCfg.prevIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.prevIcon\">{{ tx('editor.shared.pick', 'Choose') }}</ng-container>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">{{ tx('editor.navigation.nextIcon', 'Next icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickNavIcon('nextIcon')\" [disabled]=\"!navigationCfg.visible\" [attr.aria-label]=\"tx('editor.navigation.pickNextIcon', 'Choose the Next button icon')\">\n <mat-icon *ngIf=\"navigationCfg.nextIcon\" [fontIcon]=\"navigationCfg.nextIcon\"></mat-icon>\n <ng-container *ngIf=\"!navigationCfg.nextIcon\">{{ tx('editor.shared.pick', 'Choose') }}</ng-container>\n </button>\n </div>\n </div>\n </div>\n </div>\n </mat-tab>\n\n <mat-tab [label]=\"tx('editor.appearance.tab', 'Appearance')\">\n <div class=\"tab-pad\">\n <div class=\"editor-intro\">\n <div class=\"editor-intro-copy\">\n <div class=\"eyebrow\">{{ tx('editor.appearance.eyebrow', 'Visual theme') }}</div>\n <div class=\"editor-title\">{{ tx('editor.appearance.title', 'Customize appearance without losing consistency') }}</div>\n <div class=\"editor-subtitle\">{{ tx('editor.appearance.subtitle', 'Start with the quick adjustments. Tokens and the SCSS snippet stay collapsed for advanced scenarios.') }}</div>\n </div>\n </div>\n <div class=\"settings-group\">\n <div class=\"group-head\">\n <div class=\"section-title\">{{ tx('editor.appearance.quickTitle', 'Quick adjustments') }}</div>\n <div class=\"section-subtitle\">{{ tx('editor.appearance.quickSubtitle', 'Most common controls for sizing, typography weight and theme.') }}</div>\n </div>\n <div class=\"quick-grid\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.appearance.headerHeight', 'Header height (px)') }}</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerHeightPx\" (ngModelChange)=\"setHeaderHeightPx($event)\" [placeholder]=\"tx('editor.appearance.headerHeightPlaceholder', 'e.g.: 48')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.appearance.textSize', 'Text size (px)') }}</mat-label>\n <input matInput type=\"number\" [ngModel]=\"headerLabelTextSizePx\" (ngModelChange)=\"setHeaderLabelTextSizePx($event)\" [placeholder]=\"tx('editor.appearance.textSizePlaceholder', 'e.g.: 14')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.appearance.textWeight', 'Text weight') }}</mat-label>\n <select matNativeControl [ngModel]=\"headerLabelTextWeight\" (ngModelChange)=\"setHeaderLabelTextWeight($event)\">\n <option [ngValue]=\"undefined\">{{ tx('editor.appearance.textWeight.default', 'Default') }}</option>\n <option value=\"400\">{{ tx('editor.appearance.textWeight.400', 'Normal') }}</option>\n <option value=\"500\">{{ tx('editor.appearance.textWeight.500', 'Medium') }}</option>\n <option value=\"600\">{{ tx('editor.appearance.textWeight.600', 'Semibold') }}</option>\n <option value=\"700\">{{ tx('editor.appearance.textWeight.700', 'Bold') }}</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"field-span-2\">\n <mat-label>{{ tx('editor.appearance.themeClass', 'Theme class') }}</mat-label>\n <input matInput [(ngModel)]=\"appearance.themeClass\" (ngModelChange)=\"onAppearanceChange()\" [placeholder]=\"tx('editor.appearance.themeClassPlaceholder', 'e.g.: theme-stepper-custom')\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ tx('editor.appearance.iconSet', 'Icon set') }}</mat-label>\n <select matNativeControl [(ngModel)]=\"appearance.iconsSet\" (ngModelChange)=\"onAppearanceChange()\">\n <option [ngValue]=\"undefined\">{{ tx('editor.appearance.iconSet.default', 'Material Icons (default)') }}</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\">{{ tx('editor.appearance.iconNumber', 'Number icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('number')\" [attr.aria-label]=\"tx('editor.appearance.pickIconNumber', 'Choose the number icon')\">\n <mat-icon *ngIf=\"icons.number; else pick\" [fontIcon]=\"icons.number\"></mat-icon>\n <ng-template #pick>{{ tx('editor.shared.pick', 'Choose') }}</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">{{ tx('editor.appearance.iconDone', 'Completed icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('done')\" [attr.aria-label]=\"tx('editor.appearance.pickIconDone', 'Choose the completed icon')\">\n <mat-icon *ngIf=\"icons.done; else pick2\" [fontIcon]=\"icons.done\"></mat-icon>\n <ng-template #pick2>{{ tx('editor.shared.pick', 'Choose') }}</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">{{ tx('editor.appearance.iconEdit', 'Edit icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('edit')\" [attr.aria-label]=\"tx('editor.appearance.pickIconEdit', 'Choose the edit icon')\">\n <mat-icon *ngIf=\"icons.edit; else pick3\" [fontIcon]=\"icons.edit\"></mat-icon>\n <ng-template #pick3>{{ tx('editor.shared.pick', 'Choose') }}</ng-template>\n </button>\n </div>\n <div class=\"inline-action-item\">\n <div class=\"section-title\">{{ tx('editor.appearance.iconError', 'Error icon') }}</div>\n <button mat-stroked-button type=\"button\" (click)=\"pickIcon('error')\" [attr.aria-label]=\"tx('editor.appearance.pickIconError', 'Choose the error icon')\">\n <mat-icon *ngIf=\"icons.error; else pick4\" [fontIcon]=\"icons.error\"></mat-icon>\n <ng-template #pick4>{{ tx('editor.shared.pick', 'Choose') }}</ng-template>\n </button>\n </div>\n </div>\n <div class=\"icons-hint\" *ngIf=\"symbolsLikelySelected.length && !appearance.iconsSet\">\n <div class=\"muted\">\n {{ tx('editor.appearance.symbolsHint', 'Hint: {{icons}} are Material Symbols icons. Select a Symbols set below or click').replace('{{icons}}', symbolsLikelySelected.join(', ')) }}\n <button mat-button color=\"primary\" type=\"button\" (click)=\"setIconsSetToSymbols()\">{{ tx('editor.appearance.useSymbols', 'Use 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')\">{{ tx('editor.appearance.presetNeutral', 'Preset: neutral') }}</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('primary')\">{{ tx('editor.appearance.presetPrimary', 'Preset: primary') }}</button>\n <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"applyPreset('high-contrast')\">{{ tx('editor.appearance.presetHighContrast', 'Preset: high contrast') }}</button>\n <button mat-button type=\"button\" (click)=\"clearTokens()\">{{ tx('editor.appearance.clearTokens', 'Clear tokens') }}</button>\n </div>\n </div>\n <details class=\"disclosure\">\n <summary>\n <span class=\"section-title\">{{ tx('editor.appearance.advancedTitle', 'Advanced tokens and SCSS snippet') }}</span>\n <span class=\"section-subtitle\">{{ tx('editor.appearance.advancedSubtitle', 'Use when you need to go beyond quick adjustments and control the theme with more granularity.') }}</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]=\"tx('editor.appearance.tokenPlaceholder', 'CSS value or var(--token)')\" />\n </mat-form-field>\n </div>\n </div>\n <div class=\"code-card\">\n <div class=\"code-head\">{{ tx('editor.appearance.scssSnippet', 'SCSS snippet') }}</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 private readonly i18n = inject(PraxisI18nService);\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: this.tx('editor.defaults.newStep', 'New step') } as StepConfig ];\n this.isDirty$.next(true);\n }\n this.ensureActiveStep();\n }\n\n tx(key: string, fallback: string): string {\n return resolvePraxisStepperText(this.i18n, key, fallback);\n }\n\n stepIndexLabel(index: number): string {\n return this.tx('editor.steps.stepN', 'Step {{index}}').replace(\n '{{index}}',\n `${index + 1}`,\n );\n }\n\n stepRemoveAria(step: StepConfig, index: number): string {\n return this.tx('editor.steps.removeAria', 'Remove step {{label}}').replace(\n '{{label}}',\n `${step.label || index + 1}`,\n );\n }\n\n editingStepTitle(step: StepConfig): string {\n return this.tx('editor.steps.editing', 'Editing: {{label}}').replace(\n '{{label}}',\n `${step.label || ''}`,\n );\n }\n\n markDirty(): void { this.isDirty$.next(true); this.validate(); }\n\n validate(): void {\n const valid = Array.isArray(this.config.steps) && this.config.steps.every(s => !!s.label);\n this.isValid$.next(valid);\n }\n\n // ------- Appearance (theming tokens) -------\n get navigationCfg(): NonNullable<StepperMetadata['navigation']> {\n const nav = (this.config.navigation ??= {} as any);\n return nav as any;\n }\n get appearance(): NonNullable<StepperMetadata['appearance']> {\n const ap = (this.config.appearance ??= {} as any);\n (ap.tokens ??= {} as any);\n return ap as any;\n }\n\n stepperTokenKeys: string[] = [\n 'container-color',\n 'line-color',\n 'header-label-text-color',\n 'header-optional-label-text-color',\n 'header-icon-foreground-color',\n 'header-icon-background-color',\n 'header-done-state-icon-background-color',\n 'header-done-state-icon-foreground-color',\n 'header-edit-state-icon-background-color',\n 'header-edit-state-icon-foreground-color',\n 'header-error-state-icon-background-color',\n 'header-error-state-icon-foreground-color',\n 'header-error-state-label-text-color',\n 'header-focus-state-layer-color',\n 'header-hover-state-layer-color',\n 'header-label-text-font',\n 'header-label-text-size',\n 'header-label-text-weight',\n 'header-selected-state-label-text-size',\n 'header-selected-state-label-text-weight',\n 'container-text-font',\n 'header-height',\n 'header-focus-state-layer-shape',\n 'header-hover-state-layer-shape',\n 'header-selected-state-icon-background-color',\n 'header-selected-state-icon-foreground-color',\n 'header-selected-state-label-text-color',\n ];\n\n onAppearanceChange(): void { this.markDirty(); }\n\n onTokenChange(key: string, value: string): void {\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n if (!value) {\n delete (tokens as any)[key];\n } else {\n (tokens as any)[key] = value;\n }\n this.onAppearanceChange();\n }\n\n clearTokens(): void {\n if (!this.config.appearance) return;\n this.config.appearance.tokens = {} as any;\n this.onAppearanceChange();\n }\n\n applyPreset(id: 'primary' | 'neutral' | 'high-contrast'): void {\n const presets: Record<string, Record<string, string>> = {\n primary: {\n 'container-color': 'var(--md-sys-color-surface-container)',\n 'header-label-text-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-primary)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-on-primary)',\n 'line-color': 'var(--md-sys-color-primary)',\n },\n neutral: {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'line-color': 'var(--md-sys-color-outline-variant)',\n },\n 'high-contrast': {\n 'container-color': 'var(--md-sys-color-surface)',\n 'header-label-text-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-background-color': 'var(--md-sys-color-on-surface)',\n 'header-selected-state-icon-foreground-color': 'var(--md-sys-color-surface)',\n 'line-color': 'var(--md-sys-color-on-surface)',\n },\n };\n const preset = presets[id] || {};\n const tokens = (this.appearance.tokens = this.appearance.tokens || {});\n for (const [k, v] of Object.entries(preset)) {\n (tokens as any)[k] = v;\n }\n this.onAppearanceChange();\n }\n\n scssSnippet(): string {\n const tokens = this.config.appearance?.tokens || {};\n const entries = Object.entries(tokens).filter(([, v]) => !!v);\n const selector = this.config.appearance?.themeClass ? `.${this.config.appearance.themeClass}` : ':root';\n const map = entries.map(([k, v]) => ` ${k}: ${v},`).join('\\n');\n return `${selector} {\\n @include mat.stepper-overrides((\\n${map}\\n ));\\n}`;\n }\n\n // ===== Quick editors for common tokens =====\n get headerHeightPx(): number | undefined {\n const raw = this.appearance.tokens?.['header-height'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderHeightPx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-height'];\n } else {\n (this.appearance.tokens as any)['header-height'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextSizePx(): number | undefined {\n const raw = this.appearance.tokens?.['header-label-text-size'];\n if (!raw) return undefined;\n const m = /([0-9]+)\\s*px/.exec(raw);\n return m ? Number(m[1]) : undefined;\n }\n setHeaderLabelTextSizePx(v: number | string | null): void {\n const n = Number(v);\n if (!n) {\n delete (this.appearance.tokens as any)['header-label-text-size'];\n } else {\n (this.appearance.tokens as any)['header-label-text-size'] = `${n}px`;\n }\n this.onAppearanceChange();\n }\n\n get headerLabelTextWeight(): string | undefined {\n return (this.appearance.tokens as any)['header-label-text-weight'];\n }\n setHeaderLabelTextWeight(v: string | undefined): void {\n if (!v) {\n delete (this.appearance.tokens as any)['header-label-text-weight'];\n } else {\n (this.appearance.tokens as any)['header-label-text-weight'] = v;\n }\n this.onAppearanceChange();\n }\n\n // ===== Icons (using IconPickerService) =====\n get icons(): NonNullable<NonNullable<StepperMetadata['appearance']>['icons']> {\n const ap = this.appearance as any;\n ap.icons ||= {};\n return ap.icons as any;\n }\n\n async pickNavIcon(field: 'prevIcon' | 'nextIcon'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.config.navigation ||= {} as any)[field] = picked;\n this.onAppearanceChange();\n }\n }\n async pickIcon(kind: 'number' | 'done' | 'edit' | 'error'): Promise<void> {\n const picked = await this.iconPicker.openDialog({ });\n if (picked) {\n (this.icons as any)[kind] = picked;\n this.onAppearanceChange();\n }\n }\n\n // ===== Icon set suggestions =====\n private symbolsLikely(name?: string): boolean {\n if (!name) return false;\n // Heurística simples: counter_1..10 e replace_image são típicos do Material Symbols.\n if (/^counter_\\d+$/.test(name)) return true;\n if (name === 'replace_image') return true;\n return false;\n }\n get symbolsLikelySelected(): string[] {\n const names = [this.icons.number, this.icons.done, this.icons.edit, this.icons.error].filter(Boolean) as string[];\n return names.filter((n) => this.symbolsLikely(n));\n }\n setIconsSetToSymbols(): void {\n this.appearance.iconsSet = 'material-symbols-outlined';\n this.onAppearanceChange();\n }\n drop(ev: CdkDragDrop<StepConfig[]>): void {\n moveItemInArray(this.config.steps, ev.previousIndex, ev.currentIndex);\n this.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 this.tx('editor.widgets.listSelection', 'List (selection)');\n case 'pdx-material-searchable-select': return this.tx('editor.widgets.searchableSelection', 'Searchable selection');\n case 'praxis-files-upload': return this.tx('editor.widgets.fileUpload', 'File upload');\n case 'praxis-dynamic-form': return this.tx('editor.widgets.form', 'Form');\n case 'praxis-wizard-benefits': return this.tx('editor.widgets.benefits', 'Benefits grid');\n case 'praxis-wizard-content': return this.tx('editor.widgets.content', 'Content block');\n case 'praxis-wizard-inline-notice': return this.tx('editor.widgets.notice', 'Inline notice');\n case 'praxis-wizard-divider': return this.tx('editor.widgets.divider', 'Divider');\n default: return (w.inputs as any)?.title || (w.inputs as any)?.label || this.tx('editor.widgets.default', '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 - 3)}...` : 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 this.tx('editor.summary.itemsColumns', '{{count}} item(s) • {{cols}} column(s)')\n .replace('{{count}}', `${count}`)\n .replace('{{cols}}', `${cols}`);\n }\n case 'praxis-wizard-content': {\n const text = shorten(inputs.title || inputs.subtitle || inputs.text || inputs.caption, 90);\n return text || this.tx('editor.summary.noContent', 'No content');\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\n ? this.tx('editor.summary.labelPrefix', 'Label: {{label}}').replace('{{label}}', inputs.label)\n : this.tx('editor.summary.dividerNoLabel', 'Divider without label');\n default:\n return '';\n }\n }\n\n editorialWidgetStatus(w: WidgetDefinition): string {\n switch (w.id) {\n case 'praxis-wizard-content':\n return this.tx('editor.status.contentLegacy', 'Deprecated legacy: new authoring should prefer widget:rich-text-block. This block remains supported for compatibility in this cycle.');\n case 'praxis-wizard-inline-notice':\n return this.tx('editor.status.noticeCurrent', 'Kept in the current cycle: final semantics are still being defined between legal-notice and info-callout.');\n case 'praxis-wizard-benefits':\n return this.tx('editor.status.benefitsTemporary', 'Temporarily kept: still no canonical equivalent in the editorial backlog.');\n case 'praxis-wizard-divider':\n return this.tx('editor.status.dividerTemporary', 'Temporarily kept: legacy separator without a prioritized shared equivalent.');\n default:\n return this.tx('editor.status.editorialWidget', 'Wizard editorial widget.');\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: this.tx('editor.defaults.newBenefit', 'New benefit'), 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 this.tx('editor.tone.info', 'Informational');\n case 'warning': return this.tx('editor.tone.warning', 'Warning');\n default: return this.tx('editor.tone.neutral', 'Neutral');\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: this.tx('editor.dialog.configureStepForm', 'Configure Step Form'), 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: this.tx('editor.dialog.configureListSelection', 'Configure List (selection)'), 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 || this.tx('editor.defaults.selection', 'Selection'),\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: this.tx('editor.dialog.configureFilesUpload', 'Configure File Upload'), 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: this.tx('editor.dialog.addComponentToStep', 'Add component to step'), 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: this.tx('editor.defaults.items', 'Items'), controlType: 'TRANSFER_LIST', transferOptions: { source: [], target: [] } } ] ] }\n ]\n };\n const ref = this.settings.open({ id: `stepper:transfer:${step.id || this.activeIndex}`, title: this.tx('editor.dialog.configureTransfer', 'Configure Item Transfer'), 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: this.tx('editor.dialog.configureListSelection', 'Configure List (selection)'), 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: this.tx('editor.dialog.configureFilesUpload', 'Configure File Upload'), 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 WidgetEventEnvelope,\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<WidgetEventEnvelope>();\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: WidgetEventEnvelope) {\n this.widgetEvent.emit({\n ...e,\n path: [\n { kind: 'stepper', id: this.stepperId },\n { kind: 'step', id: this.steps()[stepIndex]?.id, index: stepIndex },\n ...(e.path || []),\n ],\n });\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: 'WidgetEventEnvelope', 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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"}