@ximatai/muyun-web-app 0.26.10 → 0.26.12

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.
Files changed (172) hide show
  1. package/dist/ModuleActionManagementView-BHEooZ5L.js +672 -0
  2. package/dist/ModuleGovernanceView-DB3TWlMy.js +28521 -0
  3. package/dist/RoleDetailWorkspaceView-D6X7pAj5.js +1379 -0
  4. package/dist/index.css +1 -1
  5. package/dist/index.js +1929 -351
  6. package/dist/moduleGovernanceWorkspaceView-C5pqJOEJ.js +40 -0
  7. package/dist/platform-workbench-DJj42YQP.js +22911 -0
  8. package/dist/rolldown-runtime-DPVXH0ON.js +17 -0
  9. package/dist/types/app/CurrentUserProfileDialog.vue.d.ts +0 -2
  10. package/dist/types/app/LoginView.vue.d.ts +1 -1
  11. package/dist/types/app/workbenchRouteSync.d.ts +10 -1
  12. package/dist/types/app/workbenchSessionTabs.d.ts +22 -0
  13. package/dist/types/app/workbenchStartup.d.ts +7 -0
  14. package/dist/types/consumer/AppWorkbenchShell.vue.d.ts +4 -1
  15. package/dist/types/consumer/index.d.ts +2 -1
  16. package/dist/types/dynamic-page-runtime/ModulePageDetailRelations.vue.d.ts +1 -1
  17. package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +12 -1
  18. package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +17 -0
  19. package/dist/types/dynamic-page-runtime/NavigatorPanelActions.vue.d.ts +22 -0
  20. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +11 -11
  21. package/dist/types/dynamic-page-runtime/childAggregateContext.d.ts +11 -0
  22. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailExtensionRuntime.d.ts +3 -1
  23. package/dist/types/dynamic-page-runtime/composables/useModulePageFormContributionRuntime.d.ts +5 -3
  24. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +82 -28
  25. package/dist/types/dynamic-page-runtime/composables/useRecordEditingSession.d.ts +1 -1
  26. package/dist/types/dynamic-page-runtime/formActionResult.d.ts +5 -0
  27. package/dist/types/dynamic-page-runtime/formComputeCoordinator.d.ts +7 -4
  28. package/dist/types/dynamic-page-runtime/formValidationCoordinator.d.ts +17 -0
  29. package/dist/types/dynamic-page-runtime/index.d.ts +1 -2
  30. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +75 -1
  31. package/dist/types/dynamic-page-runtime/pageActionInvocation.d.ts +7 -0
  32. package/dist/types/dynamic-page-runtime/pageActionPlacement.d.ts +14 -0
  33. package/dist/types/dynamic-page-runtime/recordMutationPayload.d.ts +3 -0
  34. package/dist/types/formula/FormulaRuntime.d.ts +9 -0
  35. package/dist/types/{dynamic-page-runtime/DynamicModuleHost.vue.d.ts → platform-admin-runtime/module-menu/ModuleMenuDrawer.vue.d.ts} +2 -2
  36. package/dist/types/platform-admin-runtime/module-menu/ModuleMenuEntriesSection.vue.d.ts +7 -0
  37. package/dist/types/platform-admin-runtime/module-menu/moduleMenuClient.d.ts +16 -0
  38. package/dist/types/platform-admin-runtime/platformModulePageEnhancement.d.ts +2 -0
  39. package/dist/types/platform-admin-runtime/role/RoleAccountGrantDrawerSurface.vue.d.ts +7 -0
  40. package/dist/types/platform-admin-runtime/role/RoleAuthorizationDrawerSurface.vue.d.ts +7 -0
  41. package/dist/types/platform-admin-runtime/role/RoleEmploymentGrantDrawerSurface.vue.d.ts +7 -0
  42. package/dist/types/platform-admin-runtime/role/RoleEnumTitleCell.vue.d.ts +8 -0
  43. package/dist/types/platform-admin-runtime/role/RoleGroupMemberFormField.vue.d.ts +7 -0
  44. package/dist/types/platform-admin-runtime/role/RoleScopeTree.vue.d.ts +7 -0
  45. package/dist/types/platform-admin-runtime/roleModulePageEnhancement.d.ts +7 -0
  46. package/dist/types/platform-components/AdaptiveHeaderActionBar.vue.d.ts +24 -0
  47. package/dist/types/platform-components/BusinessNotificationPanel.vue.d.ts +15 -1
  48. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +9 -4
  49. package/dist/types/platform-components/DetailRelationListPanel.vue.d.ts +1 -1
  50. package/dist/types/platform-components/DrawerOperationBar.vue.d.ts +4 -2
  51. package/dist/types/platform-components/FormulaExpressionEditor.vue.d.ts +54 -0
  52. package/dist/types/platform-components/ManagementExplorerColumn.vue.d.ts +15 -3
  53. package/dist/types/platform-components/ManagementPanelHeader.vue.d.ts +5 -3
  54. package/dist/types/platform-components/ManagementWorkspace.vue.d.ts +11 -0
  55. package/dist/types/platform-components/ModuleActionButton.vue.d.ts +3 -3
  56. package/dist/types/platform-components/QueryGroupedSummary.vue.d.ts +21 -0
  57. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +1 -0
  58. package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +2 -0
  59. package/dist/types/platform-components/RecordDetailFields.vue.d.ts +41 -2
  60. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +8 -3
  61. package/dist/types/platform-components/RecordDetailPanel.vue.d.ts +2 -0
  62. package/dist/types/platform-components/RecordExplorerCreateButton.vue.d.ts +16 -0
  63. package/dist/types/platform-components/RecordExplorerPanel.vue.d.ts +16 -5
  64. package/dist/types/platform-components/RecordFieldLabel.vue.d.ts +16 -0
  65. package/dist/types/platform-components/RecordFormFields.vue.d.ts +21 -2
  66. package/dist/types/platform-components/RecordFormGrid.vue.d.ts +24 -0
  67. package/dist/types/platform-components/RecordListExplorer.vue.d.ts +23 -1
  68. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +2 -2
  69. package/dist/types/platform-components/RecordPanelButton.vue.d.ts +9 -3
  70. package/dist/types/platform-components/RecordPermissionDialog.vue.d.ts +15 -0
  71. package/dist/types/platform-components/RecordPicker.vue.d.ts +2 -2
  72. package/dist/types/platform-components/RecordQueryEnumFilter.vue.d.ts +17 -0
  73. package/dist/types/platform-components/RecordQueryListCell.vue.d.ts +12 -0
  74. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +110 -64
  75. package/dist/types/platform-components/RecordQueryListSurface.vue.d.ts +124 -0
  76. package/dist/types/platform-components/RecordRelationTable.vue.d.ts +62 -0
  77. package/dist/types/platform-components/RecordRelationValue.vue.d.ts +9 -0
  78. package/dist/types/platform-components/RecordStatusSwitch.vue.d.ts +3 -3
  79. package/dist/types/platform-components/StaticManagementLayout.vue.d.ts +2 -0
  80. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +15 -4
  81. package/dist/types/platform-components/adaptiveHeaderActionLayout.d.ts +22 -0
  82. package/dist/types/platform-components/formulaExpressionTokens.d.ts +18 -0
  83. package/dist/types/platform-components/index.d.ts +20 -1
  84. package/dist/types/platform-components/managementExplorerContext.d.ts +11 -0
  85. package/dist/types/platform-components/managementWorkspaceContext.d.ts +20 -0
  86. package/dist/types/platform-components/managementWorkspaceLayout.d.ts +14 -0
  87. package/dist/types/platform-components/optionFieldOptionCache.d.ts +1 -1
  88. package/dist/types/platform-components/recordActionBarModel.d.ts +3 -0
  89. package/dist/types/platform-components/recordQueryListColumnModel.d.ts +42 -0
  90. package/dist/types/platform-components/scopedTreeModuleContext.d.ts +2 -2
  91. package/dist/types/platform-components/selectionRefresh.d.ts +9 -0
  92. package/dist/types/platform-components/sortPartitionKey.d.ts +5 -0
  93. package/dist/types/platform-components/staticTreeResourceModuleContext.d.ts +3 -3
  94. package/dist/types/platform-workbench/index.d.ts +2 -0
  95. package/dist/types/platform-workbench/useWorkspaceViewUnsavedState.d.ts +5 -0
  96. package/dist/types/platform-workbench/workbenchNavigation.d.ts +5 -1
  97. package/dist/types/platform-workbench/workspaceViewContract.d.ts +5 -0
  98. package/dist/types/platform-workbench/workspaceViewHost.d.ts +5 -0
  99. package/dist/types/platform-workbench/workspaceViewNavigation.d.ts +9 -0
  100. package/dist/types/platform-workbench/workspaceViewUnsavedState.d.ts +3 -0
  101. package/dist/types/views/BusinessRuleGovernanceSurface.vue.d.ts +10 -0
  102. package/dist/types/views/EmployeeEmploymentTable.vue.d.ts +5 -0
  103. package/dist/types/views/{UserDetailRouteView.vue.d.ts → MetadataGovernanceSurface.vue.d.ts} +3 -3
  104. package/dist/types/views/MetadataSourceTree.vue.d.ts +44 -0
  105. package/dist/types/views/ModuleBusinessPreview.vue.d.ts +7 -0
  106. package/dist/types/views/ModuleExperienceProfileOverview.vue.d.ts +7 -0
  107. package/dist/types/views/ModuleGovernanceView.vue.d.ts +9 -0
  108. package/dist/types/views/PageCompositionDescriptorPreview.vue.d.ts +54 -0
  109. package/dist/types/views/PageCompositionTree.vue.d.ts +103 -0
  110. package/dist/types/views/PageCompositionWorkspace.vue.d.ts +7 -0
  111. package/dist/types/views/PageQuerySummaryEditor.vue.d.ts +48 -0
  112. package/dist/types/views/RoleAccountGrantDrawer.vue.d.ts +6 -2
  113. package/dist/types/views/RoleAuthorizationView.vue.d.ts +7 -0
  114. package/dist/types/views/RoleEmploymentGrantDrawer.vue.d.ts +5 -1
  115. package/dist/types/views/businessRuleGovernance.d.ts +201 -0
  116. package/dist/types/views/metadataModelEditSession.d.ts +75 -0
  117. package/dist/types/views/metadataModelTree.d.ts +40 -0
  118. package/dist/types/views/metadataNaming.d.ts +7 -0
  119. package/dist/types/views/metadataOrchestrationState.d.ts +161 -6
  120. package/dist/types/views/metadataSourceTree.d.ts +10 -0
  121. package/dist/types/views/moduleGovernanceWorkspaceView.d.ts +9 -0
  122. package/dist/types/views/pageCompositionDraftState.d.ts +375 -0
  123. package/dist/types/views/pageCompositionDragPayload.d.ts +26 -0
  124. package/dist/types/views/pageCompositionMode.d.ts +86 -0
  125. package/dist/types/views/pageCompositionPlacement.d.ts +48 -0
  126. package/dist/types/views/pageCompositionTransport.d.ts +9 -0
  127. package/dist/types/views/roleGrantClient.d.ts +8 -5
  128. package/dist/types/views/usePageCompositionActionPreviewDrag.d.ts +41 -0
  129. package/dist/types/views/usePageCompositionPreviewDrag.d.ts +48 -0
  130. package/dist/types/vue-ui-antdv/components/UiActionButton.vue.d.ts +2 -2
  131. package/dist/types/vue-ui-antdv/components/UiButton.vue.d.ts +6 -3
  132. package/dist/types/vue-ui-antdv/components/UiDataTable.vue.d.ts +5 -2
  133. package/dist/types/vue-ui-antdv/components/UiIcon.vue.d.ts +1 -1
  134. package/dist/types/vue-ui-antdv/components/UiPopover.vue.d.ts +22 -0
  135. package/dist/types/vue-ui-antdv/components/UiRecordExplorerItem.vue.d.ts +1 -1
  136. package/dist/types/vue-ui-antdv/components/UiSelect.vue.d.ts +5 -1
  137. package/dist/types/vue-ui-antdv/components/UiSwitch.vue.d.ts +1 -1
  138. package/dist/types/vue-ui-antdv/components/UiTable.vue.d.ts +1 -0
  139. package/dist/types/vue-ui-antdv/components/UiTextArea.vue.d.ts +38 -1
  140. package/dist/types/vue-ui-antdv/components/UiTokenInput.vue.d.ts +62 -0
  141. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +76 -3
  142. package/dist/types/vue-ui-antdv/components/UiTreeSelect.vue.d.ts +1 -1
  143. package/dist/types/vue-ui-antdv/index.d.ts +6 -1
  144. package/dist/types/vue-ui-antdv/treeStructure.d.ts +18 -0
  145. package/dist/types/vue-ui-antdv/types.d.ts +70 -0
  146. package/dist/types/vue-ui-antdv/useTreeLoader.d.ts +21 -0
  147. package/dist/types/vue-ui-antdv/useTreeMotion.d.ts +9 -0
  148. package/dist/types/vue-ui-antdv/useUiTreeDrag.d.ts +32 -0
  149. package/dist/types/web-contracts/index.d.ts +75 -8
  150. package/dist/types/web-core/module/index.d.ts +1 -0
  151. package/dist/types/web-core/module/moduleContext.d.ts +15 -0
  152. package/dist/types/web-core/module/pageActionEntries.d.ts +21 -0
  153. package/dist/types/web-core/module/runtimeContext.d.ts +7 -3
  154. package/dist/types/web-core/module/staticModuleClient.d.ts +29 -6
  155. package/dist/workspaceViews-DI_1vYX9.js +3518 -0
  156. package/package.json +1 -1
  157. package/dist/MetadataOrchestrationView-BhtVwJII.js +0 -661
  158. package/dist/ModuleActionManagementView-DpZS-xAD.js +0 -597
  159. package/dist/RoleAuthorizationView-8lilhtMB.js +0 -646
  160. package/dist/RoleDetailWorkspaceView-CFha6JHn.js +0 -26
  161. package/dist/RoleManagementView-0_KDrzgh.js +0 -1948
  162. package/dist/platform-components-oRIsIoxu.js +0 -12371
  163. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +0 -39
  164. package/dist/types/dynamic-page-runtime/dynamicModuleDetailStateModel.d.ts +0 -5
  165. package/dist/types/views/UserDetailContent.vue.d.ts +0 -32
  166. package/dist/types/views/UserManagementListView.vue.d.ts +0 -3
  167. package/dist/types/views/UserManagementView.vue.d.ts +0 -3
  168. package/dist/types/views/metadataOrchestrationWorkspaceView.d.ts +0 -6
  169. package/dist/types/views/useUserSessionRows.d.ts +0 -28
  170. package/dist/types/views/userDetailStateModel.d.ts +0 -9
  171. package/dist/types/views/userManagementRouteState.d.ts +0 -11
  172. package/dist/workspaceViews-D-RiJ64o.js +0 -9078
@@ -3,11 +3,19 @@ import { type QueryListRecord, type RecordFormFieldDescriptor } from '../../plat
3
3
  import type { ResolvedModuleUiDescriptor, ResolvedModulePageDescriptor, ResolvedPageContextBindingDescriptor, ResolvedPageNavigatorLevelDescriptor, RouteQueryValue } from '../../web-contracts/index';
4
4
  import { type HttpClient, type ModuleContext } from '../../web-core/index';
5
5
  import { type NavigatorEntrySelection } from '../navigatorEntrySelection';
6
+ export interface NavigatorSortViewState {
7
+ visible: boolean;
8
+ enabled: boolean;
9
+ active?: boolean;
10
+ disabledReason?: string;
11
+ }
6
12
  /** Runtime state that belongs to the page/navigator session rather than to a Vue host. */
7
13
  export interface NavigatorLevelRuntime {
8
14
  descriptor: ResolvedPageNavigatorLevelDescriptor;
9
15
  context: ModuleContext<QueryListRecord>;
10
16
  tree: boolean;
17
+ /** Resolved navigator actions consumed by the page surfaces. */
18
+ sort: NavigatorSortViewState;
11
19
  }
12
20
  export interface NavigatorEntrySelectionChange {
13
21
  previous?: NavigatorEntrySelection;
@@ -37,7 +45,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
37
45
  expression: string;
38
46
  program?: {
39
47
  schemaVersion: number;
40
- profile: "WEB_UI" | "FORM_COMPUTE";
48
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
41
49
  root: {
42
50
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
43
51
  operator?: string | undefined;
@@ -56,7 +64,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
56
64
  expression: string;
57
65
  program?: {
58
66
  schemaVersion: number;
59
- profile: "WEB_UI" | "FORM_COMPUTE";
67
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
60
68
  root: {
61
69
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
62
70
  operator?: string | undefined;
@@ -75,7 +83,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
75
83
  expression: string;
76
84
  program?: {
77
85
  schemaVersion: number;
78
- profile: "WEB_UI" | "FORM_COMPUTE";
86
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
79
87
  root: {
80
88
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
81
89
  operator?: string | undefined;
@@ -140,6 +148,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
140
148
  required: boolean;
141
149
  }[] | undefined;
142
150
  titleField?: string | undefined;
151
+ displayProjections?: {
152
+ targetField: string;
153
+ outputField: string;
154
+ }[] | undefined;
143
155
  selectionProjections?: {
144
156
  path: string[];
145
157
  }[] | undefined;
@@ -181,7 +193,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
181
193
  expression: string;
182
194
  program?: {
183
195
  schemaVersion: number;
184
- profile: "WEB_UI" | "FORM_COMPUTE";
196
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
185
197
  root: {
186
198
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
187
199
  operator?: string | undefined;
@@ -200,7 +212,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
200
212
  expression: string;
201
213
  program?: {
202
214
  schemaVersion: number;
203
- profile: "WEB_UI" | "FORM_COMPUTE";
215
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
204
216
  root: {
205
217
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
206
218
  operator?: string | undefined;
@@ -219,7 +231,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
219
231
  expression: string;
220
232
  program?: {
221
233
  schemaVersion: number;
222
- profile: "WEB_UI" | "FORM_COMPUTE";
234
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
223
235
  root: {
224
236
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
225
237
  operator?: string | undefined;
@@ -284,6 +296,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
284
296
  required: boolean;
285
297
  }[] | undefined;
286
298
  titleField?: string | undefined;
299
+ displayProjections?: {
300
+ targetField: string;
301
+ outputField: string;
302
+ }[] | undefined;
287
303
  selectionProjections?: {
288
304
  path: string[];
289
305
  }[] | undefined;
@@ -331,7 +347,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
331
347
  expression: string;
332
348
  program?: {
333
349
  schemaVersion: number;
334
- profile: "WEB_UI" | "FORM_COMPUTE";
350
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
335
351
  root: {
336
352
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
337
353
  operator?: string | undefined;
@@ -350,7 +366,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
350
366
  expression: string;
351
367
  program?: {
352
368
  schemaVersion: number;
353
- profile: "WEB_UI" | "FORM_COMPUTE";
369
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
354
370
  root: {
355
371
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
356
372
  operator?: string | undefined;
@@ -369,7 +385,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
369
385
  expression: string;
370
386
  program?: {
371
387
  schemaVersion: number;
372
- profile: "WEB_UI" | "FORM_COMPUTE";
388
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
373
389
  root: {
374
390
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
375
391
  operator?: string | undefined;
@@ -434,6 +450,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
434
450
  required: boolean;
435
451
  }[] | undefined;
436
452
  titleField?: string | undefined;
453
+ displayProjections?: {
454
+ targetField: string;
455
+ outputField: string;
456
+ }[] | undefined;
437
457
  selectionProjections?: {
438
458
  path: string[];
439
459
  }[] | undefined;
@@ -475,7 +495,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
475
495
  expression: string;
476
496
  program?: {
477
497
  schemaVersion: number;
478
- profile: "WEB_UI" | "FORM_COMPUTE";
498
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
479
499
  root: {
480
500
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
481
501
  operator?: string | undefined;
@@ -494,7 +514,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
494
514
  expression: string;
495
515
  program?: {
496
516
  schemaVersion: number;
497
- profile: "WEB_UI" | "FORM_COMPUTE";
517
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
498
518
  root: {
499
519
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
500
520
  operator?: string | undefined;
@@ -513,7 +533,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
513
533
  expression: string;
514
534
  program?: {
515
535
  schemaVersion: number;
516
- profile: "WEB_UI" | "FORM_COMPUTE";
536
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
517
537
  root: {
518
538
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
519
539
  operator?: string | undefined;
@@ -578,6 +598,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
578
598
  required: boolean;
579
599
  }[] | undefined;
580
600
  titleField?: string | undefined;
601
+ displayProjections?: {
602
+ targetField: string;
603
+ outputField: string;
604
+ }[] | undefined;
581
605
  selectionProjections?: {
582
606
  path: string[];
583
607
  }[] | undefined;
@@ -626,7 +650,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
626
650
  expression: string;
627
651
  program?: {
628
652
  schemaVersion: number;
629
- profile: "WEB_UI" | "FORM_COMPUTE";
653
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
630
654
  root: {
631
655
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
632
656
  operator?: string | undefined;
@@ -645,7 +669,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
645
669
  expression: string;
646
670
  program?: {
647
671
  schemaVersion: number;
648
- profile: "WEB_UI" | "FORM_COMPUTE";
672
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
649
673
  root: {
650
674
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
651
675
  operator?: string | undefined;
@@ -664,7 +688,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
664
688
  expression: string;
665
689
  program?: {
666
690
  schemaVersion: number;
667
- profile: "WEB_UI" | "FORM_COMPUTE";
691
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
668
692
  root: {
669
693
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
670
694
  operator?: string | undefined;
@@ -729,6 +753,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
729
753
  required: boolean;
730
754
  }[] | undefined;
731
755
  titleField?: string | undefined;
756
+ displayProjections?: {
757
+ targetField: string;
758
+ outputField: string;
759
+ }[] | undefined;
732
760
  selectionProjections?: {
733
761
  path: string[];
734
762
  }[] | undefined;
@@ -770,7 +798,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
770
798
  expression: string;
771
799
  program?: {
772
800
  schemaVersion: number;
773
- profile: "WEB_UI" | "FORM_COMPUTE";
801
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
774
802
  root: {
775
803
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
776
804
  operator?: string | undefined;
@@ -789,7 +817,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
789
817
  expression: string;
790
818
  program?: {
791
819
  schemaVersion: number;
792
- profile: "WEB_UI" | "FORM_COMPUTE";
820
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
793
821
  root: {
794
822
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
795
823
  operator?: string | undefined;
@@ -808,7 +836,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
808
836
  expression: string;
809
837
  program?: {
810
838
  schemaVersion: number;
811
- profile: "WEB_UI" | "FORM_COMPUTE";
839
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
812
840
  root: {
813
841
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
814
842
  operator?: string | undefined;
@@ -873,6 +901,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
873
901
  required: boolean;
874
902
  }[] | undefined;
875
903
  titleField?: string | undefined;
904
+ displayProjections?: {
905
+ targetField: string;
906
+ outputField: string;
907
+ }[] | undefined;
876
908
  selectionProjections?: {
877
909
  path: string[];
878
910
  }[] | undefined;
@@ -920,7 +952,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
920
952
  expression: string;
921
953
  program?: {
922
954
  schemaVersion: number;
923
- profile: "WEB_UI" | "FORM_COMPUTE";
955
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
924
956
  root: {
925
957
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
926
958
  operator?: string | undefined;
@@ -939,7 +971,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
939
971
  expression: string;
940
972
  program?: {
941
973
  schemaVersion: number;
942
- profile: "WEB_UI" | "FORM_COMPUTE";
974
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
943
975
  root: {
944
976
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
945
977
  operator?: string | undefined;
@@ -958,7 +990,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
958
990
  expression: string;
959
991
  program?: {
960
992
  schemaVersion: number;
961
- profile: "WEB_UI" | "FORM_COMPUTE";
993
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
962
994
  root: {
963
995
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
964
996
  operator?: string | undefined;
@@ -1023,6 +1055,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1023
1055
  required: boolean;
1024
1056
  }[] | undefined;
1025
1057
  titleField?: string | undefined;
1058
+ displayProjections?: {
1059
+ targetField: string;
1060
+ outputField: string;
1061
+ }[] | undefined;
1026
1062
  selectionProjections?: {
1027
1063
  path: string[];
1028
1064
  }[] | undefined;
@@ -1064,7 +1100,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1064
1100
  expression: string;
1065
1101
  program?: {
1066
1102
  schemaVersion: number;
1067
- profile: "WEB_UI" | "FORM_COMPUTE";
1103
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
1068
1104
  root: {
1069
1105
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
1070
1106
  operator?: string | undefined;
@@ -1083,7 +1119,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1083
1119
  expression: string;
1084
1120
  program?: {
1085
1121
  schemaVersion: number;
1086
- profile: "WEB_UI" | "FORM_COMPUTE";
1122
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
1087
1123
  root: {
1088
1124
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
1089
1125
  operator?: string | undefined;
@@ -1102,7 +1138,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1102
1138
  expression: string;
1103
1139
  program?: {
1104
1140
  schemaVersion: number;
1105
- profile: "WEB_UI" | "FORM_COMPUTE";
1141
+ profile: "WEB_UI" | "PAGE_TEXT" | "FORM_COMPUTE" | "FORM_VALIDATION";
1106
1142
  root: {
1107
1143
  kind: "VALUE" | "FIELD" | "OTHERS" | "UNARY" | "BINARY" | "FUNCTION" | "ASSIGN";
1108
1144
  operator?: string | undefined;
@@ -1167,6 +1203,10 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1167
1203
  required: boolean;
1168
1204
  }[] | undefined;
1169
1205
  titleField?: string | undefined;
1206
+ displayProjections?: {
1207
+ targetField: string;
1208
+ outputField: string;
1209
+ }[] | undefined;
1170
1210
  selectionProjections?: {
1171
1211
  path: string[];
1172
1212
  }[] | undefined;
@@ -1219,7 +1259,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1219
1259
  sourceScope?: "NONE" | "CURRENT_TENANT" | undefined;
1220
1260
  management?: {
1221
1261
  editorSurface?: string | undefined;
1222
- } | undefined;
1262
+ } | null | undefined;
1223
1263
  };
1224
1264
  context: {
1225
1265
  moduleAlias: string;
@@ -1235,6 +1275,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1235
1275
  delete: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1236
1276
  enable: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1237
1277
  disable: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1278
+ sort?: ((id: string, request: import("../../web-contracts/index").SortRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>) | undefined;
1238
1279
  };
1239
1280
  runtime: {
1240
1281
  ready: {
@@ -1276,6 +1317,12 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1276
1317
  invalidateRecordActions?: ((recordIds?: string[]) => void) | undefined;
1277
1318
  };
1278
1319
  tree: boolean;
1320
+ sort: {
1321
+ visible: boolean;
1322
+ enabled: boolean;
1323
+ active?: boolean | undefined;
1324
+ disabledReason?: string | undefined;
1325
+ };
1279
1326
  }[], NavigatorLevelRuntime[] | {
1280
1327
  descriptor: {
1281
1328
  key: string;
@@ -1289,7 +1336,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1289
1336
  sourceScope?: "NONE" | "CURRENT_TENANT" | undefined;
1290
1337
  management?: {
1291
1338
  editorSurface?: string | undefined;
1292
- } | undefined;
1339
+ } | null | undefined;
1293
1340
  };
1294
1341
  context: {
1295
1342
  moduleAlias: string;
@@ -1305,6 +1352,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1305
1352
  delete: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1306
1353
  enable: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1307
1354
  disable: (id: string, request: import("../../web-core/index").RecordActionRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>;
1355
+ sort?: ((id: string, request: import("../../web-contracts/index").SortRequest) => Promise<import("../../web-core/index").StaticCountMutationResult>) | undefined;
1308
1356
  };
1309
1357
  runtime: {
1310
1358
  ready: {
@@ -1346,9 +1394,15 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1346
1394
  invalidateRecordActions?: ((recordIds?: string[]) => void) | undefined;
1347
1395
  };
1348
1396
  tree: boolean;
1397
+ sort: {
1398
+ visible: boolean;
1399
+ enabled: boolean;
1400
+ active?: boolean | undefined;
1401
+ disabledReason?: string | undefined;
1402
+ };
1349
1403
  }[]>;
1350
1404
  pageContextBindings: Ref<{
1351
- source: "SESSION" | "NAVIGATOR";
1405
+ source: "SESSION" | "NAVIGATOR" | "RESOLVED_SELECTION";
1352
1406
  sourceKey: string;
1353
1407
  target: "LIST_QUERY" | "NAVIGATOR_QUERY" | "FORM_DEFAULT" | "PICKER_QUERY" | "MUTATION_CONSTRAINT";
1354
1408
  targetKey: string;
@@ -1356,7 +1410,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1356
1410
  targetPickerFieldKey?: string | undefined;
1357
1411
  navigatorListQueryMode?: "REQUIRED_SCOPE" | "OPTIONAL_FILTER" | undefined;
1358
1412
  }[], ResolvedPageContextBindingDescriptor[] | {
1359
- source: "SESSION" | "NAVIGATOR";
1413
+ source: "SESSION" | "NAVIGATOR" | "RESOLVED_SELECTION";
1360
1414
  sourceKey: string;
1361
1415
  target: "LIST_QUERY" | "NAVIGATOR_QUERY" | "FORM_DEFAULT" | "PICKER_QUERY" | "MUTATION_CONSTRAINT";
1362
1416
  targetKey: string;
@@ -17,7 +17,7 @@ export declare function useRecordEditingSession<TRecord extends {
17
17
  id?: unknown;
18
18
  }>(context: ModuleContext<TRecord>, detail: DetailController<TRecord>, onLoaded: () => void): {
19
19
  invalidatePendingRequests: () => void;
20
- openRecord: (record: TRecord, mode: "edit" | "view", options?: RecordDetailTransitionOptions, skipLoad?: boolean) => Promise<void>;
20
+ openRecord: (record: TRecord, mode: "edit" | "view", options?: RecordDetailTransitionOptions, skipLoad?: boolean, onLoadError?: (cause: unknown) => void) => Promise<void>;
21
21
  openRecycleBinRecord: (record: TRecord) => Promise<void>;
22
22
  };
23
23
  export {};
@@ -0,0 +1,5 @@
1
+ /** Only an explicit form result may update an unsaved draft. Ordinary action data is not a patch. */
2
+ export declare function formActionResult(response: unknown): {
3
+ recordPatch: Record<string, unknown>;
4
+ message?: string;
5
+ };
@@ -6,13 +6,16 @@ import type { ResolvedFormComputeRuleDescriptor } from '../web-contracts/index';
6
6
  *
7
7
  * The coordinator owns propagation, rather than the field component or the
8
8
  * FormulaRuntime: fields remain plain inputs and FormulaRuntime remains a
9
- * pure evaluator. A rule runs at most once in a pass, which makes malformed
10
- * cyclic descriptor graphs fail closed instead of repeatedly overwriting a
11
- * user's draft.
9
+ * pure evaluator. It validates the descriptor graph before evaluating any
10
+ * rule, then evaluates applicable rules in dependency order.
12
11
  */
13
12
  export declare class FormComputeCoordinator {
14
13
  private readonly runtime;
15
14
  private readonly rules;
15
+ private readonly propagationOrder;
16
16
  constructor(rules: readonly ResolvedFormComputeRuleDescriptor[] | undefined, runtime?: FormulaRuntime);
17
- applyAfterChange<TDraft extends FormulaRecord>(draft: TDraft, changedFields: readonly string[]): TDraft;
17
+ applyAfterChange<TDraft extends FormulaRecord>(draft: TDraft, changedFields: readonly string[], childAggregateRows?: FormulaRecord): TDraft;
18
+ /** Evaluate computed fields once when a new form opens, including constant expressions. */
19
+ applyOnCreate<TDraft extends FormulaRecord>(draft: TDraft, childAggregateRows?: FormulaRecord): TDraft;
20
+ private evaluate;
18
21
  }
@@ -0,0 +1,17 @@
1
+ import { FormulaRuntime, type FormulaRecord } from '../formula/FormulaRuntime';
2
+ import type { ResolvedFormValidationRuleDescriptor } from '../web-contracts/index';
3
+ export type FormValidationFailure = Readonly<{
4
+ code: string;
5
+ message: string;
6
+ targetField?: string;
7
+ }>;
8
+ /**
9
+ * Executes only descriptors that have already passed server projection. Invalid descriptor shapes
10
+ * fail open, preserving the server mutation boundary as the final authority.
11
+ */
12
+ export declare class FormValidationCoordinator {
13
+ private readonly runtime;
14
+ private readonly rules;
15
+ constructor(rules: readonly ResolvedFormValidationRuleDescriptor[] | undefined, runtime?: FormulaRuntime);
16
+ validate(draft: FormulaRecord): FormValidationFailure | undefined;
17
+ }
@@ -1,5 +1,4 @@
1
1
  export { default as ModulePageHost } from './ModulePageHost.vue';
2
- export { default as DynamicModuleHost } from './DynamicModuleHost.vue';
3
2
  export { default as DynamicModulePage } from './DynamicModulePage.vue';
4
3
  export { default as DynamicModuleWorkspaceDetailView } from './DynamicModuleWorkspaceDetailView.vue';
5
4
  export { customerDescriptor } from './mockDescriptor';
@@ -8,4 +7,4 @@ export { provideModulePageNavigation, useModulePageNavigation } from './modulePa
8
7
  export { NAVIGATOR_ENTRY_MODULE_ALIAS_QUERY_KEY, NAVIGATOR_ENTRY_RECORD_ID_QUERY_KEY, } from './navigatorEntrySelection';
9
8
  export { createModulePageListRefreshRegistry, modulePageListRefreshRegistry, refreshModulePageList, } from './modulePageListRefresh';
10
9
  export type { ModulePageListRefreshRegistry } from './modulePageListRefresh';
11
- export type { ModuleListEnhancement, ModulePageListRowExpansion, ModulePageListRowExpansionContext, ModuleDetailEnhancement, ModulePageFormEnhancement, ModulePageFormContribution, ModulePageFormContributionContext, ModulePageFormContributionState, ModulePageFormFieldPolicy, ModulePageFormContributionLocation, ModulePageFormContributionValidity, ModulePageFormSurface, ModuleCardEnhancement, ModulePageActionContext, ModulePageActionContribution, ModulePageActionStateContext, ModulePageBatchActionContext, ModulePageBatchActionContribution, ModulePageColumnContribution, ModulePageDetailDrawer, ModulePageDetailSection, ModulePageDetailSectionContext, ModulePageDrawer, ModulePageDrawerContext, ModulePageRecordViewContext, ModulePageEnhancement, ModulePageEnhancementActivationContext, ModulePageEnhancementRegistry, ModulePageEnhancementTarget, ModulePageLockedNavigatorEntry, ModulePageCardAssistant, ModulePageCardAssistantContext, ModulePageCardAssistantPlacement, ModulePageRecordActionContext, ModulePageRecordActionContribution, ModulePageScopeContext, ModulePageWorkspaceView, ModulePageWorkspaceViewInput, } from './modulePageEnhancements';
10
+ export type { ModuleListEnhancement, ModulePageListRowExpansion, ModulePageListRowExpansionContext, ModuleDetailEnhancement, ModulePageFormEnhancement, ModulePageFormContribution, ModulePageFormContributionContext, ModulePageFormContributionState, ModulePageFormFieldPolicy, ModulePageFormContributionLocation, ModulePageFormContributionValidity, ModulePageFormSurface, ModuleCardEnhancement, ModulePageActionContext, ModulePageActionContribution, ModulePageActionStateContext, ModulePageBatchActionContext, ModulePageBatchActionContribution, ModulePageColumnContribution, ModulePageDetailDrawer, ModulePageDetailSection, ModulePageDetailSectionContext, ModulePageDrawer, ModulePageDrawerContext, ModulePageRecordViewContext, ModulePageEnhancement, ModulePageEnhancementActivationContext, ModulePageEnhancementRegistry, ModulePageEnhancementTarget, ModulePageNavigatorEnhancement, ModulePageNavigatorTreeParentPolicy, ModulePageNavigatorExtension, ModulePageNavigatorExtensionContext, ModulePageNavigatorSelection, ModulePageLockedNavigatorEntry, ModulePageCardAssistant, ModulePageCardAssistantContext, ModulePageCardAssistantPlacement, ModulePageRecordActionContext, ModulePageRecordActionContribution, ModulePageScopeContext, ModulePageWorkspaceView, ModulePageWorkspaceViewInput, } from './modulePageEnhancements';
@@ -1,5 +1,5 @@
1
1
  import type { Component } from 'vue';
2
- import type { CurrentUser, PageDescriptor, PageLayoutMode, RouteQueryValue, WebQueryCondition } from '../web-contracts/index';
2
+ import type { CurrentUser, PageDescriptor, PageLayoutMode, RouteQueryValue, WebPageResponse, WebQueryCondition, WebQueryRequest } from '../web-contracts/index';
3
3
  import type { ModuleContext } from '../web-core/index';
4
4
  import type { RecordActionItem, RecordFormFieldState, RecordFormFieldValue, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
5
5
  import type { DrawerTitleAction } from '../platform-components/index';
@@ -20,6 +20,13 @@ export interface ModulePageEnhancement {
20
20
  */
21
21
  activate?(context: ModulePageEnhancementActivationContext): void | (() => void);
22
22
  list?: ModuleListEnhancement;
23
+ /**
24
+ * Business record actions shown by default in both the list-row "more"
25
+ * menu and the standard detail drawer operation area. Use the surface-local
26
+ * `list.rowActions` or `detail.actions` only when an action is intentionally
27
+ * limited to one presentation.
28
+ */
29
+ recordActions?: ModulePageRecordActionContribution[];
23
30
  detail?: ModuleDetailEnhancement;
24
31
  /**
25
32
  * Frontend-owned editor content mounted at a typed standard-form boundary.
@@ -48,6 +55,17 @@ export interface ModulePageStandardActionsEnhancement {
48
55
  export interface ModulePageNavigatorEnhancement {
49
56
  /** Hides descriptor navigators when this entry is not navigated by their business scope. */
50
57
  hidden?: boolean;
58
+ /** Business-owned parent admission for a navigator tree; sibling sorting remains standard. */
59
+ treeParentPolicy?: ModulePageNavigatorTreeParentPolicy;
60
+ /**
61
+ * One application-owned navigator surface mounted beside descriptor navigators.
62
+ *
63
+ * This is intentionally a single region: the page runner retains layout,
64
+ * record querying and mutation ownership. An extension may render an
65
+ * authorized business range selector, but it cannot replace the standard
66
+ * list or declare executable page context.
67
+ */
68
+ extension?: ModulePageNavigatorExtension;
51
69
  /** Declares one navigator as an entry-owned, immutable page context. */
52
70
  lockedEntry?: ModulePageLockedNavigatorEntry;
53
71
  /** Allows the standard list to load without navigator-derived list criteria. */
@@ -58,6 +76,51 @@ export interface ModulePageNavigatorEnhancement {
58
76
  */
59
77
  emptyListScope?(context: ModulePageEmptyNavigatorScopeContext): readonly WebQueryCondition[] | undefined;
60
78
  }
79
+ export interface ModulePageNavigatorTreeParentPolicy {
80
+ canUseAsParent(record: Readonly<Record<string, unknown>>): boolean;
81
+ rejectionMessage: string;
82
+ }
83
+ export interface ModulePageNavigatorExtension {
84
+ key: string;
85
+ /** Frontend-owned component; backend descriptors never select a component. */
86
+ component: Component;
87
+ /**
88
+ * Optional opaque selection channel owned by the standard page host.
89
+ *
90
+ * A navigator extension may select only a declared `key`; the host serializes
91
+ * the `{ kind, key }` pair into its controlled request header. Extensions
92
+ * never receive a mutable query map or mutation payload.
93
+ */
94
+ selection?: ModulePageNavigatorSelection;
95
+ }
96
+ export interface ModulePageNavigatorSelection {
97
+ /** Server-registered resolver kind, not a business field name. */
98
+ kind: string;
99
+ /** Resolves the first trusted selection before the standard page starts its requests. */
100
+ initialKey?(currentUser?: CurrentUser): string | undefined;
101
+ /** Presentation-only copy for the initial trusted selection. It is never sent to the server. */
102
+ initialPresentation?(currentUser?: CurrentUser): ModulePageSelectionPresentation | undefined;
103
+ }
104
+ /** The only display facts a navigator extension may contribute to PAGE_TEXT. */
105
+ export interface ModulePageSelectionPresentation {
106
+ label: string;
107
+ secondaryLabel?: string;
108
+ }
109
+ /** Deliberately small host context for one navigator extension surface. */
110
+ export interface ModulePageNavigatorExtensionContext {
111
+ moduleAlias: string;
112
+ /** Current opaque selection key, if this extension declared a selection channel. */
113
+ selectionKey?: string;
114
+ /**
115
+ * Replaces the extension's opaque selection key and reloads the standard
116
+ * list. The host owns header serialization and every CRUD request.
117
+ */
118
+ selectSelectionKey(key: string, presentation?: ModulePageSelectionPresentation): void;
119
+ /** Reloads only the standard list while retaining the platform-owned query state. */
120
+ refreshList(): void;
121
+ /** Reloads the page's standard record surfaces. */
122
+ reload(): void;
123
+ }
61
124
  export interface ModulePageLockedNavigatorEntry {
62
125
  /** Descriptor navigator key whose selection is supplied by the page address. */
63
126
  navigatorKey: string;
@@ -148,6 +211,8 @@ export interface ModulePageFormContributionContext {
148
211
  fields: readonly Readonly<RecordFormFieldState>[];
149
212
  /** The field at a field-boundary location, otherwise undefined. */
150
213
  field?: Readonly<RecordFormFieldState>;
214
+ /** Read-only query through the host-owned module context and page scope. */
215
+ queryRecords(request?: WebQueryRequest): Promise<WebPageResponse<QueryListRecord>>;
151
216
  setField(fieldName: string, value: RecordFormFieldValue): void;
152
217
  formSessionKey: number;
153
218
  /** Reports only this contribution's validation fact to the standard save boundary. */
@@ -278,6 +343,11 @@ export interface ModulePageDrawer {
278
343
  }
279
344
  /** A business-owned action rendered by the platform in a semantic drawer region. */
280
345
  export type ModulePageDrawerAction = DrawerTitleAction;
346
+ /** Facts rendered by the platform-owned fixed operation region of an action drawer. */
347
+ export interface ModulePageDrawerOperation {
348
+ summary?: string;
349
+ actions: ModulePageDrawerAction[];
350
+ }
281
351
  /** Matches the Workbench input boundary; `parse` remains responsible for route-value validation. */
282
352
  export type ModulePageWorkspaceViewInput = object;
283
353
  /** A business-owned view with stable, serializable identity. */
@@ -306,6 +376,10 @@ export interface ModulePageDrawerContext {
306
376
  reload(): void;
307
377
  /** Replaces contextual actions beside the drawer title; actions are cleared with the drawer. */
308
378
  setTitleActions(actions: ModulePageDrawerAction[]): void;
379
+ /** Replaces the fixed operation-region facts; the host owns their position and responsive layout. */
380
+ setOperation(operation?: ModulePageDrawerOperation): void;
381
+ /** Replaces the presentation-only subtitle below the platform-owned drawer title. */
382
+ setSubtitle(subtitle?: string): void;
309
383
  }
310
384
  /**
311
385
  * Context for a custom body inside the platform-owned record-view shell.
@@ -0,0 +1,7 @@
1
+ import type { PageActionInvocation } from '../web-contracts/index';
2
+ import type { HttpClient } from '../web-core/index';
3
+ /** Execute only the server-issued transport; action identity is not an HTTP route. */
4
+ export declare function invokePageAction(http: HttpClient, invocation: PageActionInvocation | undefined, context?: {
5
+ recordId?: string;
6
+ record?: Record<string, unknown>;
7
+ }): Promise<unknown>;
@@ -0,0 +1,14 @@
1
+ import type { RecordActionItem } from '../platform-components/index';
2
+ import type { ResolvedPageActionDescriptor } from '../web-contracts/index';
3
+ /** Placements choose presentation; execution must already have a platform workflow or issued action block. */
4
+ export declare function resolvePlacedPageActions(placements: ResolvedPageActionDescriptor[], anchor: ResolvedPageActionDescriptor['anchor'], actionOf: (code: string) => {
5
+ actionCode: string;
6
+ title?: string;
7
+ actionLevel?: string;
8
+ category?: string;
9
+ executorType?: string;
10
+ formSupported?: boolean;
11
+ bindingPending?: boolean;
12
+ } | undefined, detailActions: RecordActionItem[], mode: 'create' | 'edit' | 'view', managed?: boolean, record?: {
13
+ enabled?: unknown;
14
+ }): RecordActionItem[];
@@ -0,0 +1,3 @@
1
+ import type { RecordFormRecord } from '../platform-components/index';
2
+ /** Platform write fields are flat; dot keys belong to read-model reference projections. */
3
+ export declare function recordMutationPayload(record: RecordFormRecord): RecordFormRecord;
@@ -12,16 +12,25 @@ export interface FormulaComputeResult {
12
12
  */
13
13
  export declare class FormulaRuntime {
14
14
  evaluateWebUi(program: FormulaProgram | undefined, record: FormulaRecord): boolean;
15
+ /** Evaluates a server-issued PAGE_TEXT program against a host-whitelisted display context. */
16
+ evaluatePageText(program: FormulaProgram | undefined, context: FormulaRecord): string | undefined;
15
17
  /**
16
18
  * Evaluates one server-issued FORM_COMPUTE assignment against a draft without mutating it.
17
19
  * Applying the returned patch, ordering rules, and user-value ownership remain form-runtime concerns.
18
20
  */
19
21
  evaluateFormCompute(program: FormulaProgram | undefined, draft: FormulaRecord, targetValueType?: ViewFieldValueType): FormulaComputeResult;
22
+ /**
23
+ * Evaluates one server-issued, read-only form predicate. An invalid descriptor fails open so a
24
+ * client cannot claim that an unverified rule was enforced; persistence still reaches the
25
+ * authoritative server validator.
26
+ */
27
+ evaluateFormValidation(program: FormulaProgram | undefined, draft: FormulaRecord): boolean | undefined;
20
28
  /** Evaluates a row-to-row assignment in the changed row's scope without mutating any drafts. */
21
29
  evaluateRelationFormCompute(program: FormulaProgram | undefined, draft: FormulaRecord, targetField: string, targetValueType?: ViewFieldValueType): FormulaComputeResult;
22
30
  private evaluateNode;
23
31
  private toBoolean;
24
32
  private evaluateComputeNode;
33
+ private evaluatePageTextNode;
25
34
  }
26
35
  type FormulaValue = string | number | boolean | null | undefined;
27
36
  /** Mirrors FormulaEngine.equalsLoose for the primitive values admitted by the WEB_UI profile. */