@praxisui/dynamic-fields 8.0.0-beta.8 → 8.0.0-beta.81

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 (97) 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 +502 -0
  8. package/docs/dynamic-fields-inline-filter-custom-component-guide.md +241 -0
  9. package/docs/dynamic-fields-inline-filter-inventory.md +247 -0
  10. package/docs/dynamic-fields-inline-filter-runtime-contract.md +391 -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 +206 -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-CBogy3si.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 +19551 -10669
  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 +551 -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} +874 -440
  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
@@ -0,0 +1,241 @@
1
+ ---
2
+ title: "Dynamic Fields Inline Filter Custom Component Guide"
3
+ slug: "dynamic-fields-inline-filter-custom-component-guide"
4
+ description: "Guia enterprise para criar novos inline filter components em hosts ou contribuicoes da lib, com naming, runtime registry, metadata registry e checklist de UX compacta."
5
+ doc_type: "guide"
6
+ document_kind: "host-guide"
7
+ component: "dynamic-fields"
8
+ category: "components"
9
+ audience:
10
+ - "host"
11
+ - "frontend"
12
+ - "architect"
13
+ level: "advanced"
14
+ status: "active"
15
+ owner: "praxis-ui"
16
+ tags:
17
+ - "dynamic-fields"
18
+ - "inline filter"
19
+ - "custom component"
20
+ - "host extension"
21
+ order: 45
22
+ icon: "extension"
23
+ toc: true
24
+ sidebar: true
25
+ search_boost: 1.12
26
+ reading_time: 20
27
+ estimated_setup_time: 35
28
+ version: "1.0"
29
+ related_docs:
30
+ - "dynamic-fields-host-custom-field-guide"
31
+ - "dynamic-fields-inline-filter-runtime-contract"
32
+ - "dynamic-fields-inline-filter-troubleshooting"
33
+ - "dynamic-inline-filter-catalog"
34
+ keywords:
35
+ - "ComponentRegistryService.register"
36
+ - "ENVIRONMENT_INITIALIZER"
37
+ - "inline*"
38
+ - "host custom inline"
39
+ last_updated: "2026-03-07"
40
+ ---
41
+
42
+ # Dynamic Fields Inline Filter Custom Component Guide
43
+
44
+ ## Objetivo
45
+
46
+ Ensinar quando e como criar um novo inline component para a trilha de filtro, sem quebrar:
47
+
48
+ - a shell compacta do `praxis-filter`
49
+ - o contrato de payload
50
+ - a governanca do host
51
+
52
+ ## Pre-requisitos
53
+
54
+ - Host Angular com `@praxisui/dynamic-fields` e `praxis-filter` integrados
55
+ - Conhecimento basico de `ComponentRegistryService`, `ComponentMetadataRegistry` e `ENVIRONMENT_INITIALIZER`
56
+ - Contrato do backend e payload do filtro ja definidos
57
+
58
+ ## Quando vale criar um inline novo
59
+
60
+ Crie um inline novo somente quando:
61
+
62
+ - um controle especializado reduz ambiguidade real da feature
63
+ - o catalogo existente nao cobre a semantica
64
+ - o valor final continua legivel na toolbar
65
+ - o backend suporta um shape estavel
66
+
67
+ Nao crie um inline novo apenas para trocar cosmetica de um select.
68
+
69
+ ## Naming canonico
70
+
71
+ Para novos inline filters, siga:
72
+
73
+ - `inline<Domain>`
74
+
75
+ Exemplos bons:
76
+
77
+ - `inlineSlaWindow`
78
+ - `inlineRiskBand`
79
+
80
+ Evite:
81
+
82
+ - `custom-filter`
83
+ - `inline-sla`
84
+ - nomes sem vinculo explicito com filtro
85
+
86
+ ## Caminho 1. Extensao em host
87
+
88
+ Para hosts, o fluxo real e:
89
+
90
+ 1. criar componente Angular standalone
91
+ 2. registrar no `ComponentRegistryService`
92
+ 3. registrar metadata editorial no `ComponentMetadataRegistry`
93
+ 4. opcionalmente registrar selector aliases se o host usar fluxo config-first
94
+
95
+ ### Exemplo de registro no bootstrap
96
+
97
+ ```ts
98
+ import { ENVIRONMENT_INITIALIZER, inject } from '@angular/core';
99
+ import { ComponentRegistryService } from '@praxisui/dynamic-fields';
100
+ import { ComponentMetadataRegistry, type ComponentDocMeta, type FieldControlType } from '@praxisui/core';
101
+
102
+ const hostInlineMeta: ComponentDocMeta = {
103
+ id: 'inlineSlaWindow',
104
+ title: 'SLA Window Inline',
105
+ icon: 'schedule',
106
+ category: 'host-filters',
107
+ description: 'Filtro inline para janela de SLA.',
108
+ };
109
+
110
+ {
111
+ provide: ENVIRONMENT_INITIALIZER,
112
+ multi: true,
113
+ useValue: () => {
114
+ const registry = inject(ComponentRegistryService);
115
+ registry.register('inlineSlaWindow' as FieldControlType, () =>
116
+ import('./filters/inline-sla-window.component').then((m) => m.InlineSlaWindowComponent),
117
+ );
118
+ },
119
+ },
120
+ {
121
+ provide: ENVIRONMENT_INITIALIZER,
122
+ multi: true,
123
+ useValue: () => {
124
+ inject(ComponentMetadataRegistry).register(hostInlineMeta);
125
+ },
126
+ }
127
+ ```
128
+
129
+ ## Caminho 2. Contribuicao na lib
130
+
131
+ Se a extensao precisa virar componente oficial da lib:
132
+
133
+ 1. criar pasta em `src/lib/components/inline-<dominio>`
134
+ 2. adicionar `.component.ts`
135
+ 3. adicionar `.metadata.ts`
136
+ 4. adicionar `pdx-*.json-api.md`
137
+ 5. exportar no `public-api.ts`
138
+ 6. registrar no `ComponentRegistryService`
139
+ 7. decidir aliases no `inline-filter-controls.util.ts`
140
+ 8. decidir como a metadata editorial sera registrada no `ComponentMetadataRegistry`
141
+
142
+ ### Ponto de cuidado: runtime registry != metadata registry
143
+
144
+ Registrar no `ComponentRegistryService` faz o componente renderizar.
145
+
146
+ Isso **nao garante**, por si so, que editores ou palettes descubram o componente via `ComponentMetadataRegistry`.
147
+
148
+ Hoje existem dois padroes reais na workspace:
149
+
150
+ - metadata apenas exportada como constante `ComponentDocMeta`
151
+ - metadata com provider opcional usando `ENVIRONMENT_INITIALIZER`, como em `provideMaterialAvatarMetadata()`
152
+
153
+ Se o inline novo precisa aparecer de forma discoverable em ferramentas editoriais, a contribuicao oficial deve incluir um mecanismo de registro da metadata, nao apenas o arquivo `.metadata.ts`.
154
+
155
+ ## Compatibilidade com a shell do filtro
156
+
157
+ Seu componente precisa funcionar em densidade compacta:
158
+
159
+ - largura controlada
160
+ - valor resumido na pill
161
+ - abertura/fechamento previsivel
162
+ - clear rapido
163
+ - estados `readonly`, `disabled` e `presentation mode`
164
+
165
+ ## Requisitos minimos de implementacao
166
+
167
+ ### Forms
168
+
169
+ O componente deve:
170
+
171
+ - implementar `ControlValueAccessor`, ou
172
+ - integrar corretamente com `[formControl]`
173
+
174
+ ### Metadata
175
+
176
+ O componente deve consumir metadata suficiente para:
177
+
178
+ - label
179
+ - placeholder
180
+ - `clearButton`
181
+ - `inlineAutoSize`
182
+ - `readonly`
183
+ - `disabled`
184
+
185
+ ### Valor
186
+
187
+ O shape do valor precisa ser:
188
+
189
+ - simples de entender
190
+ - estavel
191
+ - compativel com o DTO do filtro
192
+
193
+ Nao invente um objeto complexo se um range canonicamente conhecido ja resolve.
194
+
195
+ ## Clear button
196
+
197
+ Se o componente representa filtro rapido, trate `clear` como parte do contrato.
198
+
199
+ Regras:
200
+
201
+ - respeitar `metadata.clearButton`
202
+ - limpar para estado neutro
203
+ - nao confundir limpar com `false`, `0` ou string vazia sem decisao explicita
204
+
205
+ ## Readonly / disabled / presentation mode
206
+
207
+ Minimo esperado:
208
+
209
+ - `readonly`: valor visivel, sem mutacao
210
+ - `disabled`: fora da interacao, mas com contraste coerente
211
+ - `presentation mode`: nao quebrar layout da toolbar
212
+
213
+ ## Compatibilidade backend
214
+
215
+ Antes de publicar um novo inline:
216
+
217
+ 1. defina o shape do valor
218
+ 2. valide o DTO backend
219
+ 3. confirme serializacao de data/hora/range
220
+ 4. confirme como `clear` vira ausencia de criterio
221
+
222
+ ## Checklist de UX compacta
223
+
224
+ - placeholder curto
225
+ - label inteligivel
226
+ - foco visivel
227
+ - area de clique suficiente
228
+ - clear visivel quando preenchido
229
+ - overlay sem overflow estranho
230
+ - sem dependencia exclusiva de cor
231
+ - leitura do valor na pill ainda faz sentido
232
+
233
+ ## Checklist de engenharia
234
+
235
+ - registro no `ComponentRegistryService`
236
+ - metadata criada em `.metadata.ts`
237
+ - metadata registrada quando a contribuicao exigir discoverability em `ComponentMetadataRegistry`
238
+ - aliases somente se houver migracao
239
+ - spec cobrindo `writeValue`, `clear`, `disabled`
240
+ - doc `json-api` criada
241
+ - relacionamento com `table` documentado
@@ -0,0 +1,247 @@
1
+ ---
2
+ title: "Dynamic Fields Inline Filter Inventory"
3
+ slug: "dynamic-fields-inline-filter-inventory"
4
+ description: "Inventario runtime-first dos componentes inline usados pela trilha de filtro dinamico, com controlType canonico, paths e shape de valor."
5
+ doc_type: "reference"
6
+ document_kind: "host-guide"
7
+ component: "dynamic-fields"
8
+ category: "components"
9
+ audience:
10
+ - "frontend"
11
+ - "host"
12
+ - "architect"
13
+ - "platform-team"
14
+ level: "advanced"
15
+ status: "active"
16
+ owner: "praxis-ui"
17
+ tags:
18
+ - "dynamic-fields"
19
+ - "dynamic-filter"
20
+ - "inline"
21
+ - "inventory"
22
+ - "runtime"
23
+ order: 41
24
+ icon: "inventory_2"
25
+ toc: true
26
+ sidebar: true
27
+ search_boost: 1.14
28
+ reading_time: 18
29
+ estimated_setup_time: 20
30
+ version: "1.0"
31
+ related_docs:
32
+ - "dynamic-fields-inline-components-guide"
33
+ - "dynamic-fields-inline-filter-catalog"
34
+ - "dynamic-fields-inline-filter-runtime-contract"
35
+ - "dynamic-inline-filter-catalog"
36
+ - "dynamic-filter-payload-contract"
37
+ keywords:
38
+ - "inlineSelect"
39
+ - "INLINE_FILTER_CONTROL_TYPES"
40
+ - "ComponentRegistryService"
41
+ - "praxis-filter"
42
+ source_of_truth:
43
+ - "projects/praxis-core/src/lib/utils/inline-filter-controls.util.ts"
44
+ - "projects/praxis-dynamic-fields/src/lib/services/component-registry/component-registry.service.ts"
45
+ - "projects/praxis-table/src/lib/components/praxis-filter/praxis-filter.component.ts"
46
+ - "projects/praxis-table/src/lib/filter-settings/filter-settings.component.ts"
47
+ last_updated: "2026-03-23"
48
+ ---
49
+
50
+ # Dynamic Fields Inline Filter Inventory
51
+
52
+ ## Objetivo
53
+
54
+ Inventariar os inline filter components reais do runtime, sem misturar com o catalogo geral de fields do formulario.
55
+
56
+ ## Pre-requisitos
57
+
58
+ - Leitura basica de `PraxisFilter` e `@praxisui/dynamic-fields`
59
+ - Familiaridade com `controlType`, `ComponentRegistryService` e metadata de campo
60
+
61
+ ## Fonte de verdade usada
62
+
63
+ Este inventario foi derivado de quatro camadas reais:
64
+
65
+ 1. `INLINE_FILTER_CONTROL_TYPES` no `@praxisui/core`
66
+ 2. registro explicito no `ComponentRegistryService`
67
+ 3. promocao de controls genericos para inline no `PraxisFilter`
68
+ 4. configuracao canonica publicada no editor de settings do filtro
69
+
70
+ ## Runtime inventory vs host consumption
71
+
72
+ Este documento continua sendo a auditoria `runtime-first` da trilha inline.
73
+
74
+ Para consumo por landing page, playground e outros hosts oficiais, a superficie publicada deve ser o catalogo exportado por `@praxisui/dynamic-fields`, que organiza os mesmos `controlType` em uma trilha `inline-filter` governada e pronta para descoberta.
75
+
76
+ Nesse catalogo exportado, a trilha inline tambem publica:
77
+
78
+ - `family`, para agrupar a natureza funcional do filtro;
79
+ - `interactionPattern`, para resumir o padrao dominante de decisao ou captura;
80
+ - `icon.key` + `icon.tone`, para identidade visual canonica em menus, vitrines e playgrounds;
81
+ - `dataSourceKind`, para explicitar custo e natureza da integracao.
82
+
83
+ Regra de uso:
84
+
85
+ - `inventory`: comprova disponibilidade real e contratos de ativacao;
86
+ - `catalog`: organiza descoberta, estados, `interactionPattern`, `icon` e snippets para hosts;
87
+ - `docs`: explicam jornada e governanca, mas nao substituem o registry nem o catalogo exportado.
88
+
89
+ Regra para hosts:
90
+
91
+ - derive navegacao, cues e iconografia do catalogo exportado da lib;
92
+ - nao use este inventario como tabela editorial para menu, cards ou vitrine.
93
+
94
+ ## Regras de leitura
95
+
96
+ - `controlType canonico`: nome a ser salvo em contratos novos.
97
+ - `promocao por flag`: quando o `praxis-filter` converte um `controlType` generico para inline.
98
+ - `dependencia backend`: quando o componente depende de `resourcePath`, lookup remoto ou shape que precisa bater com `GenericFilterDTO`.
99
+
100
+ ## Resumo executivo
101
+
102
+ Existem **24 controlTypes inline canonicamente publicados** no runtime:
103
+
104
+ - 24 estao definidos em `INLINE_FILTER_CONTROL_TYPES`
105
+ - 24 estao registrados em `ComponentRegistryService`
106
+ - nem todos aparecem automaticamente na toolbar
107
+ - parte deles so entra na jornada inline por `controlType` explicito
108
+ - parte deles depende de feature flags do `praxis-filter`
109
+
110
+ ## Mapa de ativacao no runtime
111
+
112
+ ### Inline explicito por `controlType`
113
+
114
+ Sempre entram inline quando o schema usa o `controlType` canonico:
115
+
116
+ - `inlineEntityLookup`
117
+ - `inlineTime`
118
+ - `inlineTimeRange`
119
+ - `inlineTreeSelect`
120
+ - `inlineRating`
121
+ - `inlineDistanceRadius`
122
+ - `inlinePipelineStatus`
123
+ - `inlineScorePriority`
124
+ - `inlineRelativePeriod`
125
+ - `inlineSentiment`
126
+ - `inlineColorLabel`
127
+
128
+ ### Promocao de control generico para inline por flag do `praxis-filter`
129
+
130
+ Dependem do schema/base control + flags da trilha de filtro:
131
+
132
+ - `select` -> `inlineSelect`
133
+ - `multiSelect` -> `inlineMultiSelect`
134
+ - `input`/`searchInput` -> `inlineInput`
135
+ - `numericTextBox` -> `inlineNumber`
136
+ - `currency` -> `inlineCurrency`
137
+ - `priceRange` -> `inlineCurrencyRange`
138
+ - `toggle` -> `inlineToggle`
139
+ - `rangeSlider` -> `inlineRange`
140
+ - `date`/`dateInput`/`datepicker` -> `inlineDate`
141
+ - `dateRange` -> `inlineDateRange`
142
+ - `searchable-select` -> `inlineSearchableSelect`
143
+ - `async-select` -> `inlineAsyncSelect`
144
+ - `autocomplete` -> `inlineAutocomplete`
145
+
146
+ ## Familias
147
+
148
+ As colunas de implementacao e metadata abaixo descrevem artefatos internos co-localizados ao `controlType`; caminhos fisicos e nomes historicos do workspace nao fazem parte do contrato recomendado.
149
+
150
+ ### Texto
151
+
152
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
153
+ | --- | --- | --- | --- | --- | --- | --- |
154
+ | `inlineInput` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `string` | pill compacta com busca/clear | opcional |
155
+
156
+ ### Selecao
157
+
158
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
159
+ | --- | --- | --- | --- | --- | --- | --- |
160
+ | `inlineSelect` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples | pill + popover Material | opcional |
161
+ | `inlineMultiSelect` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `unknown[]` | tokens selecionados + overflow `+N` | opcional |
162
+ | `inlineSearchableSelect` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples ou option object | pill + busca/paginacao no painel | frequente |
163
+ | `inlineAsyncSelect` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples ou option object | carregamento remoto no painel | sim |
164
+
165
+ ### Remoto / lookup
166
+
167
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
168
+ | --- | --- | --- | --- | --- | --- | --- |
169
+ | `inlineEntityLookup` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | objeto ou id conforme `optionValueKey` | lookup `id + descricao` com reset | sim |
170
+ | `inlineAutocomplete` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples ou option object | busca incremental compacta | frequente |
171
+
172
+ ### Numero e moeda
173
+
174
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
175
+ | --- | --- | --- | --- | --- | --- | --- |
176
+ | `inlineNumber` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `number` | pill numerica compacta | nao |
177
+ | `inlineCurrency` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `number` | mascara monetaria inline | nao |
178
+
179
+ ### Range
180
+
181
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
182
+ | --- | --- | --- | --- | --- | --- | --- |
183
+ | `inlineCurrencyRange` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `{ minPrice?, maxPrice?, currency? }` | pill + slider/input monetario | sim |
184
+ | `inlineRange` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `number` em modo simples; `{ start?, end? }` em `mode: "range"` | slider simples ou duplo | sim para ranges |
185
+ | `inlineRating` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `{ start?, end? }` | rating semantico com bandas | sim para range/score |
186
+ | `inlineDistanceRadius` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `number` em modo simples; `{ start?, end? }` em `mode: "range"` | raio/distancia com anel visual | sim |
187
+ | `inlineScorePriority` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `number` em modo simples; `{ start?, end? }` em `mode: "range"` | faixa de score/prioridade | sim |
188
+
189
+ ### Data e tempo
190
+
191
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
192
+ | --- | --- | --- | --- | --- | --- | --- |
193
+ | `inlineDate` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `Date` no controle; host costuma serializar para data | datepicker compacto | sim na serializacao |
194
+ | `inlineDateRange` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `{ startDate?, endDate? }` | pill de periodo com shortcuts | sim |
195
+ | `inlineTime` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | string `HH:mm` | seletor de horario compacto | sim |
196
+ | `inlineTimeRange` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `{ start?, end? }` com strings `HH:mm` | faixa horaria com dois inputs e slider | sim |
197
+
198
+ ### Arvore
199
+
200
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
201
+ | --- | --- | --- | --- | --- | --- | --- |
202
+ | `inlineTreeSelect` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples do no selecionado | arvore compacta com busca | frequente |
203
+
204
+ ### Score / status / sentiment
205
+
206
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
207
+ | --- | --- | --- | --- | --- | --- | --- |
208
+ | `inlinePipelineStatus` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples ou `unknown[]` quando multiplo | cards/segmentos de status | opcional |
209
+ | `inlineRelativePeriod` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `string` semantica (`today`, `last7` etc.) | presets de periodo relativo | sim |
210
+ | `inlineSentiment` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `string` | escolha semantica por sentimento | opcional |
211
+ | `inlineColorLabel` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | valor simples ou `unknown[]` | badges coloridos | opcional |
212
+
213
+ ### Toggle
214
+
215
+ | ControlType canonico | implementacao Angular | Metadata | JSON API | Valor | Visual principal | Dependencia backend |
216
+ | --- | --- | --- | --- | --- | --- | --- |
217
+ | `inlineToggle` | `registrada por default no registry inline` | `metadata co-localizada ao controlType` | `co-localizado ao metadata (*.json-api.md)` | `boolean | null` | toggle binario com estado neutro | nao |
218
+
219
+ ## Observacoes de contrato
220
+
221
+ ### Contrato publicado
222
+
223
+ Salve e documente sempre o `controlType` canônico `inline*`.
224
+
225
+ ### Valor do componente nao e o payload HTTP final
226
+
227
+ O valor do controle participa da pipeline:
228
+
229
+ 1. componente inline manipula um shape interno
230
+ 2. `praxis-filter` agrega o form value
231
+ 3. host envia o DTO
232
+ 4. backend normaliza ranges quando necessario
233
+
234
+ Por isso:
235
+
236
+ - `Date` no front nao significa que o backend recebera `Date`
237
+ - ranges especializados precisam bater com a trilha descrita em `dynamic-filter-range-filters-guide.md`
238
+ - para operacoes Java de range, `number` isolado nao e payload HTTP valido
239
+
240
+ ### Ligacao explicita com table
241
+
242
+ Estes componentes pertencem a `dynamic-fields`, mas a feature de filtro continua sendo documentada em `praxis-table`.
243
+
244
+ Regra editorial:
245
+
246
+ - `table` documenta a jornada do filtro
247
+ - `dynamic-fields` documenta os componentes inline que a jornada utiliza