@praxisui/stepper 1.0.0-beta.30 → 1.0.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -44,7 +44,7 @@ import { PraxisStepper } from '@praxisui/stepper';
44
44
  standalone: true,
45
45
  imports: [PraxisStepper],
46
46
  template: `
47
- <praxis-stepper [config]="config" [editModeEnabled]="true"></praxis-stepper>
47
+ <praxis-stepper stepperId="stepper-demo" [config]="config" [editModeEnabled]="true"></praxis-stepper>
48
48
  `,
49
49
  })
50
50
  export class OnboardingComponent {
@@ -61,6 +61,12 @@ export class OnboardingComponent {
61
61
  }
62
62
  ```
63
63
 
64
+ ### Persistência
65
+
66
+ - `stepperId` é obrigatório para salvar/carregar a configuração.
67
+ - A chave usada no storage é `stepper-config:<component_id>` (via `ComponentKeyService`).
68
+ - Use `componentInstanceId` quando houver múltiplos steppers com o mesmo `stepperId` na mesma rota.
69
+
64
70
  ### Publishing the Library
65
71
 
66
72
  Após gerar os artefatos com o Angular Package Format (APF) via `ng build @praxisui/stepper`, você pode publicar no npm:
@@ -87,7 +93,7 @@ import { PraxisStepper } from '@praxisui/stepper';
87
93
  selector: 'app-cadastro',
88
94
  standalone: true,
89
95
  imports: [PraxisStepper],
90
- template: `<praxis-stepper [config]="config"></praxis-stepper>`,
96
+ template: `<praxis-stepper stepperId="stepper-demo" [config]="config"></praxis-stepper>`,
91
97
  })
92
98
  export class CadastroComponent {
93
99
  config = {
@@ -116,7 +122,7 @@ export class CadastroComponent {
116
122
  Validação: em modo `linear`, o avanço bloqueia quando o formulário da etapa atual é inválido. Para validação remota, forneça `(serverValidate)` ao componente.
117
123
 
118
124
  ```html
119
- <praxis-stepper
125
+ <praxis-stepper stepperId="stepper-demo"
120
126
  [config]="config"
121
127
  [serverValidate]="validateStep"
122
128
  ></praxis-stepper>
@@ -134,9 +140,70 @@ validateStep = async ({ step, formGroup, formData }) => {
134
140
 
135
141
  - Componentes: `PraxisStepper`, `PraxisStepperConfigEditor`
136
142
  - Tipos: `StepperMetadata`, `StepConfig`, `StepOrientation`, `StepHeaderPosition`
137
- - Eventos: `selectedIndexChange`, `selectionChange`, `widgetEvent`, `animationDone`
143
+ - Eventos: `selectedIndexChange`, `selectionChange`, `widgetEvent`, `animationDone`, `stepFormReady`, `stepFormValueChange`
138
144
  - Veja: `projects/praxis-stepper/src/public-api.ts`
139
145
 
146
+ ## Wizard Form (FT-like) — Experimental
147
+
148
+ O `PraxisWizardFormComponent` é um wrapper experimental que traduz um JSON de wizard em `StepperMetadata` + `FormConfig` e aplica um layout inspirado no Financial Times.
149
+
150
+ ```ts
151
+ import { PraxisWizardFormComponent, FT_WIZARD_CONFIG } from '@praxisui/stepper/experimental';
152
+
153
+ @Component({
154
+ selector: 'app-ft-wizard',
155
+ standalone: true,
156
+ imports: [PraxisWizardFormComponent],
157
+ template: `<praxis-wizard-form wizardId="ft-demo" [config]="config" />`,
158
+ })
159
+ export class FtWizardDemo {
160
+ config = FT_WIZARD_CONFIG;
161
+ }
162
+ ```
163
+
164
+ Notas:
165
+ - `widgetsBeforeForm` permite inserir cards/infos antes do formulário em cada etapa.
166
+ - `blocks` (wizard) permite inserir conteúdos editoriais (benefits/content/notice/divider) antes ou depois do formulário.
167
+ - `zones` (wizard) permite separar blocos em `intro`, `body` e `footer` (mapeados para before/after form).
168
+ - Cada bloco pode definir `id` (string) para gerar `blockId` estável em runtime; sem `id`, o fallback usa índice posicional.
169
+ - `blocks` e `zones` são mutuamente exclusivos no contrato. Se ambos forem enviados, `zones` tem prioridade no runtime.
170
+ - O wizard faz validação runtime (campos essenciais e exclusividade de `blocks`/`zones`). Em `devMode`, lança erro para facilitar o debug; em produção, emite `console.warn`.
171
+ - Preset visual recomendado para FT-like: `appearance.preset = 'ft-light'` (aplicado automaticamente no wizard).
172
+
173
+ ## Tokens de tema (Wizard)
174
+
175
+ O wizard usa **tokens M3** por padrão. Se for necessário sobrescrever algo específico do wizard, use tokens da própria lib, sempre apontando para tokens M3 no tema do host:
176
+
177
+ ```scss
178
+ :root {
179
+ --praxis-wizard-bg: var(--md-sys-color-surface-container-low);
180
+ --praxis-wizard-card-bg: var(--md-sys-color-surface);
181
+ --praxis-wizard-border: var(--md-sys-color-outline-variant);
182
+ --praxis-wizard-muted: var(--md-sys-color-on-surface-variant);
183
+ --praxis-wizard-accent: var(--md-sys-color-primary);
184
+ --praxis-wizard-accent-on: var(--md-sys-color-on-primary);
185
+ }
186
+ ```
187
+
188
+ Tokens disponíveis:
189
+ - `--praxis-wizard-bg`
190
+ - `--praxis-wizard-card-bg`
191
+ - `--praxis-wizard-border`
192
+ - `--praxis-wizard-muted`
193
+ - `--praxis-wizard-accent`
194
+ - `--praxis-wizard-accent-on`
195
+ - A persistência de progresso e preferências usa `CONFIG_STORAGE` (localStorage por padrão).
196
+ - JSON Schema: `projects/praxis-stepper/src/lib/wizard/praxis-wizard-form.schema.json`.
197
+ - Personalização de cor do stepper (sem hardcode): ajuste `--praxis-wizard-accent` no host ou em `:root` para controlar o estado ativo/concluído.
198
+ - Para evitar `::ng-deep`, use `stepperClass` e `contentClass` no metadata e aplique estilos em um stylesheet global do app (ou em presets internos da lib).
199
+ - O import `@praxisui/stepper/experimental` é resolvido via `tsconfig` no workspace e não faz parte do pacote público publicado.
200
+
201
+ ```scss
202
+ :root {
203
+ --praxis-wizard-accent: var(--md-sys-color-primary);
204
+ }
205
+ ```
206
+
140
207
  # Praxis Stepper — Guia de Estilos e Ícones
141
208
 
142
209
  Este guia explica como personalizar estilos (tokens) e ícones do cabeçalho do stepper em apps que consomem a lib `@praxisui/stepper`.