@praxisui/dynamic-form 9.0.0-beta.22 → 9.0.0-beta.26

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "9.0.0-beta.22",
3
+ "version": "9.0.0-beta.26",
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.0-beta.22",
13
- "@praxisui/dynamic-fields": "^9.0.0-beta.22",
14
- "@praxisui/metadata-editor": "^9.0.0-beta.22",
15
- "@praxisui/rich-content": "^9.0.0-beta.22",
16
- "@praxisui/settings-panel": "^9.0.0-beta.22",
17
- "@praxisui/visual-builder": "^9.0.0-beta.22",
18
- "@praxisui/core": "^9.0.0-beta.22",
12
+ "@praxisui/ai": "^9.0.0-beta.26",
13
+ "@praxisui/dynamic-fields": "^9.0.0-beta.26",
14
+ "@praxisui/metadata-editor": "^9.0.0-beta.26",
15
+ "@praxisui/rich-content": "^9.0.0-beta.26",
16
+ "@praxisui/settings-panel": "^9.0.0-beta.26",
17
+ "@praxisui/visual-builder": "^9.0.0-beta.26",
18
+ "@praxisui/core": "^9.0.0-beta.26",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -132,6 +132,7 @@ Essa fronteira preserva a premissa de plataforma: o formulario materializa e exp
132
132
  | `formRulesState` | not-specified | not-specified | n/a | Active | Persistido para round-trip do builder visual. |
133
133
  | `hooks` | not-specified | not-specified | n/a | Active | Integracao de ciclo (before/after) via runtime de hooks. |
134
134
  | `hints` | not-specified | not-specified | n/a | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
135
+ | `helpPresentation` | `FormHelpPresentationConfig` | No | `{ display: "inline" }` | Active | Politica visual para exibir `hint`/`helpText` dos campos sem alterar semantica dos DTOs; erros de validacao continuam inline. |
135
136
  | `fieldMetadata[].array` | `FieldArrayConfig` | No | n/a | Active | Contrato de Editable Collection apenas quando `fieldMetadata[].controlType === "array"` ou quando `x-ui.array` foi publicado explicitamente. |
136
137
 
137
138
  Nota editorial:
@@ -577,6 +578,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
577
578
  | `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
578
579
  | `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
579
580
  | `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
581
+ | `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; campos sem width permanecem full-width. `schemaType` e `schemaOperation` sao validados contra `schemaUrl` quando a URL declara esses parametros. |
580
582
  | `backConfig` | `BackConfig \| undefined` | `undefined` | Active | Integra retorno/navegacao no painel de configuracao; `confirmOnDirty` tem precedencia sobre `behavior.confirmOnUnsavedChanges` no cancel. |
581
583
  | `hooks` | `FormHooksLayout \| undefined` | `undefined` | Active | Override direto de hooks sobre `config.hooks`. |
582
584
  | `customEndpoints` | `EndpointConfig` | `{}` | Active | Override de endpoints no CRUD service interno. |
@@ -589,8 +591,28 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
589
591
  | `readonlyModeGlobal` | `boolean \| null` | `null` | Active | Estado global de leitura propagado para loader. |
590
592
  | `disabledModeGlobal` | `boolean \| null` | `null` | Active | Estado global de desabilitado propagado para loader. |
591
593
  | `presentationModeGlobal` | `boolean \| null` | `null` | Active | Modo apresentacao global (efetivo em `view`). |
594
+ | `fieldIconPolicy` | `'all' \| 'presentation-only' \| 'none'` | `'all'` | Active | Controla icones `prefixIcon`/`suffixIcon` vindos da metadata dos campos. `all` preserva o comportamento atual; `presentation-only` mantem icones decorativos no modo apresentacao e oculta os slots de icone em controles input/read-only tradicionais; `none` oculta esses slots em todos os modos. |
592
595
  | `visibleGlobal` | `boolean \| null` | `null` | Active | Visibilidade global propagada para loader. |
593
596
 
597
+ #### Migration baseline for ErgonX-style screens
598
+
599
+ For enterprise migrations that must become templates for many screens, `layoutPolicy`,
600
+ `helpPresentation` and `fieldIconPolicy` should be selected as part of the DTO/schema
601
+ handoff, not patched locally after visual review.
602
+
603
+ Recommended baseline:
604
+
605
+ | Surface | Inputs | Contract gate |
606
+ | --- | --- | --- |
607
+ | Detail/read-only | `layoutPolicy.source='schema'`, `intent='detail'`, `preset='compactPresentation'`, `persistence='transient'`, `schemaType='response'` | Response DTO publishes business grouping, order, labels, value presentation and safe widths. |
608
+ | Create/edit | `layoutPolicy.source='schema'`, `intent='command'`, `preset='groupedCommand'`, `persistence='transient'`, `schemaType='request'` | Request DTO/write contract publishes only editable fields, validators, options and help text required for the command. |
609
+ | Dense command drawer | `config.helpPresentation.display='auto'` with `preferPopoverForControls` for select, checkbox, toggle, date/datepickers and numeric controls | DTO help text is semantic and not a substitute for validation messages. |
610
+ | Input-heavy operational form | `fieldIconPolicy='presentation-only'` | Icons remain useful in read-only presentation but do not crowd editable controls. |
611
+
612
+ If a field requires a local label, local help text, local option mapping or local code/description
613
+ composition to look correct, the schema is not ready for scalable migration. Fix the backend DTO,
614
+ OpenAPI `x-ui` metadata or option/value-presentation contract first.
615
+
594
616
  #### Regras compartilhadas materializadas
595
617
 
596
618
  `domainRules` separa regra corporativa compartilhavel de regra materializada no `FormConfig`. Quando habilitado, o componente consulta o backend de configuracao via `DomainRuleFormRulesService`, transforma cada materializacao em `FormLayoutRule` e aplica a lista combinada:
@@ -7,7 +7,7 @@ import { MatDialog } from '@angular/material/dialog';
7
7
  import { MatSnackBar } from '@angular/material/snack-bar';
8
8
  import { CdkDragStart, CdkDragMove, CdkDragEnd, CdkDragDrop } from '@angular/cdk/drag-drop';
9
9
  import * as _praxisui_core from '@praxisui/core';
10
- import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormLayoutItem, FormActionButton, AiCapability, BackConfig, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, JsonLogicExpression, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, SurfaceOpenPayload, GlobalActionField, PraxisEffectPolicy, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, IconPickerService, GlobalActionRef, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormLayoutItem, FormActionButton, AiCapability, BackConfig, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, DynamicFormLayoutPolicy, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, JsonLogicExpression, FormHelpPresentationConfig, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, SurfaceOpenPayload, GlobalActionField, PraxisEffectPolicy, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, TableConfig, IconPickerService, GlobalActionRef, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
11
11
  import * as rxjs from 'rxjs';
12
12
  import { Observable, BehaviorSubject } from 'rxjs';
13
13
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
@@ -206,6 +206,7 @@ interface GenerateFormConfigFromMetadataOptions {
206
206
  fieldsPerRow?: number;
207
207
  defaultSectionTitle?: string;
208
208
  layoutPreset?: DynamicFormGeneratedLayoutPreset;
209
+ presentationRoleMap?: Record<string, string>;
209
210
  }
210
211
  declare class DynamicFormLayoutService {
211
212
  private readonly changesSubject;
@@ -227,6 +228,10 @@ declare class DynamicFormLayoutService {
227
228
  private inferCompactPresentationSpan;
228
229
  private clampGridSpan;
229
230
  private resolveGroupOrder;
231
+ private withCompactPresentationFieldDefaults;
232
+ private resolveFieldPresentationRole;
233
+ private resolvePresentationRole;
234
+ private normalizePresentationRole;
230
235
  private genId;
231
236
  private capitalizeFirstLetter;
232
237
  private assertIndex;
@@ -768,6 +773,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
768
773
  layout?: FormLayout;
769
774
  /** Metadata-driven layout preset used only when creating an initial config from schema. */
770
775
  generatedLayoutPreset: DynamicFormGeneratedLayoutPreset;
776
+ /** Opt-in policy for schema-driven transient layout materialization. */
777
+ layoutPolicy?: DynamicFormLayoutPolicy | null;
771
778
  /** Optional navigation back config (from CRUD host) */
772
779
  backConfig?: BackConfig;
773
780
  /** Optional direct hooks declaration for testing/demo (overrides config.hooks) */
@@ -788,6 +795,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
788
795
  disabledModeGlobal: boolean | null;
789
796
  presentationModeGlobal: boolean | null;
790
797
  visibleGlobal: boolean | null;
798
+ fieldIconPolicy: 'all' | 'presentation-only' | 'none';
791
799
  /** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
792
800
  domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
793
801
  get effectivePresentation(): boolean;
@@ -797,6 +805,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
797
805
  get invalidRequiredFieldLabels(): string[];
798
806
  /** Value propagated to DynamicFieldLoader; null allows per-field metadata */
799
807
  get presentationForLoader(): boolean | null;
808
+ getRenderableFieldsForLoader(fields: FieldMetadata[]): FieldMetadata[];
809
+ private materializeFieldPresentationPolicy;
810
+ private materializeFieldHelpPolicy;
811
+ private shouldSuppressFieldIcons;
812
+ private resolveFieldHelpDisplay;
813
+ private normalizeFieldHelpControlToken;
800
814
  /** Custom endpoints for CRUD operations */
801
815
  private _customEndpoints;
802
816
  get customEndpoints(): EndpointConfig;
@@ -992,6 +1006,10 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
992
1006
  private persistFormConfig;
993
1007
  private createDefaultConfig;
994
1008
  private createConfigFromHostConfig;
1009
+ private shouldUseSchemaLayoutPolicy;
1010
+ private layoutPolicyRequestsPresentation;
1011
+ private shouldPersistGeneratedConfig;
1012
+ private createSchemaMaterializedConfig;
995
1013
  private reconcileLoadedConfigWithServerSchema;
996
1014
  private hostConfigHasAuthoredLocalFieldsNotInLocalConfig;
997
1015
  private syncWithServer;
@@ -1147,6 +1165,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1147
1165
  private _showConfirmationDialog;
1148
1166
  onFormAction(event: PraxisFormActionEvent): void;
1149
1167
  private dispatchRichContentAction;
1168
+ private emitRichContentCustomAction;
1150
1169
  private isRichContentActionAvailable;
1151
1170
  private hasRichContentCapability;
1152
1171
  private buildRichContentActionContext;
@@ -1349,7 +1368,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1349
1368
  private applyPresentationVars;
1350
1369
  private applyPresentationConfig;
1351
1370
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicForm, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
1352
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "readUrl": { "alias": "readUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "responseSchemaUrl": { "alias": "responseSchemaUrl"; "required": false; }; "apiEndpointKey": { "alias": "apiEndpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "showAiAssistant": { "alias": "showAiAssistant"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "generatedLayoutPreset": { "alias": "generatedLayoutPreset"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "domainRules": { "alias": "domainRules"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "configPatchChange": "configPatchChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; }, never, never, true, never>;
1371
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "readUrl": { "alias": "readUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "responseSchemaUrl": { "alias": "responseSchemaUrl"; "required": false; }; "apiEndpointKey": { "alias": "apiEndpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "showAiAssistant": { "alias": "showAiAssistant"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "generatedLayoutPreset": { "alias": "generatedLayoutPreset"; "required": false; }; "layoutPolicy": { "alias": "layoutPolicy"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "fieldIconPolicy": { "alias": "fieldIconPolicy"; "required": false; }; "domainRules": { "alias": "domainRules"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "configPatchChange": "configPatchChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; }, never, never, true, never>;
1353
1372
  }
1354
1373
 
1355
1374
  declare class FormConfigService {
@@ -1547,6 +1566,12 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1547
1566
  };
1548
1567
  /** Ensure hints object exists (normalized upstream) */
1549
1568
  private ensureHints;
1569
+ get helpPresentationDraft(): Required<FormHelpPresentationConfig>;
1570
+ onHelpPresentationDisplayChange(display: FormHelpPresentationConfig['display']): void;
1571
+ onHelpPresentationInlineMaxLengthChange(inlineMaxLength: number | string | null): void;
1572
+ private updateHelpPresentation;
1573
+ getHelpPreferPopoverControlsText(): string;
1574
+ onHelpPreferPopoverControlsChange(value: string): void;
1550
1575
  schemaPrefs: {
1551
1576
  notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none';
1552
1577
  snoozeMs: number;
@@ -2172,6 +2197,7 @@ interface Ergadm00034CompactPresentationExample {
2172
2197
  readonly resourcePath: string;
2173
2198
  readonly layoutPreset: 'compactPresentation';
2174
2199
  readonly rows: readonly Ergadm00034LegacyFrequencyRow[];
2200
+ readonly tableConfig: TableConfig;
2175
2201
  readonly metadata: readonly FieldMetadata[];
2176
2202
  readonly initialValue: Record<string, unknown>;
2177
2203
  }