@ximatai/muyun-web-app 0.26.7 → 0.26.9

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 (198) hide show
  1. package/dist/DictionaryManagementView-CtIQpqVA.js +1035 -0
  2. package/dist/MenuManagementView-DJhkN2sG.js +837 -0
  3. package/dist/{MetadataOrchestrationView-B-CPudJl.js → MetadataOrchestrationView-CzhAgEdX.js} +210 -204
  4. package/dist/{ModuleActionManagementView-CmVj0e0C.js → ModuleActionManagementView-CM2d8jPO.js} +69 -69
  5. package/dist/RoleAuthorizationView-jn_WUCeg.js +599 -0
  6. package/dist/{RoleDetailWorkspaceView-DmJlJgAj.js → RoleDetailWorkspaceView-CzaQ3Dz1.js} +1 -1
  7. package/dist/RoleManagementView-nY7qu4GF.js +1951 -0
  8. package/dist/{SystemUserDetailWorkspaceView-U6Ij0US1.js → SystemUserDetailWorkspaceView-CBvqmWvP.js} +1 -1
  9. package/dist/SystemUserManagementView-AEomKvK7.js +887 -0
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +651 -6970
  12. package/dist/{platform-components-DKKWbNrz.js → platform-components-CIi6GdC9.js} +5292 -3634
  13. package/dist/types/App.vue.d.ts +1 -0
  14. package/dist/types/app/StaticRoutePageHost.vue.d.ts +11 -0
  15. package/dist/types/app/loginTenant.d.ts +1 -1
  16. package/dist/types/app/menuRouteCompiler.d.ts +45 -0
  17. package/dist/types/app/menuRouteRuntime.d.ts +24 -0
  18. package/dist/types/app/pageRouteContext.d.ts +24 -0
  19. package/dist/types/app/routeDiagnosticsStore.d.ts +10 -0
  20. package/dist/types/app/router.d.ts +15 -0
  21. package/dist/types/app/staticRouteDefinitions.d.ts +25 -0
  22. package/dist/types/app/workbenchRouteSync.d.ts +1 -1
  23. package/dist/types/app/workbenchStartup.d.ts +9 -5
  24. package/dist/types/consumer/AppWorkbenchShell.vue.d.ts +2 -2
  25. package/dist/types/consumer/index.d.ts +7 -4
  26. package/dist/types/dynamic-page-runtime/DynamicModuleHost.vue.d.ts +3 -10
  27. package/dist/types/{views/EmployeeEmploymentDrawer.vue.d.ts → dynamic-page-runtime/DynamicModuleWorkspaceDetailView.vue.d.ts} +3 -7
  28. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +39 -0
  29. package/dist/types/dynamic-page-runtime/ManagedDetailRelationInlineSurface.vue.d.ts +40 -0
  30. package/dist/types/dynamic-page-runtime/ManagedDetailRelationSurface.vue.d.ts +14 -0
  31. package/dist/types/dynamic-page-runtime/ModulePageDetailRelations.vue.d.ts +26 -0
  32. package/dist/types/dynamic-page-runtime/ModulePageFormContributionRenderer.vue.d.ts +12 -0
  33. package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +14 -0
  34. package/dist/types/dynamic-page-runtime/ModulePageListExpansionSurface.vue.d.ts +19 -0
  35. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansion.vue.d.ts +13 -0
  36. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansions.vue.d.ts +16 -0
  37. package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +42 -0
  38. package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +41 -0
  39. package/dist/types/dynamic-page-runtime/NavigatorManagementEditor.vue.d.ts +44 -0
  40. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +50 -0
  41. package/dist/types/dynamic-page-runtime/RecordFormSurface.vue.d.ts +31 -0
  42. package/dist/types/dynamic-page-runtime/composables/useManagedDetailRelationRuntime.d.ts +30 -0
  43. package/dist/types/dynamic-page-runtime/composables/useModulePageActions.d.ts +13 -0
  44. package/dist/types/dynamic-page-runtime/composables/useModulePageBootstrap.d.ts +17 -0
  45. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailActionRuntime.d.ts +48 -0
  46. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailExtensionRuntime.d.ts +26 -0
  47. package/dist/types/dynamic-page-runtime/composables/useModulePageFormContributionRuntime.d.ts +22 -0
  48. package/dist/types/dynamic-page-runtime/composables/useModulePageListSession.d.ts +41 -0
  49. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +1324 -0
  50. package/dist/types/dynamic-page-runtime/composables/useRecordEditingSession.d.ts +22 -0
  51. package/dist/types/dynamic-page-runtime/detailSurfacePreference.d.ts +10 -0
  52. package/dist/types/dynamic-page-runtime/dynamicModuleDetailStateModel.d.ts +5 -12
  53. package/dist/types/dynamic-page-runtime/formComputeCoordinator.d.ts +18 -0
  54. package/dist/types/dynamic-page-runtime/index.d.ts +4 -2
  55. package/dist/types/dynamic-page-runtime/listPageSizePreference.d.ts +10 -0
  56. package/dist/types/dynamic-page-runtime/moduleDetailStateModel.d.ts +12 -0
  57. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +218 -6
  58. package/dist/types/dynamic-page-runtime/modulePageNavigation.d.ts +1 -1
  59. package/dist/types/dynamic-page-runtime/navigatorVisibility.d.ts +6 -0
  60. package/dist/types/dynamic-page-runtime/pageContextRuntime.d.ts +6 -0
  61. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +35 -0
  62. package/dist/types/dynamic-page-runtime/relationFormComputeCoordinator.d.ts +9 -0
  63. package/dist/types/formula/FormulaRuntime.d.ts +29 -0
  64. package/dist/types/platform-admin-runtime/WorkspaceViewDrawer.vue.d.ts +1 -0
  65. package/dist/types/{views/EmployeeDetailWorkspaceView.vue.d.ts → platform-admin-runtime/employee/EmployeeAccountDrawer.vue.d.ts} +2 -1
  66. package/dist/types/platform-admin-runtime/employeeModulePageEnhancement.d.ts +3 -0
  67. package/dist/types/platform-admin-runtime/moduleOpenApi.d.ts +2 -0
  68. package/dist/types/platform-admin-runtime/passwordPolicyPageEnhancement.d.ts +6 -0
  69. package/dist/types/platform-admin-runtime/platformAdminRoutes.d.ts +1 -1
  70. package/dist/types/platform-admin-runtime/platformModulePageEnhancement.d.ts +9 -0
  71. package/dist/types/platform-admin-runtime/realtime.d.ts +2 -1
  72. package/dist/types/platform-admin-runtime/tenant/TenantApplicationConfigurationDrawer.vue.d.ts +7 -0
  73. package/dist/types/platform-admin-runtime/tenant/TenantApplicationsDetailSection.vue.d.ts +7 -0
  74. package/dist/types/platform-admin-runtime/tenantModulePageEnhancement.d.ts +7 -0
  75. package/dist/types/platform-admin-runtime/user/UserOnlineStatusCell.vue.d.ts +8 -0
  76. package/dist/types/platform-admin-runtime/user/UserPasswordDrawer.vue.d.ts +7 -0
  77. package/dist/types/platform-admin-runtime/user/UserSessionListExpansion.vue.d.ts +7 -0
  78. package/dist/types/platform-admin-runtime/user/useUserSessionRows.d.ts +23 -0
  79. package/dist/types/platform-admin-runtime/user/userOnlineStatusStore.d.ts +11 -0
  80. package/dist/types/platform-admin-runtime/userModulePageEnhancement.d.ts +7 -0
  81. package/dist/types/platform-components/BusinessNotificationPanel.vue.d.ts +12 -0
  82. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +10 -2
  83. package/dist/types/platform-components/DetailRelationListPanel.vue.d.ts +13 -0
  84. package/dist/types/{views/EmployeeManagementView.vue.d.ts → platform-components/DrawerTitleActions.vue.d.ts} +2 -2
  85. package/dist/types/platform-components/FileTransferUploader.vue.d.ts +7 -0
  86. package/dist/types/platform-components/ManagementPanelHeader.vue.d.ts +5 -3
  87. package/dist/types/platform-components/ManagementWorkspace.vue.d.ts +8 -2
  88. package/dist/types/platform-components/ModuleActionButton.vue.d.ts +5 -2
  89. package/dist/types/platform-components/RecordActionBar.vue.d.ts +1 -1
  90. package/dist/types/platform-components/RecordContentSectionHeading.vue.d.ts +17 -0
  91. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +7 -1
  92. package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +8 -3
  93. package/dist/types/platform-components/RecordDetailFields.vue.d.ts +5 -0
  94. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +17 -7
  95. package/dist/types/platform-components/RecordDetailPanel.vue.d.ts +15 -5
  96. package/dist/types/platform-components/RecordExpandedSubtable.vue.d.ts +3 -0
  97. package/dist/types/platform-components/RecordFileReferenceTransfer.vue.d.ts +4 -0
  98. package/dist/types/platform-components/RecordFormFields.vue.d.ts +29 -1
  99. package/dist/types/platform-components/RecordImageFileReferencePreview.vue.d.ts +11 -0
  100. package/dist/types/platform-components/RecordListExpansionSurface.vue.d.ts +13 -0
  101. package/dist/types/platform-components/RecordListExplorer.vue.d.ts +4 -2
  102. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +6 -2
  103. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +12 -2
  104. package/dist/types/platform-components/RecordPanelButton.vue.d.ts +2 -0
  105. package/dist/types/platform-components/RecordPicker.vue.d.ts +10 -2
  106. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +42 -7
  107. package/dist/types/platform-components/RecordRelationTabs.vue.d.ts +14 -0
  108. package/dist/types/platform-components/RecordSelectionCheckbox.vue.d.ts +13 -0
  109. package/dist/types/platform-components/RecordStatusSwitch.vue.d.ts +3 -0
  110. package/dist/types/platform-components/StaticManagementLayout.vue.d.ts +21 -7
  111. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +7 -2
  112. package/dist/types/platform-components/UserSessionExpandedSubtable.vue.d.ts +2 -0
  113. package/dist/types/platform-components/drawerTitleActions.d.ts +11 -0
  114. package/dist/types/platform-components/index.d.ts +15 -5
  115. package/dist/types/platform-components/managementWorkspaceLayout.d.ts +14 -0
  116. package/dist/types/platform-components/optionFieldOptionCache.d.ts +3 -0
  117. package/dist/types/platform-components/recordDetailFieldModel.d.ts +2 -0
  118. package/dist/types/platform-components/recordFormFieldModel.d.ts +69 -6
  119. package/dist/types/platform-components/recordPickerConstraints.d.ts +2 -0
  120. package/dist/types/platform-components/recordPickerModel.d.ts +6 -2
  121. package/dist/types/platform-components/recycleBinState.d.ts +2 -0
  122. package/dist/types/platform-components/scopedTreeModuleContext.d.ts +11 -0
  123. package/dist/types/platform-workbench/Workbench.vue.d.ts +2 -2
  124. package/dist/types/platform-workbench/index.d.ts +4 -2
  125. package/dist/types/platform-workbench/legacyPageHostTypeCompatibility.d.ts +6 -0
  126. package/dist/types/platform-workbench/menuNavigation.d.ts +26 -1
  127. package/dist/types/platform-workbench/modulePageWorkspaceViews.d.ts +7 -0
  128. package/dist/types/platform-workbench/pageCacheKey.d.ts +2 -0
  129. package/dist/types/platform-workbench/pageHostRegistry.d.ts +1 -1
  130. package/dist/types/platform-workbench/workbenchLayout.d.ts +36 -0
  131. package/dist/types/platform-workbench/workbenchNavigation.d.ts +16 -1
  132. package/dist/types/platform-workbench/workspaceViewHost.d.ts +2 -0
  133. package/dist/types/views/PasswordPolicyPreview.vue.d.ts +7 -0
  134. package/dist/types/views/RoleAccountGrantDrawer.vue.d.ts +1 -0
  135. package/dist/types/views/RoleAuthorizationView.vue.d.ts +2 -0
  136. package/dist/types/views/RoleEmploymentGrantDrawer.vue.d.ts +1 -0
  137. package/dist/types/views/{UserDetailWorkspaceView.vue.d.ts → UserDetailRouteView.vue.d.ts} +3 -2
  138. package/dist/types/views/UserManagementView.vue.d.ts +1 -6
  139. package/dist/types/views/menuManagementState.d.ts +2 -0
  140. package/dist/types/views/userDetailStateModel.d.ts +1 -3
  141. package/dist/types/views/userManagementRouteState.d.ts +11 -0
  142. package/dist/types/vue-ui-antdv/components/UiButton.vue.d.ts +4 -1
  143. package/dist/types/vue-ui-antdv/components/UiDataTable.vue.d.ts +1 -1
  144. package/dist/types/vue-ui-antdv/components/UiIcon.vue.d.ts +1 -1
  145. package/dist/types/vue-ui-antdv/components/UiInput.vue.d.ts +2 -1
  146. package/dist/types/vue-ui-antdv/components/UiModal.vue.d.ts +1 -1
  147. package/dist/types/vue-ui-antdv/components/UiRadioGroup.vue.d.ts +18 -0
  148. package/dist/types/vue-ui-antdv/components/UiRecordExplorerItem.vue.d.ts +2 -2
  149. package/dist/types/vue-ui-antdv/components/UiSelect.vue.d.ts +1 -1
  150. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +4 -2
  151. package/dist/types/vue-ui-antdv/components/UiTreeSelect.vue.d.ts +7 -1
  152. package/dist/types/vue-ui-antdv/index.d.ts +5 -2
  153. package/dist/types/web-contracts/index.d.ts +408 -24
  154. package/dist/types/web-core/businessNotifications.d.ts +4 -0
  155. package/dist/types/web-core/index.d.ts +2 -0
  156. package/dist/types/web-core/module/abilities.d.ts +7 -7
  157. package/dist/types/web-core/module/moduleContext.d.ts +6 -3
  158. package/dist/types/web-core/module/runtimeContext.d.ts +5 -1
  159. package/dist/types/web-core/module/staticModuleClient.d.ts +42 -9
  160. package/dist/types/web-core/realtime.d.ts +5 -1
  161. package/dist/types/web-core/referenceResolveClient.d.ts +11 -0
  162. package/dist/workspaceViewSessions-B5g4M0rT.js +51 -0
  163. package/dist/workspaceViews-CkERhK0K.js +8748 -0
  164. package/package.json +1 -1
  165. package/dist/EmployeeDetailWorkspaceView-DYJLlkSz.js +0 -14
  166. package/dist/EmployeeManagementView-taxWUa7g.js +0 -1778
  167. package/dist/RoleAuthorizationView-q_6CsBYq.js +0 -592
  168. package/dist/RoleManagementView-HCa9rH0f.js +0 -1927
  169. package/dist/SystemUserManagementView-C1CkKivH.js +0 -758
  170. package/dist/UserDetailWorkspaceView-OPYvD6mH.js +0 -17
  171. package/dist/UserManagementView-gbCL9SnC.js +0 -965
  172. package/dist/pageRealtime-CzJlr9hs.js +0 -225
  173. package/dist/types/views/EmployeeDetailContent.vue.d.ts +0 -64
  174. package/dist/types/views/PositionManagementView.vue.d.ts +0 -3
  175. package/dist/types/views/TenantManagementView.vue.d.ts +0 -3
  176. package/dist/types/views/applicationManagementState.d.ts +0 -64
  177. package/dist/types/views/departmentManagementState.d.ts +0 -137
  178. package/dist/types/views/employeeDetailStateModel.d.ts +0 -39
  179. package/dist/types/views/employeeDetailWorkspaceSession.d.ts +0 -16
  180. package/dist/types/views/employeeDetailWorkspaceView.d.ts +0 -4
  181. package/dist/types/views/fieldSpecManagementState.d.ts +0 -80
  182. package/dist/types/views/fieldUiControlManagementState.d.ts +0 -76
  183. package/dist/types/views/moduleManagementState.d.ts +0 -76
  184. package/dist/types/views/organizationManagementState.d.ts +0 -64
  185. package/dist/types/views/positionManagementState.d.ts +0 -218
  186. package/dist/types/views/tenantManagementState.d.ts +0 -74
  187. package/dist/types/views/useEmployeeEmploymentRows.d.ts +0 -20
  188. package/dist/types/views/userDetailWorkspaceSession.d.ts +0 -14
  189. package/dist/types/views/userDetailWorkspaceView.d.ts +0 -4
  190. package/dist/useUserSessionRows-CBHEzRFQ.js +0 -128
  191. package/dist/workspaceViewSessions-DkB9myrq.js +0 -3252
  192. /package/dist/types/views/{ApplicationManagementView.vue.d.ts → DynamicModuleRouteView.vue.d.ts} +0 -0
  193. /package/dist/types/views/{DepartmentManagementView.vue.d.ts → ExternalRouteView.vue.d.ts} +0 -0
  194. /package/dist/types/views/{FieldSpecManagementView.vue.d.ts → ModuleOpenApiRouteView.vue.d.ts} +0 -0
  195. /package/dist/types/views/{FieldUiControlManagementView.vue.d.ts → OpenApiCatalogRouteView.vue.d.ts} +0 -0
  196. /package/dist/types/views/{ModuleManagementView.vue.d.ts → RouteDiagnosticsView.vue.d.ts} +0 -0
  197. /package/dist/types/views/{OrganizationManagementView.vue.d.ts → UserManagementListView.vue.d.ts} +0 -0
  198. /package/dist/types/views/{PasswordManagementView.vue.d.ts → WorkspaceRouteView.vue.d.ts} +0 -0
@@ -69,6 +69,42 @@ export interface WebUserNotification {
69
69
  logoutRequired?: boolean;
70
70
  targetSessionId?: string;
71
71
  }
72
+ /** Ephemeral business reminder. It is not a persisted inbox or an acknowledgement record. */
73
+ export interface WebBusinessNotification {
74
+ id: string;
75
+ code: string;
76
+ title: string;
77
+ subtitle?: string;
78
+ content: string;
79
+ dismissible: boolean;
80
+ actions: WebBusinessNotificationAction[];
81
+ }
82
+ export type WebBusinessNotificationAction = WebBusinessNotificationNavigateAction | WebBusinessNotificationRecordAction;
83
+ export interface WebBusinessNotificationNavigateAction {
84
+ kind: 'navigate';
85
+ key: string;
86
+ label: string;
87
+ moduleAlias: string;
88
+ recordId?: string;
89
+ pageMode?: 'LIST' | 'FORM' | 'DETAIL';
90
+ query?: Record<string, string>;
91
+ placement?: 'leading' | 'trailing';
92
+ dismissOnSuccess: boolean;
93
+ }
94
+ /** A standard record action implemented by the owning business module. */
95
+ export interface WebBusinessNotificationRecordAction {
96
+ kind: 'record';
97
+ key: string;
98
+ label: string;
99
+ moduleAlias: string;
100
+ recordId: string;
101
+ actionCode: string;
102
+ arguments?: Record<string, unknown>;
103
+ danger?: boolean;
104
+ confirmation?: string;
105
+ placement?: 'leading' | 'trailing';
106
+ dismissOnSuccess: boolean;
107
+ }
72
108
  export interface WebBusinessRealtimeEvent {
73
109
  type: string;
74
110
  moduleAlias: string;
@@ -88,10 +124,14 @@ export interface WebTreeNode<T> {
88
124
  */
89
125
  export interface RecordInlineAction {
90
126
  key: string;
127
+ /** Standard record action whose availability is resolved for the rendered record. */
128
+ actionCode?: string;
91
129
  title: string;
92
130
  iconName?: RecordInlineActionIconName;
93
131
  showLabel?: boolean;
94
132
  disabled?: boolean;
133
+ /** Explains why a visible inline action is unavailable. */
134
+ disabledReason?: string;
95
135
  danger?: boolean;
96
136
  }
97
137
  export type RecordInlineActionIconName = 'app' | 'check' | 'close' | 'delete' | 'down' | 'edit' | 'export' | 'filter' | 'help' | 'lock' | 'notification' | 'plus' | 'power' | 'reload' | 'save' | 'search' | 'settings';
@@ -194,13 +234,166 @@ export interface PageBootstrap {
194
234
  resolvedConfig: {
195
235
  uiFields: unknown[];
196
236
  queryItems: unknown[];
237
+ /**
238
+ * Permission-scoped detail interaction blocks. The standard runner only
239
+ * executes the explicitly supported block kinds; it never resolves a
240
+ * backend block to an arbitrary client component or handler.
241
+ */
242
+ actionBlocks?: PageBootstrapActionBlock[];
243
+ /** Server-resolved detail relations. Only relation.queryContract is executable by a Web runner. */
244
+ associationBlocks?: PageBootstrapAssociationBlock[];
197
245
  };
198
246
  openApiPath: string;
199
247
  }
248
+ /** A server-resolved action entry declared by a published detail UI config. */
249
+ export interface PageBootstrapActionBlock {
250
+ uiConfigId?: string;
251
+ type: 'action' | 'dialog' | 'localEdit';
252
+ key?: string;
253
+ actionCode: string;
254
+ title?: string;
255
+ position?: string;
256
+ targetUiConfigId?: string;
257
+ submitPath?: string;
258
+ refreshStrategy?: {
259
+ list?: boolean;
260
+ detail?: boolean;
261
+ };
262
+ width?: number;
263
+ height?: number;
264
+ localEditForm?: PageBootstrapLocalEditForm;
265
+ }
266
+ export interface PageBootstrapLocalEditForm {
267
+ uiConfigId: string;
268
+ fields: PageBootstrapLocalEditField[];
269
+ /**
270
+ * Authoritative controls resolved from the published target FORM config.
271
+ * Local edit must consume these facts rather than falling back to the
272
+ * field's legacy alias, otherwise a control can drift from the page that
273
+ * was actually published.
274
+ */
275
+ fieldUiControls: ResolvedFieldControlDescriptor[];
276
+ submitContract: {
277
+ recordRequired: true;
278
+ recordVersionRequired: true;
279
+ fieldNamesRequired: true;
280
+ uiConfigIdPayloadKey: 'uiConfigId';
281
+ };
282
+ }
283
+ export interface PageBootstrapLocalEditField {
284
+ relationAlias?: string;
285
+ fieldName: string;
286
+ fieldTitle?: string;
287
+ fieldUiControlAlias?: string;
288
+ /** Authoritative storage type of this resolved field; editors use it for lossless codecs. */
289
+ valueType?: ViewFieldValueType;
290
+ visible?: boolean;
291
+ readOnly?: boolean;
292
+ requiredOverride?: boolean;
293
+ placeholder?: string;
294
+ columnSpan?: number;
295
+ }
296
+ export interface PageBootstrapAssociationBlock {
297
+ title?: string;
298
+ relation?: ResolvedDetailRelationDescriptor;
299
+ }
300
+ /** Source-neutral detail-relation descriptor. A declaration without queryContract is intentionally inert. */
301
+ export interface ResolvedDetailRelationDescriptor {
302
+ code: string;
303
+ title?: string;
304
+ readOnly: boolean;
305
+ sourceModuleAlias: string;
306
+ sourceEntityAlias: string;
307
+ targetModuleAlias: string;
308
+ targetEntityAlias: string;
309
+ parentBinding: string;
310
+ queryContract?: ResolvedDetailRelationQueryContract;
311
+ /** Read access never implies these operations; the server must explicitly compile them. */
312
+ mutationContract?: ResolvedDetailRelationMutationContract;
313
+ /** Optional client-visible applicability fact; the server remains authoritative. */
314
+ parentConstraint?: ResolvedDetailRelationParentConstraint;
315
+ /** Parent entity field carrying the complete child collection for standard CRUD. */
316
+ embeddedField?: string;
317
+ /** Shared column projection for gateway-backed and embedded relations. */
318
+ listProjection?: ResolvedDetailRelationListProjection;
319
+ /** Immediate server-compiled calculations for rows in this embedded child relation. */
320
+ formComputeRules?: ResolvedDetailRelationFormComputeRuleDescriptor[];
321
+ /** Server-compiled visibility rule; clients execute only its FormulaProgram. */
322
+ visible?: UiRule<boolean>;
323
+ editing?: ResolvedDetailRelationEditing;
324
+ refreshOnDetailReload: boolean;
325
+ }
326
+ export interface ResolvedDetailRelationEditing {
327
+ mode: 'DIALOG' | 'INLINE';
328
+ saveMode: 'INDEPENDENT' | 'AGGREGATE_DRAFT';
329
+ recycleBinEnabled?: boolean;
330
+ }
331
+ export interface ResolvedDetailRelationFormComputeRuleDescriptor {
332
+ code: string;
333
+ program: FormulaProgram;
334
+ targetField: string;
335
+ targetValueType: ViewFieldValueType;
336
+ triggerFields: string[];
337
+ }
338
+ export interface ResolvedDetailRelationParentConstraint {
339
+ fieldName: string;
340
+ expectedValue: string;
341
+ }
342
+ export interface ResolvedDetailRelationMutationContract {
343
+ createAllowed: boolean;
344
+ updateAllowed: boolean;
345
+ deleteAllowed: boolean;
346
+ createActionCode?: string;
347
+ updateActionCode?: string;
348
+ deleteActionCode?: string;
349
+ }
350
+ export interface ResolvedDetailRelationQueryContract {
351
+ /** Dynamic/legacy relation route. Managed relations deliberately omit it. */
352
+ queryPath?: string;
353
+ /** Uses the platform parent-association gateway derived from module + relation facts. */
354
+ managedGateway?: boolean;
355
+ /** Compiled action identity in the source/parent module permission catalog. */
356
+ actionCode?: string;
357
+ targetUiConfigId?: string;
358
+ queryTemplateId?: string;
359
+ pageable: boolean;
360
+ /** Initial page size; absent when the relation explicitly loads its complete result. */
361
+ pageSize?: number;
362
+ /** Server-approved choices. Empty for a non-pageable relation. */
363
+ pageSizeOptions?: number[];
364
+ queryable: boolean;
365
+ listProjection?: ResolvedDetailRelationListProjection;
366
+ /** Source-owned query schema; the relation runner must not load target-module schema directly. */
367
+ querySchema?: QuerySchema;
368
+ }
369
+ /** Server-issued list columns, not a raw target UI config or a client-side inferred view. */
370
+ export interface ResolvedDetailRelationListProjection {
371
+ uiConfigId?: string;
372
+ fields: ResolvedDetailRelationListField[];
373
+ }
374
+ export interface ResolvedDetailRelationListField {
375
+ fieldName: string;
376
+ title?: string;
377
+ fieldForm?: string;
378
+ fieldUiControlAlias?: string;
379
+ width?: number;
380
+ align?: 'left' | 'center' | 'right' | string;
381
+ maxDisplayLines?: number;
382
+ }
383
+ export declare function hasExecutableDetailRelationQueryContract(relation: ResolvedDetailRelationDescriptor | undefined): relation is ResolvedDetailRelationDescriptor & {
384
+ queryContract: ResolvedDetailRelationQueryContract & {
385
+ listProjection: ResolvedDetailRelationListProjection;
386
+ };
387
+ };
388
+ export declare function hasExecutableDetailRelationMutationContract(relation: ResolvedDetailRelationDescriptor | undefined): relation is ResolvedDetailRelationDescriptor & {
389
+ mutationContract: ResolvedDetailRelationMutationContract;
390
+ };
391
+ export type MenuEntryType = 'module' | 'route' | 'link';
200
392
  export interface MenuRecord extends StandardEnabledTreeEntity {
201
393
  id: string;
202
394
  title: string;
203
395
  schemeId: string;
396
+ entryType?: MenuEntryType;
204
397
  openMode?: MenuOpenMode;
205
398
  moduleAlias?: string;
206
399
  route?: string;
@@ -250,7 +443,11 @@ export type MenuNavigationTarget = ModuleMenuTarget | RouteMenuTarget | External
250
443
  export type MenuNavigationType = MenuNavigationTarget['menuType'];
251
444
  export type PageType = 'platform-route' | 'business-route' | 'dynamic-module' | 'remote-url' | 'external-link';
252
445
  export type OpenMode = 'workbench-route' | 'dynamic-runner' | 'iframe' | 'new-window';
253
- export type PageHostType = 'platform-route-host' | 'business-route-host' | 'dynamic-module-host' | 'external-page-host';
446
+ export type PageHostType = 'platform-route-host' | 'business-route-host'
447
+ /** Source-neutral standard CRUD page host. */
448
+ | 'module-page-host'
449
+ /** Persisted compatibility identifier for the standard module page host. */
450
+ | 'dynamic-module-host' | 'external-page-host';
254
451
  export type TabIdentityStrategy = 'by-menu' | 'by-target' | 'by-params';
255
452
  /**
256
453
  * Declares which layer owns a page's vertical scroll boundary.
@@ -297,17 +494,25 @@ export interface DynamicModulePageTarget {
297
494
  defaultUiConfigId?: string;
298
495
  defaultQueryTemplateId?: string;
299
496
  }
497
+ export type ModulePageDescriptor = PageDescriptorBase<'dynamic-module', 'dynamic-runner', 'module-page-host', DynamicModulePageTarget>;
498
+ /** Compatibility descriptor accepted when restoring existing workbench state. */
300
499
  export type DynamicModulePageDescriptor = PageDescriptorBase<'dynamic-module', 'dynamic-runner', 'dynamic-module-host', DynamicModulePageTarget>;
500
+ /** Source-neutral descriptor accepted by the standard module page runner. */
501
+ export type StandardModulePageDescriptor = ModulePageDescriptor | DynamicModulePageDescriptor;
301
502
  export interface UrlPageTarget {
302
503
  url: string;
303
504
  moduleAlias?: string;
304
505
  }
305
506
  export type RemoteUrlPageDescriptor = PageDescriptorBase<'remote-url', 'iframe' | 'new-window', 'external-page-host', UrlPageTarget>;
306
507
  export type ExternalLinkPageDescriptor = PageDescriptorBase<'external-link', 'new-window', 'external-page-host', UrlPageTarget>;
307
- export type PageDescriptor = PlatformRoutePageDescriptor | BusinessRoutePageDescriptor | DynamicModulePageDescriptor | RemoteUrlPageDescriptor | ExternalLinkPageDescriptor;
508
+ export type PageDescriptor = PlatformRoutePageDescriptor | BusinessRoutePageDescriptor | ModulePageDescriptor | DynamicModulePageDescriptor | RemoteUrlPageDescriptor | ExternalLinkPageDescriptor;
308
509
  export interface MenuTab {
510
+ /** Immutable page-instance key used by route restoration and cache isolation. */
511
+ instanceKey?: string;
309
512
  key: string;
310
513
  title: string;
514
+ /** Exact browser address used to restore this tab. */
515
+ fullPath?: string;
311
516
  target?: MenuNavigationTarget;
312
517
  pageDescriptor?: PageDescriptor;
313
518
  restoreState?: TabRestoreState;
@@ -346,6 +551,54 @@ export interface WebQueryRequest {
346
551
  quickSearchFields?: string[];
347
552
  externalQueryValues?: Record<string, unknown>;
348
553
  }
554
+ /** Shared field-reference delivery contract for static and metadata-backed modules. */
555
+ export type WebReferenceResolveMode = 'QUERY' | 'TREE' | 'TRANSLATE';
556
+ export type WebReferenceMatchMode = 'KEY' | 'LABEL' | 'AUTO';
557
+ export type WebReferenceResolveStatus = 'OK' | 'RESOLVED' | 'NOT_FOUND' | 'AMBIGUOUS' | 'PARTIAL';
558
+ /** Persisted aggregate record owning a reference interaction; never use form values to provide its tenant. */
559
+ export interface WebReferenceSource {
560
+ recordId?: string;
561
+ }
562
+ export interface WebReferenceResolveRequest {
563
+ mode?: WebReferenceResolveMode;
564
+ matchMode?: WebReferenceMatchMode;
565
+ fuzzy?: string;
566
+ values?: unknown[];
567
+ conditions?: WebQueryCondition[];
568
+ criteria?: unknown;
569
+ page?: WebPageRequest;
570
+ includeProjections?: boolean;
571
+ formValues?: Record<string, unknown>;
572
+ source?: WebReferenceSource;
573
+ sourceUiConfigId?: string;
574
+ uiConfigId?: string;
575
+ queryTemplateId?: string;
576
+ externalQueryValues?: Record<string, unknown>;
577
+ }
578
+ export interface WebReferenceResolveItem {
579
+ id: string;
580
+ title?: string;
581
+ matchedBy?: WebReferenceMatchMode;
582
+ projections?: Record<string, unknown>;
583
+ affectPatch?: Record<string, unknown>;
584
+ }
585
+ export interface WebReferenceResolveResult {
586
+ input: unknown;
587
+ status: WebReferenceResolveStatus;
588
+ matchedBy?: WebReferenceMatchMode;
589
+ item?: WebReferenceResolveItem;
590
+ candidates: WebReferenceResolveItem[];
591
+ }
592
+ export interface WebReferenceResolveResponse {
593
+ status: WebReferenceResolveStatus;
594
+ mode: WebReferenceResolveMode;
595
+ options: WebReferenceResolveItem[];
596
+ results: WebReferenceResolveResult[];
597
+ offset: number;
598
+ limit: number;
599
+ total: number;
600
+ tree?: WebTreeNode<WebReferenceResolveItem>[];
601
+ }
349
602
  export type QueryValueType = 'STRING' | 'TEXT' | 'BOOLEAN' | 'INTEGER' | 'LONG' | 'DECIMAL' | 'INSTANT' | 'DATE' | 'JSON';
350
603
  export type QueryOperator = 'EQ' | 'NOT_EQUAL' | 'LIKE' | 'IN' | 'NOT_IN' | 'GT' | 'GTE' | 'LT' | 'LTE' | 'BETWEEN' | 'NULL' | 'NOT_NULL';
351
604
  export interface QuerySchemaField {
@@ -387,13 +640,25 @@ export interface UiRule<T> {
387
640
  formula?: UiFormula;
388
641
  disabledHint?: string;
389
642
  }
390
- /**
391
- * A platform-owned portable Boolean predicate evaluated against the current record draft.
392
- * The current grammar supports `PRESENT({fieldName})`, `!()` negation, and `&&` conjunction of PRESENT terms.
393
- * It is deliberately smaller than the server FormulaEngine because this contract must run in every Web client.
394
- */
643
+ /** A FormulaEngine expression together with its server-issued WEB_UI AST. */
395
644
  export interface UiFormula {
396
645
  expression: string;
646
+ program?: FormulaProgram;
647
+ }
648
+ /** Versioned program compiled by FormulaEngine. The browser executes it locally and never parses expression. */
649
+ export interface FormulaProgram {
650
+ schemaVersion: number;
651
+ profile: 'WEB_UI' | 'FORM_COMPUTE';
652
+ root: FormulaNode;
653
+ referencedFields: string[];
654
+ }
655
+ /** Source-neutral FormulaEngine AST node. Profiles decide which nodes can execute. */
656
+ export interface FormulaNode {
657
+ kind: 'VALUE' | 'FIELD' | 'OTHERS' | 'UNARY' | 'BINARY' | 'FUNCTION' | 'ASSIGN';
658
+ operator?: string;
659
+ field?: string;
660
+ value?: string | number | boolean | null;
661
+ arguments: FormulaNode[];
397
662
  }
398
663
  export interface ViewFieldRef {
399
664
  relationCode?: string;
@@ -415,6 +680,8 @@ export interface ViewFieldDefinition {
415
680
  booleanStatus?: BooleanStatusPresentation;
416
681
  /** Maximum visible lines for text cells in standard list views. Omitted uses the platform default of one line. */
417
682
  maxDisplayLines?: number;
683
+ /** User-facing title for the standard tree root sentinel in a detail field. */
684
+ treeRootTitle?: string;
418
685
  }
419
686
  /** Semantic group that owns a contiguous set of standard-form fields. */
420
687
  export interface FormGroupDescriptor {
@@ -432,6 +699,21 @@ export interface BooleanStatusPresentation {
432
699
  export type BooleanStatusTone = 'SUCCESS' | 'NEUTRAL' | 'WARNING' | 'DANGER';
433
700
  export type FieldValuePresentation = 'FILE_SIZE';
434
701
  export type ViewFieldValueType = 'STRING' | 'TEXT' | 'INTEGER' | 'LONG' | 'BOOLEAN' | 'TIMESTAMP' | 'ZONED_TIMESTAMP' | 'DATE' | 'DECIMAL' | 'JSON';
702
+ /**
703
+ * Source-neutral field-control fact compiled by the platform. `renderer` is a platform semantic
704
+ * renderer type, never a Vue component name or front-end module path.
705
+ */
706
+ export interface ResolvedFieldControlDescriptor {
707
+ alias: string;
708
+ rendererType: string;
709
+ valueShape: 'SCALAR' | 'COLLECTION' | 'COMPOSITE';
710
+ properties?: Record<string, string>;
711
+ bindings?: ResolvedFieldControlBindingDescriptor[];
712
+ }
713
+ export interface ResolvedFieldControlBindingDescriptor {
714
+ key: string;
715
+ valueType: string;
716
+ }
435
717
  export interface ResolvedViewFieldDescriptor {
436
718
  fieldRef: ViewFieldRef;
437
719
  label?: string;
@@ -439,6 +721,8 @@ export interface ResolvedViewFieldDescriptor {
439
721
  required?: UiRule<boolean>;
440
722
  readOnly?: UiRule<boolean>;
441
723
  uiType?: string;
724
+ /** Optional while older descriptors still publish only `uiType`. When present it is authoritative. */
725
+ fieldControl?: ResolvedFieldControlDescriptor;
442
726
  valueType?: ViewFieldValueType;
443
727
  valuePresentation?: FieldValuePresentation;
444
728
  width?: string;
@@ -446,6 +730,7 @@ export interface ResolvedViewFieldDescriptor {
446
730
  align?: 'left' | 'center' | 'right' | string;
447
731
  fixed?: boolean;
448
732
  booleanStatus?: BooleanStatusPresentation;
733
+ treeRootTitle?: string;
449
734
  option?: ResolvedOptionFieldDescriptor;
450
735
  reference?: ResolvedReferenceFieldDescriptor;
451
736
  referenceSummary?: ResolvedReferenceSummaryFieldDescriptor;
@@ -462,9 +747,22 @@ export interface ResolvedReferenceSummaryFieldDescriptor {
462
747
  export interface ResolvedReferenceFieldDescriptor {
463
748
  targetModuleAlias: string;
464
749
  cardinality: 'ONE' | 'MANY';
750
+ /** Server-resolved standard picker transport. AUTO exists only for descriptors issued before an explicit mode. */
751
+ pickerMode?: ReferencePickerMode;
752
+ /** Standardized candidate transport chosen by the compiled source-field contract. */
753
+ candidateDelivery?: 'TARGET_NAVIGATOR' | 'SOURCE_FIELD';
754
+ resolvePath?: string;
755
+ /** Server-enforced dependencies that constrain candidates from values of the current form row. */
756
+ candidateDependencies?: ReferenceCandidateDependency[];
465
757
  /** Read-side title projection for this scalar reference, when supplied by the server. */
466
758
  titleField?: string;
467
759
  }
760
+ export interface ReferenceCandidateDependency {
761
+ sourceField: string;
762
+ targetField: string;
763
+ required: boolean;
764
+ }
765
+ export type ReferencePickerMode = 'LIST' | 'TREE' | 'AUTO';
468
766
  export interface OptionBindingDescriptor {
469
767
  sourceType: string;
470
768
  source: string;
@@ -473,6 +771,8 @@ export interface ResolvedOptionFieldDescriptor {
473
771
  binding: OptionBindingDescriptor;
474
772
  selectionMode: 'SINGLE' | 'MULTIPLE';
475
773
  titleField?: string;
774
+ /** Immutable option facts (currently CodeTitleEnum); scope-sensitive dictionaries stay runtime data. */
775
+ inlineItems?: OptionItemDescriptor[];
476
776
  }
477
777
  export interface OptionItemDescriptor {
478
778
  code: string;
@@ -489,6 +789,15 @@ export interface ViewDefinition {
489
789
  fields: ViewFieldDefinition[];
490
790
  formGroups?: FormGroupDescriptor[];
491
791
  }
792
+ /** Server-issued deterministic main-form calculation. The coordinator is introduced separately. */
793
+ export interface ResolvedFormComputeRuleDescriptor {
794
+ code: string;
795
+ program: FormulaProgram;
796
+ targetField: string;
797
+ targetValueType: ViewFieldValueType;
798
+ triggerFields: string[];
799
+ writePolicy: 'ALWAYS';
800
+ }
492
801
  export interface ResolvedViewDescriptor {
493
802
  viewCode: string;
494
803
  viewKind: ModuleViewKind;
@@ -497,8 +806,86 @@ export interface ResolvedViewDescriptor {
497
806
  fields: ResolvedViewFieldDescriptor[];
498
807
  /** Dynamic-page provenance used to select the view configured by a menu entry. */
499
808
  sourceUiConfigId?: string;
500
- scopedListWorkspace?: ResolvedScopedListWorkspaceDescriptor;
501
809
  formGroups?: FormGroupDescriptor[];
810
+ formComputeRules?: ResolvedFormComputeRuleDescriptor[];
811
+ }
812
+ export type ModulePageTemplate = 'FLAT_MANAGEMENT' | 'LIST_DETAIL_CARD' | 'TREE_MANAGEMENT';
813
+ export interface ResolvedPageExplorerDescriptor {
814
+ title: string;
815
+ searchPlaceholder: string;
816
+ emptyDescription: string;
817
+ recordLabel: string;
818
+ fallbackTitle: string;
819
+ titleField: string;
820
+ secondaryField?: string;
821
+ mutedWhenDisabled: boolean;
822
+ }
823
+ export interface ResolvedPageNavigatorDescriptor {
824
+ levels: ResolvedPageNavigatorLevelDescriptor[];
825
+ contextBindings: ResolvedPageContextBindingDescriptor[];
826
+ }
827
+ export interface ResolvedPageNavigatorLevelDescriptor {
828
+ key: string;
829
+ kind: 'TREE' | 'MICRO_LIST';
830
+ sourceModuleAlias: string;
831
+ title: string;
832
+ searchPlaceholder: string;
833
+ /** Presentation policy applied after the source has authoritatively loaded. */
834
+ singleResultPolicy?: 'NONE' | 'AUTO_SELECT' | 'AUTO_SELECT_AND_HIDE';
835
+ /** Explicit initial selection policy; omitted means the navigator starts unselected. */
836
+ initialSelectionPolicy?: 'NONE' | 'FIRST_RECORD';
837
+ /**
838
+ * Session-derived source scope, enforced by the source reference transport. A system user has
839
+ * no current tenant, so a CURRENT_TENANT tenant source resolves its REFERENCE-authorized choices.
840
+ */
841
+ sourceScope?: 'NONE' | 'CURRENT_TENANT';
842
+ /** When present, the navigator source exposes its own standard CRUD affordances in place. */
843
+ management?: ResolvedPageNavigatorManagementDescriptor;
844
+ }
845
+ export interface ResolvedPageContextBindingDescriptor {
846
+ source: 'SESSION' | 'NAVIGATOR';
847
+ sourceKey: string;
848
+ target: 'LIST_QUERY' | 'NAVIGATOR_QUERY' | 'FORM_DEFAULT' | 'PICKER_QUERY' | 'MUTATION_CONSTRAINT';
849
+ targetKey: string;
850
+ targetNavigatorLevelKey?: string;
851
+ /** Field name of the record picker which receives this query context. */
852
+ targetPickerFieldKey?: string;
853
+ }
854
+ export interface ResolvedPageNavigatorManagementDescriptor {
855
+ /** Optional named source-module form; the default editor is used when omitted. */
856
+ editorSurface?: string;
857
+ }
858
+ export interface ResolvedPageListDescriptor {
859
+ searchPlaceholder: string;
860
+ fields: ResolvedViewDescriptor;
861
+ /** Read-only placements of declared aggregate relations beneath an expanded list row. */
862
+ relationExpansions?: ResolvedPageListRelationExpansionDescriptor[];
863
+ }
864
+ export interface ResolvedPageListRelationExpansionDescriptor {
865
+ relationCode: string;
866
+ fields: string[];
867
+ }
868
+ export interface ResolvedPageDetailDescriptor {
869
+ emptyDescription: string;
870
+ createTitle: string;
871
+ /** Whether the standard immutable system metadata section is displayed. */
872
+ showSystemInfo?: boolean;
873
+ display?: ResolvedViewDescriptor;
874
+ /** Omitted by an editorless page; standard mutation actions remain governed by the runtime action contract. */
875
+ editor?: ResolvedViewDescriptor;
876
+ /** Stable client registration key for an independently restorable detail workbench view. */
877
+ workspaceView?: ResolvedPageDetailWorkspaceViewDescriptor;
878
+ }
879
+ export interface ResolvedPageDetailWorkspaceViewDescriptor {
880
+ type: string;
881
+ }
882
+ export interface ResolvedModulePageDescriptor {
883
+ template: ModulePageTemplate;
884
+ explorer?: ResolvedPageExplorerDescriptor;
885
+ navigator?: ResolvedPageNavigatorDescriptor;
886
+ list?: ResolvedPageListDescriptor;
887
+ detail: ResolvedPageDetailDescriptor;
888
+ traits: ('STANDARD_CRUD' | 'ENABLED_STATUS' | 'RECYCLE_BIN' | 'RESPONSIVE_DETAIL_SURFACE')[];
502
889
  }
503
890
  export interface ResolvedUiActionConfirmationDescriptor {
504
891
  mode: 'typedText';
@@ -508,17 +895,6 @@ export interface ResolvedUiActionDescriptor {
508
895
  actionCode: string;
509
896
  confirmation?: ResolvedUiActionConfirmationDescriptor;
510
897
  }
511
- export interface ResolvedScopedListWorkspaceDescriptor {
512
- scopeModuleAlias: string;
513
- scopeField: string;
514
- queryCriteriaKey: string;
515
- scopeTitle: string;
516
- scopeSearchPlaceholder: string;
517
- /** Scope list items only show a secondary label when the descriptor explicitly enables it. */
518
- showScopeItemSubtitle: boolean;
519
- createPolicy: 'REQUIRE_SCOPE' | 'ALLOW_UNSCOPED';
520
- manageScopeTree?: boolean;
521
- }
522
898
  /** Source-neutral runtime fact for one persisted MuYunFileServer field. */
523
899
  export interface ResolvedFileReferenceFieldDescriptor {
524
900
  fieldRef: ViewFieldRef;
@@ -529,19 +905,27 @@ export interface ResolvedFileReferenceFieldDescriptor {
529
905
  uploadAvailable: boolean;
530
906
  readAvailable: boolean;
531
907
  }
532
- export interface ModuleUiDefinition {
533
- moduleAlias: string;
534
- views: ViewDefinition[];
535
- }
536
908
  export interface ResolvedModuleUiDescriptor {
537
909
  schemaVersion: string;
538
910
  moduleAlias: string;
539
911
  moduleKind?: 'STATIC' | 'DYNAMIC';
540
912
  title?: string;
541
- views: ResolvedViewDescriptor[];
542
913
  actions?: ResolvedUiActionDescriptor[];
543
914
  recordLabelField?: string;
544
915
  fileReferences?: ResolvedFileReferenceFieldDescriptor[];
916
+ page?: ResolvedModulePageDescriptor;
917
+ defaultEditor?: ResolvedViewDescriptor;
918
+ editorSurfaces?: ResolvedEditorSurfaceDescriptor[];
919
+ editorContributions?: ResolvedPageDetailEditorContribution[];
920
+ detailRelations?: ResolvedDetailRelationDescriptor[];
921
+ }
922
+ export interface ResolvedEditorSurfaceDescriptor {
923
+ key: string;
924
+ editor: ResolvedViewDescriptor;
925
+ }
926
+ export interface ResolvedPageDetailEditorContribution {
927
+ resource: string;
928
+ editor: ResolvedViewDescriptor;
545
929
  }
546
930
  export interface StandardEntity {
547
931
  id?: string;
@@ -0,0 +1,4 @@
1
+ import type { WebBusinessNotificationRecordAction } from '../web-contracts/index';
2
+ import type { HttpClient } from './http';
3
+ /** Calls the standard record action declared by a notification. */
4
+ export declare function invokeBusinessNotificationRecordAction(http: HttpClient, action: WebBusinessNotificationRecordAction): Promise<unknown>;
@@ -2,9 +2,11 @@ export * from './errors';
2
2
  export * from './http';
3
3
  export * from './query';
4
4
  export * from './actionResult';
5
+ export * from './businessNotifications';
5
6
  export * from './dataChanges';
6
7
  export * from './realtime';
7
8
  export * from './clients';
9
+ export * from './referenceResolveClient';
8
10
  export { userPreferences } from './userPreferences';
9
11
  export type { UserPreferenceOptions, UserPreferenceStore } from './userPreferences';
10
12
  export * from './module/index';
@@ -1,17 +1,17 @@
1
1
  import { type ModuleAbilityCode } from './abilityCodes';
2
2
  import { type ModuleRuntimeContextState } from './runtimeContext';
3
- import type { ModuleEnableClient, StaticModuleCrudClient, StaticModuleTreeClient } from './staticModuleClient';
3
+ import type { ModuleEnableClient, ModuleCrudClient, ModuleTreeClient } from './staticModuleClient';
4
4
  export interface ModuleAbilityClients<TRecord> {
5
- crud: StaticModuleCrudClient<TRecord>;
6
- tree: StaticModuleTreeClient<TRecord>;
5
+ crud: ModuleCrudClient<TRecord>;
6
+ tree: ModuleTreeClient<TRecord>;
7
7
  enable: ModuleEnableClient;
8
8
  }
9
9
  export interface ModuleAbilities<TRecord> {
10
- crud(): StaticModuleCrudClient<TRecord>;
11
- tree(): StaticModuleTreeClient<TRecord>;
10
+ crud(): ModuleCrudClient<TRecord>;
11
+ tree(): ModuleTreeClient<TRecord>;
12
12
  enable(): ModuleEnableClient;
13
- tryCrud(): StaticModuleCrudClient<TRecord> | undefined;
14
- tryTree(): StaticModuleTreeClient<TRecord> | undefined;
13
+ tryCrud(): ModuleCrudClient<TRecord> | undefined;
14
+ tryTree(): ModuleTreeClient<TRecord> | undefined;
15
15
  tryEnable(): ModuleEnableClient | undefined;
16
16
  has(ability: ModuleAbilityCode | string): boolean | undefined;
17
17
  hasCrud(): boolean | undefined;
@@ -1,21 +1,23 @@
1
1
  import type { HttpClient } from '../http';
2
2
  import { type ModuleAbilities } from './abilities';
3
3
  import { type ModuleActionState, type ModuleRecordActionAvailability, type ModuleRuntimeAction, type ModuleRuntimeContextState } from './runtimeContext';
4
- import { type StaticModuleCrudClient, type StaticModuleTreeClient } from './staticModuleClient';
4
+ import { type ModuleCrudClient, type ModuleTreeClient } from './staticModuleClient';
5
5
  export interface ModuleContext<TRecord> {
6
6
  moduleAlias: string;
7
7
  http: HttpClient;
8
- crud: StaticModuleCrudClient<TRecord>;
8
+ crud: ModuleCrudClient<TRecord>;
9
9
  runtime: ModuleRuntimeContextState;
10
10
  abilities: ModuleAbilities<TRecord>;
11
11
  action(actionCode: string, recordId?: string): ModuleActionState | undefined;
12
12
  runtimeAction(actionCode: string): ModuleRuntimeAction | undefined;
13
13
  can(actionCode: string, recordId?: string): boolean | undefined;
14
14
  recordActions(recordId: string): Promise<ModuleRecordActionAvailability>;
15
+ recordActionsBatch?(recordIds: string[]): Promise<ModuleRecordActionAvailability[]>;
15
16
  recordActionsSnapshot(recordId: string): ModuleRecordActionAvailability | undefined;
17
+ invalidateRecordActions?(recordIds?: string[]): void;
16
18
  }
17
19
  export interface ModuleTreeContext<TRecord> extends ModuleContext<TRecord> {
18
- tree: StaticModuleTreeClient<TRecord>;
20
+ tree: ModuleTreeClient<TRecord>;
19
21
  }
20
22
  export interface ModuleContextConfig {
21
23
  http?: HttpClient;
@@ -23,6 +25,7 @@ export interface ModuleContextConfig {
23
25
  }
24
26
  export interface ModuleContextOptions extends ModuleContextConfig {
25
27
  moduleAlias: string;
28
+ runtimeAccess?: 'MENU' | 'REFERENCE';
26
29
  }
27
30
  export declare function configureModuleContext(config: ModuleContextConfig): void;
28
31
  export declare function provideModuleContextConfig(config: ModuleContextConfig): void;
@@ -47,6 +47,8 @@ export interface ModuleRuntimeContext {
47
47
  capabilities: string[];
48
48
  abilities?: string[];
49
49
  actions: ModuleRuntimeAction[];
50
+ /** Read-only projections this module deliberately exposes for page navigation. */
51
+ navigatorSourceCapabilities?: Array<'REFERENCE_QUERY' | 'REFERENCE_TREE'>;
50
52
  uiDescriptor?: ResolvedModuleUiDescriptor;
51
53
  }
52
54
  export interface ModuleRuntimeContextState {
@@ -59,7 +61,9 @@ export interface ModuleRuntimeContextState {
59
61
  runtimeAction(actionCode: string): ModuleRuntimeAction | undefined;
60
62
  can(actionCode: string, recordId?: string): boolean | undefined;
61
63
  recordActions(recordId: string): Promise<ModuleRecordActionAvailability>;
64
+ recordActionsBatch?(recordIds: string[]): Promise<ModuleRecordActionAvailability[]>;
62
65
  recordActionsSnapshot(recordId: string): ModuleRecordActionAvailability | undefined;
66
+ invalidateRecordActions?(recordIds?: string[]): void;
63
67
  }
64
- export declare function createModuleRuntimeContextState(http: HttpClient, moduleAlias: string): ModuleRuntimeContextState;
68
+ export declare function createModuleRuntimeContextState(http: HttpClient, moduleAlias: string, access?: 'MENU' | 'REFERENCE'): ModuleRuntimeContextState;
65
69
  export declare function isRuntimeAbilityAvailable(context: ModuleRuntimeContext | undefined, ability: ModuleAbilityCode): boolean;