@ximatai/muyun-web-app 0.26.8 → 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 (171) hide show
  1. package/dist/DictionaryManagementView-CtIQpqVA.js +1035 -0
  2. package/dist/MenuManagementView-DJhkN2sG.js +837 -0
  3. package/dist/{MetadataOrchestrationView-DKYVGMzy.js → MetadataOrchestrationView-CzhAgEdX.js} +211 -205
  4. package/dist/{ModuleActionManagementView-DiVzuPdu.js → ModuleActionManagementView-CM2d8jPO.js} +72 -72
  5. package/dist/{RoleAuthorizationView-C0s4Bog7.js → RoleAuthorizationView-jn_WUCeg.js} +228 -221
  6. package/dist/{RoleDetailWorkspaceView-dqHxKVfd.js → RoleDetailWorkspaceView-CzaQ3Dz1.js} +1 -1
  7. package/dist/RoleManagementView-nY7qu4GF.js +1951 -0
  8. package/dist/{SystemUserDetailWorkspaceView-CQ9WeLrR.js → SystemUserDetailWorkspaceView-CBvqmWvP.js} +1 -1
  9. package/dist/SystemUserManagementView-AEomKvK7.js +887 -0
  10. package/dist/currentUserContext-B1lj1WgF.js +11 -0
  11. package/dist/index.css +1 -1
  12. package/dist/index.js +531 -4402
  13. package/dist/{platform-components-CFU_zR7-.js → platform-components-CIi6GdC9.js} +4832 -3453
  14. package/dist/types/App.vue.d.ts +1 -0
  15. package/dist/types/app/StaticRoutePageHost.vue.d.ts +11 -0
  16. package/dist/types/app/loginTenant.d.ts +1 -1
  17. package/dist/types/app/menuRouteCompiler.d.ts +45 -0
  18. package/dist/types/app/menuRouteRuntime.d.ts +24 -0
  19. package/dist/types/app/pageRouteContext.d.ts +24 -0
  20. package/dist/types/app/routeDiagnosticsStore.d.ts +10 -0
  21. package/dist/types/app/router.d.ts +15 -0
  22. package/dist/types/app/staticRouteDefinitions.d.ts +25 -0
  23. package/dist/types/app/workbenchRouteSync.d.ts +1 -1
  24. package/dist/types/app/workbenchStartup.d.ts +3 -3
  25. package/dist/types/consumer/index.d.ts +5 -3
  26. package/dist/types/dynamic-page-runtime/DynamicModuleHost.vue.d.ts +3 -10
  27. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +4 -3
  28. package/dist/types/dynamic-page-runtime/ManagedDetailRelationInlineSurface.vue.d.ts +40 -0
  29. package/dist/types/dynamic-page-runtime/ManagedDetailRelationSurface.vue.d.ts +14 -0
  30. package/dist/types/dynamic-page-runtime/ModulePageDetailRelations.vue.d.ts +26 -0
  31. package/dist/types/dynamic-page-runtime/ModulePageFormContributionRenderer.vue.d.ts +12 -0
  32. package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +14 -0
  33. package/dist/types/dynamic-page-runtime/ModulePageListExpansionSurface.vue.d.ts +19 -0
  34. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansion.vue.d.ts +13 -0
  35. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansions.vue.d.ts +16 -0
  36. package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +42 -0
  37. package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +41 -0
  38. package/dist/types/dynamic-page-runtime/NavigatorManagementEditor.vue.d.ts +20 -1
  39. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +12 -5
  40. package/dist/types/dynamic-page-runtime/RecordFormSurface.vue.d.ts +31 -0
  41. package/dist/types/dynamic-page-runtime/composables/useManagedDetailRelationRuntime.d.ts +30 -0
  42. package/dist/types/dynamic-page-runtime/composables/useModulePageActions.d.ts +13 -0
  43. package/dist/types/dynamic-page-runtime/composables/useModulePageBootstrap.d.ts +17 -0
  44. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailActionRuntime.d.ts +48 -0
  45. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailExtensionRuntime.d.ts +26 -0
  46. package/dist/types/dynamic-page-runtime/composables/useModulePageFormContributionRuntime.d.ts +22 -0
  47. package/dist/types/dynamic-page-runtime/composables/useModulePageListSession.d.ts +41 -0
  48. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +1324 -0
  49. package/dist/types/dynamic-page-runtime/composables/useRecordEditingSession.d.ts +22 -0
  50. package/dist/types/dynamic-page-runtime/dynamicModuleDetailStateModel.d.ts +5 -12
  51. package/dist/types/dynamic-page-runtime/formComputeCoordinator.d.ts +18 -0
  52. package/dist/types/dynamic-page-runtime/index.d.ts +3 -2
  53. package/dist/types/dynamic-page-runtime/listPageSizePreference.d.ts +10 -0
  54. package/dist/types/dynamic-page-runtime/moduleDetailStateModel.d.ts +12 -0
  55. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +181 -7
  56. package/dist/types/dynamic-page-runtime/navigatorVisibility.d.ts +6 -0
  57. package/dist/types/dynamic-page-runtime/pageContextRuntime.d.ts +2 -2
  58. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +9 -1
  59. package/dist/types/dynamic-page-runtime/relationFormComputeCoordinator.d.ts +9 -0
  60. package/dist/types/formula/FormulaRuntime.d.ts +29 -0
  61. package/dist/types/platform-admin-runtime/WorkspaceViewDrawer.vue.d.ts +1 -0
  62. package/dist/types/{views/UserDetailWorkspaceView.vue.d.ts → platform-admin-runtime/employee/EmployeeAccountDrawer.vue.d.ts} +2 -2
  63. package/dist/types/platform-admin-runtime/employeeModulePageEnhancement.d.ts +3 -0
  64. package/dist/types/platform-admin-runtime/index.d.ts +1 -1
  65. package/dist/types/platform-admin-runtime/moduleOpenApi.d.ts +2 -0
  66. package/dist/types/platform-admin-runtime/passwordPolicyPageEnhancement.d.ts +6 -0
  67. package/dist/types/platform-admin-runtime/platformAdminRoutes.d.ts +1 -6
  68. package/dist/types/platform-admin-runtime/platformModulePageEnhancement.d.ts +9 -0
  69. package/dist/types/platform-admin-runtime/tenant/TenantApplicationConfigurationDrawer.vue.d.ts +7 -0
  70. package/dist/types/platform-admin-runtime/tenant/TenantApplicationsDetailSection.vue.d.ts +7 -0
  71. package/dist/types/platform-admin-runtime/tenantModulePageEnhancement.d.ts +7 -0
  72. package/dist/types/platform-admin-runtime/user/UserOnlineStatusCell.vue.d.ts +8 -0
  73. package/dist/types/platform-admin-runtime/user/UserPasswordDrawer.vue.d.ts +7 -0
  74. package/dist/types/platform-admin-runtime/user/UserSessionListExpansion.vue.d.ts +7 -0
  75. package/dist/types/platform-admin-runtime/user/useUserSessionRows.d.ts +23 -0
  76. package/dist/types/platform-admin-runtime/user/userOnlineStatusStore.d.ts +11 -0
  77. package/dist/types/platform-admin-runtime/userModulePageEnhancement.d.ts +7 -0
  78. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +4 -2
  79. package/dist/types/platform-components/DetailRelationListPanel.vue.d.ts +13 -0
  80. package/dist/types/{views/EmployeeDetailWorkspaceView.vue.d.ts → platform-components/DrawerTitleActions.vue.d.ts} +2 -1
  81. package/dist/types/platform-components/FileTransferUploader.vue.d.ts +7 -0
  82. package/dist/types/platform-components/ModuleActionButton.vue.d.ts +5 -2
  83. package/dist/types/platform-components/RecordContentSectionHeading.vue.d.ts +17 -0
  84. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +3 -0
  85. package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +8 -3
  86. package/dist/types/platform-components/RecordDetailFields.vue.d.ts +5 -0
  87. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +11 -3
  88. package/dist/types/platform-components/RecordDetailPanel.vue.d.ts +14 -6
  89. package/dist/types/platform-components/RecordExpandedSubtable.vue.d.ts +3 -0
  90. package/dist/types/platform-components/RecordFileReferenceTransfer.vue.d.ts +4 -0
  91. package/dist/types/platform-components/RecordFormFields.vue.d.ts +29 -1
  92. package/dist/types/platform-components/RecordImageFileReferencePreview.vue.d.ts +11 -0
  93. package/dist/types/platform-components/RecordListExpansionSurface.vue.d.ts +13 -0
  94. package/dist/types/platform-components/RecordListExplorer.vue.d.ts +4 -2
  95. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +2 -1
  96. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +12 -2
  97. package/dist/types/platform-components/RecordPicker.vue.d.ts +10 -2
  98. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +33 -5
  99. package/dist/types/{views/EmployeeEmploymentDrawer.vue.d.ts → platform-components/RecordRelationTabs.vue.d.ts} +7 -7
  100. package/dist/types/platform-components/RecordSelectionCheckbox.vue.d.ts +13 -0
  101. package/dist/types/platform-components/StaticManagementLayout.vue.d.ts +12 -4
  102. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +4 -2
  103. package/dist/types/platform-components/UserSessionExpandedSubtable.vue.d.ts +2 -0
  104. package/dist/types/platform-components/drawerTitleActions.d.ts +11 -0
  105. package/dist/types/platform-components/index.d.ts +11 -3
  106. package/dist/types/platform-components/optionFieldOptionCache.d.ts +3 -0
  107. package/dist/types/platform-components/recordDetailFieldModel.d.ts +2 -0
  108. package/dist/types/platform-components/recordFormFieldModel.d.ts +67 -4
  109. package/dist/types/platform-components/recordPickerConstraints.d.ts +2 -0
  110. package/dist/types/platform-components/recordPickerModel.d.ts +6 -2
  111. package/dist/types/platform-workbench/Workbench.vue.d.ts +2 -2
  112. package/dist/types/platform-workbench/index.d.ts +3 -2
  113. package/dist/types/platform-workbench/legacyPageHostTypeCompatibility.d.ts +6 -0
  114. package/dist/types/platform-workbench/menuNavigation.d.ts +24 -2
  115. package/dist/types/platform-workbench/pageCacheKey.d.ts +2 -0
  116. package/dist/types/platform-workbench/pageHostRegistry.d.ts +1 -1
  117. package/dist/types/platform-workbench/workbenchNavigation.d.ts +14 -1
  118. package/dist/types/views/PasswordPolicyPreview.vue.d.ts +7 -0
  119. package/dist/types/views/RoleAccountGrantDrawer.vue.d.ts +1 -0
  120. package/dist/types/views/RoleAuthorizationView.vue.d.ts +2 -0
  121. package/dist/types/views/RoleEmploymentGrantDrawer.vue.d.ts +1 -0
  122. package/dist/types/views/{EmployeeManagementView.vue.d.ts → UserDetailRouteView.vue.d.ts} +3 -2
  123. package/dist/types/views/UserManagementListView.vue.d.ts +3 -0
  124. package/dist/types/views/UserManagementView.vue.d.ts +1 -6
  125. package/dist/types/views/WorkspaceRouteView.vue.d.ts +3 -0
  126. package/dist/types/views/menuManagementState.d.ts +2 -0
  127. package/dist/types/views/userDetailStateModel.d.ts +1 -3
  128. package/dist/types/views/userManagementRouteState.d.ts +11 -0
  129. package/dist/types/vue-ui-antdv/components/UiButton.vue.d.ts +3 -0
  130. package/dist/types/vue-ui-antdv/components/UiIcon.vue.d.ts +1 -1
  131. package/dist/types/vue-ui-antdv/components/UiInput.vue.d.ts +2 -1
  132. package/dist/types/vue-ui-antdv/components/UiRadioGroup.vue.d.ts +18 -0
  133. package/dist/types/vue-ui-antdv/components/UiRecordExplorerItem.vue.d.ts +2 -2
  134. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +4 -2
  135. package/dist/types/vue-ui-antdv/index.d.ts +4 -2
  136. package/dist/types/web-contracts/index.d.ts +303 -12
  137. package/dist/types/web-core/businessNotifications.d.ts +3 -2
  138. package/dist/types/web-core/index.d.ts +1 -0
  139. package/dist/types/web-core/module/abilities.d.ts +7 -7
  140. package/dist/types/web-core/module/moduleContext.d.ts +5 -3
  141. package/dist/types/web-core/module/runtimeContext.d.ts +2 -0
  142. package/dist/types/web-core/module/staticModuleClient.d.ts +36 -10
  143. package/dist/types/web-core/referenceResolveClient.d.ts +11 -0
  144. package/dist/workspaceViewSessions-B5g4M0rT.js +51 -0
  145. package/dist/workspaceViews-CkERhK0K.js +8748 -0
  146. package/package.json +1 -1
  147. package/dist/EmployeeDetailWorkspaceView-DswEDSxH.js +0 -14
  148. package/dist/EmployeeManagementView-C9STtw08.js +0 -1777
  149. package/dist/RoleManagementView-D43pUCxi.js +0 -1926
  150. package/dist/SystemUserManagementView-D75_ylYk.js +0 -758
  151. package/dist/UserDetailWorkspaceView-BCST01d2.js +0 -17
  152. package/dist/UserManagementView-CcdvDo_y.js +0 -964
  153. package/dist/pageRealtime-EAiGWKEo.js +0 -227
  154. package/dist/types/views/EmployeeDetailContent.vue.d.ts +0 -64
  155. package/dist/types/views/employeeDetailStateModel.d.ts +0 -39
  156. package/dist/types/views/employeeDetailWorkspaceSession.d.ts +0 -16
  157. package/dist/types/views/employeeDetailWorkspaceView.d.ts +0 -4
  158. package/dist/types/views/fieldUiControlManagementState.d.ts +0 -76
  159. package/dist/types/views/moduleManagementState.d.ts +0 -76
  160. package/dist/types/views/positionManagementState.d.ts +0 -218
  161. package/dist/types/views/tenantManagementState.d.ts +0 -74
  162. package/dist/types/views/useEmployeeEmploymentRows.d.ts +0 -20
  163. package/dist/types/views/userDetailWorkspaceSession.d.ts +0 -14
  164. package/dist/types/views/userDetailWorkspaceView.d.ts +0 -4
  165. package/dist/useUserSessionRows-DCpUZCzN.js +0 -128
  166. package/dist/workspaceViewSessions-Dj1LjdG1.js +0 -4984
  167. /package/dist/types/views/{FieldUiControlManagementView.vue.d.ts → DynamicModuleRouteView.vue.d.ts} +0 -0
  168. /package/dist/types/views/{ModuleManagementView.vue.d.ts → ExternalRouteView.vue.d.ts} +0 -0
  169. /package/dist/types/views/{PasswordManagementView.vue.d.ts → ModuleOpenApiRouteView.vue.d.ts} +0 -0
  170. /package/dist/types/views/{PositionManagementView.vue.d.ts → OpenApiCatalogRouteView.vue.d.ts} +0 -0
  171. /package/dist/types/views/{TenantManagementView.vue.d.ts → RouteDiagnosticsView.vue.d.ts} +0 -0
@@ -5,12 +5,14 @@ type __VLS_Props = {
5
5
  expandedKeys?: string[];
6
6
  };
7
7
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
- select: (node: UiTreeNode) => any;
9
8
  action: (action: import("../../web-contracts/index.ts").RecordInlineAction, node: UiTreeNode) => any;
9
+ select: (node: UiTreeNode) => any;
10
+ deselect: () => any;
10
11
  "update:expandedKeys": (keys: string[]) => any;
11
12
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
- onSelect?: ((node: UiTreeNode) => any) | undefined;
13
13
  onAction?: ((action: import("../../web-contracts/index.ts").RecordInlineAction, node: UiTreeNode) => any) | undefined;
14
+ onSelect?: ((node: UiTreeNode) => any) | undefined;
15
+ onDeselect?: (() => any) | undefined;
14
16
  "onUpdate:expandedKeys"?: ((keys: string[]) => any) | undefined;
15
17
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
18
  declare const _default: typeof __VLS_export;
@@ -10,6 +10,8 @@ export { default as UiInput } from './components/UiInput.vue';
10
10
  export { default as UiSearchInput } from './components/UiSearchInput.vue';
11
11
  export { default as UiTextArea } from './components/UiTextArea.vue';
12
12
  export { default as UiSelect } from './components/UiSelect.vue';
13
+ export { default as UiRadioGroup } from './components/UiRadioGroup.vue';
14
+ export type { UiRadioOption } from './components/UiRadioGroup.vue';
13
15
  export { default as UiTreeSelect } from './components/UiTreeSelect.vue';
14
16
  export type { UiTreeSelectNode } from './components/UiTreeSelect.vue';
15
17
  export { default as UiTooltip } from './components/UiTooltip.vue';
@@ -20,9 +22,9 @@ export { default as UiTabs } from './components/UiTabs.vue';
20
22
  export { default as UiTree } from './components/UiTree.vue';
21
23
  export { default as UiDataTable } from './components/UiDataTable.vue';
22
24
  export { default as UiDropdown } from './components/UiDropdown.vue';
23
- export { default as UiModal } from './components/UiModal.vue';
24
25
  export { default as UiSidePanel } from './components/UiSidePanel.vue';
25
26
  export { default as UiSidePanelHost } from './components/UiSidePanelHost.vue';
27
+ export { default as UiModal } from './components/UiModal.vue';
26
28
  export { default as UiRecordExplorerItem } from './components/UiRecordExplorerItem.vue';
27
29
  export { default as UiSpin } from './components/UiSpin.vue';
28
30
  export { default as UiEmpty } from './components/UiEmpty.vue';
@@ -36,8 +38,8 @@ export { showErrorMessage, showFeedback, showInfoMessage, showSuccessMessage, sh
36
38
  export type { UiFeedbackOptions, UiFeedbackTone } from './feedback';
37
39
  export { resolveFieldComponent } from './registry';
38
40
  export type { UiIconName } from './components/UiIcon.vue';
39
- export type { UiTagListItem } from './components/UiTagList.vue';
40
41
  export type { UiSidePanelScope } from './components/sidePanelHost';
42
+ export type { UiTagListItem } from './components/UiTagList.vue';
41
43
  export { antDesignThemeOf, cssVariablesOf, defaultUiTheme, defaultUiThemeSkinId, uiThemeSkinById, uiThemeSkins, } from './theme';
42
44
  export type { UiSupportTheme, UiTheme, UiThemeSkin, UiThemeSkinId, UiThemeTone } from './theme';
43
45
  export type { UiConfirmOptions, UiDataTableColumn, UiDataTableKey, UiDataTablePagination, UiDataTableRecord, UiDataTableSelection, UiDropdownItem, UiMenuItem, UiRecordInlineAction, UiTabItem, UiTreeNode, UiTreeNodeAction, } from './types';
@@ -79,7 +79,7 @@ export interface WebBusinessNotification {
79
79
  dismissible: boolean;
80
80
  actions: WebBusinessNotificationAction[];
81
81
  }
82
- export type WebBusinessNotificationAction = WebBusinessNotificationNavigateAction | WebBusinessNotificationCommandAction;
82
+ export type WebBusinessNotificationAction = WebBusinessNotificationNavigateAction | WebBusinessNotificationRecordAction;
83
83
  export interface WebBusinessNotificationNavigateAction {
84
84
  kind: 'navigate';
85
85
  key: string;
@@ -88,16 +88,21 @@ export interface WebBusinessNotificationNavigateAction {
88
88
  recordId?: string;
89
89
  pageMode?: 'LIST' | 'FORM' | 'DETAIL';
90
90
  query?: Record<string, string>;
91
+ placement?: 'leading' | 'trailing';
91
92
  dismissOnSuccess: boolean;
92
93
  }
93
- export interface WebBusinessNotificationCommandAction {
94
- kind: 'command';
94
+ /** A standard record action implemented by the owning business module. */
95
+ export interface WebBusinessNotificationRecordAction {
96
+ kind: 'record';
95
97
  key: string;
96
98
  label: string;
97
- command: string;
99
+ moduleAlias: string;
100
+ recordId: string;
101
+ actionCode: string;
98
102
  arguments?: Record<string, unknown>;
99
103
  danger?: boolean;
100
104
  confirmation?: string;
105
+ placement?: 'leading' | 'trailing';
101
106
  dismissOnSuccess: boolean;
102
107
  }
103
108
  export interface WebBusinessRealtimeEvent {
@@ -119,6 +124,8 @@ export interface WebTreeNode<T> {
119
124
  */
120
125
  export interface RecordInlineAction {
121
126
  key: string;
127
+ /** Standard record action whose availability is resolved for the rendered record. */
128
+ actionCode?: string;
122
129
  title: string;
123
130
  iconName?: RecordInlineActionIconName;
124
131
  showLabel?: boolean;
@@ -227,13 +234,166 @@ export interface PageBootstrap {
227
234
  resolvedConfig: {
228
235
  uiFields: unknown[];
229
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[];
230
245
  };
231
246
  openApiPath: string;
232
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';
233
392
  export interface MenuRecord extends StandardEnabledTreeEntity {
234
393
  id: string;
235
394
  title: string;
236
395
  schemeId: string;
396
+ entryType?: MenuEntryType;
237
397
  openMode?: MenuOpenMode;
238
398
  moduleAlias?: string;
239
399
  route?: string;
@@ -283,7 +443,11 @@ export type MenuNavigationTarget = ModuleMenuTarget | RouteMenuTarget | External
283
443
  export type MenuNavigationType = MenuNavigationTarget['menuType'];
284
444
  export type PageType = 'platform-route' | 'business-route' | 'dynamic-module' | 'remote-url' | 'external-link';
285
445
  export type OpenMode = 'workbench-route' | 'dynamic-runner' | 'iframe' | 'new-window';
286
- 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';
287
451
  export type TabIdentityStrategy = 'by-menu' | 'by-target' | 'by-params';
288
452
  /**
289
453
  * Declares which layer owns a page's vertical scroll boundary.
@@ -330,17 +494,25 @@ export interface DynamicModulePageTarget {
330
494
  defaultUiConfigId?: string;
331
495
  defaultQueryTemplateId?: string;
332
496
  }
497
+ export type ModulePageDescriptor = PageDescriptorBase<'dynamic-module', 'dynamic-runner', 'module-page-host', DynamicModulePageTarget>;
498
+ /** Compatibility descriptor accepted when restoring existing workbench state. */
333
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;
334
502
  export interface UrlPageTarget {
335
503
  url: string;
336
504
  moduleAlias?: string;
337
505
  }
338
506
  export type RemoteUrlPageDescriptor = PageDescriptorBase<'remote-url', 'iframe' | 'new-window', 'external-page-host', UrlPageTarget>;
339
507
  export type ExternalLinkPageDescriptor = PageDescriptorBase<'external-link', 'new-window', 'external-page-host', UrlPageTarget>;
340
- export type PageDescriptor = PlatformRoutePageDescriptor | BusinessRoutePageDescriptor | DynamicModulePageDescriptor | RemoteUrlPageDescriptor | ExternalLinkPageDescriptor;
508
+ export type PageDescriptor = PlatformRoutePageDescriptor | BusinessRoutePageDescriptor | ModulePageDescriptor | DynamicModulePageDescriptor | RemoteUrlPageDescriptor | ExternalLinkPageDescriptor;
341
509
  export interface MenuTab {
510
+ /** Immutable page-instance key used by route restoration and cache isolation. */
511
+ instanceKey?: string;
342
512
  key: string;
343
513
  title: string;
514
+ /** Exact browser address used to restore this tab. */
515
+ fullPath?: string;
344
516
  target?: MenuNavigationTarget;
345
517
  pageDescriptor?: PageDescriptor;
346
518
  restoreState?: TabRestoreState;
@@ -379,6 +551,54 @@ export interface WebQueryRequest {
379
551
  quickSearchFields?: string[];
380
552
  externalQueryValues?: Record<string, unknown>;
381
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
+ }
382
602
  export type QueryValueType = 'STRING' | 'TEXT' | 'BOOLEAN' | 'INTEGER' | 'LONG' | 'DECIMAL' | 'INSTANT' | 'DATE' | 'JSON';
383
603
  export type QueryOperator = 'EQ' | 'NOT_EQUAL' | 'LIKE' | 'IN' | 'NOT_IN' | 'GT' | 'GTE' | 'LT' | 'LTE' | 'BETWEEN' | 'NULL' | 'NOT_NULL';
384
604
  export interface QuerySchemaField {
@@ -420,13 +640,25 @@ export interface UiRule<T> {
420
640
  formula?: UiFormula;
421
641
  disabledHint?: string;
422
642
  }
423
- /**
424
- * A platform-owned portable Boolean predicate evaluated against the current record draft.
425
- * The current grammar supports `PRESENT({fieldName})`, `!()` negation, and `&&` conjunction of PRESENT terms.
426
- * It is deliberately smaller than the server FormulaEngine because this contract must run in every Web client.
427
- */
643
+ /** A FormulaEngine expression together with its server-issued WEB_UI AST. */
428
644
  export interface UiFormula {
429
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[];
430
662
  }
431
663
  export interface ViewFieldRef {
432
664
  relationCode?: string;
@@ -448,6 +680,8 @@ export interface ViewFieldDefinition {
448
680
  booleanStatus?: BooleanStatusPresentation;
449
681
  /** Maximum visible lines for text cells in standard list views. Omitted uses the platform default of one line. */
450
682
  maxDisplayLines?: number;
683
+ /** User-facing title for the standard tree root sentinel in a detail field. */
684
+ treeRootTitle?: string;
451
685
  }
452
686
  /** Semantic group that owns a contiguous set of standard-form fields. */
453
687
  export interface FormGroupDescriptor {
@@ -465,6 +699,21 @@ export interface BooleanStatusPresentation {
465
699
  export type BooleanStatusTone = 'SUCCESS' | 'NEUTRAL' | 'WARNING' | 'DANGER';
466
700
  export type FieldValuePresentation = 'FILE_SIZE';
467
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
+ }
468
717
  export interface ResolvedViewFieldDescriptor {
469
718
  fieldRef: ViewFieldRef;
470
719
  label?: string;
@@ -472,6 +721,8 @@ export interface ResolvedViewFieldDescriptor {
472
721
  required?: UiRule<boolean>;
473
722
  readOnly?: UiRule<boolean>;
474
723
  uiType?: string;
724
+ /** Optional while older descriptors still publish only `uiType`. When present it is authoritative. */
725
+ fieldControl?: ResolvedFieldControlDescriptor;
475
726
  valueType?: ViewFieldValueType;
476
727
  valuePresentation?: FieldValuePresentation;
477
728
  width?: string;
@@ -479,6 +730,7 @@ export interface ResolvedViewFieldDescriptor {
479
730
  align?: 'left' | 'center' | 'right' | string;
480
731
  fixed?: boolean;
481
732
  booleanStatus?: BooleanStatusPresentation;
733
+ treeRootTitle?: string;
482
734
  option?: ResolvedOptionFieldDescriptor;
483
735
  reference?: ResolvedReferenceFieldDescriptor;
484
736
  referenceSummary?: ResolvedReferenceSummaryFieldDescriptor;
@@ -495,9 +747,22 @@ export interface ResolvedReferenceSummaryFieldDescriptor {
495
747
  export interface ResolvedReferenceFieldDescriptor {
496
748
  targetModuleAlias: string;
497
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[];
498
757
  /** Read-side title projection for this scalar reference, when supplied by the server. */
499
758
  titleField?: string;
500
759
  }
760
+ export interface ReferenceCandidateDependency {
761
+ sourceField: string;
762
+ targetField: string;
763
+ required: boolean;
764
+ }
765
+ export type ReferencePickerMode = 'LIST' | 'TREE' | 'AUTO';
501
766
  export interface OptionBindingDescriptor {
502
767
  sourceType: string;
503
768
  source: string;
@@ -506,6 +771,8 @@ export interface ResolvedOptionFieldDescriptor {
506
771
  binding: OptionBindingDescriptor;
507
772
  selectionMode: 'SINGLE' | 'MULTIPLE';
508
773
  titleField?: string;
774
+ /** Immutable option facts (currently CodeTitleEnum); scope-sensitive dictionaries stay runtime data. */
775
+ inlineItems?: OptionItemDescriptor[];
509
776
  }
510
777
  export interface OptionItemDescriptor {
511
778
  code: string;
@@ -522,6 +789,15 @@ export interface ViewDefinition {
522
789
  fields: ViewFieldDefinition[];
523
790
  formGroups?: FormGroupDescriptor[];
524
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
+ }
525
801
  export interface ResolvedViewDescriptor {
526
802
  viewCode: string;
527
803
  viewKind: ModuleViewKind;
@@ -531,6 +807,7 @@ export interface ResolvedViewDescriptor {
531
807
  /** Dynamic-page provenance used to select the view configured by a menu entry. */
532
808
  sourceUiConfigId?: string;
533
809
  formGroups?: FormGroupDescriptor[];
810
+ formComputeRules?: ResolvedFormComputeRuleDescriptor[];
534
811
  }
535
812
  export type ModulePageTemplate = 'FLAT_MANAGEMENT' | 'LIST_DETAIL_CARD' | 'TREE_MANAGEMENT';
536
813
  export interface ResolvedPageExplorerDescriptor {
@@ -555,7 +832,12 @@ export interface ResolvedPageNavigatorLevelDescriptor {
555
832
  searchPlaceholder: string;
556
833
  /** Presentation policy applied after the source has authoritatively loaded. */
557
834
  singleResultPolicy?: 'NONE' | 'AUTO_SELECT' | 'AUTO_SELECT_AND_HIDE';
558
- /** Session-derived source scope, enforced by the source reference transport. */
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
+ */
559
841
  sourceScope?: 'NONE' | 'CURRENT_TENANT';
560
842
  /** When present, the navigator source exposes its own standard CRUD affordances in place. */
561
843
  management?: ResolvedPageNavigatorManagementDescriptor;
@@ -576,10 +858,18 @@ export interface ResolvedPageNavigatorManagementDescriptor {
576
858
  export interface ResolvedPageListDescriptor {
577
859
  searchPlaceholder: string;
578
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[];
579
867
  }
580
868
  export interface ResolvedPageDetailDescriptor {
581
869
  emptyDescription: string;
582
870
  createTitle: string;
871
+ /** Whether the standard immutable system metadata section is displayed. */
872
+ showSystemInfo?: boolean;
583
873
  display?: ResolvedViewDescriptor;
584
874
  /** Omitted by an editorless page; standard mutation actions remain governed by the runtime action contract. */
585
875
  editor?: ResolvedViewDescriptor;
@@ -627,6 +917,7 @@ export interface ResolvedModuleUiDescriptor {
627
917
  defaultEditor?: ResolvedViewDescriptor;
628
918
  editorSurfaces?: ResolvedEditorSurfaceDescriptor[];
629
919
  editorContributions?: ResolvedPageDetailEditorContribution[];
920
+ detailRelations?: ResolvedDetailRelationDescriptor[];
630
921
  }
631
922
  export interface ResolvedEditorSurfaceDescriptor {
632
923
  key: string;
@@ -1,3 +1,4 @@
1
- import type { WebBusinessNotificationCommandAction } from '../web-contracts/index';
1
+ import type { WebBusinessNotificationRecordAction } from '../web-contracts/index';
2
2
  import type { HttpClient } from './http';
3
- export declare function invokeBusinessNotificationCommand(http: HttpClient, notificationId: string, action: WebBusinessNotificationCommandAction): Promise<unknown>;
3
+ /** Calls the standard record action declared by a notification. */
4
+ export declare function invokeBusinessNotificationRecordAction(http: HttpClient, action: WebBusinessNotificationRecordAction): Promise<unknown>;
@@ -6,6 +6,7 @@ export * from './businessNotifications';
6
6
  export * from './dataChanges';
7
7
  export * from './realtime';
8
8
  export * from './clients';
9
+ export * from './referenceResolveClient';
9
10
  export { userPreferences } from './userPreferences';
10
11
  export type { UserPreferenceOptions, UserPreferenceStore } from './userPreferences';
11
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;
@@ -61,7 +61,9 @@ export interface ModuleRuntimeContextState {
61
61
  runtimeAction(actionCode: string): ModuleRuntimeAction | undefined;
62
62
  can(actionCode: string, recordId?: string): boolean | undefined;
63
63
  recordActions(recordId: string): Promise<ModuleRecordActionAvailability>;
64
+ recordActionsBatch?(recordIds: string[]): Promise<ModuleRecordActionAvailability[]>;
64
65
  recordActionsSnapshot(recordId: string): ModuleRecordActionAvailability | undefined;
66
+ invalidateRecordActions?(recordIds?: string[]): void;
65
67
  }
66
68
  export declare function createModuleRuntimeContextState(http: HttpClient, moduleAlias: string, access?: 'MENU' | 'REFERENCE'): ModuleRuntimeContextState;
67
69
  export declare function isRuntimeAbilityAvailable(context: ModuleRuntimeContext | undefined, ability: ModuleAbilityCode): boolean;