@praxisui/dynamic-form 3.0.0-beta.6 → 3.0.0-beta.7
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 +21 -3
- package/fesm2022/praxisui-dynamic-form.mjs +1435 -179
- package/fesm2022/praxisui-dynamic-form.mjs.map +1 -1
- package/index.d.ts +27 -3
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -133,6 +133,10 @@ 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
|
+
|
|
136
140
|
### Canonical DI contract for hosts
|
|
137
141
|
|
|
138
142
|
`praxis-dynamic-form` does not register `GenericCrudService` internally.
|
|
@@ -383,6 +387,7 @@ See public exports: `projects/praxis-dynamic-form/src/public-api.ts`.
|
|
|
383
387
|
|
|
384
388
|
- `FormSection.icon` continua suportado como identidade visual estática do header.
|
|
385
389
|
- `FormSection.sectionHeader` amplia o contrato para permitir avatar resolvido a partir do `formData`, sem perder compatibilidade com `icon`.
|
|
390
|
+
- `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
391
|
- Modos suportados:
|
|
387
392
|
- `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
393
|
- `avatar-image`: tenta resolver uma imagem a partir de `sourceField`.
|
|
@@ -396,6 +401,13 @@ See public exports: `projects/praxis-dynamic-form/src/public-api.ts`.
|
|
|
396
401
|
- `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`.
|
|
397
402
|
- `size`: tamanho semântico do avatar (`sm`, `md` ou `lg`), materializado pelo runtime por meio dos tokens `--pfx-form-section-avatar-size*`.
|
|
398
403
|
- `initialsMaxLength`: máximo de letras no avatar textual, normalizado para `1..4`.
|
|
404
|
+
- Campos principais de `headerActions[]`:
|
|
405
|
+
- `id`, `label`, `icon`
|
|
406
|
+
- `action` (opcional; se vazio, usa `id`; quando informado, ele vira o nome lógico emitido e a base de rules/mensagens)
|
|
407
|
+
- `tooltip` (opcional; se vazio, usa `label`)
|
|
408
|
+
- `color`, `visible`, `disabled`, `loading`
|
|
409
|
+
- `className` (classe CSS opcional aplicada ao botão do header)
|
|
410
|
+
- `style` (objeto de estilo inline opcional; no editor é informado como JSON)
|
|
399
411
|
- Formatos de imagem aceitos pelo runtime:
|
|
400
412
|
- URL
|
|
401
413
|
- data URL base64
|
|
@@ -418,13 +430,15 @@ Os paths micro são normalizados para `fieldMetadata[].<prop>` para garantir que
|
|
|
418
430
|
|
|
419
431
|
## Regras de formulário (novo contrato)
|
|
420
432
|
|
|
421
|
-
- Formato: cada regra tem `targetType` (`field | section | action | row | column`), `targets: string[]` (IDs canônicos
|
|
422
|
-
- Compatibilidade: regras antigas (`context/targetField`) são migradas para `properties/targets` automaticamente;
|
|
433
|
+
- 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`.
|
|
434
|
+
- 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>`.
|
|
423
435
|
- 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.
|
|
424
436
|
- Whitelist por tipo (somente propriedades a seguir são aplicadas; demais são descartadas e logadas em dev):
|
|
425
437
|
- `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).
|
|
426
|
-
- `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.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`).
|
|
438
|
+
- `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`).
|
|
427
439
|
- `action`: `visible`, `disabled`, `loading`, `label`, `icon`, `tooltip`, `color` (`primary|accent|warn|basic`), `variant` (`raised|stroked|flat|fab`), `size` (`small|medium|large`), `className`, `style`.
|
|
440
|
+
- 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.
|
|
441
|
+
- 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`.
|
|
428
442
|
- `row`: `visible`, `gap`, `rowGap`, `className`, `style`.
|
|
429
443
|
- `column`: `visible`, `span`, `offset`, `order`, `hidden`, `align` (`start|center|end|stretch`), `padding`, `className`, `style`.
|
|
430
444
|
- 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`.
|
|
@@ -520,6 +534,10 @@ Dicas
|
|
|
520
534
|
- Tokens M3: prefira `--md-sys-*` para cores/superfícies.
|
|
521
535
|
- Mobile: ative `collapseToMenu` para colapsar botões extras em menu nas telas pequenas.
|
|
522
536
|
- A classe de tema é decisão do host (`.dark-theme` ou `.theme-dark`/`.theme-light`); mantenha tokens e componentes no mesmo escopo.
|
|
537
|
+
- Editor integrado:
|
|
538
|
+
- `Ações > Botões Customizados` permite editar `label`, `icon`, `color`, `variant`, `size`, `tooltip`, `shortcut`, `className`, `disabled`, `loading` e `style` (JSON).
|
|
539
|
+
- `Seção > Cabeçalho` permite editar `headerActions[]` sem JSON manual, incluindo adicionar, remover e reordenar ações do header.
|
|
540
|
+
- 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`.
|
|
523
541
|
|
|
524
542
|
### Tokens M3 obrigatórios (host)
|
|
525
543
|
|