@praxisui/dynamic-form 3.0.0-beta.0 → 3.0.0-beta.10
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 +42 -4
- package/fesm2022/praxisui-dynamic-form.mjs +3450 -1189
- package/index.d.ts +106 -35
- package/package.json +7 -7
- package/fesm2022/praxisui-dynamic-form.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -133,6 +133,26 @@ export class FormDemoComponent {
|
|
|
133
133
|
Tip: connect to a backend resource by setting `resourcePath`/`resourceId`. The component can fetch schemas and reconcile local layout with server metadata when `enableCustomization` is true.
|
|
134
134
|
When a late `config` hydration rebuilds the surface, the runtime preserves the current form values already mounted in memory only when the logical context remains the same (`resourcePath`, `resourceId`, and mode). If the form was preloaded from `resourceId`, that entity hydration remains visible after the rebuild only for the same entity context; entity switches and create-mode transitions do not restore the previous record snapshot.
|
|
135
135
|
|
|
136
|
+
Presentation/read-only note:
|
|
137
|
+
- `praxis-dynamic-form` hospeda `FieldMetadata`, mas não é o resolvedor direto de `valuePresentation`.
|
|
138
|
+
- quando campos entram em modo view/presentation, a semântica de apresentação vem do metadata do campo e é resolvida por `@praxisui/dynamic-fields`.
|
|
139
|
+
|
|
140
|
+
## Canonical editorial resolution for field editors
|
|
141
|
+
|
|
142
|
+
Para nome, descricao e icone do tipo de campo no configurador/layout editor e no titulo do metadata editor:
|
|
143
|
+
|
|
144
|
+
- `@praxisui/dynamic-form` nao mantem mapa editorial local por `controlType`;
|
|
145
|
+
- a resolucao canonica vem de `ComponentMetadataRegistry.resolveEditorial(..., { namespace: 'dynamicFields' })`;
|
|
146
|
+
- aliases e normalizacao de `controlType` sao apenas ponte tecnica de lookup, nao fonte de copy;
|
|
147
|
+
- quando nao existe descriptor canonico para aquele tipo, o fallback aceito e tecnico/neutro.
|
|
148
|
+
|
|
149
|
+
Fronteira operacional:
|
|
150
|
+
|
|
151
|
+
- package-owned fields de `@praxisui/dynamic-fields`: consomem descriptor editorial canonico da lib;
|
|
152
|
+
- `ComponentDocMeta` desses fields e derivado, nao a origem semantica;
|
|
153
|
+
- catalogo/showcase continua derivado;
|
|
154
|
+
- custom types do host seguem suportados via `ComponentMetadataRegistry.register(ComponentDocMeta)`, sem exigir mapa local no form.
|
|
155
|
+
|
|
136
156
|
### Canonical DI contract for hosts
|
|
137
157
|
|
|
138
158
|
`praxis-dynamic-form` does not register `GenericCrudService` internally.
|
|
@@ -383,6 +403,7 @@ See public exports: `projects/praxis-dynamic-form/src/public-api.ts`.
|
|
|
383
403
|
|
|
384
404
|
- `FormSection.icon` continua suportado como identidade visual estática do header.
|
|
385
405
|
- `FormSection.sectionHeader` amplia o contrato para permitir avatar resolvido a partir do `formData`, sem perder compatibilidade com `icon`.
|
|
406
|
+
- `FormSection.headerActions` permite ações iconográficas no canto direito do header da seção, reutilizando o mesmo output `customAction` com `source: 'section-header'` e `sectionId`.
|
|
386
407
|
- Modos suportados:
|
|
387
408
|
- `icon`: usa o ícone estático da seção e, se ele estiver vazio, pode reutilizar `fallbackIcon` como identidade visual explícita do header.
|
|
388
409
|
- `avatar-image`: tenta resolver uma imagem a partir de `sourceField`.
|
|
@@ -393,8 +414,16 @@ See public exports: `projects/praxis-dynamic-form/src/public-api.ts`.
|
|
|
393
414
|
- `initialsSourceField`: field textual usado para derivar iniciais.
|
|
394
415
|
- `altField`: field usado como texto acessível do avatar e fallback textual para iniciais.
|
|
395
416
|
- `fallbackIcon`: ícone usado quando a fonte dinâmica estiver vazia ou inválida, e também como fallback explícito do modo `icon` quando `FormSection.icon` não estiver definido.
|
|
396
|
-
- `emptyState`: `fallback-icon`, `placeholder-avatar` ou `none`, útil sobretudo em fluxos `create`; o padrão efetivo é `placeholder-avatar`, neutro para qualquer domínio.
|
|
417
|
+
- `emptyState`: `fallback-icon`, `placeholder-avatar` ou `none`, útil sobretudo em fluxos `create`; o padrão efetivo é `placeholder-avatar`, neutro para qualquer domínio. Quando `fallback-icon` é usado, o ícone permanece dentro da moldura/avatar e continua obedecendo `size`.
|
|
418
|
+
- `size`: tamanho semântico do avatar (`sm`, `md` ou `lg`), materializado pelo runtime por meio dos tokens `--pfx-form-section-avatar-size*`.
|
|
397
419
|
- `initialsMaxLength`: máximo de letras no avatar textual, normalizado para `1..4`.
|
|
420
|
+
- Campos principais de `headerActions[]`:
|
|
421
|
+
- `id`, `label`, `icon`
|
|
422
|
+
- `action` (opcional; se vazio, usa `id`; quando informado, ele vira o nome lógico emitido e a base de rules/mensagens)
|
|
423
|
+
- `tooltip` (opcional; se vazio, usa `label`)
|
|
424
|
+
- `color`, `visible`, `disabled`, `loading`
|
|
425
|
+
- `className` (classe CSS opcional aplicada ao botão do header)
|
|
426
|
+
- `style` (objeto de estilo inline opcional; no editor é informado como JSON)
|
|
398
427
|
- Formatos de imagem aceitos pelo runtime:
|
|
399
428
|
- URL
|
|
400
429
|
- data URL base64
|
|
@@ -417,13 +446,15 @@ Os paths micro são normalizados para `fieldMetadata[].<prop>` para garantir que
|
|
|
417
446
|
|
|
418
447
|
## Regras de formulário (novo contrato)
|
|
419
448
|
|
|
420
|
-
- Formato: cada regra tem `targetType` (`field | section | action | row | column`), `targets: string[]` (IDs canônicos
|
|
421
|
-
- Compatibilidade: regras antigas (`context/targetField`) são migradas para `properties/targets` automaticamente;
|
|
449
|
+
- Formato: cada regra tem `targetType` (`field | section | action | row | column`), `targets: string[]` (IDs canônicos do alvo), e `effect` com `condition` (DSL ou Specification), `properties` e `propertiesWhenFalse`.
|
|
450
|
+
- Compatibilidade: regras antigas (`context/targetField`) são migradas para `properties/targets` automaticamente; prefixes legados `section:/action:/row:/column:` continuam sendo normalizados quando representarem alvos tradicionais. Para header actions de seção, o ID canônico é preservado como `section:<sectionId>:header-action:<actionLogicalId>`.
|
|
422
451
|
- Semântica de limpeza: valores `null` em `properties/propertiesWhenFalse` removem o override e retornam ao valor base do layout; ausência mantém o valor base.
|
|
423
452
|
- Whitelist por tipo (somente propriedades a seguir são aplicadas; demais são descartadas e logadas em dev):
|
|
424
453
|
- `field`: `visible`, `required`, `readonly`, `disabled`, `className`, `style`, `label`, `description`, `placeholder`, `hint`, `tooltip`, `prefixIcon`, `suffixIcon`, `prefixText`, `suffixText`, `defaultValue`, `options` (array `{label,value,disabled?}`), `appearance` (`fill|outline`), `color` (`primary|accent|warn`), `floatLabel` (`auto|always|never`), `hintPosition` (`start|end`), `validators` (primitivos por chave).
|
|
425
|
-
- `section`: `visible`, `title`, `description`, `icon`, `sectionHeader` (objeto rico) e tambem subpropriedades tipadas como `sectionHeader.mode`, `sectionHeader.sourceField`, `sectionHeader.initialsSourceField`, `sectionHeader.altField`, `sectionHeader.fallbackIcon`, `sectionHeader.emptyState`, `sectionHeader.initialsMaxLength`, `className`, `style`, `collapsible`, `collapsed`, `headerTooltip`, `headerAlign` (`start|center`), `appearance` (`card|plain|step`), `stepLabel`, gaps (`gapBottom`, `titleGapBottom`, `descriptionGapBottom`), cores/tipografia (`titleColor`, `descriptionColor`, `titleStyle`, `descriptionStyle`).
|
|
454
|
+
- `section`: `visible`, `title`, `description`, `icon`, `sectionHeader` (objeto rico), `headerActions` (ações contextuais do cabeçalho) e tambem subpropriedades tipadas como `sectionHeader.mode`, `sectionHeader.sourceField`, `sectionHeader.initialsSourceField`, `sectionHeader.altField`, `sectionHeader.fallbackIcon`, `sectionHeader.emptyState`, `sectionHeader.size`, `sectionHeader.initialsMaxLength`, `className`, `style`, `collapsible`, `collapsed`, `headerTooltip`, `headerAlign` (`start|center`), `appearance` (`card|plain|step`), `stepLabel`, gaps (`gapBottom`, `titleGapBottom`, `descriptionGapBottom`), cores/tipografia (`titleColor`, `descriptionColor`, `titleStyle`, `descriptionStyle`).
|
|
426
455
|
- `action`: `visible`, `disabled`, `loading`, `label`, `icon`, `tooltip`, `color` (`primary|accent|warn|basic`), `variant` (`raised|stroked|flat|fab`), `size` (`small|medium|large`), `className`, `style`.
|
|
456
|
+
- IDs canônicos de regras para actions do header de seção usam o formato `section:<sectionId>:header-action:<actionLogicalId>`, evitando colisão com botões globais e com ações repetidas em seções diferentes.
|
|
457
|
+
- Se a seção ainda não tiver `id`, o runtime aceita o fallback `header-action:<actionLogicalId>` por compatibilidade; para contratos persistidos, prefira sempre materializar `section.id`.
|
|
427
458
|
- `row`: `visible`, `gap`, `rowGap`, `className`, `style`.
|
|
428
459
|
- `column`: `visible`, `span`, `offset`, `order`, `hidden`, `align` (`start|center|end|stretch`), `padding`, `className`, `style`.
|
|
429
460
|
- Runtime (FormRulesService): filtra por whitelist, converte tipos (enum/number/boolean/string), saneia objetos (`options/validators/style`), aplica remoção de chaves com `null` e retorna mapas `fieldProps/sectionProps/actionProps/rowProps/columnProps`.
|
|
@@ -519,6 +550,13 @@ Dicas
|
|
|
519
550
|
- Tokens M3: prefira `--md-sys-*` para cores/superfícies.
|
|
520
551
|
- Mobile: ative `collapseToMenu` para colapsar botões extras em menu nas telas pequenas.
|
|
521
552
|
- A classe de tema é decisão do host (`.dark-theme` ou `.theme-dark`/`.theme-light`); mantenha tokens e componentes no mesmo escopo.
|
|
553
|
+
- Editor integrado:
|
|
554
|
+
- `Ações > Botões Customizados` permite editar `label`, `icon`, `color`, `variant`, `size`, `tooltip`, `shortcut`, `className`, `disabled`, `loading` e `style` (JSON).
|
|
555
|
+
- `Seção > Cabeçalho` permite editar `headerActions[]` sem JSON manual, incluindo adicionar, remover e reordenar ações do header.
|
|
556
|
+
- No campo `action`, o editor sugere o catálogo global canônico do core e mantém fallback para ação customizada livre; o valor salvo continua compatível com `action` textual legado.
|
|
557
|
+
- Ações globais no header seguem o mesmo princípio operacional do restante da plataforma: dependem de executor no app (`ActionResolver`) e validam parâmetro obrigatório quando o catálogo exigir.
|
|
558
|
+
- Para `surface.open`, o editor expõe o authoring especializado da surface em vez de reduzir tudo a texto cru.
|
|
559
|
+
- A mesma aba permite reordenar `actions.custom[]` pelos controles de mover para cima/baixo; a ordem salva é a mesma ordem renderizada no runtime, sempre depois de `submit/cancel/reset`.
|
|
522
560
|
|
|
523
561
|
### Tokens M3 obrigatórios (host)
|
|
524
562
|
|