@praxisui/dynamic-fields 8.0.0-beta.9 → 8.0.0-beta.90

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 (98) hide show
  1. package/README.md +19 -0
  2. package/docs/dynamic-fields-field-catalog.md +217 -0
  3. package/docs/dynamic-fields-field-selection-guide.md +204 -0
  4. package/docs/dynamic-fields-host-custom-field-guide.md +252 -0
  5. package/docs/dynamic-fields-host-custom-field-troubleshooting.md +160 -0
  6. package/docs/dynamic-fields-inline-components-guide.md +582 -0
  7. package/docs/dynamic-fields-inline-filter-catalog.md +518 -0
  8. package/docs/dynamic-fields-inline-filter-custom-component-guide.md +241 -0
  9. package/docs/dynamic-fields-inline-filter-inventory.md +250 -0
  10. package/docs/dynamic-fields-inline-filter-runtime-contract.md +394 -0
  11. package/docs/dynamic-fields-inline-filter-selection-guide.md +419 -0
  12. package/docs/dynamic-fields-inline-filter-troubleshooting.md +201 -0
  13. package/docs/dynamic-fields-inventory.md +207 -0
  14. package/docs/dynamic-fields-playground-catalog-plan.md +243 -0
  15. package/docs/generic-crud-service.md +152 -0
  16. package/fesm2022/praxisui-dynamic-fields-index-BYVmv78m.mjs +1 -0
  17. package/fesm2022/praxisui-dynamic-fields-index-CWPZdn1Y.mjs +6 -0
  18. package/fesm2022/praxisui-dynamic-fields-index-CrHhyUMO.mjs +1 -0
  19. package/fesm2022/praxisui-dynamic-fields-index-DhGo5In4.mjs +6 -0
  20. package/fesm2022/praxisui-dynamic-fields.mjs +14500 -5745
  21. package/package.json +14 -13
  22. package/src/lib/base/pdx-base-input-runtime-contract.json-api.md +526 -0
  23. package/src/lib/base/pdx-base-select-runtime-contract.json-api.md +474 -0
  24. package/src/lib/components/color-input/pdx-color-input.json-api.md +573 -0
  25. package/src/lib/components/color-picker/pdx-color-picker.json-api.md +686 -0
  26. package/src/lib/components/date-input/pdx-date-input.json-api.md +581 -0
  27. package/src/lib/components/datetime-local-input/pdx-datetime-local-input.json-api.md +560 -0
  28. package/src/lib/components/email-input/pdx-email-input.json-api.md +546 -0
  29. package/src/lib/components/field-shell/praxis-field-shell.json-api.md +523 -0
  30. package/src/lib/components/inline-async-select/pdx-inline-async-select.json-api.md +566 -0
  31. package/src/lib/components/inline-autocomplete/pdx-inline-autocomplete.json-api.md +554 -0
  32. package/src/lib/components/inline-color-label/pdx-inline-color-label.json-api.md +615 -0
  33. package/src/lib/components/inline-currency/pdx-inline-currency.json-api.md +542 -0
  34. package/src/lib/components/inline-currency-range/pdx-inline-currency-range.json-api.md +630 -0
  35. package/src/lib/components/inline-date/pdx-inline-date.json-api.md +529 -0
  36. package/src/lib/components/inline-date-range/pdx-inline-date-range.json-api.md +592 -0
  37. package/src/lib/components/inline-distance-radius/pdx-inline-distance-radius.json-api.md +649 -0
  38. package/src/lib/components/inline-entity-lookup/pdx-inline-entity-lookup.json-api.md +656 -0
  39. package/src/lib/components/inline-input/pdx-inline-input.json-api.md +538 -0
  40. package/src/lib/components/inline-multi-select/pdx-inline-multi-select.json-api.md +566 -0
  41. package/src/lib/components/inline-number/pdx-inline-number.json-api.md +533 -0
  42. package/src/lib/components/inline-pipeline-status/pdx-inline-pipeline-status.json-api.md +619 -0
  43. package/src/lib/components/inline-range-slider/pdx-inline-range-slider.json-api.md +605 -0
  44. package/src/lib/components/inline-rating/pdx-inline-rating.json-api.md +594 -0
  45. package/src/lib/components/inline-relative-period/pdx-inline-relative-period.json-api.md +623 -0
  46. package/src/lib/components/inline-score-priority/pdx-inline-score-priority.json-api.md +632 -0
  47. package/src/lib/components/inline-searchable-select/pdx-inline-searchable-select.json-api.md +564 -0
  48. package/src/lib/components/inline-select/pdx-inline-select.json-api.md +571 -0
  49. package/src/lib/components/inline-sentiment/pdx-inline-sentiment.json-api.md +661 -0
  50. package/src/lib/components/inline-time/pdx-inline-time.json-api.md +573 -0
  51. package/src/lib/components/inline-time-range/pdx-inline-time-range.json-api.md +635 -0
  52. package/src/lib/components/inline-toggle/pdx-inline-toggle.json-api.md +516 -0
  53. package/src/lib/components/inline-tree-select/pdx-inline-tree-select.json-api.md +637 -0
  54. package/src/lib/components/material-async-select/pdx-material-async-select.json-api.md +566 -0
  55. package/src/lib/components/material-autocomplete/pdx-material-autocomplete.json-api.md +561 -0
  56. package/src/lib/components/material-avatar/pdx-material-avatar.json-api.md +670 -0
  57. package/src/lib/components/material-button/pdx-material-button.json-api.md +572 -0
  58. package/src/lib/components/material-button-toggle/pdx-material-button-toggle.json-api.md +577 -0
  59. package/src/lib/components/material-checkbox-group/pdx-material-checkbox-group.json-api.md +611 -0
  60. package/src/lib/components/material-chips/pdx-material-chips.json-api.md +601 -0
  61. package/src/lib/components/material-colorpicker/pdx-material-colorpicker.json-api.md +545 -0
  62. package/src/lib/components/material-cpf-cnpj-input/pdx-material-cpf-cnpj-input.json-api.md +531 -0
  63. package/src/lib/components/material-currency/pdx-material-currency.json-api.md +569 -0
  64. package/src/lib/components/material-date-range/pdx-material-date-range.json-api.md +636 -0
  65. package/src/lib/components/material-datepicker/pdx-material-datepicker.json-api.md +556 -0
  66. package/src/lib/components/material-file-upload/pdx-material-file-upload.json-api.md +511 -0
  67. package/src/lib/components/material-multi-select/pdx-material-multi-select.json-api.md +596 -0
  68. package/src/lib/components/material-multi-select-tree/pdx-material-multi-select-tree.json-api.md +623 -0
  69. package/src/lib/components/material-price-range/pdx-material-price-range.json-api.md +619 -0
  70. package/src/lib/components/material-radio-group/pdx-material-radio-group.json-api.md +585 -0
  71. package/src/lib/components/material-range-slider/pdx-material-range-slider.json-api.md +664 -0
  72. package/src/lib/components/material-rating/pdx-material-rating.json-api.md +551 -0
  73. package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md +602 -0
  74. package/src/lib/components/material-select/pdx-material-select.json-api.md +601 -0
  75. package/src/lib/components/material-selection-list/pdx-material-selection-list.json-api.md +607 -0
  76. package/src/lib/components/material-slide-toggle/pdx-material-slide-toggle.json-api.md +522 -0
  77. package/src/lib/components/material-slider/pdx-material-slider.json-api.md +602 -0
  78. package/src/lib/components/material-textarea/pdx-material-textarea.json-api.md +598 -0
  79. package/src/lib/components/material-timepicker/pdx-material-timepicker.json-api.md +554 -0
  80. package/src/lib/components/material-transfer-list/pdx-material-transfer-list.json-api.md +614 -0
  81. package/src/lib/components/material-tree-select/pdx-material-tree-select.json-api.md +649 -0
  82. package/src/lib/components/month-input/pdx-month-input.json-api.md +527 -0
  83. package/src/lib/components/number-input/pdx-number-input.json-api.md +594 -0
  84. package/src/lib/components/password-input/pdx-password-input.json-api.md +574 -0
  85. package/src/lib/components/pdx-material-time-range/pdx-material-time-range.json-api.md +592 -0
  86. package/src/lib/components/pdx-year-input/pdx-year-input.json-api.md +543 -0
  87. package/src/lib/components/phone-input/pdx-phone-input.json-api.md +583 -0
  88. package/src/lib/components/preload-status/pdx-preload-status.json-api.md +455 -0
  89. package/src/lib/components/search-input/pdx-search-input.json-api.md +536 -0
  90. package/src/lib/components/text-input/pdx-text-input.json-api.md +600 -0
  91. package/src/lib/components/time-input/pdx-time-input.json-api.md +546 -0
  92. package/src/lib/components/url-input/pdx-url-input.json-api.md +542 -0
  93. package/src/lib/components/week-input/pdx-week-input.json-api.md +533 -0
  94. package/{index.d.ts → types/praxisui-dynamic-fields.d.ts} +848 -445
  95. package/fesm2022/praxisui-dynamic-fields-index-C9IUU4lo.mjs +0 -1
  96. package/fesm2022/praxisui-dynamic-fields-index-GJtthzkD.mjs +0 -1
  97. package/fesm2022/praxisui-dynamic-fields-index-XvVS6lAQ.mjs +0 -1
  98. package/fesm2022/praxisui-dynamic-fields-index-iIeaA6ko.mjs +0 -1
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-fields",
3
- "version": "8.0.0-beta.9",
3
+ "version": "8.0.0-beta.90",
4
4
  "description": "Angular Material-based dynamic form fields for Praxis UI with lazy loading and metadata-driven rendering.",
5
5
  "peerDependencies": {
6
- "@angular/common": "^20.1.0",
7
- "@angular/core": "^20.1.0",
8
- "@angular/forms": "^20.1.0",
9
- "@angular/material": "^20.1.0",
10
- "@angular/cdk": "^20.1.0",
11
- "@angular/router": "^20.1.0",
6
+ "@angular/common": "^21.0.0",
7
+ "@angular/core": "^21.0.0",
8
+ "@angular/forms": "^21.0.0",
9
+ "@angular/material": "^21.0.0",
10
+ "@angular/cdk": "^21.0.0",
11
+ "@angular/platform-browser": "^21.0.0",
12
+ "@angular/router": "^21.0.0",
12
13
  "rxjs": "^7.8.0",
13
- "@praxisui/core": "^8.0.0-beta.9",
14
- "@praxisui/cron-builder": "^8.0.0-beta.9",
15
- "@praxisui/dialog": "^8.0.0-beta.9"
14
+ "@praxisui/core": "^8.0.0-beta.90",
15
+ "@praxisui/cron-builder": "^8.0.0-beta.90"
16
16
  },
17
17
  "dependencies": {
18
18
  "libphonenumber-js": "^1.12.41",
@@ -41,14 +41,15 @@
41
41
  ],
42
42
  "sideEffects": false,
43
43
  "module": "fesm2022/praxisui-dynamic-fields.mjs",
44
- "typings": "index.d.ts",
44
+ "typings": "types/praxisui-dynamic-fields.d.ts",
45
45
  "exports": {
46
46
  "./package.json": {
47
47
  "default": "./package.json"
48
48
  },
49
49
  ".": {
50
- "types": "./index.d.ts",
50
+ "types": "./types/praxisui-dynamic-fields.d.ts",
51
51
  "default": "./fesm2022/praxisui-dynamic-fields.mjs"
52
52
  }
53
- }
53
+ },
54
+ "type": "module"
54
55
  }
@@ -0,0 +1,526 @@
1
+ ---
2
+ title: "pdx-base-input-runtime-contract JSON API (Canonical)"
3
+ slug: "pdx-base-input-runtime-contract-json-api"
4
+ doc_type: "api-reference"
5
+ component: "pdx-base-input-runtime-contract"
6
+ document_kind: "json-api-canonical"
7
+ reference_mode: "canonical"
8
+ contract_format: "json"
9
+ contract_source: "runtime-and-code"
10
+ description: "Referencia canonica do contrato JSON do componente pdx-base-input-runtime-contract."
11
+ category: "components"
12
+ sub_category: "runtime-contract"
13
+ audience:
14
+ - "frontend"
15
+ - "architect"
16
+ - "platform-team"
17
+ level: "advanced"
18
+ status: "active"
19
+ owner: "praxis-ui"
20
+ source_of_truth:
21
+ - "projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts"
22
+ - "projects/praxis-core/src/lib/models/material-field-metadata.interface.ts"
23
+ source_of_truth_last_verified: "2026-03-05"
24
+ last_updated: "2026-03-05"
25
+ toc: true
26
+ sidebar: true
27
+ tags:
28
+ - "json-api"
29
+ - "canonical-contract"
30
+ - "pdx-base-input-runtime-contract"
31
+ api_stability: "canonical"
32
+ schema_verified: true
33
+ runtime_verified: false
34
+ editor_coverage_verified: false
35
+ runtime_scope: "public"
36
+ legacy_paths_present: true
37
+ has_known_mismatches: true
38
+ related_components:
39
+ - "praxis-table"
40
+ - "pdx-text-input"
41
+ - "pdx-number-input"
42
+ - "pdx-date-input"
43
+ - "pdx-material-select"
44
+ ---
45
+
46
+ # pdx-base-input-runtime-contract
47
+
48
+ Este documento e a referencia canonica da API JSON de pdx-base-input-runtime-contract.
49
+
50
+ ## Summary
51
+
52
+ - Tipo documental: API reference canonica de contrato JSON.
53
+ - Source of truth: runtime e codigo declarados no frontmatter.
54
+ - Objetivo operacional: consulta rapida, auditavel e deterministica sob pressao.
55
+ - Resumo funcional herdado: `SimpleBaseInputComponent` e o contrato runtime compartilhado dos inputs da lib. Voce configura UX, validacao e acessibilidade em JSON (`metadata`) e cada input especifico herda esse comportamento. Nao e um detalhe interno de implementacao: e a base de compatibilidade entre `pdx-*-input`.
56
+
57
+ ## Scope and positioning
58
+
59
+ - Escopo: contrato JSON publico e limites de comportamento observavel.
60
+ - Fora de escopo: tutorial de adocao e walkthrough operacional detalhado.
61
+ - Posicionamento: referencia canonicamente governada para consumidores, arquitetos e mantenedores.
62
+
63
+ ## Source of truth
64
+
65
+ | Source | Kind | Notes |
66
+ | --- | --- | --- |
67
+ | projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts | runtime-code | Source de implementacao declarado no repositorio. |
68
+ | projects/praxis-core/src/lib/models/material-field-metadata.interface.ts | runtime-code | Source de implementacao declarado no repositorio. |
69
+
70
+ ## Support legend
71
+
72
+ - Active: suportado e observado no runtime atual.
73
+ - Partial: suporte parcial, com restricoes conhecidas.
74
+ - Declared-only: declarado em tipos/schema sem ligacao runtime confirmada.
75
+ - Schema-only: presente em schema/modelo sem confirmacao de execucao.
76
+ - Deprecated: mantido por compatibilidade legada com migracao prevista.
77
+
78
+ ## Contract classification
79
+
80
+ ### Canonical paths (public contract)
81
+
82
+ | Path | Type | Required | Default | Status | Notes |
83
+ | --- | --- | --- | --- | --- | --- |
84
+ | `metadata` | `ComponentMetadata` | not-specified | n/a | Active | Payload principal do componente. |
85
+ | `metadata.name` | `string` | not-specified | n/a | Active | Aplica `name` no input nativo. |
86
+ | `metadata.id` | `string` | not-specified | n/a | Active | Aplica `id` no elemento nativo. |
87
+ | `metadata.label` | `string` | not-specified | n/a | Active | Mapeado para label visivel do campo. |
88
+ | `metadata.placeholder` | `string` | not-specified | n/a | Active | Mapeado para placeholder quando diferente do label. |
89
+ | `metadata.required` | `boolean` | not-specified | n/a | Active | `Validators.required` + `aria-required`. |
90
+ | `metadata.disabled` | `boolean` | not-specified | n/a | Active | Atualiza estado disabled do controle. |
91
+ | `metadata.readonly` | `boolean` | not-specified | n/a | Active | Aplica atributo `readonly` nativo. |
92
+ | `metadata.readOnly` | `boolean` | not-specified | n/a | Partial | Compat legado (dependente de uso no metadata final). |
93
+ | `metadata.autocomplete` | `string` | not-specified | n/a | Active | Aplica atributo `autocomplete`. |
94
+ | `metadata.inputMode` | `string` | not-specified | n/a | Active | Aplica atributo `inputmode`. |
95
+ | `metadata.spellcheck` | `boolean` | not-specified | n/a | Active | Aplica atributo `spellcheck`. |
96
+ | `metadata.tabIndex` | `number` | not-specified | n/a | Active | Aplica `tabIndex` no elemento nativo. |
97
+ | `metadata.minLength` | `number` | not-specified | n/a | Active | `Validators.minLength` + atributo nativo. |
98
+
99
+ ### Supported legacy paths
100
+
101
+ | Legacy path | Canonical replacement | Support window | Runtime behavior | Notes |
102
+ | --- | --- | --- | --- | --- |
103
+ | extracted-from-detailed-api | see canonical paths | not-yet-verified | accepted for backward compatibility | Alias/legado identificado no conteúdo preservado. |
104
+
105
+ ### Internal-only paths
106
+
107
+ | Path | Internal consumer | Runtime presence | Public support | Notes |
108
+ | --- | --- | --- | --- | --- |
109
+ | not-yet-mapped | not-yet-verified | not-yet-verified | No | Caminhos internos nao mapeados explicitamente nesta revisao automatizada. |
110
+
111
+ ### Experimental paths
112
+
113
+ | Path | Enablement (flag/guard) | Stability | Rollout notes | Notes |
114
+ | --- | --- | --- | --- | --- |
115
+ | not-yet-mapped | not-yet-verified | Experimental | not-yet-verified | Registrar somente quando houver evidencia em runtime/codigo. |
116
+
117
+ ## Overview
118
+
119
+ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecnico existente. O conteudo detalhado anterior foi preservado para manter rastreabilidade historica e reduzir perda de contexto.
120
+
121
+ ## Public contract surface
122
+
123
+ ### Top-level configuration blocks
124
+
125
+ | Block | Purpose | Required | Merge strategy | Notes |
126
+ | --- | --- | --- | --- | --- |
127
+ | metadata | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 14 path(s) mapeado(s), status predominante Active. |
128
+
129
+ ### Nested configuration blocks
130
+
131
+ | Path | Type | Required | Default | Constraints | Notes |
132
+ | --- | --- | --- | --- | --- | --- |
133
+ | `metadata` | `ComponentMetadata` | not-specified | n/a | component-defined | Payload principal do componente. |
134
+ | `metadata.name` | `string` | not-specified | n/a | component-defined | Aplica `name` no input nativo. |
135
+ | `metadata.id` | `string` | not-specified | n/a | component-defined | Aplica `id` no elemento nativo. |
136
+ | `metadata.label` | `string` | not-specified | n/a | component-defined | Mapeado para label visivel do campo. |
137
+ | `metadata.placeholder` | `string` | not-specified | n/a | component-defined | Mapeado para placeholder quando diferente do label. |
138
+ | `metadata.required` | `boolean` | not-specified | n/a | component-defined | `Validators.required` + `aria-required`. |
139
+ | `metadata.disabled` | `boolean` | not-specified | n/a | component-defined | Atualiza estado disabled do controle. |
140
+ | `metadata.readonly` | `boolean` | not-specified | n/a | component-defined | Aplica atributo `readonly` nativo. |
141
+ | `metadata.readOnly` | `boolean` | not-specified | n/a | component-defined | Compat legado (dependente de uso no metadata final). |
142
+ | `metadata.autocomplete` | `string` | not-specified | n/a | component-defined | Aplica atributo `autocomplete`. |
143
+
144
+ ### Input bindings
145
+
146
+ | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
147
+ | --- | --- | --- | --- | --- | --- |
148
+ | component-inputs | see-detailed-api | not-yet-verified | runtime-and-code | not-yet-verified | Inputs preservados na referência detalhada. |
149
+
150
+ ### Output events
151
+
152
+ | Event | Payload | Trigger | Stability | Notes |
153
+ | --- | --- | --- | --- | --- |
154
+ | `valueChange` | `any` | Mudanca de valor propagada pelo componente. | Partial | Preservado da documentação anterior. |
155
+ | `focusChange` | `boolean` | Foco/blur do elemento nativo. | Partial | Preservado da documentação anterior. |
156
+ | `nativeBlur` | `FocusEvent` | Evento blur nativo. | Partial | Preservado da documentação anterior. |
157
+ | `nativeChange` | `Event` | Evento change nativo. | Partial | Preservado da documentação anterior. |
158
+
159
+ ### External side channels
160
+
161
+ | Channel | Direction | Contract | Failure mode | Notes |
162
+ | --- | --- | --- | --- | --- |
163
+ | host/services/storage | bidirectional | see-detailed-api | not-yet-verified | Side channels dependem do componente e do host consumidor. |
164
+
165
+ ### Host/runtime dependencies
166
+
167
+ | Dependency | Required | Environment | Purpose | Notes |
168
+ | --- | --- | --- | --- | --- |
169
+ | see-source-of-truth | true | browser/dev/prod/ssr | runtime linkage | Confirmar por componente quando necessario. |
170
+
171
+ ## Coverage matrix
172
+
173
+ | Surface | Verified | Coverage status | Evidence | Notes |
174
+ | --- | --- | --- | --- | --- |
175
+ | Runtime | false | Partial | source_of_truth + conteudo preservado | Revisao estrutural concluida; validacao comportamental fina pode exigir follow-up. |
176
+ | Schema/Types | true | Partial | interfaces/modelos citados | Mapeamento formal de todos os campos ainda pode requerer refinamento. |
177
+ | Editor/Tooling | false | Partial | secoes de editor quando presentes | Cobertura de editor/tooling nem sempre confirmada por evidencia direta. |
178
+
179
+ ## Runtime coverage boundaries
180
+
181
+ - Cobertura consolidada com base em documentacao existente e source of truth declarado.
182
+ - Comportamentos fora de evidencia direta foram marcados como not-yet-verified ou Partial.
183
+ - Compatibilidade legada, quando detectada, foi separada em classificacao explicita.
184
+
185
+ ## Resolution model
186
+
187
+ ### Merge order
188
+
189
+ 1. defaults do componente
190
+ 2. contrato JSON recebido
191
+ 3. overrides de host/runtime
192
+ 4. normalizacoes internas
193
+
194
+ ### Fallback order
195
+
196
+ contrato explicito -> aliases legados (quando suportados) -> defaults internos -> comportamento seguro
197
+
198
+ ### Override points
199
+
200
+ - inputs publicos do componente
201
+ - configuracao JSON de runtime
202
+ - integracoes de host (servicos/tokens/adapters)
203
+
204
+ ### Runtime normalization
205
+
206
+ Campos e aliases preservados do documento anterior devem convergir progressivamente para paths canonicos declarados.
207
+
208
+ ### Precedence rules
209
+
210
+ Quando houver conflito entre alias e path canonico, priorizar path canonico e manter alias apenas para backward compatibility.
211
+
212
+ ## Validation and error semantics
213
+
214
+ ### Validation model
215
+
216
+ | Path/Rule | Validation phase | Behavior on fail | Error code / warning | Notes |
217
+ | --- | --- | --- | --- | --- |
218
+ | see-detailed-api | runtime | warn-or-reject | not-yet-standardized | Semantica de validacao preservada do documento anterior. |
219
+
220
+ ### Error semantics
221
+
222
+ Erros devem ser classificados em warnings recuperaveis versus falhas bloqueantes. Quando a evidencia nao estiver explicita, tratar como not yet verified.
223
+
224
+ ### Fail-open / fail-closed behavior
225
+
226
+ | Condition | Mode | Runtime behavior | Consumer impact |
227
+ | --- | --- | --- | --- |
228
+ | invalid-or-unknown-field | component-defined | not-yet-verified | Variavel por componente; requer verificacao em runtime. |
229
+
230
+ ### Invalid or unknown field handling
231
+
232
+ - Campos desconhecidos: comportamento depende da estrategia do componente (ignore, warn ou reject).
233
+ - Campos invalidos: podem gerar fallback, warning ou falha conforme implementacao.
234
+ - Registrar divergencias observadas em Known limitations and mismatches.
235
+
236
+ ### Runtime warnings vs hard failures
237
+
238
+ | Condition | Severity | Observability | Consumer action |
239
+ | --- | --- | --- | --- |
240
+ | partial-or-declared-only-coverage | warning | logs/eventos do componente | confirmar ligacao runtime antes de uso critico |
241
+
242
+ ## Detailed API
243
+
244
+ ### Preserved technical reference (normalized from previous revision)
245
+
246
+ `SimpleBaseInputComponent` e o contrato runtime compartilhado dos inputs da lib. Voce configura UX, validacao e acessibilidade em JSON (`metadata`) e cada input especifico herda esse comportamento. Nao e um detalhe interno de implementacao: e a base de compatibilidade entre `pdx-*-input`.
247
+
248
+ ### Prova em 20 segundos
249
+
250
+ ```json
251
+ {
252
+ "metadata": {
253
+ "name": "email",
254
+ "label": "E-mail",
255
+ "required": true,
256
+ "validators": {
257
+ "validationTrigger": "blur",
258
+ "requiredMessage": "Campo obrigatorio"
259
+ },
260
+ "materialDesign": { "appearance": "outline" }
261
+ }
262
+ }
263
+ ```
264
+
265
+ - O runtime aplica validacao e estado visual sem logica duplicada por componente.
266
+ - O mesmo contrato funciona para multiplos `pdx-*-input`.
267
+ - A regra fica versionavel e auditavel por JSON.
268
+
269
+ ### Table of contents
270
+
271
+ - [Start here](#start-here)
272
+ - [Promessa e limites](#promessa-e-limites)
273
+ - [Status model](#status-model)
274
+ - [Checklist corporativo](#checklist-corporativo)
275
+ - [Contrato tecnico completo](#contrato-tecnico-completo)
276
+ - [Matriz completa de cobertura (herdada)](#matriz-completa-de-cobertura-herdada)
277
+ - [Saidas runtime compartilhadas](#saidas-runtime-compartilhadas)
278
+ - [Regras corporativas recomendadas](#regras-corporativas-recomendadas)
279
+ - [Cross-links](#cross-links)
280
+ - [Referencias oficiais Angular](#referencias-oficiais-angular)
281
+
282
+ ### Start here
283
+
284
+ #### Promessa e limites
285
+
286
+ **O que isso habilita:** consistencia de input metadata-driven em validacao, material tokens e acessibilidade.
287
+
288
+ **Quando usar:** sempre que o componente filho extender `SimpleBaseInputComponent`.
289
+
290
+ **Exemplo minimo:** `metadata.required` + `metadata.validators.validationTrigger`.
291
+
292
+ Garantias:
293
+
294
+ - campos `metadata.*` ativos sao consumidos diretamente no runtime base.
295
+ - mensagens de validacao e estrategia de erro seguem contrato unico.
296
+ - atributos ARIA e propriedades nativas sao aplicados no elemento de input.
297
+
298
+ Limites:
299
+
300
+ - campos `Declared-only` podem existir no contrato sem efeito direto no runtime base.
301
+ - validacao de dominio continua sendo responsabilidade do backend.
302
+
303
+ #### Status model
304
+
305
+ - `Status: Active` - consumido diretamente no runtime.
306
+ - `Status: Partial` - consumido com restricoes.
307
+ - `Status: Declared-only` - declarado em tipagem, sem consumo direto no runtime base.
308
+ - `Status: Runtime-extension` - chave aceita por extensoes de componentes filhos.
309
+
310
+ #### Checklist corporativo
311
+
312
+ - alinhar `required` com regra de negocio para evitar bloqueio indevido de submit.
313
+ - padronizar `materialDesign.*` por design system.
314
+ - usar `ariaLabel/ariaDescribedby/ariaLabelledby` em campos criticos de jornada.
315
+ - manter mensagens `validators.*Message` consistentes com tom de produto.
316
+
317
+ ### Contrato tecnico completo
318
+
319
+ #### Matriz completa de cobertura (herdada)
320
+
321
+ | Caminho JSON | Tipo | Status | Comportamento em runtime |
322
+ | --- | --- | --- | --- |
323
+ | `metadata` | `ComponentMetadata` | Active | Payload principal do componente. |
324
+ | `metadata.name` | `string` | Active | Aplica `name` no input nativo. |
325
+ | `metadata.id` | `string` | Active | Aplica `id` no elemento nativo. |
326
+ | `metadata.label` | `string` | Active | Mapeado para label visivel do campo. |
327
+ | `metadata.placeholder` | `string` | Active | Mapeado para placeholder quando diferente do label. |
328
+ | `metadata.required` | `boolean` | Active | `Validators.required` + `aria-required`. |
329
+ | `metadata.disabled` | `boolean` | Active | Atualiza estado disabled do controle. |
330
+ | `metadata.readonly` | `boolean` | Active | Aplica atributo `readonly` nativo. |
331
+ | `metadata.readOnly` | `boolean` | Partial | Compat legado (dependente de uso no metadata final). |
332
+ | `metadata.autocomplete` | `string` | Active | Aplica atributo `autocomplete`. |
333
+ | `metadata.inputMode` | `string` | Active | Aplica atributo `inputmode`. |
334
+ | `metadata.spellcheck` | `boolean` | Active | Aplica atributo `spellcheck`. |
335
+ | `metadata.tabIndex` | `number` | Active | Aplica `tabIndex` no elemento nativo. |
336
+ | `metadata.minLength` | `number` | Active | `Validators.minLength` + atributo nativo. |
337
+ | `metadata.maxLength` | `number` | Active | `Validators.maxLength` + atributo nativo. |
338
+ | `metadata.pattern` | `string \| RegExp` | Active | `Validators.pattern` no controle. |
339
+ | `metadata.validators.customValidator` | `function` | Active | Executa validador customizado e retorna erro `custom`. |
340
+ | `metadata.validators.validationTrigger` | `'change' \| 'blur' \| 'submit' \| 'immediate'` | Active | Controla estrategia de exibicao/atualizacao de validacao. |
341
+ | `metadata.validators.validationDebounce` | `number` | Active | Debounce da exibicao de erros em `change`. |
342
+ | `metadata.validators.requiredMessage` | `string` | Active | Mensagem customizada para erro `required`. |
343
+ | `metadata.validators.minLengthMessage` | `string` | Active | Mensagem customizada para erro `minlength`. |
344
+ | `metadata.validators.maxLengthMessage` | `string` | Active | Mensagem customizada para erro `maxlength`. |
345
+ | `metadata.validators.patternMessage` | `string` | Active | Mensagem customizada para erro `pattern`. |
346
+ | `metadata.validators.minMessage` | `string` | Active | Mensagem customizada para erro `min`. |
347
+ | `metadata.validators.maxMessage` | `string` | Active | Mensagem customizada para erro `max`. |
348
+ | `metadata.validators.errorPosition` | `'tooltip' \| 'inline' \| 'both'` | Active | Estrategia de exibicao de erro (tooltip/inline). |
349
+ | `metadata.validators.showInlineErrors` | `boolean` | Active | Forca/desliga exibicao inline de erros. |
350
+ | `metadata.errorStateMatcher` | enum | Active | Estrategia de estado de erro usada pelo matcher utilitario. |
351
+ | `metadata.hint` | `string` | Active | Exibe dica quando nao ha erro. |
352
+ | `metadata.hintAlign` | `'start' \| 'end'` | Active | Alinhamento da dica. |
353
+ | `metadata.materialDesign.appearance` | `'fill' \| 'outline'` | Active | Aparencia do `mat-form-field`. |
354
+ | `metadata.materialDesign.color` | `'primary' \| 'accent' \| 'warn'` | Active | Cor do `mat-form-field`. |
355
+ | `metadata.materialDesign.floatLabel` | `'auto' \| 'always'` | Active | Comportamento do label flutuante. |
356
+ | `metadata.materialDesign.subscriptSizing` | `'fixed' \| 'dynamic'` | Active | Tamanho do subscript do `mat-form-field`. |
357
+ | `metadata.materialDesign.hideRequiredMarker` | `boolean` | Active | Oculta marcador de obrigatorio. |
358
+ | `metadata.prefixIcon` | `string` | Active | Icone prefixo renderizado no campo. |
359
+ | `metadata.prefixIconColor` | `string` | Active | Cor do icone prefixo. |
360
+ | `metadata.suffixIcon` | `string` | Active | Icone sufixo renderizado no campo. |
361
+ | `metadata.suffixIconColor` | `string` | Active | Cor do icone sufixo. |
362
+ | `metadata.suffixIconTooltip` | `string` | Active | Tooltip do icone sufixo. |
363
+ | `metadata.suffixIconAriaLabel` | `string` | Active | ARIA label do icone sufixo. |
364
+ | `metadata.clearButton.enabled` | `boolean` | Active | Habilita botao de limpar. |
365
+ | `metadata.clearButton.showOnlyWhenFilled` | `boolean` | Active | Exibe clear apenas com valor preenchido. |
366
+ | `metadata.clearButton.icon` | `string` | Active | Icone do clear. |
367
+ | `metadata.clearButton.iconColor` | `string` | Active | Cor do icone do clear. |
368
+ | `metadata.clearButton.tooltip` | `string` | Active | Tooltip do clear. |
369
+ | `metadata.clearButton.ariaLabel` | `string` | Active | ARIA label do clear. |
370
+ | `metadata.textTransform` | `enum` | Active | Transformacao visual/funcional de texto. |
371
+ | `metadata.textTransformApply` | `'displayOnly' \| 'saveOnly' \| 'both'` | Active | Define onde a transformacao e aplicada. |
372
+ | `metadata.ariaLabel` | `string` | Active | `aria-label` no elemento nativo. |
373
+ | `metadata.ariaDescribedby` | `string` | Active | `aria-describedby` no elemento nativo. |
374
+ | `metadata.ariaLabelledby` | `string` | Active | `aria-labelledby` no elemento nativo. |
375
+
376
+ #### Politica de label com prefixos e sufixos
377
+
378
+ Quando um campo usa `metadata.prefixIcon`, `metadata.suffixIcon`, `clearButton`,
379
+ datepicker toggle, seletor de cor, simbolo de moeda ou qualquer outro conteudo
380
+ renderizado via `matPrefix`/`matSuffix`, a politica recomendada para
381
+ `materialDesign.appearance = 'fill'` ou `'outline'` e:
382
+
383
+ ```json
384
+ {
385
+ "materialDesign": {
386
+ "appearance": "outline",
387
+ "floatLabel": "always",
388
+ "subscriptSizing": "dynamic"
389
+ }
390
+ }
391
+ ```
392
+
393
+ Essa regra segue a limitacao documentada pelo Angular Material para campos
394
+ `fill`/`outline`: label em repouso e valor do input nao compartilham o mesmo
395
+ alinhamento, entao prefixos/sufixos podem conflitar visualmente com o label
396
+ quando `floatLabel = 'auto'`.
397
+
398
+ Para superficies geradas, como filtros avancados, preferir aplicar essa politica
399
+ na camada global que materializa a metadata dos campos. Evite corrigir com CSS
400
+ local movendo label, icone ou notch do `mat-form-field`; esses detalhes sao
401
+ internos do Angular Material e podem mudar entre versoes.
402
+
403
+ #### Saidas runtime compartilhadas
404
+
405
+ | Output | Tipo | Quando ocorre |
406
+ | --- | --- | --- |
407
+ | `valueChange` | `any` | Mudanca de valor propagada pelo componente. |
408
+ | `focusChange` | `boolean` | Foco/blur do elemento nativo. |
409
+ | `nativeBlur` | `FocusEvent` | Evento blur nativo. |
410
+ | `nativeChange` | `Event` | Evento change nativo. |
411
+
412
+ #### Regras corporativas recomendadas
413
+
414
+ 1. Tratar `metadata.validators.*` como contrato de UX, sem substituir validacao de dominio no backend.
415
+ 2. Manter consistencia entre `required`, `visible` e regras de negocio para evitar bloqueio de submit com campo oculto.
416
+ 3. Padronizar `materialDesign` por design system (aparencia, cor e floatLabel) para reduzir variacao visual entre equipes.
417
+ 4. Usar `floatLabel: 'always'` em campos `fill`/`outline` com prefixos, sufixos ou icones Material.
418
+ 5. Usar `clearButton` com `ariaLabel` para conformidade de acessibilidade.
419
+
420
+ #### Cross-links
421
+
422
+ - `projects/praxis-dynamic-fields/src/lib/components/text-input/pdx-text-input.json-api.md`
423
+ - `projects/praxis-dynamic-fields/src/lib/components/number-input/pdx-number-input.json-api.md`
424
+ - `projects/praxis-dynamic-fields/src/lib/components/date-input/pdx-date-input.json-api.md`
425
+ - `projects/praxis-dynamic-fields/src/lib/components/material-select/pdx-material-select.json-api.md`
426
+
427
+ ### Referencias oficiais Angular
428
+
429
+ - Acessibilidade em Angular: https://angular.dev/best-practices/a11y
430
+ - Criacao e manutencao de libraries: https://angular.dev/tools/libraries/creating-libraries
431
+ - Angular Material `mat-form-field`: https://material.angular.io/components/form-field/overview
432
+
433
+ ## JSON path index
434
+
435
+ | Path | Type | Required | Default | Status | Notes |
436
+ | --- | --- | --- | --- | --- | --- |
437
+ | `metadata` | `ComponentMetadata` | not-specified | n/a | Active | Payload principal do componente. |
438
+ | `metadata.name` | `string` | not-specified | n/a | Active | Aplica `name` no input nativo. |
439
+ | `metadata.id` | `string` | not-specified | n/a | Active | Aplica `id` no elemento nativo. |
440
+ | `metadata.label` | `string` | not-specified | n/a | Active | Mapeado para label visivel do campo. |
441
+ | `metadata.placeholder` | `string` | not-specified | n/a | Active | Mapeado para placeholder quando diferente do label. |
442
+ | `metadata.required` | `boolean` | not-specified | n/a | Active | `Validators.required` + `aria-required`. |
443
+ | `metadata.disabled` | `boolean` | not-specified | n/a | Active | Atualiza estado disabled do controle. |
444
+ | `metadata.readonly` | `boolean` | not-specified | n/a | Active | Aplica atributo `readonly` nativo. |
445
+ | `metadata.readOnly` | `boolean` | not-specified | n/a | Partial | Compat legado (dependente de uso no metadata final). |
446
+ | `metadata.autocomplete` | `string` | not-specified | n/a | Active | Aplica atributo `autocomplete`. |
447
+ | `metadata.inputMode` | `string` | not-specified | n/a | Active | Aplica atributo `inputmode`. |
448
+ | `metadata.spellcheck` | `boolean` | not-specified | n/a | Active | Aplica atributo `spellcheck`. |
449
+ | `metadata.tabIndex` | `number` | not-specified | n/a | Active | Aplica `tabIndex` no elemento nativo. |
450
+ | `metadata.minLength` | `number` | not-specified | n/a | Active | `Validators.minLength` + atributo nativo. |
451
+
452
+ ## Events
453
+
454
+ | Event | Payload | Trigger | Stability | Notes |
455
+ | --- | --- | --- | --- | --- |
456
+ | `valueChange` | `any` | Mudanca de valor propagada pelo componente. | Partial | Preservado da documentação anterior. |
457
+ | `focusChange` | `boolean` | Foco/blur do elemento nativo. | Partial | Preservado da documentação anterior. |
458
+ | `nativeBlur` | `FocusEvent` | Evento blur nativo. | Partial | Preservado da documentação anterior. |
459
+ | `nativeChange` | `Event` | Evento change nativo. | Partial | Preservado da documentação anterior. |
460
+
461
+ ## Styling API
462
+
463
+ | Token/Class | Scope | Purpose | Notes |
464
+ | --- | --- | --- | --- |
465
+ | see-detailed-api | component | styling/runtime | Consolidar naming canonico quando aplicavel. |
466
+
467
+ ## Editor and tooling notes
468
+
469
+ - Cobertura de editor/tooling foi separada da cobertura de runtime para evitar confusao de suporte.
470
+ - Quando nao houver evidencia direta no codigo, o status deve permanecer not yet verified.
471
+
472
+ ## Examples
473
+
474
+ ### Minimal valid
475
+
476
+ ```json
477
+ {
478
+ "metadata": {
479
+ "name": "email",
480
+ "label": "E-mail",
481
+ "required": true,
482
+ "validators": {
483
+ "validationTrigger": "blur",
484
+ "requiredMessage": "Campo obrigatorio"
485
+ },
486
+ "materialDesign": { "appearance": "outline" }
487
+ }
488
+ }
489
+ ```
490
+
491
+ ### Typical/common
492
+
493
+ ```json
494
+ {}
495
+ ```
496
+
497
+ ### Advanced
498
+
499
+ ```json
500
+ {}
501
+ ```
502
+
503
+ ### Enterprise scenario
504
+
505
+ ```json
506
+ {}
507
+ ```
508
+
509
+ ## Known limitations and mismatches
510
+
511
+ | Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
512
+ | --- | --- | --- | --- | --- | --- |
513
+ | coverage/mapping | Evidência textual preservada indica itens Partial/Declared-only. | Cobertura confirmada por evidência runtime + schema + editor. | Pode gerar uso de paths não totalmente ligados. | to-be-linked | next-doc-cycle |
514
+
515
+ ## Compatibility and migration notes
516
+
517
+ | Concern | Affected versions | Migration action | Deadline | Notes |
518
+ | --- | --- | --- | --- | --- |
519
+ | legacy aliases and mixed status vocabulary | pre-canonical docs | unificar para taxonomia canonica (Active/Partial/Declared-only/...) | next-doc-cycle | manter backward compatibility documentada |
520
+
521
+ ## Source references
522
+
523
+ | Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
524
+ | --- | --- | --- | --- | --- |
525
+ | local-file | projects/praxis-dynamic-fields/src/lib/base/simple-base-input.component.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
526
+ | local-file | projects/praxis-core/src/lib/models/material-field-metadata.interface.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |