@ximatai/muyun-web-app 0.26.12 → 0.26.13

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 (122) hide show
  1. package/dist/BusinessActivityLogView-UC4rH4Fn.js +16 -0
  2. package/dist/BusinessLogListDrawer-BtaXVJKz.js +564 -0
  3. package/dist/LoginAuditLogView-Cjrp8MKX.js +16 -0
  4. package/dist/{ModuleActionManagementView-BHEooZ5L.js → ModuleActionManagementView-Dkb35QXc.js} +139 -138
  5. package/dist/{ModuleGovernanceView-DB3TWlMy.js → ModuleGovernanceView-Dx43QvGf.js} +2878 -2748
  6. package/dist/RequestErrorLogView-WnGvMWiF.js +16 -0
  7. package/dist/RoleDetailWorkspaceView-DPDb_QOn.js +1397 -0
  8. package/dist/RuntimeLogView-BRl4ZDkU.js +330 -0
  9. package/dist/http-B0TC0pJB.js +157 -0
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +505 -475
  12. package/dist/{moduleGovernanceWorkspaceView-C5pqJOEJ.js → moduleGovernanceWorkspaceView-4V_UW-Bt.js} +2 -2
  13. package/dist/platform-components-1cvOeHmo.js +17854 -0
  14. package/dist/platform-workbench-Cu14Xd9d.js +10299 -0
  15. package/dist/types/consumer/index.d.ts +7 -0
  16. package/dist/types/dynamic-page-runtime/ModulePageBusinessSession.d.ts +2208 -0
  17. package/dist/types/dynamic-page-runtime/ModulePageBusinessState.vue.d.ts +11 -0
  18. package/dist/types/dynamic-page-runtime/ModulePageHost.vue.d.ts +20 -4
  19. package/dist/types/dynamic-page-runtime/ModulePageHostRuntime.vue.d.ts +4431 -0
  20. package/dist/types/dynamic-page-runtime/ModulePageHostSession.vue.d.ts +43 -0
  21. package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +2 -2
  22. package/dist/types/dynamic-page-runtime/ModuleRecordDetailActions.vue.d.ts +3 -0
  23. package/dist/types/dynamic-page-runtime/ModuleReferenceRecordDetailBrowser.vue.d.ts +42 -0
  24. package/dist/types/dynamic-page-runtime/RecordFormSurface.vue.d.ts +2 -2
  25. package/dist/types/dynamic-page-runtime/TenantScopeExplorer.vue.d.ts +21 -0
  26. package/dist/types/dynamic-page-runtime/composables/useModulePageActions.d.ts +1 -1
  27. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailActionRuntime.d.ts +5 -0
  28. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +1 -0
  29. package/dist/types/dynamic-page-runtime/formActionResult.d.ts +2 -0
  30. package/dist/types/dynamic-page-runtime/index.d.ts +2 -0
  31. package/dist/types/dynamic-page-runtime/inputValidationActionStatus.d.ts +20 -0
  32. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +7 -3
  33. package/dist/types/dynamic-page-runtime/modulePageUnsavedState.d.ts +10 -0
  34. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +1 -0
  35. package/dist/types/dynamic-page-runtime/recordMutationPayload.d.ts +3 -2
  36. package/dist/types/dynamic-page-runtime/referenceRecordProjection.d.ts +6 -0
  37. package/dist/types/dynamic-page-runtime/sessionViewBindings.d.ts +3 -0
  38. package/dist/types/dynamic-page-runtime/sourceReferencePickerConfig.d.ts +26 -0
  39. package/dist/types/dynamic-page-runtime/useModulePageSession.d.ts +1728 -0
  40. package/dist/types/dynamic-page-runtime/useTenantScopeController.d.ts +18 -0
  41. package/dist/types/platform-admin-runtime/WorkspaceViewDrawer.vue.d.ts +5 -0
  42. package/dist/types/platform-admin-runtime/role/roleScopeSelectionClient.d.ts +52 -0
  43. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +5 -2
  44. package/dist/types/platform-components/DictionaryOptionDialog.vue.d.ts +37 -0
  45. package/dist/types/platform-components/DictionaryOptionDialogChoiceList.vue.d.ts +21 -0
  46. package/dist/types/platform-components/DictionaryPicker.vue.d.ts +47 -0
  47. package/dist/types/platform-components/DictionaryRadioGroup.vue.d.ts +20 -0
  48. package/dist/types/platform-components/EmployeePicker.vue.d.ts +40 -0
  49. package/dist/types/platform-components/FileTransferUploader.vue.d.ts +1 -1
  50. package/dist/types/platform-components/ObjectPickerInput.vue.d.ts +34 -0
  51. package/dist/types/platform-components/QueryCriteriaComposer.vue.d.ts +29 -0
  52. package/dist/types/platform-components/QueryCriteriaGroupEditor.vue.d.ts +36 -0
  53. package/dist/types/platform-components/QueryValueEditor.vue.d.ts +33 -0
  54. package/dist/types/platform-components/ReadonlyReferenceValue.vue.d.ts +11 -0
  55. package/dist/types/platform-components/RecordContentSectionHeading.vue.d.ts +4 -2
  56. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +8 -3
  57. package/dist/types/platform-components/RecordDetailExtensionSection.vue.d.ts +7 -3
  58. package/dist/types/platform-components/RecordDetailFields.vue.d.ts +3 -5
  59. package/dist/types/platform-components/RecordFormFields.vue.d.ts +5 -5
  60. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +11 -3
  61. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +2 -2
  62. package/dist/types/platform-components/RecordPicker.vue.d.ts +2 -2
  63. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +18 -4
  64. package/dist/types/platform-components/RecordQueryListSurface.vue.d.ts +20 -0
  65. package/dist/types/platform-components/ReferencePicker.vue.d.ts +47 -0
  66. package/dist/types/platform-components/ReferenceRecordDetailBrowser.vue.d.ts +55 -0
  67. package/dist/types/platform-components/ScopedTreePicker.vue.d.ts +31 -0
  68. package/dist/types/platform-components/UserPicker.vue.d.ts +47 -0
  69. package/dist/types/platform-components/dictionaryOptionDialogModel.d.ts +23 -0
  70. package/dist/types/platform-components/employeePickerModel.d.ts +19 -0
  71. package/dist/types/platform-components/identityPickerModel.d.ts +18 -0
  72. package/dist/types/platform-components/index.d.ts +28 -1
  73. package/dist/types/platform-components/optionFieldOptionCache.d.ts +1 -1
  74. package/dist/types/platform-components/queryCriteriaDraft.d.ts +24 -0
  75. package/dist/types/platform-components/queryReferencePickerProvider.d.ts +19 -0
  76. package/dist/types/platform-components/readonlyReferenceDisplay.d.ts +19 -0
  77. package/dist/types/platform-components/recordEditorSessionState.d.ts +11 -4
  78. package/dist/types/platform-components/recordFormFieldModel.d.ts +28 -2
  79. package/dist/types/platform-components/recordQueryListColumnModel.d.ts +3 -1
  80. package/dist/types/platform-components/referencePickerModel.d.ts +103 -0
  81. package/dist/types/platform-components/referencePickerReadError.d.ts +24 -0
  82. package/dist/types/platform-components/referenceRecordDetailBrowser.d.ts +48 -0
  83. package/dist/types/platform-components/scopedTreePickerModel.d.ts +46 -0
  84. package/dist/types/platform-components/sourceReferencePickerProvider.d.ts +26 -0
  85. package/dist/types/platform-components/staticCrudManagementState.d.ts +7 -6
  86. package/dist/types/platform-components/userPickerModel.d.ts +45 -0
  87. package/dist/types/platform-components/userReferencePicker.d.ts +17 -0
  88. package/dist/types/platform-workbench/useWorkspaceViewUnsavedState.d.ts +1 -1
  89. package/dist/types/platform-workbench/workspaceViewHost.d.ts +1 -1
  90. package/dist/types/platform-workbench/workspaceViewUnsavedState.d.ts +3 -1
  91. package/dist/types/views/BusinessActivityLogView.vue.d.ts +3 -0
  92. package/dist/types/views/BusinessLogListDrawer.vue.d.ts +9 -0
  93. package/dist/types/views/LoginAuditLogView.vue.d.ts +3 -0
  94. package/dist/types/views/RequestErrorLogView.vue.d.ts +3 -0
  95. package/dist/types/views/RuntimeLogView.vue.d.ts +3 -0
  96. package/dist/types/views/businessLogClient.d.ts +85 -0
  97. package/dist/types/views/dictionaryRadioEligibility.d.ts +18 -0
  98. package/dist/types/views/dictionaryRadioFactRequestEpoch.d.ts +10 -0
  99. package/dist/types/views/metadataModelEditSession.d.ts +10 -1
  100. package/dist/types/views/pageCompositionDraftState.d.ts +29 -0
  101. package/dist/types/views/roleDetailWorkspaceSession.d.ts +1 -0
  102. package/dist/types/views/roleGrantClient.d.ts +0 -1
  103. package/dist/types/views/runtimeLogClient.d.ts +12 -0
  104. package/dist/types/views/runtimeLogSse.d.ts +13 -0
  105. package/dist/types/vue-ui-antdv/components/UiDataTable.vue.d.ts +15 -0
  106. package/dist/types/vue-ui-antdv/components/UiSearchInput.vue.d.ts +16 -2
  107. package/dist/types/vue-ui-antdv/components/UiSelect.vue.d.ts +23 -1
  108. package/dist/types/vue-ui-antdv/components/UiSidePanel.vue.d.ts +9 -2
  109. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +1 -1
  110. package/dist/types/vue-ui-antdv/components/UiTreeSelect.vue.d.ts +23 -1
  111. package/dist/types/vue-ui-antdv/drawerDismissal.d.ts +18 -0
  112. package/dist/types/vue-ui-antdv/drawerWidth.d.ts +22 -0
  113. package/dist/types/vue-ui-antdv/index.d.ts +4 -0
  114. package/dist/types/web-contracts/index.d.ts +66 -6
  115. package/dist/types/web-core/http.d.ts +2 -0
  116. package/dist/types/web-core/module/moduleContext.d.ts +15 -2
  117. package/dist/types/web-core/module/runtimeContext.d.ts +3 -2
  118. package/dist/types/web-core/module/staticModuleClient.d.ts +5 -1
  119. package/dist/{workspaceViews-DI_1vYX9.js → workspaceViews-CCg6V0pr.js} +1245 -1140
  120. package/package.json +1 -1
  121. package/dist/RoleDetailWorkspaceView-D6X7pAj5.js +0 -1379
  122. package/dist/platform-workbench-DJj42YQP.js +0 -22911
@@ -0,0 +1,43 @@
1
+ import type { StandardModulePageDescriptor } from '../web-contracts/index';
2
+ import { type QueryListRecord } from '../platform-components/index';
3
+ type __VLS_Props = {
4
+ descriptor: StandardModulePageDescriptor;
5
+ requireConfiguredPage?: boolean;
6
+ recordOnly?: {
7
+ recordId: string;
8
+ renderMode?: 'inline' | 'portal';
9
+ scope?: 'tab' | 'viewport';
10
+ };
11
+ /** Rebuilds only the frozen business session; the tenant controller stays mounted. */
12
+ reloadKey?: number;
13
+ };
14
+ declare function startBusinessSession(): void;
15
+ declare function refreshList(): void;
16
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
17
+ refreshList: typeof refreshList;
18
+ retry: typeof startBusinessSession;
19
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
+ "interaction-state-change": (state: {
21
+ editing: boolean;
22
+ busy: boolean;
23
+ dirty?: boolean;
24
+ }) => any;
25
+ "record-only-change": (mutation: {
26
+ type: "saved" | "deleted" | "unavailable";
27
+ record?: QueryListRecord;
28
+ }) => any;
29
+ "record-only-close": () => any;
30
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
31
+ "onInteraction-state-change"?: ((state: {
32
+ editing: boolean;
33
+ busy: boolean;
34
+ dirty?: boolean;
35
+ }) => any) | undefined;
36
+ "onRecord-only-change"?: ((mutation: {
37
+ type: "saved" | "deleted" | "unavailable";
38
+ record?: QueryListRecord;
39
+ }) => any) | undefined;
40
+ "onRecord-only-close"?: (() => any) | undefined;
41
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
42
+ declare const _default: typeof __VLS_export;
43
+ export default _default;
@@ -26,17 +26,17 @@ type __VLS_Props = {
26
26
  formFieldPolicies?: readonly ModulePageFormFieldPolicy[];
27
27
  };
28
28
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
29
- "update:field": (fieldName: string, value: RecordFormFieldValue) => any;
30
29
  "validity-change": (validity: {
31
30
  valid: boolean;
32
31
  }) => any;
32
+ "update:field": (fieldName: string, value: RecordFormFieldValue) => any;
33
33
  "children-change": (relationField: string, records: QueryListRecord[]) => any;
34
34
  "relations-validity-change": (valid: boolean) => any;
35
35
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
36
- "onUpdate:field"?: ((fieldName: string, value: RecordFormFieldValue) => any) | undefined;
37
36
  "onValidity-change"?: ((validity: {
38
37
  valid: boolean;
39
38
  }) => any) | undefined;
39
+ "onUpdate:field"?: ((fieldName: string, value: RecordFormFieldValue) => any) | undefined;
40
40
  "onChildren-change"?: ((relationField: string, records: QueryListRecord[]) => any) | undefined;
41
41
  "onRelations-validity-change"?: ((valid: boolean) => any) | undefined;
42
42
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -6,6 +6,8 @@ type __VLS_Props = {
6
6
  record?: QueryListRecord;
7
7
  mode: 'create' | 'edit' | 'view';
8
8
  saving?: boolean;
9
+ /** The action currently owning the shared detail-operation session. */
10
+ activeActionKey?: string;
9
11
  detailLoading?: boolean;
10
12
  detailLoadFailed?: boolean;
11
13
  recycleBinActive?: boolean;
@@ -43,6 +45,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
43
45
  record: QueryListRecord;
44
46
  actions: ModulePageRecordActionContribution[];
45
47
  saving: boolean;
48
+ activeActionKey: string;
46
49
  detailLoading: boolean;
47
50
  detailLoadFailed: boolean;
48
51
  recycleBinActive: boolean;
@@ -0,0 +1,42 @@
1
+ import { type HttpClient } from '../web-core/index';
2
+ import { type ReferenceRecordDetailBrowserState, type ReferenceRecordDetailMutation } from '../platform-components/index';
3
+ type __VLS_Props = {
4
+ http?: HttpClient;
5
+ browser?: ReferenceRecordDetailBrowserState;
6
+ inlineAnchor?: boolean;
7
+ renderMode?: 'inline' | 'portal';
8
+ scope?: 'tab' | 'viewport';
9
+ };
10
+ declare var __VLS_10: {};
11
+ type __VLS_Slots = {} & {
12
+ default?: (props: typeof __VLS_10) => any;
13
+ };
14
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ "record-change": (mutation: ReferenceRecordDetailMutation) => any;
16
+ "interaction-state-change": (state: {
17
+ editing: boolean;
18
+ busy: boolean;
19
+ dirty?: boolean;
20
+ }) => any;
21
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
22
+ "onRecord-change"?: ((mutation: ReferenceRecordDetailMutation) => any) | undefined;
23
+ "onInteraction-state-change"?: ((state: {
24
+ editing: boolean;
25
+ busy: boolean;
26
+ dirty?: boolean;
27
+ }) => any) | undefined;
28
+ }>, {
29
+ scope: "tab" | "viewport";
30
+ http: HttpClient;
31
+ renderMode: "inline" | "portal";
32
+ browser: ReferenceRecordDetailBrowserState;
33
+ inlineAnchor: boolean;
34
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
35
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
36
+ declare const _default: typeof __VLS_export;
37
+ export default _default;
38
+ type __VLS_WithSlots<T, S> = T & {
39
+ new (): {
40
+ $slots: S;
41
+ };
42
+ };
@@ -17,15 +17,15 @@ type __VLS_Props = {
17
17
  fieldPolicies?: readonly ModulePageFormFieldPolicy[];
18
18
  };
19
19
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
- "update:field": (fieldName: string, value: RecordFormFieldValue) => any;
21
20
  "validity-change": (validity: {
22
21
  valid: boolean;
23
22
  }) => any;
23
+ "update:field": (fieldName: string, value: RecordFormFieldValue) => any;
24
24
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
- "onUpdate:field"?: ((fieldName: string, value: RecordFormFieldValue) => any) | undefined;
26
25
  "onValidity-change"?: ((validity: {
27
26
  valid: boolean;
28
27
  }) => any) | undefined;
28
+ "onUpdate:field"?: ((fieldName: string, value: RecordFormFieldValue) => any) | undefined;
29
29
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
30
  declare const _default: typeof __VLS_export;
31
31
  export default _default;
@@ -0,0 +1,21 @@
1
+ import { type QueryListRecord } from '../platform-components/index';
2
+ import type { ModuleContext } from '../web-core/index';
3
+ type __VLS_Props = {
4
+ context: ModuleContext<QueryListRecord>;
5
+ selectedId?: string;
6
+ reloadKey: number;
7
+ disabled?: boolean;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ select: (record: QueryListRecord) => any;
11
+ refresh: () => any;
12
+ loaded: (records: QueryListRecord[], initialFullResult: boolean, total?: number | undefined) => any;
13
+ deselect: () => any;
14
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
15
+ onSelect?: ((record: QueryListRecord) => any) | undefined;
16
+ onRefresh?: (() => any) | undefined;
17
+ onLoaded?: ((records: QueryListRecord[], initialFullResult: boolean, total?: number | undefined) => any) | undefined;
18
+ onDeselect?: (() => any) | undefined;
19
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
+ declare const _default: typeof __VLS_export;
21
+ export default _default;
@@ -9,5 +9,5 @@ export declare function useModulePageActions(): {
9
9
  runEnhancementAction: <TContext>(contribution: {
10
10
  key: string;
11
11
  run(context: TContext): void | Promise<void>;
12
- }, actionContext: TContext) => Promise<void>;
12
+ }, actionContext: TContext) => Promise<boolean>;
13
13
  };
@@ -17,6 +17,9 @@ export interface ModulePageDetailActionRuntimeOptions {
17
17
  localEditValid?: Ref<boolean>;
18
18
  presentSuccess(result: unknown, fallbackMessage: string, source: string): Promise<unknown> | unknown;
19
19
  presentError(cause: unknown, source: string): void;
20
+ /** Reports a failed post-mutation detail read without treating the mutation itself as failed. */
21
+ reportRefreshFailure?(cause: unknown, source: string): void;
22
+ recordChanged?(record: QueryListRecord): void;
20
23
  }
21
24
  /**
22
25
  * Runs server-issued detail action contracts and their typed local-edit forms.
@@ -39,10 +42,12 @@ export declare function useModulePageDetailActionRuntime(options: ModulePageDeta
39
42
  localEditForm: NonNullable<PageBootstrapActionBlock["localEditForm"]>;
40
43
  }) | undefined>;
41
44
  localEditDraft: Ref<RecordFormRecord | undefined, RecordFormRecord | undefined>;
45
+ localEditDirty: import("vue").ComputedRef<boolean>;
42
46
  localEditFields: import("vue").ComputedRef<Map<string, RecordFormFieldDescriptor>>;
43
47
  handleConfiguredAction: (action: {
44
48
  key?: string;
45
49
  }) => boolean;
50
+ dismissLocalEdit: () => void;
46
51
  submitLocalEdit: () => Promise<void>;
47
52
  };
48
53
  export {};
@@ -1427,6 +1427,7 @@ export declare function useNavigatorRuntime(context: ModuleContext<QueryListReco
1427
1427
  id?: string;
1428
1428
  }[], externalQueryValues?: Record<string, unknown>) => Promise<NavigatorEntrySelectionResolution | undefined>;
1429
1429
  isCurrentNavigatorEntrySelection: (level: NavigatorLevelRuntime, resolution: NavigatorEntrySelectionResolution) => boolean;
1430
+ loadRuntimeDescriptor: () => Promise<void>;
1430
1431
  loadRuntimeForm: (isListPage: Ref<boolean>, hasBusinessRecordView: () => boolean, fail: (message: string) => void) => Promise<void>;
1431
1432
  };
1432
1433
  export {};
@@ -1,3 +1,5 @@
1
+ /** Distinguishes optional draft diagnostics from actions that declare the patch protocol. */
2
+ export declare function hasFormActionRecordPatch(response: unknown): boolean;
1
3
  /** Only an explicit form result may update an unsaved draft. Ordinary action data is not a patch. */
2
4
  export declare function formActionResult(response: unknown): {
3
5
  recordPatch: Record<string, unknown>;
@@ -1,9 +1,11 @@
1
1
  export { default as ModulePageHost } from './ModulePageHost.vue';
2
2
  export { default as DynamicModulePage } from './DynamicModulePage.vue';
3
3
  export { default as DynamicModuleWorkspaceDetailView } from './DynamicModuleWorkspaceDetailView.vue';
4
+ export { default as ModuleReferenceRecordDetailBrowser } from './ModuleReferenceRecordDetailBrowser.vue';
4
5
  export { customerDescriptor } from './mockDescriptor';
5
6
  export { configureModulePageEnhancementContributions, configureModulePageEnhancements, createModulePageEnhancementRegistry, createReadonlyCardRecordSnapshot, modulePageWorkspaceViews, resolveModulePageEnhancement, } from './modulePageEnhancements';
6
7
  export { provideModulePageNavigation, useModulePageNavigation } from './modulePageNavigation';
8
+ export { provideModulePageUnsavedStateHost, useModulePageUnsavedState, type ModulePageUnsavedStateHost, } from './modulePageUnsavedState';
7
9
  export { NAVIGATOR_ENTRY_MODULE_ALIAS_QUERY_KEY, NAVIGATOR_ENTRY_RECORD_ID_QUERY_KEY, } from './navigatorEntrySelection';
8
10
  export { createModulePageListRefreshRegistry, modulePageListRefreshRegistry, refreshModulePageList, } from './modulePageListRefresh';
9
11
  export type { ModulePageListRefreshRegistry } from './modulePageListRefresh';
@@ -0,0 +1,20 @@
1
+ export type InputValidationTarget = {
2
+ kind: 'draft';
3
+ fingerprint: string;
4
+ } | {
5
+ kind: 'record';
6
+ recordId: string;
7
+ fingerprint: string;
8
+ };
9
+ export interface InputValidationAttempt {
10
+ actionKey: string;
11
+ target: InputValidationTarget;
12
+ }
13
+ /** Tracks successful validation against the exact input snapshot that was tested. */
14
+ export declare function useInputValidationActionStatus(): {
15
+ begin: (actionKey: string, target: InputValidationTarget) => InputValidationAttempt;
16
+ succeed: (attempt: InputValidationAttempt, currentFingerprint?: string) => void;
17
+ isDraftValidated: (actionKey: string, fingerprint: string | undefined) => boolean;
18
+ isRecordValidated: (actionKey: string, recordId: string | undefined, fingerprint: string | undefined) => boolean;
19
+ invalidateRecord: (recordId: string) => void;
20
+ };
@@ -1,7 +1,7 @@
1
1
  import type { Component } from 'vue';
2
2
  import type { CurrentUser, PageDescriptor, PageLayoutMode, RouteQueryValue, WebPageResponse, WebQueryCondition, WebQueryRequest } from '../web-contracts/index';
3
3
  import type { ModuleContext } from '../web-core/index';
4
- import type { RecordActionItem, RecordFormFieldState, RecordFormFieldValue, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
4
+ import type { DrawerWidth, RecordActionItem, RecordFormFieldState, RecordFormFieldValue, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
5
5
  import type { DrawerTitleAction } from '../platform-components/index';
6
6
  /**
7
7
  * Frontend-owned, constrained composition for a descriptor-driven module page.
@@ -309,6 +309,10 @@ export interface ModulePageBatchActionContribution extends RecordActionItem {
309
309
  export interface ModulePageDetailSection {
310
310
  key: string;
311
311
  title: string;
312
+ /** Optional heading copy owned by the business section but rendered by the platform shell. */
313
+ subtitle?: string;
314
+ /** Reactive subtitle content; receives the same read-only context as the section body. */
315
+ subtitleComponent?: Component;
312
316
  component: Component;
313
317
  }
314
318
  /** Business content rendered inside the platform-owned standard view drawer. */
@@ -316,7 +320,7 @@ export interface ModulePageDetailDrawer {
316
320
  /** The component receives only the documented read-only ModulePageRecordViewContext prop. */
317
321
  component: Component;
318
322
  /** Keeps the platform drawer shell while allowing dense business views more room. */
319
- width?: number | string;
323
+ width?: DrawerWidth;
320
324
  /**
321
325
  * Defaults to true. Set false when the business detail body has its own
322
326
  * governed read endpoint and only needs the selected list record as context.
@@ -337,7 +341,7 @@ export interface ModulePageCellComponentContribution {
337
341
  }
338
342
  export interface ModulePageDrawer {
339
343
  title: string;
340
- width?: number | string;
344
+ width?: DrawerWidth;
341
345
  /** The component receives only the documented ModulePageDrawerContext prop. */
342
346
  component: Component;
343
347
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Optional host bridge for a dynamic page rendered as an independent workspace
3
+ * view. The dynamic runtime only reports its local draft fact; the workbench
4
+ * owns registration, confirmation and tab destruction.
5
+ */
6
+ export interface ModulePageUnsavedStateHost {
7
+ registerUnsavedState(source: string, isDirty: () => boolean, isBusy?: () => boolean): () => void;
8
+ }
9
+ export declare function provideModulePageUnsavedStateHost(host: ModulePageUnsavedStateHost | undefined): void;
10
+ export declare function useModulePageUnsavedState(source: string, isDirty: () => boolean, isBusy?: () => boolean): void;
@@ -23,6 +23,7 @@ export declare function useRecordDetailController<TRecord extends Record<string,
23
23
  saving: import("vue").Ref<boolean, boolean>;
24
24
  togglingEnabled: import("vue").Ref<boolean, boolean>;
25
25
  formSessionKey: import("vue").Ref<number, number>;
26
+ isDirty: import("vue").ComputedRef<boolean>;
26
27
  beginLoad: (next: TRecord, nextMode: Extract<RecordDetailMode, "edit" | "view">, options?: RecordDetailTransitionOptions) => void;
27
28
  resolveLoad: (next: TRecord) => void;
28
29
  failLoad: () => void;
@@ -1,3 +1,4 @@
1
1
  import type { RecordFormRecord } from '../platform-components/index';
2
- /** Platform write fields are flat; dot keys belong to read-model reference projections. */
3
- export declare function recordMutationPayload(record: RecordFormRecord): RecordFormRecord;
2
+ import type { ResolvedViewFieldDescriptor } from '../web-contracts/index';
3
+ /** Read projections never become business writes, including explicitly named flat outputs. */
4
+ export declare function recordMutationPayload(record: RecordFormRecord, fields?: Iterable<Pick<ResolvedViewFieldDescriptor, 'fieldRef' | 'reference' | 'referenceSummary'>>): RecordFormRecord;
@@ -0,0 +1,6 @@
1
+ import type { RecordFormFieldDescriptor, RecordFormRecord, ReferenceRecordDetailMutation } from '../platform-components/index';
2
+ /**
3
+ * Applies published ONE-reference display projections after the referenced
4
+ * record is saved, without changing the source record's reference value.
5
+ */
6
+ export declare function applyReferenceRecordProjection(draft: RecordFormRecord, fields: ReadonlyMap<string, RecordFormFieldDescriptor>, mutation: ReferenceRecordDetailMutation): RecordFormRecord;
@@ -0,0 +1,3 @@
1
+ import { type WritableComputedRef } from 'vue';
2
+ /** Keep the renderer instance while replacing the disposed business session behind its bindings. */
3
+ export declare function sessionViewBindings<T extends object>(current: () => T): { [K in keyof T]: WritableComputedRef<T[K]>; };
@@ -0,0 +1,26 @@
1
+ import { type RecordFormFieldPickerConfig } from '../platform-components/index';
2
+ import type { ResolvedReferenceFieldDescriptor } from '../web-contracts/index';
3
+ import type { ReferenceResolveClient } from '../web-core/index';
4
+ type SourceReferencePickerConfigOptions = {
5
+ providerScopeKey: string;
6
+ sourceModuleAlias: string;
7
+ reference: ResolvedReferenceFieldDescriptor;
8
+ pickerFieldName: string;
9
+ referenceResolver: () => ReferenceResolveClient;
10
+ formValues: () => Record<string, unknown>;
11
+ reloadRecord: () => Record<string, unknown> | undefined;
12
+ source: () => {
13
+ recordId: string;
14
+ } | undefined;
15
+ /** Scoped-tree hosts retain their compact legacy picker alongside lazy expansion. */
16
+ legacyTreeLoaders?: boolean;
17
+ };
18
+ type SourceReferencePickerConfig = Pick<RecordFormFieldPickerConfig, 'provider' | 'reloadKey' | 'loadOptions' | 'loadTree' | 'resolveOptions'>;
19
+ /**
20
+ * Retains source-authorized providers for one page-runtime instance. The source callbacks stay
21
+ * live so page and child-row drafts can change without recreating the picker or widening its
22
+ * candidate authority. SOURCE_FIELD TREE delivery is part of the same provider contract; it is
23
+ * never reconstructed from a paged QUERY result.
24
+ */
25
+ export declare function createSourceReferencePickerConfigAssembler(): (options: SourceReferencePickerConfigOptions) => SourceReferencePickerConfig;
26
+ export {};