@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
@@ -0,0 +1,22 @@
1
+ import type { ModuleContext } from '../../web-core/index';
2
+ interface DetailController<TRecord> {
3
+ beginLoad(record: TRecord, mode: 'edit' | 'view'): void;
4
+ resolveLoad(record: TRecord): void;
5
+ failLoad(): void;
6
+ finishLoad(): void;
7
+ }
8
+ /**
9
+ * Serializes record-detail requests for one module-page session.
10
+ *
11
+ * Loading a second record (or closing the detail) invalidates all earlier
12
+ * completions. This is deliberately independent of the visual host so list,
13
+ * card and drawer surfaces cannot accidentally diverge on request races.
14
+ */
15
+ export declare function useRecordEditingSession<TRecord extends {
16
+ id?: unknown;
17
+ }>(context: ModuleContext<TRecord>, detail: DetailController<TRecord>, onLoaded: () => void): {
18
+ invalidatePendingRequests: () => void;
19
+ openRecord: (record: TRecord, mode: "edit" | "view", skipLoad?: boolean) => Promise<void>;
20
+ openRecycleBinRecord: (record: TRecord) => Promise<void>;
21
+ };
22
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { UserPreferenceStore } from '../web-core/index';
2
+ export type DetailSurfacePreference = 'drawer' | 'pinned';
3
+ export declare function detailSurfacePreferenceKey(moduleAlias: string): string;
4
+ export declare function normalizeDetailSurfacePreference(value: unknown): DetailSurfacePreference | undefined;
5
+ /**
6
+ * Restores an account-scoped choice while retaining the device-local value as
7
+ * a resilient fallback when the preference service is temporarily unavailable.
8
+ */
9
+ export declare function restoreDetailSurfacePreference(store: UserPreferenceStore, moduleAlias: string): Promise<DetailSurfacePreference | undefined>;
10
+ export declare function saveDetailSurfacePreference(store: UserPreferenceStore, moduleAlias: string, preference: DetailSurfacePreference): Promise<void>;
@@ -1,12 +1,5 @@
1
- export interface DynamicModuleDetailRequestState {
2
- activeRequestSequence: number;
3
- requestSequence: number;
4
- }
5
- export interface DynamicModuleDetailMutationState {
6
- hasRecord: boolean;
7
- saving: boolean;
8
- loading: boolean;
9
- loadFailed: boolean;
10
- }
11
- export declare function shouldCommitDynamicModuleDetailRequest(state: DynamicModuleDetailRequestState): boolean;
12
- export declare function canMutateDynamicModuleDetail(state: DynamicModuleDetailMutationState): boolean;
1
+ /**
2
+ * @deprecated Standard module pages use `moduleDetailStateModel`. Remove after
3
+ * extensions built before the rename have migrated their state-model imports.
4
+ */
5
+ export { canMutateModuleDetail as canMutateDynamicModuleDetail, shouldCommitModuleDetailRequest as shouldCommitDynamicModuleDetailRequest, type ModuleDetailMutationState as DynamicModuleDetailMutationState, type ModuleDetailRequestState as DynamicModuleDetailRequestState, } from './moduleDetailStateModel';
@@ -0,0 +1,18 @@
1
+ import { FormulaRuntime, type FormulaRecord } from '../formula/FormulaRuntime';
2
+ import type { ResolvedFormComputeRuleDescriptor } from '../web-contracts/index';
3
+ /**
4
+ * Applies server-issued main-form calculation rules to a draft after one or
5
+ * more user-originated field changes.
6
+ *
7
+ * The coordinator owns propagation, rather than the field component or the
8
+ * FormulaRuntime: fields remain plain inputs and FormulaRuntime remains a
9
+ * pure evaluator. A rule runs at most once in a pass, which makes malformed
10
+ * cyclic descriptor graphs fail closed instead of repeatedly overwriting a
11
+ * user's draft.
12
+ */
13
+ export declare class FormComputeCoordinator {
14
+ private readonly runtime;
15
+ private readonly rules;
16
+ constructor(rules: readonly ResolvedFormComputeRuleDescriptor[] | undefined, runtime?: FormulaRuntime);
17
+ applyAfterChange<TDraft extends FormulaRecord>(draft: TDraft, changedFields: readonly string[]): TDraft;
18
+ }
@@ -1,8 +1,10 @@
1
+ export { default as ModulePageHost } from './ModulePageHost.vue';
1
2
  export { default as DynamicModuleHost } from './DynamicModuleHost.vue';
2
3
  export { default as DynamicModulePage } from './DynamicModulePage.vue';
4
+ export { default as DynamicModuleWorkspaceDetailView } from './DynamicModuleWorkspaceDetailView.vue';
3
5
  export { customerDescriptor } from './mockDescriptor';
4
- export { configureModulePageEnhancements, createModulePageEnhancementRegistry, modulePageWorkspaceViews, resolveModulePageEnhancement, } from './modulePageEnhancements';
6
+ export { configureModulePageEnhancementContributions, configureModulePageEnhancements, createModulePageEnhancementRegistry, createReadonlyCardRecordSnapshot, modulePageWorkspaceViews, resolveModulePageEnhancement, } from './modulePageEnhancements';
5
7
  export { provideModulePageNavigation, useModulePageNavigation } from './modulePageNavigation';
6
8
  export { createModulePageListRefreshRegistry, modulePageListRefreshRegistry, refreshModulePageList, } from './modulePageListRefresh';
7
9
  export type { ModulePageListRefreshRegistry } from './modulePageListRefresh';
8
- export type { ModuleListEnhancement, ModuleDetailEnhancement, ModulePageActionContext, ModulePageActionContribution, ModulePageActionStateContext, ModulePageBatchActionContext, ModulePageBatchActionContribution, ModulePageColumnContribution, ModulePageDetailSection, ModulePageDetailSectionContext, ModulePageDrawer, ModulePageDrawerContext, ModulePageEnhancement, ModulePageEnhancementRegistry, ModulePageEnhancementTarget, ModulePageRecordActionContext, ModulePageRecordActionContribution, ModulePageScopeContext, ModulePageWorkspaceView, ModulePageWorkspaceViewInput, } from './modulePageEnhancements';
10
+ export type { ModuleListEnhancement, ModulePageListRowExpansion, ModulePageListRowExpansionContext, ModuleDetailEnhancement, ModulePageFormEnhancement, ModulePageFormContribution, ModulePageFormContributionContext, ModulePageFormContributionState, ModulePageFormFieldPolicy, ModulePageFormContributionLocation, ModulePageFormContributionValidity, ModulePageFormSurface, ModuleCardEnhancement, ModulePageActionContext, ModulePageActionContribution, ModulePageActionStateContext, ModulePageBatchActionContext, ModulePageBatchActionContribution, ModulePageColumnContribution, ModulePageDetailDrawer, ModulePageDetailSection, ModulePageDetailSectionContext, ModulePageDrawer, ModulePageDrawerContext, ModulePageRecordViewContext, ModulePageEnhancement, ModulePageEnhancementActivationContext, ModulePageEnhancementRegistry, ModulePageEnhancementTarget, ModulePageCardAssistant, ModulePageCardAssistantContext, ModulePageCardAssistantPlacement, ModulePageRecordActionContext, ModulePageRecordActionContribution, ModulePageScopeContext, ModulePageWorkspaceView, ModulePageWorkspaceViewInput, } from './modulePageEnhancements';
@@ -0,0 +1,10 @@
1
+ import type { UserPreferenceStore } from '../web-core/index';
2
+ export declare function listPageSizePreferenceKey(moduleAlias: string): string;
3
+ export declare function normalizeListPageSize(value: unknown, fallback?: number): number;
4
+ /**
5
+ * A module-list preference is presentation-only. It deliberately remains
6
+ * separate from the menu UI config and query template, which continue to own
7
+ * authorized page shape and server-side criteria.
8
+ */
9
+ export declare function restoreListPageSize(store: UserPreferenceStore, moduleAlias: string, fallback?: number): Promise<number>;
10
+ export declare function saveListPageSize(store: UserPreferenceStore, moduleAlias: string, pageSize: number): Promise<void>;
@@ -0,0 +1,12 @@
1
+ export interface ModuleDetailRequestState {
2
+ activeRequestSequence: number;
3
+ requestSequence: number;
4
+ }
5
+ export interface ModuleDetailMutationState {
6
+ hasRecord: boolean;
7
+ saving: boolean;
8
+ loading: boolean;
9
+ loadFailed: boolean;
10
+ }
11
+ export declare function shouldCommitModuleDetailRequest(state: ModuleDetailRequestState): boolean;
12
+ export declare function canMutateModuleDetail(state: ModuleDetailMutationState): boolean;
@@ -1,7 +1,8 @@
1
1
  import type { Component } from 'vue';
2
- import type { PageLayoutMode, RouteQueryValue } from '../web-contracts/index';
2
+ import type { PageDescriptor, PageLayoutMode, RouteQueryValue } from '../web-contracts/index';
3
3
  import type { ModuleContext } from '../web-core/index';
4
- import type { RecordActionItem, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
4
+ import type { RecordActionItem, RecordFormFieldState, RecordFormFieldValue, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
5
+ import type { DrawerTitleAction } from '../platform-components/index';
5
6
  /**
6
7
  * Frontend-owned, constrained composition for a descriptor-driven module page.
7
8
  *
@@ -12,30 +13,184 @@ import type { RecordActionItem, RecordQueryListColumn, QueryListRecord } from '.
12
13
  export interface ModulePageEnhancement {
13
14
  id: string;
14
15
  target: ModulePageEnhancementTarget;
16
+ /**
17
+ * Optional frontend-owned activation hook for a descriptor page. It may load
18
+ * auxiliary, already-authorized platform facts used by the enhancement, but
19
+ * never receives a backend component name or executable descriptor payload.
20
+ */
21
+ activate?(context: ModulePageEnhancementActivationContext): void | (() => void);
15
22
  list?: ModuleListEnhancement;
16
23
  detail?: ModuleDetailEnhancement;
17
- workspaceViews?: ModulePageWorkspaceView[];
24
+ /**
25
+ * Frontend-owned editor content mounted at a typed standard-form boundary.
26
+ * The backend descriptor never selects a component or supplies executable UI.
27
+ */
28
+ form?: ModulePageFormEnhancement;
29
+ /** Frontend-owned assistant persistently mounted in the standard record card. */
30
+ card?: ModuleCardEnhancement;
31
+ /**
32
+ * The presentation selected when a user invokes the standard record-view intent.
33
+ *
34
+ * Both the platform "查看" action and a list double-click enter the same record
35
+ * view flow. Applications may replace only the drawer body, while the runtime
36
+ * retains that flow's action checks, shell and lifecycle.
37
+ */
38
+ recordView?: ModulePageRecordView;
39
+ workspaceViews?: ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
18
40
  }
19
41
  export interface ModulePageEnhancementTarget {
20
42
  moduleAlias: string;
21
43
  /** Omit to apply to every list view of the module. */
22
44
  viewCode?: string;
23
45
  }
46
+ export interface ModulePageEnhancementActivationContext {
47
+ module: ModuleContext<QueryListRecord>;
48
+ }
24
49
  export interface ModuleListEnhancement {
25
50
  actions?: ModulePageActionContribution[];
26
51
  columns?: ModulePageColumnContribution[];
27
52
  /** Replaces the visual renderer of a descriptor-owned column without adding a duplicate column. */
28
53
  cellComponents?: ModulePageCellComponentContribution[];
54
+ /**
55
+ * Application-owned content for the platform list's expanded-row boundary.
56
+ *
57
+ * This is deliberately separate from descriptor relation expansions: use it
58
+ * for authorized business projections that are not a standard child relation.
59
+ * The runtime owns expansion state and table rendering; the application owns
60
+ * only the trusted Vue component and its auxiliary reads/actions.
61
+ */
62
+ rowExpansion?: ModulePageListRowExpansion;
29
63
  /** Width of the list's fixed operation column; defaults to the platform compact width. */
30
64
  actionColumnWidth?: string | number;
31
65
  rowActions?: ModulePageRecordActionContribution[];
32
66
  batchActions?: ModulePageBatchActionContribution[];
33
67
  }
68
+ export interface ModulePageListRowExpansion {
69
+ key: string;
70
+ component: Component;
71
+ }
72
+ export interface ModulePageListRowExpansionContext {
73
+ module: ModuleContext<QueryListRecord>;
74
+ /** Detached snapshot of the record being expanded. */
75
+ record: Readonly<QueryListRecord>;
76
+ expanded: boolean;
77
+ /** Reloads the standard list without giving the extension ownership of its query state. */
78
+ refreshList(): void;
79
+ }
34
80
  /** Actions appended to the standard record-detail operation area in view mode. */
35
81
  export interface ModuleDetailEnhancement {
36
82
  actions?: ModulePageRecordActionContribution[];
37
83
  sections?: ModulePageDetailSection[];
38
84
  }
85
+ /** A controlled addition to the descriptor-owned standard form, not a replacement editor. */
86
+ export interface ModulePageFormEnhancement {
87
+ contributions: ModulePageFormContribution[];
88
+ fieldPolicies?: ModulePageFormFieldPolicy[];
89
+ }
90
+ /** The platform-owned record-card form surface, regardless of its outer page shell. */
91
+ export type ModulePageFormSurface = 'record-card';
92
+ /**
93
+ * A contribution can target an entire semantic form section or the immediate
94
+ * boundary before/after one descriptor-owned field. The host owns all other
95
+ * rendering, codecs, permissions, requests and save lifecycle.
96
+ */
97
+ export interface ModulePageFormContribution {
98
+ key: string;
99
+ component: Component;
100
+ location: ModulePageFormContributionLocation;
101
+ }
102
+ export type ModulePageFormContributionLocation = {
103
+ surface: ModulePageFormSurface;
104
+ section: 'before-fields' | 'after-fields';
105
+ } | {
106
+ surface: ModulePageFormSurface;
107
+ fieldName: string;
108
+ placement: 'before' | 'after';
109
+ };
110
+ /** The only form state exposed to application-owned editor contributions. */
111
+ export interface ModulePageFormContributionContext {
112
+ mode: 'create' | 'edit' | 'view';
113
+ /** A detached, deeply frozen draft snapshot. */
114
+ draft: Readonly<Record<string, unknown>>;
115
+ /** Descriptor-resolved field states; never a mutable draft or HTTP client. */
116
+ fields: readonly Readonly<RecordFormFieldState>[];
117
+ /** The field at a field-boundary location, otherwise undefined. */
118
+ field?: Readonly<RecordFormFieldState>;
119
+ setField(fieldName: string, value: RecordFormFieldValue): void;
120
+ formSessionKey: number;
121
+ /** Reports only this contribution's validation fact to the standard save boundary. */
122
+ reportValidity(validity: ModulePageFormContributionValidity): void;
123
+ }
124
+ export interface ModulePageFormContributionValidity {
125
+ valid: boolean;
126
+ errors?: Record<string, string>;
127
+ }
128
+ /** Read-only facts consumable by a descriptor-field presentation policy. */
129
+ export interface ModulePageFormContributionState {
130
+ mode: 'create' | 'edit' | 'view';
131
+ draft: Readonly<Record<string, unknown>>;
132
+ fields: readonly Readonly<RecordFormFieldState>[];
133
+ formSessionKey: number;
134
+ }
135
+ /**
136
+ * A typed visual policy around one descriptor-owned field. The platform keeps
137
+ * transport, file upload and field codecs inside the standard renderer.
138
+ */
139
+ export interface ModulePageFormFieldPolicy {
140
+ fieldName: string;
141
+ visible?(state: ModulePageFormContributionState): boolean;
142
+ imageUploadHint?(state: ModulePageFormContributionState): string | undefined;
143
+ imageUploadAdvisory?(state: ModulePageFormContributionState): ((file: File) => string | undefined | Promise<string | undefined>) | undefined;
144
+ }
145
+ /** Frontend-owned auxiliary UI adjacent to the descriptor-owned record card. */
146
+ export interface ModuleCardEnhancement {
147
+ assistant: ModulePageCardAssistant;
148
+ }
149
+ export interface ModulePageCardAssistant {
150
+ /** A source component; backend descriptors never select or name it. */
151
+ component: Component;
152
+ /** Explicitly anchors the component to the standard record-card boundary. */
153
+ placement: ModulePageCardAssistantPlacement;
154
+ }
155
+ export interface ModulePageCardAssistantPlacement {
156
+ /** `inside` shares the record-card content scrollbar; `outside` remains a sibling surface. */
157
+ boundary: 'inside' | 'outside';
158
+ /** Position relative to that boundary; never inserted between descriptor-owned fields. */
159
+ position: 'top' | 'bottom';
160
+ }
161
+ export interface ModulePageCardAssistantContext {
162
+ module: ModuleContext<QueryListRecord>;
163
+ mode: 'view' | 'create' | 'edit';
164
+ /** Detached and deeply frozen current record or form draft. It may be absent before selection. */
165
+ record?: Readonly<Record<string, unknown>>;
166
+ /**
167
+ * Detached snapshot of records already loaded by the standard explorer.
168
+ * This never triggers an auxiliary request and may be bounded by the explorer.
169
+ */
170
+ loadedRecords: readonly Readonly<Record<string, unknown>>[];
171
+ formSessionKey: number;
172
+ saving: boolean;
173
+ loading: boolean;
174
+ loadFailed: boolean;
175
+ }
176
+ /** Application-owned presentation of the platform's standard record-view intent. */
177
+ export interface ModulePageRecordView {
178
+ /**
179
+ * Replaces the descriptor-generated detail body while retaining the platform
180
+ * view drawer, its list entry points, and its lifecycle.
181
+ *
182
+ * A custom drawer body is intentionally read-only from the platform's point
183
+ * of view: generic edit and enable/disable controls are withheld so that the
184
+ * business module owns every operation it exposes in the view.
185
+ */
186
+ drawer: ModulePageDetailDrawer;
187
+ /**
188
+ * Optional record-level business grant required in addition to the standard
189
+ * view entry point. This protects business drawer data without turning its
190
+ * custom endpoints into a second "查看" UI action.
191
+ */
192
+ authorizationActionCode?: string;
193
+ }
39
194
  export interface ModulePageActionContribution extends RecordActionItem {
40
195
  key: string;
41
196
  /** Authorizes this toolbar action against the selected scoped-list record instead of the page module. */
@@ -59,6 +214,18 @@ export interface ModulePageDetailSection {
59
214
  title: string;
60
215
  component: Component;
61
216
  }
217
+ /** Business content rendered inside the platform-owned standard view drawer. */
218
+ export interface ModulePageDetailDrawer {
219
+ /** The component receives only the documented read-only ModulePageRecordViewContext prop. */
220
+ component: Component;
221
+ /** Keeps the platform drawer shell while allowing dense business views more room. */
222
+ width?: number | string;
223
+ /**
224
+ * Defaults to true. Set false when the business detail body has its own
225
+ * governed read endpoint and only needs the selected list record as context.
226
+ */
227
+ loadRecord?: boolean;
228
+ }
62
229
  export interface ModulePageColumnContribution extends RecordQueryListColumn {
63
230
  key: string;
64
231
  /** Insert adjacent to a descriptor column. Omit to append after descriptor columns. */
@@ -77,7 +244,10 @@ export interface ModulePageDrawer {
77
244
  /** The component receives only the documented ModulePageDrawerContext prop. */
78
245
  component: Component;
79
246
  }
80
- export type ModulePageWorkspaceViewInput = Record<string, RouteQueryValue>;
247
+ /** A business-owned action rendered by the platform in a semantic drawer region. */
248
+ export type ModulePageDrawerAction = DrawerTitleAction;
249
+ /** Matches the Workbench input boundary; `parse` remains responsible for route-value validation. */
250
+ export type ModulePageWorkspaceViewInput = object;
81
251
  /** A business-owned view with stable, serializable identity. */
82
252
  export interface ModulePageWorkspaceView<TInput extends ModulePageWorkspaceViewInput = ModulePageWorkspaceViewInput> {
83
253
  type: string;
@@ -96,6 +266,29 @@ export interface ModulePageDrawerContext {
96
266
  scope?: ModulePageScopeContext;
97
267
  /** Reloads only the current list query and preserves its query and editor state. */
98
268
  refreshList(): void;
269
+ /** Invalidates frontend-owned detail sections for the current record. */
270
+ refreshDetailExtensions(): void;
271
+ /** Blocks the drawer shell's close affordances while a contributed operation is in flight. */
272
+ setCloseBlocked(blocked: boolean): void;
273
+ close(): void;
274
+ reload(): void;
275
+ /** Replaces contextual actions beside the drawer title; actions are cleared with the drawer. */
276
+ setTitleActions(actions: ModulePageDrawerAction[]): void;
277
+ }
278
+ /**
279
+ * Context for a custom body inside the platform-owned record-view shell.
280
+ *
281
+ * A record-view body does not own the drawer chrome. In particular it cannot
282
+ * replace title actions or block the shell from closing; those facilities are
283
+ * reserved for an action-opened ModulePageDrawer, whose operation lifecycle is
284
+ * explicitly governed by the platform drawer runtime.
285
+ */
286
+ export interface ModulePageRecordViewContext {
287
+ module: ModuleContext<QueryListRecord>;
288
+ record: QueryListRecord;
289
+ scope?: ModulePageScopeContext;
290
+ refreshList(): void;
291
+ refreshDetailExtensions(): void;
99
292
  close(): void;
100
293
  reload(): void;
101
294
  }
@@ -107,6 +300,8 @@ export interface ModulePageActionContext {
107
300
  refreshList(): void;
108
301
  openDrawer(drawer: ModulePageDrawer): void;
109
302
  openWorkspaceTab<TInput extends ModulePageWorkspaceViewInput>(view: ModulePageWorkspaceView<TInput>, input: TInput): void;
303
+ /** Opens an existing, platform-owned page descriptor through the Workbench. */
304
+ openPage(descriptor: PageDescriptor): void;
110
305
  reload(): void;
111
306
  }
112
307
  /** Read-only scope state supplied by a descriptor-owned scoped list workspace. */
@@ -131,14 +326,31 @@ export interface ModulePageDetailSectionContext {
131
326
  record: QueryListRecord;
132
327
  /** Reloads only the current list query and preserves its query and editor state. */
133
328
  refreshList(): void;
329
+ /** Monotonic invalidation fact for frontend-owned detail data. */
330
+ refreshKey: number;
134
331
  reload(): void;
135
332
  }
136
333
  export interface ModulePageEnhancementRegistry {
137
334
  resolve(moduleAlias: string, viewCode?: string): ModulePageEnhancement | undefined;
138
- workspaceViews(): readonly ModulePageWorkspaceView[];
335
+ workspaceViews(): readonly ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
139
336
  }
140
337
  export declare function createModulePageEnhancementRegistry(enhancements: readonly ModulePageEnhancement[]): ModulePageEnhancementRegistry;
141
- /** Configure once from the consuming application's composition root. */
338
+ /**
339
+ * Replaces one owner's contribution set while retaining every other owner.
340
+ *
341
+ * This is the composition API for first-party defaults and consuming
342
+ * applications. Multiple owners may contribute to the same module target;
343
+ * their independent regions are merged and conflicting regions fail fast.
344
+ */
345
+ export declare function configureModulePageEnhancementContributions(owner: string, enhancements: readonly ModulePageEnhancement[]): void;
346
+ /**
347
+ * Legacy application composition API. It replaces only the legacy
348
+ * application's contribution set; first-party and named-owner defaults remain
349
+ * registered. New composition roots should use
350
+ * configureModulePageEnhancementContributions(owner, enhancements).
351
+ */
142
352
  export declare function configureModulePageEnhancements(enhancements: readonly ModulePageEnhancement[]): void;
143
353
  export declare function resolveModulePageEnhancement(moduleAlias: string, viewCode?: string): ModulePageEnhancement | undefined;
144
354
  export declare function modulePageWorkspaceViews(): readonly ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
355
+ /** Creates the only record shape that a card assistant may receive. */
356
+ export declare function createReadonlyCardRecordSnapshot(record: Record<string, unknown>): Readonly<Record<string, unknown>>;
@@ -5,7 +5,7 @@ export interface ModulePageNavigation {
5
5
  openPage(descriptor: PageDescriptor): {
6
6
  created: boolean;
7
7
  };
8
- openWorkspaceTab<TInput extends ModulePageWorkspaceViewInput>(view: ModulePageWorkspaceView<TInput>, input: TInput): void;
8
+ openWorkspaceTab<TInput extends ModulePageWorkspaceViewInput>(view: ModulePageWorkspaceView<TInput>, input: TInput, title?: string): void;
9
9
  }
10
10
  export declare function provideModulePageNavigation(navigation: ModulePageNavigation | undefined): void;
11
11
  export declare function useModulePageNavigation(): ModulePageNavigation | undefined;
@@ -0,0 +1,6 @@
1
+ import type { ResolvedPageNavigatorLevelDescriptor } from '../web-contracts/index';
2
+ /**
3
+ * A tenant user's sole tenant is a fixed request scope, while a system user has no session
4
+ * tenant and may choose from the tenant records allowed by the source REFERENCE action.
5
+ */
6
+ export declare function shouldHideSingleResultNavigator(level: ResolvedPageNavigatorLevelDescriptor, singleResult: boolean, sessionTenantId: string | undefined): boolean;
@@ -0,0 +1,6 @@
1
+ import type { ResolvedPageContextBindingDescriptor } from '../web-contracts/index';
2
+ export type PageContextSourceValues = Partial<Record<ResolvedPageContextBindingDescriptor['source'], Record<string, unknown>>>;
3
+ /** Returns context fields that must be supplied by the browser for a query target. */
4
+ export declare function externalPageContextCriteriaKeys(bindings: readonly ResolvedPageContextBindingDescriptor[], target: ResolvedPageContextBindingDescriptor['target'], targetNavigatorLevelKey?: string): string[];
5
+ /** Resolves declared context flows without coupling a target to navigator UI state. */
6
+ export declare function resolvePageContextTargetValues(bindings: readonly ResolvedPageContextBindingDescriptor[], target: ResolvedPageContextBindingDescriptor['target'], sourceValues: PageContextSourceValues, targetNavigatorLevelKey?: string): Record<string, unknown> | undefined;
@@ -0,0 +1,35 @@
1
+ export type RecordDetailMode = 'create' | 'edit' | 'view';
2
+ export interface RecordDetailCreateOptions<TRecord> {
3
+ /**
4
+ * The already selected detail to reinstate if the user abandons this new
5
+ * draft. It is deliberately held outside `record`: while creating, the
6
+ * detail surface must not accidentally expose actions for the prior record.
7
+ */
8
+ restoreRecord?: TRecord;
9
+ }
10
+ /**
11
+ * State transitions shared by descriptor-driven record detail surfaces.
12
+ * Containers own their layout; this controller owns only one record's
13
+ * lifecycle and deliberately contains no drawer, tab or list concerns.
14
+ */
15
+ export declare function useRecordDetailController<TRecord extends Record<string, unknown>>(): {
16
+ record: import("vue").Ref<TRecord | undefined, TRecord | undefined>;
17
+ draft: import("vue").Ref<TRecord | undefined, TRecord | undefined>;
18
+ mode: import("vue").Ref<RecordDetailMode, RecordDetailMode>;
19
+ open: import("vue").Ref<boolean, boolean>;
20
+ loading: import("vue").Ref<boolean, boolean>;
21
+ loadFailed: import("vue").Ref<boolean, boolean>;
22
+ saving: import("vue").Ref<boolean, boolean>;
23
+ togglingEnabled: import("vue").Ref<boolean, boolean>;
24
+ formSessionKey: import("vue").Ref<number, number>;
25
+ beginLoad: (next: TRecord, nextMode: Extract<RecordDetailMode, "edit" | "view">) => void;
26
+ resolveLoad: (next: TRecord) => void;
27
+ failLoad: () => void;
28
+ finishLoad: () => void;
29
+ beginCreate: (initial: TRecord, options?: RecordDetailCreateOptions<TRecord>) => void;
30
+ beginEdit: () => boolean;
31
+ cancelEdit: () => void;
32
+ applySaved: (next: TRecord) => void;
33
+ clearDeleted: () => void;
34
+ close: () => void;
35
+ };
@@ -0,0 +1,9 @@
1
+ import { FormulaRuntime, type FormulaRecord } from '../formula/FormulaRuntime';
2
+ import type { ResolvedDetailRelationFormComputeRuleDescriptor } from '../web-contracts/index';
3
+ /** Propagates server-compiled calculations after a user changes one embedded child row. */
4
+ export declare class RelationFormComputeCoordinator {
5
+ private readonly rules;
6
+ private readonly runtime;
7
+ constructor(rules: readonly ResolvedDetailRelationFormComputeRuleDescriptor[] | undefined, runtime?: FormulaRuntime);
8
+ applyAfterChange<TRow extends FormulaRecord>(rows: readonly TRow[], changedRowKey: string, keyOf: (row: TRow) => string, changedField: string): TRow[];
9
+ }
@@ -0,0 +1,29 @@
1
+ import type { FormulaProgram, ViewFieldValueType } from '../web-contracts/index';
2
+ export type FormulaRecord = Record<string, unknown>;
3
+ export type FormulaComputePatch = Readonly<Record<string, FormulaValue>>;
4
+ export interface FormulaComputeResult {
5
+ readonly patch: FormulaComputePatch;
6
+ readonly changedFields: readonly string[];
7
+ }
8
+ /**
9
+ * Browser-local executor for server-issued FormulaProgram values.
10
+ *
11
+ * It deliberately accepts no source expression. Unknown program versions, profiles and node shapes fail closed.
12
+ */
13
+ export declare class FormulaRuntime {
14
+ evaluateWebUi(program: FormulaProgram | undefined, record: FormulaRecord): boolean;
15
+ /**
16
+ * Evaluates one server-issued FORM_COMPUTE assignment against a draft without mutating it.
17
+ * Applying the returned patch, ordering rules, and user-value ownership remain form-runtime concerns.
18
+ */
19
+ evaluateFormCompute(program: FormulaProgram | undefined, draft: FormulaRecord, targetValueType?: ViewFieldValueType): FormulaComputeResult;
20
+ /** Evaluates a row-to-row assignment in the changed row's scope without mutating any drafts. */
21
+ evaluateRelationFormCompute(program: FormulaProgram | undefined, draft: FormulaRecord, targetField: string, targetValueType?: ViewFieldValueType): FormulaComputeResult;
22
+ private evaluateNode;
23
+ private toBoolean;
24
+ private evaluateComputeNode;
25
+ }
26
+ type FormulaValue = string | number | boolean | null | undefined;
27
+ /** Mirrors FormulaEngine.equalsLoose for the primitive values admitted by the WEB_UI profile. */
28
+ export declare function equalsFormulaLoose(left: unknown, right: unknown): boolean;
29
+ export {};
@@ -3,6 +3,7 @@ import type { WorkspaceDrawerProfile } from './workspaceViewContract';
3
3
  type __VLS_Props = {
4
4
  open: boolean;
5
5
  title: string;
6
+ container: HTMLElement | null;
6
7
  subtitle?: string;
7
8
  profile?: WorkspaceDrawerProfile;
8
9
  promotion?: DrawerPromotion;
@@ -1,5 +1,6 @@
1
+ import type { ModulePageDrawerContext } from '../../dynamic-page-runtime/index';
1
2
  type __VLS_Props = {
2
- recordId: string;
3
+ context: ModulePageDrawerContext;
3
4
  };
4
5
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
6
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,3 @@
1
+ import type { ModulePageEnhancement } from '../dynamic-page-runtime/index';
2
+ /** The employee page remains platform-owned; only account provisioning needs a domain drawer. */
3
+ export declare const employeeModulePageEnhancement: ModulePageEnhancement;
@@ -14,6 +14,8 @@ export interface ModuleOpenApiDocument {
14
14
  export declare function moduleAliasFromOpenApiPath(pathname: string): string | undefined;
15
15
  /** Creates the workbench page contract for one module's authenticated API document. */
16
16
  export declare function createModuleOpenApiPageDescriptor(moduleAlias: string, moduleTitle?: string): PageDescriptor;
17
+ /** Creates the authenticated OpenAPI directory as an ordinary workbench page. */
18
+ export declare function createOpenApiCatalogPageDescriptor(): PageDescriptor;
17
19
  /** Recognizes the app-owned OpenAPI tab without teaching the shared route resolver about this feature. */
18
20
  export declare function isModuleOpenApiPage(descriptor?: PageDescriptor): boolean;
19
21
  export declare function isOpenApiCatalogPath(pathname: string): boolean;
@@ -0,0 +1,6 @@
1
+ import type { ModulePageEnhancement } from '../dynamic-page-runtime/index';
2
+ /**
3
+ * IAM-owned card assistance for the standard password-policy module page.
4
+ * The component is selected by frontend source composition; no backend DSL can inject executable UI.
5
+ */
6
+ export declare const passwordPolicyPageEnhancement: ModulePageEnhancement;
@@ -1,4 +1,4 @@
1
- import type { Component } from 'vue';
1
+ import { type Component } from 'vue';
2
2
  import type { BusinessRoutePageDescriptor, PageDescriptor, PageLayoutMode } from '../web-contracts/index';
3
3
  export interface PlatformAdminRoute {
4
4
  route: string;
@@ -0,0 +1,9 @@
1
+ import type { ModulePageEnhancement } from '../dynamic-page-runtime/index';
2
+ /**
3
+ * Frontend composition for the platform-module descriptor page.
4
+ *
5
+ * These actions deliberately reuse ordinary workspace/page descriptors. The
6
+ * backend UI descriptor only describes the module record; it never chooses a
7
+ * Vue component or arbitrary client-side behavior.
8
+ */
9
+ export declare const platformModulePageEnhancement: ModulePageEnhancement;
@@ -1,5 +1,5 @@
1
1
  import { type RealtimeConnectionState } from '../web-core/index';
2
- import type { WebBusinessRealtimeEvent, WebCommittedChangeSet, WebUserNotification } from '../web-contracts/index';
2
+ import type { WebBusinessRealtimeEvent, WebBusinessNotification, WebCommittedChangeSet, WebUserNotification } from '../web-contracts/index';
3
3
  export declare const appDataChangeDispatcher: import("../web-core/index").DataChangeDispatcher;
4
4
  export interface AppRealtimeOptions {
5
5
  /** Backend origin supplied by the consuming App at runtime. */
@@ -8,6 +8,7 @@ export interface AppRealtimeOptions {
8
8
  token?: string;
9
9
  onUnauthorized?: () => void;
10
10
  onUserNotification?: (notification: WebUserNotification) => void;
11
+ onBusinessNotification?: (notification: WebBusinessNotification) => void;
11
12
  onStateChange?: (state: RealtimeConnectionState) => void;
12
13
  }
13
14
  export interface AppRealtimeConnection {
@@ -0,0 +1,7 @@
1
+ import type { ModulePageDrawerContext } from '../../dynamic-page-runtime/index';
2
+ type __VLS_Props = {
3
+ context: ModulePageDrawerContext;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { ModulePageDetailSectionContext } from '../../dynamic-page-runtime/index';
2
+ type __VLS_Props = {
3
+ context: ModulePageDetailSectionContext;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { ModulePageEnhancement } from '../dynamic-page-runtime/index';
2
+ /**
3
+ * IAM-specific presentation around the descriptor-owned tenant CRUD surface.
4
+ * Standard records remain owned by ModulePageHost; this contribution only
5
+ * renders the tenant application's authorized child-resource capability.
6
+ */
7
+ export declare const tenantModulePageEnhancement: ModulePageEnhancement;
@@ -0,0 +1,8 @@
1
+ import type { QueryListRecord, RecordQueryListColumn } from '../../platform-components/index';
2
+ type __VLS_Props = {
3
+ record: QueryListRecord;
4
+ column?: RecordQueryListColumn;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;