@praxisui/dynamic-fields 8.0.0-beta.99 → 9.0.0-beta.0

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.
Files changed (22) hide show
  1. package/README.md +2 -2
  2. package/docs/dynamic-fields-inline-components-guide.md +36 -24
  3. package/fesm2022/praxisui-dynamic-fields.mjs +3699 -345
  4. package/package.json +3 -3
  5. package/src/lib/base/pdx-base-input-runtime-contract.json-api.md +4 -4
  6. package/src/lib/components/inline-color-label/pdx-inline-color-label.json-api.md +43 -2
  7. package/src/lib/components/inline-currency-range/pdx-inline-currency-range.json-api.md +15 -0
  8. package/src/lib/components/inline-date/pdx-inline-date.json-api.md +10 -2
  9. package/src/lib/components/inline-date-range/pdx-inline-date-range.json-api.md +26 -9
  10. package/src/lib/components/inline-distance-radius/pdx-inline-distance-radius.json-api.md +7 -0
  11. package/src/lib/components/inline-multi-select/pdx-inline-multi-select.json-api.md +24 -3
  12. package/src/lib/components/inline-pipeline-status/pdx-inline-pipeline-status.json-api.md +17 -0
  13. package/src/lib/components/inline-range-slider/pdx-inline-range-slider.json-api.md +8 -1
  14. package/src/lib/components/inline-rating/pdx-inline-rating.json-api.md +13 -0
  15. package/src/lib/components/inline-relative-period/pdx-inline-relative-period.json-api.md +13 -0
  16. package/src/lib/components/inline-score-priority/pdx-inline-score-priority.json-api.md +13 -0
  17. package/src/lib/components/inline-sentiment/pdx-inline-sentiment.json-api.md +20 -2
  18. package/src/lib/components/inline-time-range/pdx-inline-time-range.json-api.md +13 -0
  19. package/src/lib/components/material-cpf-cnpj-input/pdx-material-cpf-cnpj-input.json-api.md +4 -3
  20. package/src/lib/components/material-price-range/pdx-material-price-range.json-api.md +4 -0
  21. package/src/lib/components/material-slide-toggle/pdx-material-slide-toggle.json-api.md +26 -22
  22. package/types/praxisui-dynamic-fields.d.ts +381 -4
@@ -300,6 +300,8 @@ Use quando precisar:
300
300
  | `metadata.scoreTexts/priorityTexts` | `object \| string(JSON)` | Ativo | Textos de labels, aria e separador de faixa; templates canonicos devem usar `{{label}}`, `{{start}}` e `{{end}}`, com compatibilidade legada para `{...}` em metadata. |
301
301
  | `metadata.scoreValueFallbackColor/priorityValueFallbackColor` | `string` | Ativo | Cor de fallback para valor selecionado. |
302
302
  | `metadata.scoreEmptyGradient/priorityEmptyGradient` | `string` | Ativo | Gradiente quando nao ha bandas definidas. |
303
+ | `metadata.inlineOverlay.applyMode` | `'auto'\|'explicit'` | Ativo | Define se slider e chips de banda comitam durante a interacao ou ficam em rascunho ate `Aplicar`. |
304
+ | `metadata.inlineOverlay.actions.apply/cancel/clear` | `object` | Ativo | Labels, aria, icones, `appearance` e `colorRole` das acoes do painel, materializados por tokens do tema. |
303
305
  | `metadata.inlineAutoSize.*` | `object` | Ativo | Largura da pill e painel no modo inline. |
304
306
 
305
307
  #### 3.2 Campos herdados compartilhados (exaustivo)
@@ -314,6 +316,7 @@ Resumo de composicao deste componente:
314
316
  - Resolve bandas por ordem: `scoreBands` -> `priorityBands` -> `bands`.
315
317
  - Se bandas tiverem ranges explicitos, usa start/end; senao distribui uniformemente.
316
318
  - Em modo range, chips de banda aplicam recorte start/end direto no slider.
319
+ - Com `inlineOverlay.applyMode: "explicit"`, slider e chips alteram apenas o rascunho do painel; `Aplicar` comita, enquanto `Cancelar`, `Esc` e fechamento externo restauram o valor anterior.
317
320
  - Cores dos valores selecionados seguem banda ativa ou fallback configurado.
318
321
 
319
322
  ### 5. Exemplo Minimo (JSON + Uso)
@@ -357,6 +360,14 @@ Uso: score unico sem bandas custom.
357
360
  "rangeSeparator": "a",
358
361
  "bandAriaLabelTemplate": "{{label}} entre {{start}} e {{end}}"
359
362
  },
363
+ "inlineOverlay": {
364
+ "applyMode": "explicit",
365
+ "actions": {
366
+ "apply": { "label": "Aplicar", "appearance": "filled", "colorRole": "primary" },
367
+ "cancel": { "label": "Cancelar", "appearance": "text", "colorRole": "neutral" },
368
+ "clear": { "label": "Limpar", "appearance": "outlined", "colorRole": "neutral" }
369
+ }
370
+ },
360
371
  "inlineAutoSize": { "minWidth": 186, "maxWidth": 340, "panelMinWidth": 320, "panelMaxWidth": 560 }
361
372
  }
362
373
  }
@@ -399,6 +410,8 @@ Correcao: preencher `scoreUnit` (ou `priorityUnit`/`unit`).
399
410
  | `metadata` | object | true | n/a | Partial | See Detailed API reference. |
400
411
  | `metadata.scoreShowScaleLabels` | unknown | false | n/a | Partial | See Detailed API reference. |
401
412
  | `metadata.scoreShowBandChips` | unknown | false | n/a | Partial | See Detailed API reference. |
413
+ | `metadata.inlineOverlay.applyMode` | `'auto'\|'explicit'` | false | `auto` | Active | Controls draft versus immediate commit behavior. |
414
+ | `metadata.inlineOverlay.actions.*` | object | false | n/a | Active | Panel action labels, aria, icons and theme roles. |
402
415
  | `metadata.inlineAutoSize.*` | object | false | n/a | Partial | See Detailed API reference. |
403
416
  | `readonlyMode` | boolean | false | n/a | Partial | See Detailed API reference. |
404
417
  | `disabledMode` | boolean | false | n/a | Partial | See Detailed API reference. |
@@ -301,6 +301,10 @@ Use quando precisar:
301
301
  | `metadata.sentimentPalette/palette` | `array \| string` | Ativo | Paleta fallback para opcoes sem cor. |
302
302
  | `metadata.sentimentGradientLowColor/midColor/highColor` | `string` | Ativo | Gradiente semantico fallback para barra e opcoes sem cor explicita. |
303
303
  | `metadata.sentimentTexts` / `inlineTexts` | `object \| string(JSON)` | Ativo | Textos de subtitulo, aria, labels de grupo/pills e empty state; templates canonicos devem usar `{{label}}` e `{{value}}` quando houver interpolacao. |
304
+ | `metadata.inlineOverlay.applyMode` | `"auto" \| "explicit"` | Ativo | Define se cards de sentimento comitam imediatamente ou ficam em rascunho ate `Aplicar`. |
305
+ | `metadata.inlineOverlay.actions.apply` | `object` | Ativo | Configura label, aria-label, icone, `appearance` e `colorRole` da acao de commit. |
306
+ | `metadata.inlineOverlay.actions.cancel` | `object` | Ativo | Configura a acao que descarta rascunho e fecha o painel. |
307
+ | `metadata.inlineOverlay.actions.clear` | `object` | Ativo | Configura a acao que remove a selecao aplicada/rascunho usando tokens do tema. |
304
308
  | `metadata.sentimentIcon` / `prefixIcon` | `string` | Ativo | Icone do trigger/painel. |
305
309
  | `metadata.inlineAutoSize.*` | `object` | Ativo | Largura da pill e painel. |
306
310
 
@@ -317,6 +321,7 @@ Resumo de composicao deste componente:
317
321
  - Cor/emoji de cada item segue ordem de chaves custom -> payload -> paleta fallback.
318
322
  - Em multiplo, respeita `maxSelections` herdado.
319
323
  - Aria labels, labels de grupo/pills e textos operacionais podem ser centralizados em `sentimentTexts`.
324
+ - Quando `inlineOverlay.applyMode` e `"explicit"`, selecoes no painel alteram apenas o rascunho; `Aplicar` comita, `Cancelar`, `Esc` e clique externo descartam, e `Limpar` remove a selecao.
320
325
 
321
326
  ### 5. Exemplo Minimo (JSON + Uso)
322
327
  ```json
@@ -360,11 +365,20 @@ Uso: classificacao simples de sentimento.
360
365
  "emptyStateText": "Nenhum sentimento disponível",
361
366
  "barAriaSelected": "{{label}} com {{value}}"
362
367
  },
363
- "inlineAutoSize": { "minWidth": 186, "maxWidth": 360, "panelMinWidth": 320, "panelMaxWidth": 560 }
368
+ "inlineAutoSize": { "minWidth": 186, "maxWidth": 360, "panelMinWidth": 320, "panelMaxWidth": 560 },
369
+ "clearButton": { "enabled": true, "showOnlyWhenFilled": true },
370
+ "inlineOverlay": {
371
+ "applyMode": "explicit",
372
+ "actions": {
373
+ "apply": { "label": "Aplicar", "appearance": "filled", "colorRole": "primary" },
374
+ "cancel": { "label": "Cancelar", "appearance": "text", "colorRole": "neutral" },
375
+ "clear": { "label": "Limpar", "appearance": "outlined", "colorRole": "neutral" }
376
+ }
377
+ }
364
378
  }
365
379
  }
366
380
  ```
367
- Uso: analise de CX com semantica visual direta.
381
+ Uso: analise de CX com semantica visual direta e confirmacao explicita antes de aplicar.
368
382
 
369
383
  ### 7. Troubleshooting e Armadilhas Comuns
370
384
  1. Emoji nao renderiza.
@@ -408,6 +422,10 @@ Correcao: validar `sentimentAnimatedEmoji`.
408
422
  | `metadata.sentimentCloseOnSelect` | boolean | false | n/a | Partial | See Detailed API reference. |
409
423
  | `metadata.sentimentTexts` | unknown | false | n/a | Partial | See Detailed API reference. |
410
424
  | `metadata.sentimentIcon` | string | false | n/a | Partial | See Detailed API reference. |
425
+ | `metadata.inlineOverlay.applyMode` | string | false | `auto` | Active | `explicit` mantém rascunho até commit. |
426
+ | `metadata.inlineOverlay.actions.apply` | object | false | n/a | Active | Label, aria, icon, appearance and colorRole for Apply. |
427
+ | `metadata.inlineOverlay.actions.cancel` | object | false | n/a | Active | Label, aria, icon, appearance and colorRole for Cancel. |
428
+ | `metadata.inlineOverlay.actions.clear` | object | false | n/a | Active | Label, aria, icon, appearance and colorRole for Clear. |
411
429
  | `metadata.inlineAutoSize.*` | object | false | n/a | Partial | See Detailed API reference. |
412
430
  | `selectOptions` | array | false | n/a | Partial | See Detailed API reference. |
413
431
  | `readonlyMode` | boolean | false | n/a | Partial | See Detailed API reference. |
@@ -299,6 +299,10 @@ Use quando precisar:
299
299
  | `metadata.validators.rangeMessage` | `string` | Ativo | Mensagem para erro de ordem do intervalo. |
300
300
  | `metadata.validators.minDistanceMessage` | `string` | Ativo | Mensagem para distancia minima. |
301
301
  | `metadata.validators.maxDistanceMessage` | `string` | Ativo | Mensagem para distancia maxima. |
302
+ | `metadata.inlineOverlay.applyMode` | `"auto" \| "explicit" \| "confirm"` | Ativo | Quando `explicit`/`confirm`, slider, inputs e presets ficam em rascunho ate `Aplicar`. |
303
+ | `metadata.inlineOverlay.actions.apply.*` | `object` | Ativo | Label, aria, icon, appearance e colorRole do commit. |
304
+ | `metadata.inlineOverlay.actions.cancel.*` | `object` | Ativo | Label, aria, icon, appearance e colorRole do descarte. |
305
+ | `metadata.inlineOverlay.actions.clear.*` | `object` | Ativo | Label, aria, icon, appearance, colorRole e visibilidade da limpeza explicita. |
302
306
  | `metadata.inlineAutoSize.*` | `object` | Ativo | Larguras da pill e painel inline. |
303
307
 
304
308
  #### 3.2 Campos herdados compartilhados (exaustivo)
@@ -314,6 +318,7 @@ Resumo de composicao deste componente:
314
318
  - `quickPresets` podem ser declarados ou gerados por defaults internos.
315
319
  - Slider e inputs textuais permanecem sincronizados (`timeRangeForm` + `sliderRangeForm`).
316
320
  - `timeInputStepSeconds()` deriva de `stepMinute` para entrada `type=time`.
321
+ - Com `inlineOverlay.applyMode: "explicit"` ou `"confirm"`, alteracoes no painel nao emitem valor externo ate `Aplicar`; `Cancelar`, `Esc`, detach ou clique externo restauram o valor confirmado anterior.
317
322
 
318
323
  ### 5. Exemplo Minimo (JSON + Uso)
319
324
  ```json
@@ -355,6 +360,14 @@ Uso: intervalo simples de horario comercial.
355
360
  "rangeMessage": "Inicio deve ser menor que fim",
356
361
  "minDistanceMessage": "Intervalo minimo nao atendido"
357
362
  },
363
+ "inlineOverlay": {
364
+ "applyMode": "explicit",
365
+ "actions": {
366
+ "apply": { "label": "Aplicar", "appearance": "filled", "colorRole": "primary" },
367
+ "cancel": { "label": "Cancelar", "appearance": "text", "colorRole": "neutral" },
368
+ "clear": { "label": "Limpar", "appearance": "outlined", "colorRole": "neutral" }
369
+ }
370
+ },
358
371
  "inlineAutoSize": { "minWidth": 186, "maxWidth": 360 }
359
372
  }
360
373
  }
@@ -276,7 +276,7 @@ Em conflito entre alias legado e path canonico, priorizar path canonico e regist
276
276
 
277
277
  Use quando precisar:
278
278
  - mascara dinamica CPF/CNPJ;
279
- - validacao por algoritmo oficial (legacy e alfanumerico);
279
+ - validacao por algoritmo oficial (legacy e alfanumerico) quando explicitamente habilitada;
280
280
  - opcao de persistir valor mascarado ou desmascarado no model.
281
281
 
282
282
  ### 2. API do Componente (Inputs/Outputs)
@@ -306,14 +306,15 @@ Observacao:
306
306
  Notas de runtime:
307
307
  - mascara CPF: `000.000.000-00`.
308
308
  - mascara CNPJ: `00.000.000/0000-00` (com suporte alfanumerico no modo `alpha`).
309
- - validador dinamico e aplicado por `createCpfCnpjValidator(metadata)`.
309
+ - validacao semantica por algoritmo oficial e opt-in. O runtime aplica `createCpfCnpjValidator(metadata)` somente quando a metadata declara `validators.cpfCnpj`, `validators.cpf`, `validators.cnpj`, `validateDocument` ou `validateCpfCnpj`.
310
+ - mascara, pattern e limpeza de caracteres continuam podendo validar formato/shape; eles nao implicam validacao semantica automatica do documento.
310
311
 
311
312
  #### 3.2 Campos herdados compartilhados (exaustivo)
312
313
  Contrato completo dos campos herdados consumidos por `SimpleBaseInput`:
313
314
  - [pdx-base-input-runtime-contract.json-api.md](projects/praxis-dynamic-fields/src/lib/base/pdx-base-input-runtime-contract.json-api.md)
314
315
 
315
316
  Resumo de composicao deste componente:
316
- - `Ativo`: contrato de documento + mascara + validador dinamico.
317
+ - `Ativo`: contrato de documento + mascara + validador dinamico quando opt-in.
317
318
  - `Parcial`: `inputType` contratual nao altera tipo real do input.
318
319
  - `Declared-only`: `effectiveFrom`.
319
320
 
@@ -329,6 +329,9 @@ Use quando precisar:
329
329
  | `metadata.startMinMessage/startMaxMessage/endMinMessage/endMaxMessage` | `string` | Ativo | Mensagens custom de validacao segmentada. |
330
330
  | `metadata.endMinOffsetMessage/startMaxOffsetMessage` | `string` | Ativo | Mensagens custom para regras de offset. |
331
331
  | `metadata.step` | `number` | Declared-only | Declarado no contrato, sem binding dedicado no componente atual. |
332
+ | `metadata.showTicks` | `boolean \| "auto"` | Inline-only | Projeta marcações no popover do range monetário inline; este renderer completo não desenha ticks. |
333
+ | `metadata.marks` | `array \| string` | Inline-only | Marcadores semânticos usados pelo range monetário inline; este renderer completo não materializa labels no trilho. |
334
+ | `metadata.semanticBands` | `array \| string` | Inline-only | Bandas semânticas usadas pelo range monetário inline; este renderer completo não materializa bandas no trilho. |
332
335
  | `metadata.inlineDistribution` | `object \| array \| string` | Declared-only | Contrato amplo, sem uso neste renderer. |
333
336
  | `metadata.distribution` | `object \| array \| string` | Declared-only | Contrato amplo, sem uso neste renderer. |
334
337
 
@@ -338,6 +341,7 @@ Contrato compartilhado de input base:
338
341
 
339
342
  Resumo de composicao deste componente:
340
343
  - `Ativo`: configuracao monetaria completa + validacoes de faixa/offset.
344
+ - `Inline-only`: `showTicks`, `marks` e `semanticBands` sao materializados pelo range monetario inline.
341
345
  - `Declared-only`: `step` e blocos de distribuicao nao usados no template atual.
342
346
 
343
347
  ### 4. Mapeamento de Comportamento
@@ -22,8 +22,8 @@ source_of_truth:
22
22
  - "projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts"
23
23
  - "projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts"
24
24
  - "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
25
- source_of_truth_last_verified: "2026-04-27"
26
- last_updated: "2026-04-27"
25
+ source_of_truth_last_verified: "2026-06-13"
26
+ last_updated: "2026-06-13"
27
27
  toc: true
28
28
  sidebar: true
29
29
  tags:
@@ -66,7 +66,7 @@ Este documento e a referencia canonica da API JSON de pdx-material-slide-toggle.
66
66
  | --- | --- | --- | --- | --- |
67
67
  | Component id | `pdx-material-slide-toggle` | Manter ID canonico estavel e versionado por contrato | Active | frontmatter.component |
68
68
  | Primary contract source | `runtime-and-code` | Runtime, schema e docs devem permanecer rastreaveis | Partial | frontmatter.contract_source + source_of_truth |
69
- | Runtime coverage | `true` | Comportamentos runtime criticos devem ficar explicitamente verificados | Active | `projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts`, focused component specs on 2026-04-27 |
69
+ | Runtime coverage | `true` | Comportamentos runtime criticos devem ficar explicitamente verificados | Active | `projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts`, focused component specs on 2026-06-13 |
70
70
  | Schema/type coverage | `true` | Tipos e schema devem refletir paths publicos do contrato | Active | source_of_truth + Detailed API reference |
71
71
  | Editor/tooling coverage | `false` | Editor/tooling deve espelhar somente contrato publico suportado | Partial | `projects/praxis-core/src/lib/metadata/field-selector-control-type.constants.ts`, `projects/praxis-dynamic-fields/src/lib/services/component-registry/component-registry.service.ts` |
72
72
  | Legacy paths | `false` | Segregar legado de caminhos canonicos com janela de migracao | Active | frontmatter.legacy_paths_present |
@@ -110,10 +110,10 @@ Este documento e a referencia canonica da API JSON de pdx-material-slide-toggle.
110
110
  | Path | Type | Required | Default | Status | Notes |
111
111
  | --- | --- | --- | --- | --- | --- |
112
112
  | `metadata` | object | true | n/a | Active | See Detailed API reference for runtime semantics. |
113
- | `readonlyMode` | boolean | false | `false` | Active | Blocks switch interaction and exposes `aria-readonly`. |
114
- | `disabledMode` | boolean | false | `false` | Active | Blocks switch interaction and exposes disabled styling/ARIA. |
113
+ | `readonlyMode` | boolean | false | `false` | Active | Blocks switch interaction, preserves the enabled form control, and exposes `aria-readonly`. |
114
+ | `disabledMode` | boolean | false | `false` | Active | Applies disabled state through the active `FormControl`, then exposes disabled styling/ARIA. |
115
115
  | `visible` | boolean | false | `true` | Active | Hides the host and marks it `aria-hidden`. |
116
- | `presentationMode` | boolean | false | `false` | Active | Blocks switch interaction as readonly presentation output. |
116
+ | `presentationMode` | boolean | false | `false` | Active | Blocks switch interaction as readonly presentation output while preserving the enabled form control. |
117
117
  | `metadata.controlType` | string | false | n/a | Active | Runtime selector/type for this control. |
118
118
  | `metadata.color` | string | false | n/a | Active | Material theme color passed to the switch. |
119
119
  | `metadata.labelPosition` | string | false | `after` | Active | Label position in relation to the switch. |
@@ -136,12 +136,12 @@ Nao ha paths experimentais confirmados no contrato publico desta revisao.
136
136
 
137
137
  | Block | Purpose | Required | Merge strategy | Notes |
138
138
  | --- | --- | --- | --- | --- |
139
- | `metadata` | Payload declarativo principal do componente | true | deep-merge | runtime linkage verified for core flows (component specs, 2026-04-27). |
140
- | `readonlyMode` | Override de readonly no host/runtime | false | override | disables interaction and exposes readonly semantics (component specs, 2026-04-27). |
141
- | `disabledMode` | Override de disabled no host/runtime | false | override | disables interaction and exposes disabled semantics (component specs, 2026-04-27). |
139
+ | `metadata` | Payload declarativo principal do componente | true | deep-merge | runtime linkage verified for core flows (component specs, 2026-06-13). |
140
+ | `readonlyMode` | Override de readonly no host/runtime | false | override | blocks interaction without disabling the form control and exposes readonly semantics (component specs, 2026-06-13). |
141
+ | `disabledMode` | Override de disabled no host/runtime | false | override | disables the active `FormControl` and only reenables state applied by `disabledMode` (component specs, 2026-06-13). |
142
142
  | `visible` | Override de visibilidade no host/runtime | false | override | host visibility binding remains active. |
143
- | `presentationMode` | Renderizacao de apresentacao sem interacao | false | override | disables interaction and exposes readonly semantics (component specs, 2026-04-27). |
144
- | `Validators` | Configuracao especifica de runtime | false | override | `requiredTrue` is added and removed according to current metadata (component specs, 2026-04-27). |
143
+ | `presentationMode` | Renderizacao de apresentacao sem interacao | false | override | blocks interaction without disabling the form control and exposes readonly semantics (component specs, 2026-06-13). |
144
+ | `Validators` | Configuracao especifica de runtime | false | override | `requiredTrue` is added and removed according to current metadata and rebound when an external `FormControl` becomes active (component specs, 2026-06-13). |
145
145
 
146
146
  ### Nested configuration blocks
147
147
 
@@ -162,10 +162,10 @@ Nao ha paths experimentais confirmados no contrato publico desta revisao.
162
162
  | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
163
163
  | --- | --- | --- | --- | --- | --- |
164
164
  | `metadata` | object | true | host-json | component-defined | Primary inbound contract payload. |
165
- | `readonlyMode` | boolean | false | host-runtime | effective boolean | Host-level behavioral override that blocks interaction and exposes readonly semantics. |
166
- | `disabledMode` | boolean | false | host-runtime | effective boolean | Host-level behavioral override that blocks interaction and exposes disabled semantics. |
165
+ | `readonlyMode` | boolean | false | host-runtime | effective boolean | Host-level behavioral override that blocks interaction without disabling the active form control and exposes readonly semantics. |
166
+ | `disabledMode` | boolean | false | host-runtime | effective boolean | Host-level behavioral override that applies disabled state through the active form control and exposes disabled semantics. |
167
167
  | `visible` | boolean | false | host-runtime | effective boolean | Host-level visibility override. |
168
- | `presentationMode` | boolean | false | host-runtime | effective boolean | Host-level presentation override that blocks interaction as readonly output. |
168
+ | `presentationMode` | boolean | false | host-runtime | effective boolean | Host-level presentation override that blocks interaction as readonly output without disabling the active form control. |
169
169
 
170
170
  ### Output events
171
171
 
@@ -197,7 +197,7 @@ Nao ha paths experimentais confirmados no contrato publico desta revisao.
197
197
 
198
198
  | Surface | Verified | Coverage status | Evidence | Notes |
199
199
  | --- | --- | --- | --- | --- |
200
- | Runtime | `true` | Active | `projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts`, focused component specs | Core runtime flows verified via focused component specs on 2026-04-27; editor/tooling coverage remains independent. |
200
+ | Runtime | `true` | Active | `projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts`, focused component specs | Core runtime flows verified via focused component specs on 2026-06-13; editor/tooling coverage remains independent. |
201
201
  | Schema/Types | `true` | Active | source_of_truth + Detailed API reference | Reconcile schema/types with canonical paths during follow-up when needed. |
202
202
  | Editor/Tooling | `false` | Partial | `projects/praxis-core/src/lib/metadata/field-selector-control-type.constants.ts`, `projects/praxis-dynamic-fields/src/lib/services/component-registry/component-registry.service.ts` | Selector/control-type tooling linkage verified via default selector map and registry seeding; visual editor end-to-end coverage remains not-yet-verified. |
203
203
 
@@ -284,7 +284,7 @@ Use quando precisar:
284
284
  | --- | --- | --- | --- | --- |
285
285
  | `metadata` | `MaterialToggleMetadata` | - | Sim | Contrato principal do toggle. |
286
286
  | `readonlyMode` | `boolean` | `false` | Nao | Sobrescreve leitura no host. |
287
- | `disabledMode` | `boolean` | `false` | Nao | Sobrescreve disabled no host. |
287
+ | `disabledMode` | `boolean` | `false` | Nao | Sobrescreve disabled no host aplicando o estado no `FormControl` ativo. |
288
288
  | `visible` | `boolean` | `true` | Nao | Controla exibicao no host. |
289
289
  | `presentationMode` | `boolean` | `false` | Nao | Modo apresentacao sem edicao. |
290
290
  | `valueChange` | `boolean` | - | Output base input | Mudanca do estado on/off. |
@@ -313,6 +313,7 @@ Resumo de composicao deste componente:
313
313
  ### 4. Mapeamento de Comportamento
314
314
  - Valor: booleano ligado ao `FormControl`.
315
315
  - Validacao: `requiredTrue` aplicavel para termos/aceite obrigatorio.
316
+ - Estados governados: `disabledMode` desabilita o `FormControl` ativo; `readonlyMode`, `metadata.readonly` e `presentationMode` bloqueiam interacao sem desabilitar o controle.
316
317
  - Acessibilidade: nome acessivel, `aria-required`, `aria-invalid`, `aria-disabled` e `aria-readonly` no host/toggle.
317
318
  - Erros/hints: pipeline padrao do base input.
318
319
 
@@ -356,7 +357,10 @@ Correcao: usar `requiredTrue=true` em vez de apenas `required`.
356
357
  2. Esperar bloqueio editavel com `readonly=true`.
357
358
  Correcao: `readonly=true`, `readonlyMode=true` e `presentationMode=true` bloqueiam interacao e mantem semantica readonly.
358
359
 
359
- 3. Ripple nao desliga.
360
+ 3. Desabilitar o toggle por atributo DOM direto.
361
+ Correcao: usar `disabledMode=true` ou metadata `disabled=true`; o runtime aplica disabled pelo `FormControl` ativo para preservar a integracao Angular Reactive Forms.
362
+
363
+ 4. Ripple nao desliga.
360
364
  Correcao: validar `disableRipple=true` no metadata final aplicado.
361
365
 
362
366
  4. Icone interno continua visivel.
@@ -510,13 +514,13 @@ Correcao: verificar binding do form control e serializacao booleana no host.
510
514
 
511
515
  | Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
512
516
  | --- | --- | --- | --- | --- | --- |
513
- | Canonical contract parity | No confirmed mismatch in this revision; runtime linkage verified for core flows (2026-04-27), with editor/tooling coverage pending | Keep runtime/schema/editor alignment evidence updated | Low | n/a | Monitor in periodic audit |
517
+ | Canonical contract parity | No confirmed mismatch in this revision; runtime linkage verified for core flows (2026-06-13), with editor/tooling coverage pending | Keep runtime/schema/editor alignment evidence updated | Low | n/a | Monitor in periodic audit |
514
518
 
515
519
  ## Source references (obrigatorio)
516
520
 
517
521
  | Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
518
522
  | --- | --- | --- | --- | --- |
519
- | schema-metadata | projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.metadata.ts | Primary source of truth for contract and behavior. | 2026-04-27 | verified-path |
520
- | runtime-code | projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts | Primary source of truth for contract and behavior. | 2026-04-27 | verified-path |
521
- | runtime-code | projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts | Primary source of truth for contract and behavior. | 2026-04-27 | verified-path |
522
- | schema-types | projects/praxis-core/src/lib/models/material-field-metadata.interface.ts | Primary source of truth for contract and behavior. | 2026-04-27 | verified-path |
523
+ | schema-metadata | projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.metadata.ts | Primary source of truth for contract and behavior. | 2026-06-13 | verified-path |
524
+ | runtime-code | projects/praxis-dynamic-fields/src/lib/components/material-slide-toggle/material-slide-toggle.component.ts | Primary source of truth for contract and behavior. | 2026-06-13 | verified-path |
525
+ | runtime-code | projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts | Primary source of truth for contract and behavior. | 2026-06-13 | verified-path |
526
+ | schema-types | projects/praxis-core/src/lib/models/material-field-metadata.interface.ts | Primary source of truth for contract and behavior. | 2026-06-13 | verified-path |