@meshmakers/octo-ui 3.5.430 → 3.5.440

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": "@meshmakers/octo-ui",
3
- "version": "3.5.430",
3
+ "version": "3.5.440",
4
4
  "peerDependencies": {
5
5
  "@ngx-translate/core": "^17.0.0 || ^18.0.0",
6
6
  "@angular/animations": "^22.0.0",
@@ -81,6 +81,17 @@ interface EntityFormSectionDef {
81
81
  collapsed?: boolean | null;
82
82
  columns?: number | null;
83
83
  }
84
+ /**
85
+ * Host hint under a field (AB#7423): informational text, optionally with one action link, e.g.
86
+ * "Overridden elsewhere - this value is deployed: 1Gi" + "Open values.yaml". Never affects validity.
87
+ */
88
+ interface EntityFormFieldHint {
89
+ text: string;
90
+ /** Label of the action link; without it the hint is plain text. */
91
+ actionLabel?: string;
92
+ /** Passed back with `fieldHintAction` when the link is activated. */
93
+ actionId?: string;
94
+ }
84
95
  interface EntityFormFieldDef {
85
96
  attributePath: string;
86
97
  sectionKey?: string | null;
@@ -255,6 +266,11 @@ interface ResolvedEntityForm {
255
266
  formRtId?: string;
256
267
  formWellKnownName?: string;
257
268
  rtCkTypeId: string;
269
+ /**
270
+ * Ancestor CK type ids of {@link rtCkTypeId} (nearest first), as read from the CK metadata.
271
+ * Lets host cross-field validators target a base type (AB#7422).
272
+ */
273
+ ckTypeAncestors?: string[];
258
274
  formTargetCkTypeId: string;
259
275
  isAbstract: boolean;
260
276
  includeDerivedTypes: boolean;
@@ -693,6 +709,66 @@ declare class EntityFormDataService {
693
709
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EntityFormDataService>;
694
710
  }
695
711
 
712
+ /**
713
+ * Form-level (cross-field) validation hook of `mm-entity-form` (AB#7422).
714
+ *
715
+ * The per-field rules of a form definition (`required`, `min`, `max`, `pattern`) cannot express a
716
+ * rule over several fields, e.g. "request must not exceed limit". A host registers an
717
+ * {@link EntityFormCrossFieldValidator} for the CK types it knows; the library stays free of any
718
+ * domain knowledge. The validator is re-run on every value change and answers one message per
719
+ * offending field. Each named field is marked invalid (the message is shown under it, immediately,
720
+ * without waiting for the user to touch it) and the form cannot be saved until the validator
721
+ * answers `null` / an empty object.
722
+ */
723
+ interface EntityFormCrossFieldContext {
724
+ /**
725
+ * Current values of the enabled (visible, writable) fields, keyed by field key — for attribute
726
+ * fields the camelCase attribute name. Values are form values (strings, numbers, booleans, ...).
727
+ */
728
+ readonly values: Readonly<Record<string, unknown>>;
729
+ /** The resolved form (metadata only). */
730
+ readonly form: ResolvedEntityForm;
731
+ readonly mode: EntityFormMode;
732
+ }
733
+ /**
734
+ * Messages by field: the key is a field key or an attribute name (any casing), the value the
735
+ * text shown under that field. Unknown keys and keys of disabled fields are ignored.
736
+ */
737
+ type EntityFormCrossFieldErrors = Readonly<Record<string, string>>;
738
+ interface EntityFormCrossFieldValidator {
739
+ /**
740
+ * CK type ids (`System.Communication/DeployableWorkload`, case-insensitive) the validator applies
741
+ * to. A form matches when its concrete runtime type **or one of that type's ancestors** is listed,
742
+ * so a rule on a base type also covers every derived type.
743
+ */
744
+ readonly ckTypeIds: readonly string[];
745
+ /** Pure function of the context. A throwing validator is ignored (logged once per call). */
746
+ validate(context: EntityFormCrossFieldContext): EntityFormCrossFieldErrors | null | undefined;
747
+ }
748
+ /** Entry of {@link ENTITY_FORM_CROSS_FIELD_VALIDATORS}: one validator or a list of them. */
749
+ type EntityFormCrossFieldValidatorProvision = EntityFormCrossFieldValidator | readonly EntityFormCrossFieldValidator[];
750
+ /**
751
+ * Multi token of host validators (root or lazy route). Prefer {@link provideEntityFormCrossFieldValidators}.
752
+ * The `crossFieldValidators` input of `mm-entity-form` is applied in addition to these.
753
+ */
754
+ declare const ENTITY_FORM_CROSS_FIELD_VALIDATORS: InjectionToken<EntityFormCrossFieldValidatorProvision>;
755
+ /** Registers validators on a route or at root; several registrations add up. */
756
+ declare function provideEntityFormCrossFieldValidators(...validators: EntityFormCrossFieldValidator[]): EnvironmentProviders;
757
+ /** Flattens the injected multi-provider value (`null` / single / list entries). */
758
+ declare function flattenCrossFieldValidators(provided: EntityFormCrossFieldValidatorProvision | readonly EntityFormCrossFieldValidatorProvision[] | null | undefined): EntityFormCrossFieldValidator[];
759
+ /** True when the validator applies to the form's concrete type or one of its ancestors. */
760
+ declare function crossFieldValidatorApplies(validator: EntityFormCrossFieldValidator, form: ResolvedEntityForm): boolean;
761
+ /**
762
+ * Runs every applicable validator and maps the answer to field keys. The first message per field
763
+ * wins (validators run in registration order). Names that match no field are dropped.
764
+ */
765
+ declare function runCrossFieldValidators(validators: readonly EntityFormCrossFieldValidator[], form: ResolvedEntityForm, fields: readonly ResolvedField[], values: Readonly<Record<string, unknown>>, mode: EntityFormMode): Record<string, string>;
766
+ /**
767
+ * Host hints on fields (AB#7423): evaluated on the current values of the form on every change. The result is keyed
768
+ * by field key or attribute name (any casing); unknown keys are ignored. `mm-entity-form` input `fieldHints`.
769
+ */
770
+ type EntityFormFieldHintsProvider = (context: EntityFormCrossFieldContext) => Readonly<Record<string, EntityFormFieldHint>> | null | undefined;
771
+
696
772
  /**
697
773
  * What a label belongs to (AB#5623):
698
774
  * - `formTitle` / `formDescription` — the form's name and description (`key` = the form key, else
@@ -910,6 +986,9 @@ declare class EntityFormComponent {
910
986
  private readonly keyRingConfigured;
911
987
  private readonly injectedLabelResolver;
912
988
  private readonly injectedBeforeSave;
989
+ private readonly injectedCrossFieldValidators;
990
+ private readonly host;
991
+ private readonly injector;
913
992
  private readonly unsetPlaceholders;
914
993
  readonly model: _angular_core.InputSignal<ResolvedEntityForm>;
915
994
  readonly mode: _angular_core.InputSignal<EntityFormMode>;
@@ -936,6 +1015,29 @@ declare class EntityFormComponent {
936
1015
  * token), so set it there when the page saves. See `EntityFormBeforeSaveHook`.
937
1016
  */
938
1017
  readonly beforeSave: _angular_core.InputSignal<EntityFormBeforeSaveHook | null | undefined>;
1018
+ /**
1019
+ * Host cross-field validators (AB#7422), applied in addition to the ones registered with
1020
+ * `provideEntityFormCrossFieldValidators` / `ENTITY_FORM_CROSS_FIELD_VALIDATORS`. A validator
1021
+ * names the fields that break a rule over several fields; those fields are invalid (message
1022
+ * shown immediately) and the form cannot be saved until the rule holds.
1023
+ */
1024
+ readonly crossFieldValidators: _angular_core.InputSignal<readonly EntityFormCrossFieldValidator[] | null | undefined>;
1025
+ /**
1026
+ * Host marks on fields (AB#7422), e.g. the field named by the last failed deployment: key = field
1027
+ * key or attribute name (any casing), value = the text shown under the field. A mark is
1028
+ * informational — it never blocks saving — and disappears as soon as the user edits that field.
1029
+ */
1030
+ readonly fieldErrors: _angular_core.InputSignal<Readonly<Record<string, string>> | null | undefined>;
1031
+ /**
1032
+ * Host hints under fields (AB#7423): called with the current values of the form on every change; the
1033
+ * returned hints (text and an optional action link) are shown under their fields. Informational only.
1034
+ */
1035
+ readonly fieldHints: _angular_core.InputSignal<EntityFormFieldHintsProvider | null | undefined>;
1036
+ /** The action link of a field hint was activated (`actionId` as given by the host, `key` = field key). */
1037
+ readonly fieldHintAction: _angular_core.OutputEmitterRef<{
1038
+ key: string;
1039
+ actionId: string;
1040
+ }>;
939
1041
  readonly changeSetChange: _angular_core.OutputEmitterRef<EntityFormChangeSet>;
940
1042
  readonly validChange: _angular_core.OutputEmitterRef<boolean>;
941
1043
  readonly dirtyChange: _angular_core.OutputEmitterRef<boolean>;
@@ -958,6 +1060,12 @@ declare class EntityFormComponent {
958
1060
  /** Raw values (disabled controls included) for VisibleWhen evaluation. */
959
1061
  private readonly rawValues;
960
1062
  private readonly collapsed;
1063
+ /** Current cross-field errors by field key (the control validators read it; see {@link refreshCrossFieldErrors}). */
1064
+ private crossFieldErrorMap;
1065
+ /** Host field marks by field key. */
1066
+ protected readonly hostFieldMarks: _angular_core.Signal<Readonly<Record<string, string>>>;
1067
+ /** Host hints by field key, re-evaluated when the values change. */
1068
+ protected readonly hostHints: _angular_core.Signal<Readonly<Record<string, EntityFormFieldHint>>>;
961
1069
  /** Keys of the fields whose stored value was an unset placeholder (AB#5623); they start empty. */
962
1070
  protected readonly unsetPlaceholderFields: _angular_core.WritableSignal<ReadonlySet<string>>;
963
1071
  /** attributeNames of secrets whose clear is staged for the next save (Q8). */
@@ -1009,8 +1117,19 @@ declare class EntityFormComponent {
1009
1117
  isDirty(): boolean;
1010
1118
  /** True when every enabled control is valid and nothing blocks saving ({@link saveBlockedReason}). */
1011
1119
  isValid(): boolean;
1012
- /** Marks every control as touched so validation errors become visible. */
1120
+ /**
1121
+ * Marks every control as touched so validation errors become visible and moves the focus to the
1122
+ * first invalid field (AB#7422), expanding its section when it is collapsed.
1123
+ */
1013
1124
  markAllAsTouched(): void;
1125
+ /** Focuses the first invalid, visible field in reading order. Returns its key, or `null`. */
1126
+ focusFirstInvalid(): string | null;
1127
+ /**
1128
+ * Focuses the editor of a visible field (key or attribute name, any casing), expanding its section when it
1129
+ * is collapsed (AB#7423, e.g. a hint's action link that leads to another field). Returns the field key, or
1130
+ * `null` when there is no such visible field.
1131
+ */
1132
+ focusField(name: string): string | null;
1014
1133
  /** Rebuilds the form from the current inputs, discarding user edits. */
1015
1134
  reset(): void;
1016
1135
  /**
@@ -1023,6 +1142,10 @@ declare class EntityFormComponent {
1023
1142
  */
1024
1143
  patchValues(values: EntityFormPrefillValues): string[];
1025
1144
  protected control(key: string): FormControl<unknown>;
1145
+ /** Host mark of the field (shown while the field is pristine), or `null`. */
1146
+ protected hostMark(field: ResolvedField): string | null;
1147
+ protected hintOf(field: ResolvedField): EntityFormFieldHint | null;
1148
+ protected onHintAction(field: ResolvedField, actionId: string): void;
1026
1149
  protected isFieldVisible(field: ResolvedField): boolean;
1027
1150
  protected visibleFieldCount(section: ResolvedSection): number;
1028
1151
  protected isCollapsed(section: ResolvedSection): boolean;
@@ -1062,12 +1185,19 @@ declare class EntityFormComponent {
1062
1185
  * is enabled unless it is read-only.
1063
1186
  */
1064
1187
  private applyVisibility;
1188
+ /** One validator per control that reports the current cross-field error of its field. */
1189
+ private installCrossFieldValidators;
1190
+ /**
1191
+ * Re-runs the cross-field validators on the enabled values and re-validates exactly the
1192
+ * controls whose error changed (`emitEvent: false`: no event loop; the caller bumps / emits).
1193
+ */
1194
+ private refreshCrossFieldErrors;
1065
1195
  /** Values of enabled controls only (hidden and read-only fields are absent). */
1066
1196
  private enabledValues;
1067
1197
  private emitState;
1068
1198
  private bump;
1069
1199
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityFormComponent, never>;
1070
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityFormComponent, "mm-entity-form", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "records": { "alias": "records"; "required": false; "isSignal": true; }; "labelResolver": { "alias": "labelResolver"; "required": false; "isSignal": true; }; "initialValues": { "alias": "initialValues"; "required": false; "isSignal": true; }; "beforeSave": { "alias": "beforeSave"; "required": false; "isSignal": true; }; }, { "changeSetChange": "changeSetChange"; "validChange": "validChange"; "dirtyChange": "dirtyChange"; }, never, never, true, never>;
1200
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityFormComponent, "mm-entity-form", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "records": { "alias": "records"; "required": false; "isSignal": true; }; "labelResolver": { "alias": "labelResolver"; "required": false; "isSignal": true; }; "initialValues": { "alias": "initialValues"; "required": false; "isSignal": true; }; "beforeSave": { "alias": "beforeSave"; "required": false; "isSignal": true; }; "crossFieldValidators": { "alias": "crossFieldValidators"; "required": false; "isSignal": true; }; "fieldErrors": { "alias": "fieldErrors"; "required": false; "isSignal": true; }; "fieldHints": { "alias": "fieldHints"; "required": false; "isSignal": true; }; }, { "fieldHintAction": "fieldHintAction"; "changeSetChange": "changeSetChange"; "validChange": "validChange"; "dirtyChange": "dirtyChange"; }, never, never, true, never>;
1071
1201
  }
1072
1202
 
1073
1203
  type EntityFormGetReferenceOptionsQueryVariablesDto = Types.Exact<{
@@ -2693,5 +2823,5 @@ declare function toCkTypeInfo(raw: RawCkType): CkTypeInfo;
2693
2823
  /** Maps a raw `entityFormGetCkRecord` item to {@link CkRecordInfo}. */
2694
2824
  declare function toCkRecordInfo(raw: RawCkRecord): CkRecordInfo;
2695
2825
 
2696
- export { BUILT_IN_DEFAULT_FORM, DEFAULT_ENTITY_FORMS_MESSAGES, DEFAULT_GENERATED_SECTION_TITLE, DEFAULT_SECTION_KEY, ENTITY_FORM_ACTION_CONFIRMATION, ENTITY_FORM_BEFORE_SAVE, ENTITY_FORM_DANGER_CONFIRMATION, ENTITY_FORM_FALLBACK_FORMS, ENTITY_FORM_LABEL_RESOLVER, ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, ENTITY_FORM_SECRET_PLACEHOLDER_VALUES, ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, ENTITY_LIST_ROW_CLASS, ENTITY_PAGE_NEW, ENTITY_PAGE_TYPE_QUERY_PARAM, EntityFormComponent, EntityFormDataService, EntityFormRecordsFieldComponent, EntityFormReferenceFieldComponent, EntityFormSaveVeto, EntityFormSecretEditorComponent, EntityFormService, EntityListComponent, EntityListDataSourceDirective, EntityPageActionsDirective, EntityPageComponent, GENERATED_SECTION_KEY, SYSTEM_PROPERTIES, associationFieldKey, associationRoleName, autoEditorFor, buildChangeSet, canonicaliseEntityFormPrefill, canonicalisePath, ckTypeDisplayName, ckTypeShortName, confirmEntityFormAction, confirmEntityFormDanger, entityDeleteConfirmation, entityFormCatalog, entityFormKey, entityFormPrefillState, entityFormRoutes, entityFormTypeTitles, entityFormUnsetPlaceholderFields, entityFormUnsetPlaceholderLookup, entityListAttributeNames, entityListCreateLabel, entityListIncludesDerivedTypes, formatEntityFormsMessage, humanizeCkTypeName, isChainEndForm, isEditorCompatible, isEntityFormSaveVeto, isEntityFormUnsetPlaceholder, isSecretMetaData, isVisible, localizeEntityForm, localizeEntityFormTitle, localizeEntityListColumns, mergeEntityFormPrefill, mergeEntityFormsMessages, parseDefault, parseEntityForm, parseEntityForms, parseVisibleWhen, pickEntityForm, provideEntityFormFallbacks, resolveEntityForm, resolveEntityFormLabel, resolveListDefaultSort, runEntityFormBeforeSave, secretMetaDataMarker, secretStatusLabelsOf, selectFallbackForms, shortTypeName, toAttributeInputs, toCkRecordInfo, toCkTypeInfo, toEntityListColumn, toEntityListRow, toFormValue, toKebabTypeKey, toListViewRowClass, withFallbackForms };
2697
- export type { BuildChangeSetOptions, CanonicalPath, CkAssociationRoleInfo, CkAttributeInfo, CkRecordInfo, CkTypeInfo, EntityFormActionConfirmation, EntityFormActionRequest, EntityFormBeforeSaveContext, EntityFormBeforeSaveHook, EntityFormBeforeSaveOutcome, EntityFormBeforeSaveResult, EntityFormCatalogEntry, EntityFormChangeSet, EntityFormColumnDef, EntityFormDangerConfirmation, EntityFormDefinition, EntityFormEditor, EntityFormFieldDef, EntityFormLabelKind, EntityFormLabelRequest, EntityFormLabelResolver, EntityFormLoadKey, EntityFormLoadResult, EntityFormMode, EntityFormPrefillOptions, EntityFormPrefillValues, EntityFormRecordColumn, EntityFormReferenceValue, EntityFormRoutesOptions, EntityFormSecretFieldState, EntityFormSectionDef, EntityFormSortDef, EntityFormSource, EntityFormTargetRef, EntityFormUnsetPlaceholderLookup, EntityFormUnsetPlaceholderTarget, EntityFormUnsetPlaceholderValues, EntityFormValueState, EntityFormsMessages, EntityListBooleanDisplay, EntityListCellLabels, EntityListColumnOptions, EntityListCreateRequest, EntityListOpenAction, EntityListOpenRequest, EntityListRow, EntityListRowClass, EntityListSortDescriptor, EntityPageActionBarPosition, EntityPageActionsContext, EntityPageDeletedEvent, EntityPageEditMode, EntityPageInitialValues, EntityPageNavigateEvent, EntityPageSavedEvent, EntityPageView, RawRtEntityRow, ReadOnlyMode, ResolveEntityFormOptions, ResolvedEntityForm, ResolvedField, ResolvedListColumn, ResolvedSection, VisibleWhenRule };
2826
+ export { BUILT_IN_DEFAULT_FORM, DEFAULT_ENTITY_FORMS_MESSAGES, DEFAULT_GENERATED_SECTION_TITLE, DEFAULT_SECTION_KEY, ENTITY_FORM_ACTION_CONFIRMATION, ENTITY_FORM_BEFORE_SAVE, ENTITY_FORM_CROSS_FIELD_VALIDATORS, ENTITY_FORM_DANGER_CONFIRMATION, ENTITY_FORM_FALLBACK_FORMS, ENTITY_FORM_LABEL_RESOLVER, ENTITY_FORM_SECRET_KEY_RING_CONFIGURED, ENTITY_FORM_SECRET_PLACEHOLDER_VALUES, ENTITY_FORM_UNSET_PLACEHOLDER_VALUES, ENTITY_LIST_ROW_CLASS, ENTITY_PAGE_NEW, ENTITY_PAGE_TYPE_QUERY_PARAM, EntityFormComponent, EntityFormDataService, EntityFormRecordsFieldComponent, EntityFormReferenceFieldComponent, EntityFormSaveVeto, EntityFormSecretEditorComponent, EntityFormService, EntityListComponent, EntityListDataSourceDirective, EntityPageActionsDirective, EntityPageComponent, GENERATED_SECTION_KEY, SYSTEM_PROPERTIES, associationFieldKey, associationRoleName, autoEditorFor, buildChangeSet, canonicaliseEntityFormPrefill, canonicalisePath, ckTypeDisplayName, ckTypeShortName, confirmEntityFormAction, confirmEntityFormDanger, crossFieldValidatorApplies, entityDeleteConfirmation, entityFormCatalog, entityFormKey, entityFormPrefillState, entityFormRoutes, entityFormTypeTitles, entityFormUnsetPlaceholderFields, entityFormUnsetPlaceholderLookup, entityListAttributeNames, entityListCreateLabel, entityListIncludesDerivedTypes, flattenCrossFieldValidators, formatEntityFormsMessage, humanizeCkTypeName, isChainEndForm, isEditorCompatible, isEntityFormSaveVeto, isEntityFormUnsetPlaceholder, isSecretMetaData, isVisible, localizeEntityForm, localizeEntityFormTitle, localizeEntityListColumns, mergeEntityFormPrefill, mergeEntityFormsMessages, parseDefault, parseEntityForm, parseEntityForms, parseVisibleWhen, pickEntityForm, provideEntityFormCrossFieldValidators, provideEntityFormFallbacks, resolveEntityForm, resolveEntityFormLabel, resolveListDefaultSort, runCrossFieldValidators, runEntityFormBeforeSave, secretMetaDataMarker, secretStatusLabelsOf, selectFallbackForms, shortTypeName, toAttributeInputs, toCkRecordInfo, toCkTypeInfo, toEntityListColumn, toEntityListRow, toFormValue, toKebabTypeKey, toListViewRowClass, withFallbackForms };
2827
+ export type { BuildChangeSetOptions, CanonicalPath, CkAssociationRoleInfo, CkAttributeInfo, CkRecordInfo, CkTypeInfo, EntityFormActionConfirmation, EntityFormActionRequest, EntityFormBeforeSaveContext, EntityFormBeforeSaveHook, EntityFormBeforeSaveOutcome, EntityFormBeforeSaveResult, EntityFormCatalogEntry, EntityFormChangeSet, EntityFormColumnDef, EntityFormCrossFieldContext, EntityFormCrossFieldErrors, EntityFormCrossFieldValidator, EntityFormCrossFieldValidatorProvision, EntityFormDangerConfirmation, EntityFormDefinition, EntityFormEditor, EntityFormFieldDef, EntityFormFieldHint, EntityFormFieldHintsProvider, EntityFormLabelKind, EntityFormLabelRequest, EntityFormLabelResolver, EntityFormLoadKey, EntityFormLoadResult, EntityFormMode, EntityFormPrefillOptions, EntityFormPrefillValues, EntityFormRecordColumn, EntityFormReferenceValue, EntityFormRoutesOptions, EntityFormSecretFieldState, EntityFormSectionDef, EntityFormSortDef, EntityFormSource, EntityFormTargetRef, EntityFormUnsetPlaceholderLookup, EntityFormUnsetPlaceholderTarget, EntityFormUnsetPlaceholderValues, EntityFormValueState, EntityFormsMessages, EntityListBooleanDisplay, EntityListCellLabels, EntityListColumnOptions, EntityListCreateRequest, EntityListOpenAction, EntityListOpenRequest, EntityListRow, EntityListRowClass, EntityListSortDescriptor, EntityPageActionBarPosition, EntityPageActionsContext, EntityPageDeletedEvent, EntityPageEditMode, EntityPageInitialValues, EntityPageNavigateEvent, EntityPageSavedEvent, EntityPageView, RawRtEntityRow, ReadOnlyMode, ResolveEntityFormOptions, ResolvedEntityForm, ResolvedField, ResolvedListColumn, ResolvedSection, VisibleWhenRule };