@praxisui/dynamic-form 9.0.4-rc.43 → 9.0.4-rc.44
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.
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-11T03:13:34.466Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-form",
|
|
5
|
-
"packageVersion": "9.0.4-rc.
|
|
5
|
+
"packageVersion": "9.0.4-rc.44",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 2,
|
|
@@ -8200,6 +8200,7 @@ function validateDynamicFormAuthoringInput(raw, context) {
|
|
|
8200
8200
|
return dedupeDiagnostics(diagnostics);
|
|
8201
8201
|
}
|
|
8202
8202
|
function validateNormalizedDynamicFormAuthoringDocument(normalized, diagnostics, context) {
|
|
8203
|
+
diagnoseIncompleteGroupedCommandRows(normalized.config, diagnostics);
|
|
8203
8204
|
if (context?.server?.schemaHash) {
|
|
8204
8205
|
const configHash = trimString(normalized.config?.metadata?.serverHash);
|
|
8205
8206
|
if (!configHash) {
|
|
@@ -8210,6 +8211,27 @@ function validateNormalizedDynamicFormAuthoringDocument(normalized, diagnostics,
|
|
|
8210
8211
|
}
|
|
8211
8212
|
}
|
|
8212
8213
|
}
|
|
8214
|
+
function diagnoseIncompleteGroupedCommandRows(config, diagnostics) {
|
|
8215
|
+
if (config.metadata?.generatedLayoutPreset !== 'groupedCommand')
|
|
8216
|
+
return;
|
|
8217
|
+
(config.sections || []).forEach((section, sectionIndex) => {
|
|
8218
|
+
(section.rows || []).forEach((row, rowIndex) => {
|
|
8219
|
+
if (!Array.isArray(row.columns) || row.columns.length < 2)
|
|
8220
|
+
return;
|
|
8221
|
+
const occupiedColumns = row.columns.reduce((total, column) => total + resolveDesktopColumnSpan(column?.span), 0);
|
|
8222
|
+
if (occupiedColumns >= 12)
|
|
8223
|
+
return;
|
|
8224
|
+
diagnostics.push(warnDiagnostic('dynamicForm.config.layout.groupedCommand.row.incomplete', `Grouped command row occupies ${occupiedColumns} of 12 desktop columns. Declare compatible x-ui.width values or intentionally author the row layout to avoid visual misalignment.`, `config.sections[${sectionIndex}].rows[${rowIndex}].columns`));
|
|
8225
|
+
});
|
|
8226
|
+
});
|
|
8227
|
+
}
|
|
8228
|
+
function resolveDesktopColumnSpan(span) {
|
|
8229
|
+
const value = asRecord(span);
|
|
8230
|
+
const candidates = [value.md, value.lg, value.xl].filter((candidate) => typeof candidate === 'number' && Number.isFinite(candidate));
|
|
8231
|
+
if (!candidates.length)
|
|
8232
|
+
return 12;
|
|
8233
|
+
return Math.max(...candidates.map((candidate) => Math.max(1, Math.min(12, candidate))));
|
|
8234
|
+
}
|
|
8213
8235
|
function toCanonicalDynamicFormConfig(doc, _context) {
|
|
8214
8236
|
const normalized = normalizeDynamicFormAuthoringDocument(doc);
|
|
8215
8237
|
const canonical = cloneJson(normalized.config);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-form",
|
|
3
|
-
"version": "9.0.4-rc.
|
|
3
|
+
"version": "9.0.4-rc.44",
|
|
4
4
|
"description": "Angular dynamic form engine for Praxis UI: metadata-driven forms, hooks, and services integrating @praxisui/* packages.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
"@angular/forms": "^21.0.0",
|
|
10
10
|
"@angular/material": "^21.0.0",
|
|
11
11
|
"@angular/router": "^21.0.0",
|
|
12
|
-
"@praxisui/ai": "^9.0.4-rc.
|
|
13
|
-
"@praxisui/dynamic-fields": "^9.0.4-rc.
|
|
14
|
-
"@praxisui/metadata-editor": "^9.0.4-rc.
|
|
15
|
-
"@praxisui/rich-content": "^9.0.4-rc.
|
|
16
|
-
"@praxisui/settings-panel": "^9.0.4-rc.
|
|
17
|
-
"@praxisui/visual-builder": "^9.0.4-rc.
|
|
18
|
-
"@praxisui/core": "^9.0.4-rc.
|
|
12
|
+
"@praxisui/ai": "^9.0.4-rc.44",
|
|
13
|
+
"@praxisui/dynamic-fields": "^9.0.4-rc.44",
|
|
14
|
+
"@praxisui/metadata-editor": "^9.0.4-rc.44",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.4-rc.44",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.4-rc.44",
|
|
17
|
+
"@praxisui/visual-builder": "^9.0.4-rc.44",
|
|
18
|
+
"@praxisui/core": "^9.0.4-rc.44",
|
|
19
19
|
"rxjs": "^7.8.0"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
@@ -592,6 +592,8 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
|
|
|
592
592
|
| `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
|
|
593
593
|
| `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
|
|
594
594
|
| `layoutPolicy` | `DynamicFormLayoutPolicy \| null` | `null` | Active | Politica opt-in para materializar layout a partir do schema atual. Use `source: 'schema'` com `persistence: 'transient'` para detalhe/read-only e command forms schema-driven sem persistir `sections` geradas nem reabrir configuracao local salva; politicas de host em `config`, como `helpPresentation`, continuam sendo aplicadas ao layout materializado. Em `mode='view'`, `intent: 'detail'` ou `preset: 'compactPresentation'` ativa apresentacao quando `presentationModeGlobal` nao foi informado; use `[presentationModeGlobal]=false` para controles read-only tradicionais. No preset `compactPresentation`, `x-ui.width` explicito empacota campos em linhas de 12 colunas e tem precedencia sobre `detailSummary.columns` por default; campos sem width permanecem full-width, a menos que `detailSummary.columns`/`responsiveColumns` declare a densidade do resumo. Use `detailSummary.widthPrecedence='summary'` quando a densidade do resumo read-only deve sobrescrever `x-ui.width` apenas nessa surface compacta. No preset `groupedCommand`, `groupedCommand.orphanFieldExpansion` controla linhas com um unico campo: `medium-and-wide` (default) expande spans 6/8, `preserve` mantem o width publicado e `all` tambem expande campos compactos. `groupedCommand.contextFields` identifica campos schema-backed já hidratados pela surface: eles permanecem no `FormGroup` e no payload, mas não renderizam controles redundantes. Use `responsiveColumns`, por exemplo `{ lg: 3, md: 2, sm: 1 }`, para drawers, side sheets e painéis corporativos estreitos sem copiar `FormConfig.sections` locais. `schemaType` e `schemaOperation` sao validados contra `schemaUrl` quando a URL declara esses parametros. |
|
|
595
|
+
|
|
596
|
+
O authoring emite o warning `dynamicForm.config.layout.groupedCommand.row.incomplete` quando uma linha gerada com dois ou mais campos ocupa menos de 12 colunas no desktop. A correção preferencial é declarar larguras `x-ui.width` compatíveis na fonte canônica do schema; o runtime não redistribui silenciosamente campos compactos porque o espaço pode ser intencional.
|
|
595
597
|
| `backConfig` | `BackConfig \| undefined` | `undefined` | Active | Integra retorno/navegacao no painel de configuracao; `confirmOnDirty` tem precedencia sobre `behavior.confirmOnUnsavedChanges` no cancel. |
|
|
596
598
|
| `hooks` | `FormHooksLayout \| undefined` | `undefined` | Active | Override direto de hooks sobre `config.hooks`. |
|
|
597
599
|
| `customEndpoints` | `EndpointConfig` | `{}` | Active | Override de endpoints no CRUD service interno. |
|