@praxisui/dynamic-fields 8.0.0-beta.8 → 8.0.0-beta.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/docs/dynamic-fields-field-catalog.md +217 -0
- package/docs/dynamic-fields-field-selection-guide.md +204 -0
- package/docs/dynamic-fields-host-custom-field-guide.md +252 -0
- package/docs/dynamic-fields-host-custom-field-troubleshooting.md +160 -0
- package/docs/dynamic-fields-inline-components-guide.md +582 -0
- package/docs/dynamic-fields-inline-filter-catalog.md +502 -0
- package/docs/dynamic-fields-inline-filter-custom-component-guide.md +241 -0
- package/docs/dynamic-fields-inline-filter-inventory.md +247 -0
- package/docs/dynamic-fields-inline-filter-runtime-contract.md +391 -0
- package/docs/dynamic-fields-inline-filter-selection-guide.md +419 -0
- package/docs/dynamic-fields-inline-filter-troubleshooting.md +201 -0
- package/docs/dynamic-fields-inventory.md +206 -0
- package/docs/dynamic-fields-playground-catalog-plan.md +243 -0
- package/docs/generic-crud-service.md +152 -0
- package/fesm2022/praxisui-dynamic-fields-index-CBogy3si.mjs +1 -0
- package/fesm2022/praxisui-dynamic-fields-index-CWPZdn1Y.mjs +6 -0
- package/fesm2022/praxisui-dynamic-fields-index-CrHhyUMO.mjs +1 -0
- package/fesm2022/praxisui-dynamic-fields-index-DhGo5In4.mjs +6 -0
- package/fesm2022/praxisui-dynamic-fields.mjs +19551 -10669
- package/package.json +14 -13
- package/src/lib/base/pdx-base-input-runtime-contract.json-api.md +526 -0
- package/src/lib/base/pdx-base-select-runtime-contract.json-api.md +474 -0
- package/src/lib/components/color-input/pdx-color-input.json-api.md +573 -0
- package/src/lib/components/color-picker/pdx-color-picker.json-api.md +686 -0
- package/src/lib/components/date-input/pdx-date-input.json-api.md +581 -0
- package/src/lib/components/datetime-local-input/pdx-datetime-local-input.json-api.md +560 -0
- package/src/lib/components/email-input/pdx-email-input.json-api.md +546 -0
- package/src/lib/components/field-shell/praxis-field-shell.json-api.md +523 -0
- package/src/lib/components/inline-async-select/pdx-inline-async-select.json-api.md +566 -0
- package/src/lib/components/inline-autocomplete/pdx-inline-autocomplete.json-api.md +554 -0
- package/src/lib/components/inline-color-label/pdx-inline-color-label.json-api.md +615 -0
- package/src/lib/components/inline-currency/pdx-inline-currency.json-api.md +542 -0
- package/src/lib/components/inline-currency-range/pdx-inline-currency-range.json-api.md +630 -0
- package/src/lib/components/inline-date/pdx-inline-date.json-api.md +529 -0
- package/src/lib/components/inline-date-range/pdx-inline-date-range.json-api.md +592 -0
- package/src/lib/components/inline-distance-radius/pdx-inline-distance-radius.json-api.md +649 -0
- package/src/lib/components/inline-entity-lookup/pdx-inline-entity-lookup.json-api.md +656 -0
- package/src/lib/components/inline-input/pdx-inline-input.json-api.md +538 -0
- package/src/lib/components/inline-multi-select/pdx-inline-multi-select.json-api.md +566 -0
- package/src/lib/components/inline-number/pdx-inline-number.json-api.md +533 -0
- package/src/lib/components/inline-pipeline-status/pdx-inline-pipeline-status.json-api.md +619 -0
- package/src/lib/components/inline-range-slider/pdx-inline-range-slider.json-api.md +605 -0
- package/src/lib/components/inline-rating/pdx-inline-rating.json-api.md +594 -0
- package/src/lib/components/inline-relative-period/pdx-inline-relative-period.json-api.md +623 -0
- package/src/lib/components/inline-score-priority/pdx-inline-score-priority.json-api.md +632 -0
- package/src/lib/components/inline-searchable-select/pdx-inline-searchable-select.json-api.md +564 -0
- package/src/lib/components/inline-select/pdx-inline-select.json-api.md +571 -0
- package/src/lib/components/inline-sentiment/pdx-inline-sentiment.json-api.md +661 -0
- package/src/lib/components/inline-time/pdx-inline-time.json-api.md +573 -0
- package/src/lib/components/inline-time-range/pdx-inline-time-range.json-api.md +635 -0
- package/src/lib/components/inline-toggle/pdx-inline-toggle.json-api.md +516 -0
- package/src/lib/components/inline-tree-select/pdx-inline-tree-select.json-api.md +637 -0
- package/src/lib/components/material-async-select/pdx-material-async-select.json-api.md +566 -0
- package/src/lib/components/material-autocomplete/pdx-material-autocomplete.json-api.md +561 -0
- package/src/lib/components/material-avatar/pdx-material-avatar.json-api.md +670 -0
- package/src/lib/components/material-button/pdx-material-button.json-api.md +572 -0
- package/src/lib/components/material-button-toggle/pdx-material-button-toggle.json-api.md +577 -0
- package/src/lib/components/material-checkbox-group/pdx-material-checkbox-group.json-api.md +611 -0
- package/src/lib/components/material-chips/pdx-material-chips.json-api.md +601 -0
- package/src/lib/components/material-colorpicker/pdx-material-colorpicker.json-api.md +545 -0
- package/src/lib/components/material-cpf-cnpj-input/pdx-material-cpf-cnpj-input.json-api.md +531 -0
- package/src/lib/components/material-currency/pdx-material-currency.json-api.md +569 -0
- package/src/lib/components/material-date-range/pdx-material-date-range.json-api.md +636 -0
- package/src/lib/components/material-datepicker/pdx-material-datepicker.json-api.md +551 -0
- package/src/lib/components/material-file-upload/pdx-material-file-upload.json-api.md +511 -0
- package/src/lib/components/material-multi-select/pdx-material-multi-select.json-api.md +596 -0
- package/src/lib/components/material-multi-select-tree/pdx-material-multi-select-tree.json-api.md +623 -0
- package/src/lib/components/material-price-range/pdx-material-price-range.json-api.md +619 -0
- package/src/lib/components/material-radio-group/pdx-material-radio-group.json-api.md +585 -0
- package/src/lib/components/material-range-slider/pdx-material-range-slider.json-api.md +664 -0
- package/src/lib/components/material-rating/pdx-material-rating.json-api.md +551 -0
- package/src/lib/components/material-searchable-select/pdx-material-searchable-select.json-api.md +602 -0
- package/src/lib/components/material-select/pdx-material-select.json-api.md +601 -0
- package/src/lib/components/material-selection-list/pdx-material-selection-list.json-api.md +607 -0
- package/src/lib/components/material-slide-toggle/pdx-material-slide-toggle.json-api.md +522 -0
- package/src/lib/components/material-slider/pdx-material-slider.json-api.md +602 -0
- package/src/lib/components/material-textarea/pdx-material-textarea.json-api.md +598 -0
- package/src/lib/components/material-timepicker/pdx-material-timepicker.json-api.md +554 -0
- package/src/lib/components/material-transfer-list/pdx-material-transfer-list.json-api.md +614 -0
- package/src/lib/components/material-tree-select/pdx-material-tree-select.json-api.md +649 -0
- package/src/lib/components/month-input/pdx-month-input.json-api.md +527 -0
- package/src/lib/components/number-input/pdx-number-input.json-api.md +594 -0
- package/src/lib/components/password-input/pdx-password-input.json-api.md +574 -0
- package/src/lib/components/pdx-material-time-range/pdx-material-time-range.json-api.md +592 -0
- package/src/lib/components/pdx-year-input/pdx-year-input.json-api.md +543 -0
- package/src/lib/components/phone-input/pdx-phone-input.json-api.md +583 -0
- package/src/lib/components/preload-status/pdx-preload-status.json-api.md +455 -0
- package/src/lib/components/search-input/pdx-search-input.json-api.md +536 -0
- package/src/lib/components/text-input/pdx-text-input.json-api.md +600 -0
- package/src/lib/components/time-input/pdx-time-input.json-api.md +546 -0
- package/src/lib/components/url-input/pdx-url-input.json-api.md +542 -0
- package/src/lib/components/week-input/pdx-week-input.json-api.md +533 -0
- package/{index.d.ts → types/praxisui-dynamic-fields.d.ts} +874 -440
- package/fesm2022/praxisui-dynamic-fields-index-C9IUU4lo.mjs +0 -1
- package/fesm2022/praxisui-dynamic-fields-index-GJtthzkD.mjs +0 -1
- 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
|