@ximatai/muyun-web-app 0.26.7 → 0.26.8

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 (87) hide show
  1. package/dist/{EmployeeDetailWorkspaceView-DYJLlkSz.js → EmployeeDetailWorkspaceView-DswEDSxH.js} +1 -1
  2. package/dist/{EmployeeManagementView-taxWUa7g.js → EmployeeManagementView-C9STtw08.js} +385 -386
  3. package/dist/{MetadataOrchestrationView-B-CPudJl.js → MetadataOrchestrationView-DKYVGMzy.js} +95 -95
  4. package/dist/{ModuleActionManagementView-CmVj0e0C.js → ModuleActionManagementView-DiVzuPdu.js} +72 -72
  5. package/dist/{RoleAuthorizationView-q_6CsBYq.js → RoleAuthorizationView-C0s4Bog7.js} +47 -47
  6. package/dist/{RoleDetailWorkspaceView-DmJlJgAj.js → RoleDetailWorkspaceView-dqHxKVfd.js} +1 -1
  7. package/dist/{RoleManagementView-HCa9rH0f.js → RoleManagementView-D43pUCxi.js} +468 -469
  8. package/dist/{SystemUserDetailWorkspaceView-U6Ij0US1.js → SystemUserDetailWorkspaceView-CQ9WeLrR.js} +1 -1
  9. package/dist/SystemUserManagementView-D75_ylYk.js +758 -0
  10. package/dist/{UserDetailWorkspaceView-OPYvD6mH.js → UserDetailWorkspaceView-BCST01d2.js} +1 -1
  11. package/dist/UserManagementView-CcdvDo_y.js +964 -0
  12. package/dist/index.css +1 -1
  13. package/dist/index.js +2278 -4726
  14. package/dist/{pageRealtime-CzJlr9hs.js → pageRealtime-EAiGWKEo.js} +87 -85
  15. package/dist/{platform-components-DKKWbNrz.js → platform-components-CFU_zR7-.js} +2145 -1866
  16. package/dist/types/app/workbenchStartup.d.ts +6 -2
  17. package/dist/types/consumer/AppWorkbenchShell.vue.d.ts +2 -2
  18. package/dist/types/consumer/index.d.ts +4 -3
  19. package/dist/types/dynamic-page-runtime/DynamicModuleWorkspaceDetailView.vue.d.ts +10 -0
  20. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +38 -0
  21. package/dist/types/dynamic-page-runtime/NavigatorManagementEditor.vue.d.ts +25 -0
  22. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +43 -0
  23. package/dist/types/dynamic-page-runtime/detailSurfacePreference.d.ts +10 -0
  24. package/dist/types/dynamic-page-runtime/index.d.ts +2 -1
  25. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +38 -0
  26. package/dist/types/dynamic-page-runtime/modulePageNavigation.d.ts +1 -1
  27. package/dist/types/dynamic-page-runtime/pageContextRuntime.d.ts +6 -0
  28. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +27 -0
  29. package/dist/types/platform-admin-runtime/index.d.ts +1 -1
  30. package/dist/types/platform-admin-runtime/platformAdminRoutes.d.ts +5 -0
  31. package/dist/types/platform-admin-runtime/realtime.d.ts +2 -1
  32. package/dist/types/platform-components/BusinessNotificationPanel.vue.d.ts +12 -0
  33. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +6 -0
  34. package/dist/types/platform-components/ManagementPanelHeader.vue.d.ts +5 -3
  35. package/dist/types/platform-components/ManagementWorkspace.vue.d.ts +8 -2
  36. package/dist/types/platform-components/RecordActionBar.vue.d.ts +1 -1
  37. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +4 -1
  38. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +8 -6
  39. package/dist/types/platform-components/RecordDetailPanel.vue.d.ts +7 -5
  40. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +4 -1
  41. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +1 -1
  42. package/dist/types/platform-components/RecordPanelButton.vue.d.ts +2 -0
  43. package/dist/types/platform-components/RecordPicker.vue.d.ts +1 -1
  44. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +9 -2
  45. package/dist/types/platform-components/RecordStatusSwitch.vue.d.ts +3 -0
  46. package/dist/types/platform-components/StaticManagementLayout.vue.d.ts +13 -7
  47. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +3 -0
  48. package/dist/types/platform-components/index.d.ts +4 -2
  49. package/dist/types/platform-components/managementWorkspaceLayout.d.ts +14 -0
  50. package/dist/types/platform-components/recordFormFieldModel.d.ts +2 -2
  51. package/dist/types/platform-components/recycleBinState.d.ts +2 -0
  52. package/dist/types/platform-components/scopedTreeModuleContext.d.ts +11 -0
  53. package/dist/types/platform-workbench/index.d.ts +1 -0
  54. package/dist/types/platform-workbench/menuNavigation.d.ts +3 -0
  55. package/dist/types/platform-workbench/modulePageWorkspaceViews.d.ts +7 -0
  56. package/dist/types/platform-workbench/workbenchLayout.d.ts +36 -0
  57. package/dist/types/platform-workbench/workbenchNavigation.d.ts +2 -0
  58. package/dist/types/platform-workbench/workspaceViewHost.d.ts +2 -0
  59. package/dist/types/vue-ui-antdv/components/UiButton.vue.d.ts +1 -1
  60. package/dist/types/vue-ui-antdv/components/UiDataTable.vue.d.ts +1 -1
  61. package/dist/types/vue-ui-antdv/components/UiIcon.vue.d.ts +1 -1
  62. package/dist/types/vue-ui-antdv/components/UiModal.vue.d.ts +1 -1
  63. package/dist/types/vue-ui-antdv/components/UiSelect.vue.d.ts +1 -1
  64. package/dist/types/vue-ui-antdv/components/UiTreeSelect.vue.d.ts +7 -1
  65. package/dist/types/vue-ui-antdv/index.d.ts +1 -0
  66. package/dist/types/web-contracts/index.d.ts +110 -17
  67. package/dist/types/web-core/businessNotifications.d.ts +3 -0
  68. package/dist/types/web-core/index.d.ts +1 -0
  69. package/dist/types/web-core/module/moduleContext.d.ts +1 -0
  70. package/dist/types/web-core/module/runtimeContext.d.ts +3 -1
  71. package/dist/types/web-core/module/staticModuleClient.d.ts +8 -1
  72. package/dist/types/web-core/realtime.d.ts +5 -1
  73. package/dist/{useUserSessionRows-CBHEzRFQ.js → useUserSessionRows-DCpUZCzN.js} +2 -2
  74. package/dist/workspaceViewSessions-Dj1LjdG1.js +4984 -0
  75. package/package.json +1 -1
  76. package/dist/SystemUserManagementView-C1CkKivH.js +0 -758
  77. package/dist/UserManagementView-gbCL9SnC.js +0 -965
  78. package/dist/currentUserContext-B1lj1WgF.js +0 -11
  79. package/dist/types/views/ApplicationManagementView.vue.d.ts +0 -3
  80. package/dist/types/views/DepartmentManagementView.vue.d.ts +0 -3
  81. package/dist/types/views/FieldSpecManagementView.vue.d.ts +0 -3
  82. package/dist/types/views/OrganizationManagementView.vue.d.ts +0 -3
  83. package/dist/types/views/applicationManagementState.d.ts +0 -64
  84. package/dist/types/views/departmentManagementState.d.ts +0 -137
  85. package/dist/types/views/fieldSpecManagementState.d.ts +0 -80
  86. package/dist/types/views/organizationManagementState.d.ts +0 -64
  87. package/dist/workspaceViewSessions-DkB9myrq.js +0 -3252
@@ -1,6 +1,8 @@
1
1
  type __VLS_Props = {
2
2
  enabled?: boolean;
3
3
  disabled?: boolean;
4
+ /** Explains why this otherwise visible status control is unavailable. */
5
+ disabledReason?: string;
4
6
  loading?: boolean;
5
7
  showLabel?: boolean;
6
8
  };
@@ -12,6 +14,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
12
14
  enabled: boolean;
13
15
  disabled: boolean;
14
16
  loading: boolean;
17
+ disabledReason: string;
15
18
  showLabel: boolean;
16
19
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
20
  declare const _default: typeof __VLS_export;
@@ -7,20 +7,25 @@ type __VLS_Props = {
7
7
  explorerSearchKeyword?: string;
8
8
  explorerSearchPlaceholder?: string;
9
9
  explorerSearchable?: boolean;
10
+ navigatorCount?: number;
10
11
  };
11
- declare var __VLS_24: {}, __VLS_26: {}, __VLS_29: {}, __VLS_38: {}, __VLS_41: {}, __VLS_43: {};
12
+ declare var __VLS_14: {
13
+ index: number;
14
+ }, __VLS_32: {}, __VLS_34: {}, __VLS_37: {}, __VLS_46: {}, __VLS_49: {}, __VLS_51: {};
12
15
  type __VLS_Slots = {} & {
13
- 'explorer-actions'?: (props: typeof __VLS_24) => any;
16
+ navigator?: (props: typeof __VLS_14) => any;
14
17
  } & {
15
- explorer?: (props: typeof __VLS_26) => any;
18
+ 'explorer-actions'?: (props: typeof __VLS_32) => any;
16
19
  } & {
17
- 'explorer-footer'?: (props: typeof __VLS_29) => any;
20
+ explorer?: (props: typeof __VLS_34) => any;
18
21
  } & {
19
- 'detail-status'?: (props: typeof __VLS_38) => any;
22
+ 'explorer-footer'?: (props: typeof __VLS_37) => any;
20
23
  } & {
21
- 'detail-actions'?: (props: typeof __VLS_41) => any;
24
+ 'detail-status'?: (props: typeof __VLS_46) => any;
22
25
  } & {
23
- default?: (props: typeof __VLS_43) => any;
26
+ 'detail-actions'?: (props: typeof __VLS_49) => any;
27
+ } & {
28
+ default?: (props: typeof __VLS_51) => any;
24
29
  };
25
30
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
31
  refresh: () => any;
@@ -33,6 +38,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
33
38
  explorerSearchKeyword: string;
34
39
  explorerSearchPlaceholder: string;
35
40
  explorerSearchable: boolean;
41
+ navigatorCount: number;
36
42
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
37
43
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
44
  declare const _default: typeof __VLS_export;
@@ -7,6 +7,8 @@ type __VLS_Props = {
7
7
  context: ModuleContext<TreeRecordBase>;
8
8
  selectedId?: string;
9
9
  reloadKey?: number;
10
+ /** Descriptor-owned criteria from upstream navigator levels. */
11
+ externalQueryValues?: Record<string, unknown>;
10
12
  keyword?: string;
11
13
  searchMode?: TreeRecordSearchMode;
12
14
  searchTrigger?: 'inline' | 'external';
@@ -47,6 +49,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
47
49
  tagOf: (record: TreeRecordBase) => string | undefined;
48
50
  mutedOf: (record: TreeRecordBase) => boolean;
49
51
  reloadKey: number;
52
+ externalQueryValues: Record<string, unknown>;
50
53
  loadingTip: string;
51
54
  fallbackTitle: string;
52
55
  searchMode: TreeRecordSearchMode;
@@ -1,5 +1,6 @@
1
1
  export {};
2
2
  export { default as ApplicationScopeSwitcher } from './ApplicationScopeSwitcher.vue';
3
+ export { default as BusinessNotificationPanel } from './BusinessNotificationPanel.vue';
3
4
  export { confirmAction } from '../vue-ui-antdv/index';
4
5
  export { default as CrudRecordListExplorer } from './CrudRecordListExplorer.vue';
5
6
  export { default as DrawerOperationBar } from './DrawerOperationBar.vue';
@@ -13,6 +14,7 @@ export { default as EnabledSelect } from './EnabledSelect.vue';
13
14
  export { default as ModuleActionButton } from './ModuleActionButton.vue';
14
15
  export { default as ManagementWorkspace } from './ManagementWorkspace.vue';
15
16
  export { default as ManagementExplorerColumn } from './ManagementExplorerColumn.vue';
17
+ export { MANAGEMENT_WORKSPACE_LAYOUT, listDetailWorkspaceMinWidth } from './managementWorkspaceLayout';
16
18
  export { providePageLayout, usePageLayout } from './pageLayoutContext';
17
19
  export { default as RecordActionBar } from './RecordActionBar.vue';
18
20
  export { default as RecordDetailDrawer } from './RecordDetailDrawer.vue';
@@ -56,7 +58,7 @@ export type { RecordPickerMode } from './recordPickerModel';
56
58
  export type { RecordActionItem, ResolvedRecordActionItem } from './recordActionBarModel';
57
59
  export type { RecordDetailDisplayResolver, RecordDetailDisplayValue } from './recordDetailFieldModel';
58
60
  export type { RecordListExplorerRecord } from './RecordListExplorer.vue';
59
- export type { QueryListRecord, RecordQueryListCellComponent, RecordQueryListColumn, RecordQueryListMode, } from './RecordQueryListPanel.vue';
61
+ export type { QueryListRecord, RecordQueryListCellComponent, RecordQueryListColumn, RecordQueryListMode, StandardCrudRowActionKey, } from './RecordQueryListPanel.vue';
60
62
  export type { RecordFormFieldDescriptor, RecordFormFieldFallback, RecordFormFieldPickerConfig, RecordFormFieldState, RecordFormFieldValue, RecordFormRecord, } from './recordFormFieldModel';
61
63
  export type { CrudRecordListBase } from './crudRecordListModel';
62
64
  export { defaultCrudRecordListMatches, defaultCrudRecordListSubtitle, defaultCrudRecordListTitle, } from './crudRecordListModel';
@@ -70,7 +72,7 @@ export type { PlatformFileSizeDisplay, PlatformFileSizeOptions } from './platfor
70
72
  export { providePlatformTimeZoneContext, usePlatformTimeZoneContext } from './platformTimeZoneContext';
71
73
  export type { PlatformDateTimeDisplay, PlatformDateTimeOptions, PlatformDateTimePrecision, } from './platformDateTime';
72
74
  export { childResourceDefaultFormViewCode, resolveRecordFormFieldNames, resolveRecordFormFieldState, resolveRecordFormFields, } from './recordFormFieldModel';
73
- export { createScopedTreeClient, createScopedTreeModuleContext } from './scopedTreeModuleContext';
75
+ export { createQueryScopedTreeModuleContext, createScopedTreeClient, createScopedTreeModuleContext, } from './scopedTreeModuleContext';
74
76
  export { createEmptyStaticTreeClient, createStaticTreeResourceModuleContext, } from './staticTreeResourceModuleContext';
75
77
  export { createScopedResourceTreeModuleContext } from './scopedResourceTreeModuleContext';
76
78
  export { presentPlatformError, presentPlatformMessage, presentPlatformSuccess, } from './platformErrorFeedback';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared geometry for the platform management workspace.
3
+ *
4
+ * Keep responsive promotion independent from each page's DSL: descriptors say
5
+ * whether a page has a detail surface; the runtime decides whether that surface
6
+ * can share the available workspace with its list and navigators.
7
+ */
8
+ export declare const MANAGEMENT_WORKSPACE_LAYOUT: {
9
+ readonly explorerWidth: 280;
10
+ readonly listMinWidth: 720;
11
+ readonly detailMinWidth: 560;
12
+ readonly columnGap: 12;
13
+ };
14
+ export declare function listDetailWorkspaceMinWidth(explorerCount: number): number;
@@ -60,8 +60,8 @@ export interface ResolveRecordFormFieldNamesOptions {
60
60
  exclude?: Iterable<string>;
61
61
  }
62
62
  export declare function resolveRecordFormFieldNames(fields?: Map<string, RecordFormFieldDescriptor>, fallback?: Record<string, RecordFormFieldFallback>, options?: ResolveRecordFormFieldNamesOptions): string[];
63
- export declare function resolveRecordFormFields(uiDescriptor: ResolvedModuleUiDescriptor | undefined, viewCode?: string): Map<string, RecordFormFieldDescriptor>;
64
- export declare function resolveRecordFormGroups(uiDescriptor: ResolvedModuleUiDescriptor | undefined, viewCode?: string): FormGroupDescriptor[];
63
+ export declare function resolveRecordFormFields(uiDescriptor: ResolvedModuleUiDescriptor | undefined, resource?: string, editorSurface?: string): Map<string, RecordFormFieldDescriptor>;
64
+ export declare function resolveRecordFormGroups(uiDescriptor: ResolvedModuleUiDescriptor | undefined, resource?: string, editorSurface?: string): FormGroupDescriptor[];
65
65
  export declare function childResourceDefaultFormViewCode(resource: string): string;
66
66
  export declare function resolveRecordFormFieldState(fieldName: string, options?: {
67
67
  fields?: Map<string, RecordFormFieldDescriptor>;
@@ -7,6 +7,8 @@ export interface RecycleBinStateOptions<TRecord> {
7
7
  /** 外部刷新信号,变化时重新加载列表 */
8
8
  reloadKey?: Ref<number>;
9
9
  }
10
+ /** Turns lifecycle facts from the platform into concise operator-facing guidance. */
11
+ export declare function recycleBinRestoreUnavailableReason(item: RecycleBinItem<unknown>): string | undefined;
10
12
  export declare function useRecycleBinState<TRecord>(options: RecycleBinStateOptions<TRecord>): {
11
13
  items: Ref<{
12
14
  record: import("vue").UnwrapRef<TRecord>;
@@ -1,3 +1,4 @@
1
+ import type { RouteQueryValue } from '../web-contracts/index';
1
2
  import type { ModuleContext, StaticModuleTreeClient } from '../web-core/index';
2
3
  export interface ScopedTreeModuleContextOptions {
3
4
  scopeFieldName: string;
@@ -6,5 +7,15 @@ export interface ScopedTreeModuleContextOptions {
6
7
  sortPath?: string;
7
8
  treeQueryParam?: string;
8
9
  }
10
+ /**
11
+ * Gives a tree client declared page-context criteria. An empty context is deliberately fail-closed:
12
+ * a dependent picker must not expose records from an unselected business scope.
13
+ */
14
+ export interface QueryScopedTreeModuleContextOptions {
15
+ queryValues: Record<string, RouteQueryValue> | undefined | (() => Record<string, RouteQueryValue> | undefined);
16
+ treePath: string;
17
+ sortPath?: string;
18
+ }
19
+ export declare function createQueryScopedTreeModuleContext<TRecord>(context: ModuleContext<TRecord>, options: QueryScopedTreeModuleContextOptions): ModuleContext<TRecord>;
9
20
  export declare function createScopedTreeModuleContext<TRecord>(context: ModuleContext<TRecord>, options: ScopedTreeModuleContextOptions): ModuleContext<TRecord>;
10
21
  export declare function createScopedTreeClient<TRecord>(context: ModuleContext<TRecord>, options: ScopedTreeModuleContextOptions): StaticModuleTreeClient<TRecord>;
@@ -2,6 +2,7 @@ export { default as Workbench } from './Workbench.vue';
2
2
  export { default as WorkbenchMenu } from './WorkbenchMenu.vue';
3
3
  export { default as WorkbenchOutlet } from './WorkbenchOutlet.vue';
4
4
  export { default as WorkspaceViewOutlet } from './WorkspaceViewOutlet.vue';
5
+ export { syncModulePageWorkspaceViewContributions } from './modulePageWorkspaceViews';
5
6
  export { provideWorkbenchNavigation, useWorkbenchNavigation } from './workbenchNavigation';
6
7
  export type { WorkbenchNavigation, WorkbenchPageOpenResult } from './workbenchNavigation';
7
8
  export { configureWorkspaceViewContributions, createWorkspaceViewDescriptor, createWorkspaceViewRegistry, dismissWorkspaceViewDescriptor, resolveWorkspaceView, } from './workspaceViews';
@@ -5,6 +5,8 @@ export interface PageDescriptorResolveOptions {
5
5
  businessRoutePrefixes?: string[];
6
6
  /** Optional legacy mapping for framework-owned static business pages. */
7
7
  businessModuleRoutes?: Record<string, string>;
8
+ /** Stable readable routes whose content is rendered by the standard dynamic module host. */
9
+ dynamicModuleRoutes?: Record<string, string>;
8
10
  /** Page layout contracts keyed by a static business route. */
9
11
  businessRouteLayouts?: Record<string, PageLayoutMode>;
10
12
  businessRouteNames?: string[];
@@ -15,6 +17,7 @@ export interface PageDescriptorUrlParseOptions {
15
17
  platformRoutePrefixes?: string[];
16
18
  businessRoutePrefixes?: string[];
17
19
  businessRouteLayouts?: Record<string, PageLayoutMode>;
20
+ dynamicModuleRoutes?: Record<string, string>;
18
21
  }
19
22
  export declare function getMenuNavigationTarget(menu: MenuRecord): MenuNavigationTarget | undefined;
20
23
  export declare function isTabMenuTarget(target: MenuNavigationTarget): boolean;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Publishes application-contributed module workspace views before URL or
3
+ * preference restoration resolves a workbench tab. The module enhancement
4
+ * registry is the source of truth; this only adapts it to the Workbench view
5
+ * registry.
6
+ */
7
+ export declare function syncModulePageWorkspaceViewContributions(): void;
@@ -1,4 +1,40 @@
1
1
  export declare function compactMenuTopOf(topbarBottom: number, workbenchTop: number): number;
2
2
  export declare function floatingPanelTopOf(anchorViewportTop: number, panelHeight: number, viewportHeight: number, shellViewportTop: number, margin?: number): number;
3
+ interface FloatingMenuPanelRect {
4
+ left: number;
5
+ top: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ interface FloatingMenuPanelAnchor {
10
+ left: number;
11
+ top: number;
12
+ height: number;
13
+ }
14
+ interface CompactMenuPanelBounds {
15
+ left: number;
16
+ top: number;
17
+ right: number;
18
+ bottom: number;
19
+ }
20
+ interface CompactMenuAnchorBounds {
21
+ left: number;
22
+ top: number;
23
+ right: number;
24
+ }
25
+ interface CompactMenuFlyoutBounds {
26
+ left: number;
27
+ top: number;
28
+ right: number;
29
+ bottom: number;
30
+ }
31
+ /**
32
+ * Builds one continuous outline for a side-menu trigger and its adjoining flyout.
33
+ * The flyout must begin at the trigger's right edge and never below its top edge.
34
+ */
35
+ export declare function floatingMenuPanelOutlinePath(panel: FloatingMenuPanelRect, anchor: FloatingMenuPanelAnchor, anchorRadius?: number, panelRadius?: number): string;
36
+ /** Builds the shared outline of the compact-menu trigger and its dropdown panel. */
37
+ export declare function compactMenuPanelOutlinePath(panel: CompactMenuPanelBounds, anchor: CompactMenuAnchorBounds, anchorRadius?: number, panelRadius?: number, flyout?: CompactMenuFlyoutBounds): string;
3
38
  export type WorkbenchMenuPresentation = 'compact' | 'expanded';
4
39
  export declare function effectiveWorkbenchMenuPresentation(preferredPresentation: WorkbenchMenuPresentation, narrowViewport: boolean): WorkbenchMenuPresentation;
40
+ export {};
@@ -4,6 +4,8 @@ export interface WorkbenchNavigation {
4
4
  openPage(descriptor: PageDescriptor): WorkbenchPageOpenResult;
5
5
  /** Replaces one existing host by its stable tab key without changing that tab's identity. */
6
6
  replacePage(pageKey: string, descriptor: PageDescriptor): void;
7
+ /** Closes one workbench page through the owning shell's tab-state policy. */
8
+ closePage(pageKey: string): void;
7
9
  }
8
10
  export interface WorkbenchPageOpenResult {
9
11
  created: boolean;
@@ -3,6 +3,8 @@ export interface WorkspaceViewHost {
3
3
  presentation: WorkspaceViewPresentation;
4
4
  setTitle(title: string): void;
5
5
  dismiss(): void;
6
+ /** Closes the current independent workbench view. */
7
+ close(): void;
6
8
  }
7
9
  export declare function provideWorkspaceViewHost(host: WorkspaceViewHost): void;
8
10
  export declare function useWorkspaceViewHost(): WorkspaceViewHost | undefined;
@@ -23,10 +23,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
23
23
  type: "default" | "primary" | "dashed" | "link" | "text";
24
24
  title: string;
25
25
  danger: boolean;
26
+ size: "small" | "middle" | "large";
26
27
  htmlType: "button" | "submit" | "reset";
27
28
  disabled: boolean;
28
29
  loading: boolean;
29
- size: "small" | "middle" | "large";
30
30
  ariaLabel: string;
31
31
  iconName: UiIconName;
32
32
  iconPosition: "start" | "end";
@@ -45,8 +45,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
45
45
  onRowDblclick?: ((record: UiDataTableRecord, event: MouseEvent) => any) | undefined;
46
46
  onRowExpand?: ((record: UiDataTableRecord, expanded: boolean) => any) | undefined;
47
47
  }>, {
48
- loading: boolean;
49
48
  size: "small" | "middle" | "large";
49
+ loading: boolean;
50
50
  pagination: false | UiDataTablePagination;
51
51
  rowKey: string | ((record: UiDataTableRecord) => string);
52
52
  selection: UiDataTableSelection;
@@ -1,4 +1,4 @@
1
- export type UiIconName = 'app' | 'check' | 'close' | 'delete' | 'down' | 'edit' | 'export' | 'filter' | 'help' | 'left' | 'lock' | 'menu-collapse' | 'menu-expand' | 'notification' | 'plus' | 'pin' | 'power' | 'reload' | 'right' | 'save' | 'search' | 'skin' | 'settings';
1
+ export type UiIconName = 'app' | 'check' | 'close' | 'delete' | 'down' | 'edit' | 'export' | 'filter' | 'help' | 'left' | 'lock' | 'menu-collapse' | 'menu-expand' | 'notification' | 'open-in-new' | 'plus' | 'pin-off' | 'pin' | 'power' | 'reload' | 'right' | 'save' | 'search' | 'skin' | 'settings';
2
2
  type __VLS_Props = {
3
3
  name: UiIconName;
4
4
  };
@@ -19,8 +19,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
19
19
  onCancel?: (() => any) | undefined;
20
20
  onConfirm?: (() => any) | undefined;
21
21
  }>, {
22
- closable: boolean;
23
22
  width: number | string;
23
+ closable: boolean;
24
24
  confirmText: string;
25
25
  cancelText: string;
26
26
  confirmLoading: boolean;
@@ -17,12 +17,12 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
17
17
  onSearch?: ((keyword: string) => any) | undefined;
18
18
  "onUpdate:value"?: ((value: OptionValue | OptionValueList | null) => any) | undefined;
19
19
  }>, {
20
+ mode: "multiple";
20
21
  disabled: boolean;
21
22
  loading: boolean;
22
23
  value: OptionValue | OptionValueList | null;
23
24
  placeholder: string;
24
25
  allowClear: boolean;
25
- mode: "multiple";
26
26
  showSearch: boolean;
27
27
  filterOption: boolean;
28
28
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -12,19 +12,25 @@ type __VLS_Props = {
12
12
  placeholder?: string;
13
13
  disabled?: boolean;
14
14
  allowClear?: boolean;
15
+ showSearch?: boolean;
16
+ filterTreeNode?: boolean;
15
17
  loading?: boolean;
16
18
  };
17
19
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
+ search: (keyword: string) => any;
18
21
  "update:value": (value: OptionValue | OptionValueList | null) => any;
19
22
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
23
+ onSearch?: ((keyword: string) => any) | undefined;
20
24
  "onUpdate:value"?: ((value: OptionValue | OptionValueList | null) => any) | undefined;
21
25
  }>, {
26
+ mode: "multiple";
22
27
  disabled: boolean;
23
28
  loading: boolean;
24
29
  value: OptionValue | OptionValueList | null;
25
30
  placeholder: string;
26
31
  allowClear: boolean;
27
- mode: "multiple";
32
+ showSearch: boolean;
33
+ filterTreeNode: boolean;
28
34
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
35
  declare const _default: typeof __VLS_export;
30
36
  export default _default;
@@ -11,6 +11,7 @@ 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
13
  export { default as UiTreeSelect } from './components/UiTreeSelect.vue';
14
+ export type { UiTreeSelectNode } from './components/UiTreeSelect.vue';
14
15
  export { default as UiTooltip } from './components/UiTooltip.vue';
15
16
  export { default as UiThemeProvider } from './components/UiThemeProvider.vue';
16
17
  export { default as UiSwitch } from './components/UiSwitch.vue';
@@ -69,6 +69,37 @@ export interface WebUserNotification {
69
69
  logoutRequired?: boolean;
70
70
  targetSessionId?: string;
71
71
  }
72
+ /** Ephemeral business reminder. It is not a persisted inbox or an acknowledgement record. */
73
+ export interface WebBusinessNotification {
74
+ id: string;
75
+ code: string;
76
+ title: string;
77
+ subtitle?: string;
78
+ content: string;
79
+ dismissible: boolean;
80
+ actions: WebBusinessNotificationAction[];
81
+ }
82
+ export type WebBusinessNotificationAction = WebBusinessNotificationNavigateAction | WebBusinessNotificationCommandAction;
83
+ export interface WebBusinessNotificationNavigateAction {
84
+ kind: 'navigate';
85
+ key: string;
86
+ label: string;
87
+ moduleAlias: string;
88
+ recordId?: string;
89
+ pageMode?: 'LIST' | 'FORM' | 'DETAIL';
90
+ query?: Record<string, string>;
91
+ dismissOnSuccess: boolean;
92
+ }
93
+ export interface WebBusinessNotificationCommandAction {
94
+ kind: 'command';
95
+ key: string;
96
+ label: string;
97
+ command: string;
98
+ arguments?: Record<string, unknown>;
99
+ danger?: boolean;
100
+ confirmation?: string;
101
+ dismissOnSuccess: boolean;
102
+ }
72
103
  export interface WebBusinessRealtimeEvent {
73
104
  type: string;
74
105
  moduleAlias: string;
@@ -92,6 +123,8 @@ export interface RecordInlineAction {
92
123
  iconName?: RecordInlineActionIconName;
93
124
  showLabel?: boolean;
94
125
  disabled?: boolean;
126
+ /** Explains why a visible inline action is unavailable. */
127
+ disabledReason?: string;
95
128
  danger?: boolean;
96
129
  }
97
130
  export type RecordInlineActionIconName = 'app' | 'check' | 'close' | 'delete' | 'down' | 'edit' | 'export' | 'filter' | 'help' | 'lock' | 'notification' | 'plus' | 'power' | 'reload' | 'save' | 'search' | 'settings';
@@ -497,9 +530,73 @@ export interface ResolvedViewDescriptor {
497
530
  fields: ResolvedViewFieldDescriptor[];
498
531
  /** Dynamic-page provenance used to select the view configured by a menu entry. */
499
532
  sourceUiConfigId?: string;
500
- scopedListWorkspace?: ResolvedScopedListWorkspaceDescriptor;
501
533
  formGroups?: FormGroupDescriptor[];
502
534
  }
535
+ export type ModulePageTemplate = 'FLAT_MANAGEMENT' | 'LIST_DETAIL_CARD' | 'TREE_MANAGEMENT';
536
+ export interface ResolvedPageExplorerDescriptor {
537
+ title: string;
538
+ searchPlaceholder: string;
539
+ emptyDescription: string;
540
+ recordLabel: string;
541
+ fallbackTitle: string;
542
+ titleField: string;
543
+ secondaryField?: string;
544
+ mutedWhenDisabled: boolean;
545
+ }
546
+ export interface ResolvedPageNavigatorDescriptor {
547
+ levels: ResolvedPageNavigatorLevelDescriptor[];
548
+ contextBindings: ResolvedPageContextBindingDescriptor[];
549
+ }
550
+ export interface ResolvedPageNavigatorLevelDescriptor {
551
+ key: string;
552
+ kind: 'TREE' | 'MICRO_LIST';
553
+ sourceModuleAlias: string;
554
+ title: string;
555
+ searchPlaceholder: string;
556
+ /** Presentation policy applied after the source has authoritatively loaded. */
557
+ singleResultPolicy?: 'NONE' | 'AUTO_SELECT' | 'AUTO_SELECT_AND_HIDE';
558
+ /** Session-derived source scope, enforced by the source reference transport. */
559
+ sourceScope?: 'NONE' | 'CURRENT_TENANT';
560
+ /** When present, the navigator source exposes its own standard CRUD affordances in place. */
561
+ management?: ResolvedPageNavigatorManagementDescriptor;
562
+ }
563
+ export interface ResolvedPageContextBindingDescriptor {
564
+ source: 'SESSION' | 'NAVIGATOR';
565
+ sourceKey: string;
566
+ target: 'LIST_QUERY' | 'NAVIGATOR_QUERY' | 'FORM_DEFAULT' | 'PICKER_QUERY' | 'MUTATION_CONSTRAINT';
567
+ targetKey: string;
568
+ targetNavigatorLevelKey?: string;
569
+ /** Field name of the record picker which receives this query context. */
570
+ targetPickerFieldKey?: string;
571
+ }
572
+ export interface ResolvedPageNavigatorManagementDescriptor {
573
+ /** Optional named source-module form; the default editor is used when omitted. */
574
+ editorSurface?: string;
575
+ }
576
+ export interface ResolvedPageListDescriptor {
577
+ searchPlaceholder: string;
578
+ fields: ResolvedViewDescriptor;
579
+ }
580
+ export interface ResolvedPageDetailDescriptor {
581
+ emptyDescription: string;
582
+ createTitle: string;
583
+ display?: ResolvedViewDescriptor;
584
+ /** Omitted by an editorless page; standard mutation actions remain governed by the runtime action contract. */
585
+ editor?: ResolvedViewDescriptor;
586
+ /** Stable client registration key for an independently restorable detail workbench view. */
587
+ workspaceView?: ResolvedPageDetailWorkspaceViewDescriptor;
588
+ }
589
+ export interface ResolvedPageDetailWorkspaceViewDescriptor {
590
+ type: string;
591
+ }
592
+ export interface ResolvedModulePageDescriptor {
593
+ template: ModulePageTemplate;
594
+ explorer?: ResolvedPageExplorerDescriptor;
595
+ navigator?: ResolvedPageNavigatorDescriptor;
596
+ list?: ResolvedPageListDescriptor;
597
+ detail: ResolvedPageDetailDescriptor;
598
+ traits: ('STANDARD_CRUD' | 'ENABLED_STATUS' | 'RECYCLE_BIN' | 'RESPONSIVE_DETAIL_SURFACE')[];
599
+ }
503
600
  export interface ResolvedUiActionConfirmationDescriptor {
504
601
  mode: 'typedText';
505
602
  requiredField: string;
@@ -508,17 +605,6 @@ export interface ResolvedUiActionDescriptor {
508
605
  actionCode: string;
509
606
  confirmation?: ResolvedUiActionConfirmationDescriptor;
510
607
  }
511
- export interface ResolvedScopedListWorkspaceDescriptor {
512
- scopeModuleAlias: string;
513
- scopeField: string;
514
- queryCriteriaKey: string;
515
- scopeTitle: string;
516
- scopeSearchPlaceholder: string;
517
- /** Scope list items only show a secondary label when the descriptor explicitly enables it. */
518
- showScopeItemSubtitle: boolean;
519
- createPolicy: 'REQUIRE_SCOPE' | 'ALLOW_UNSCOPED';
520
- manageScopeTree?: boolean;
521
- }
522
608
  /** Source-neutral runtime fact for one persisted MuYunFileServer field. */
523
609
  export interface ResolvedFileReferenceFieldDescriptor {
524
610
  fieldRef: ViewFieldRef;
@@ -529,19 +615,26 @@ export interface ResolvedFileReferenceFieldDescriptor {
529
615
  uploadAvailable: boolean;
530
616
  readAvailable: boolean;
531
617
  }
532
- export interface ModuleUiDefinition {
533
- moduleAlias: string;
534
- views: ViewDefinition[];
535
- }
536
618
  export interface ResolvedModuleUiDescriptor {
537
619
  schemaVersion: string;
538
620
  moduleAlias: string;
539
621
  moduleKind?: 'STATIC' | 'DYNAMIC';
540
622
  title?: string;
541
- views: ResolvedViewDescriptor[];
542
623
  actions?: ResolvedUiActionDescriptor[];
543
624
  recordLabelField?: string;
544
625
  fileReferences?: ResolvedFileReferenceFieldDescriptor[];
626
+ page?: ResolvedModulePageDescriptor;
627
+ defaultEditor?: ResolvedViewDescriptor;
628
+ editorSurfaces?: ResolvedEditorSurfaceDescriptor[];
629
+ editorContributions?: ResolvedPageDetailEditorContribution[];
630
+ }
631
+ export interface ResolvedEditorSurfaceDescriptor {
632
+ key: string;
633
+ editor: ResolvedViewDescriptor;
634
+ }
635
+ export interface ResolvedPageDetailEditorContribution {
636
+ resource: string;
637
+ editor: ResolvedViewDescriptor;
545
638
  }
546
639
  export interface StandardEntity {
547
640
  id?: string;
@@ -0,0 +1,3 @@
1
+ import type { WebBusinessNotificationCommandAction } from '../web-contracts/index';
2
+ import type { HttpClient } from './http';
3
+ export declare function invokeBusinessNotificationCommand(http: HttpClient, notificationId: string, action: WebBusinessNotificationCommandAction): Promise<unknown>;
@@ -2,6 +2,7 @@ export * from './errors';
2
2
  export * from './http';
3
3
  export * from './query';
4
4
  export * from './actionResult';
5
+ export * from './businessNotifications';
5
6
  export * from './dataChanges';
6
7
  export * from './realtime';
7
8
  export * from './clients';
@@ -23,6 +23,7 @@ export interface ModuleContextConfig {
23
23
  }
24
24
  export interface ModuleContextOptions extends ModuleContextConfig {
25
25
  moduleAlias: string;
26
+ runtimeAccess?: 'MENU' | 'REFERENCE';
26
27
  }
27
28
  export declare function configureModuleContext(config: ModuleContextConfig): void;
28
29
  export declare function provideModuleContextConfig(config: ModuleContextConfig): void;
@@ -47,6 +47,8 @@ export interface ModuleRuntimeContext {
47
47
  capabilities: string[];
48
48
  abilities?: string[];
49
49
  actions: ModuleRuntimeAction[];
50
+ /** Read-only projections this module deliberately exposes for page navigation. */
51
+ navigatorSourceCapabilities?: Array<'REFERENCE_QUERY' | 'REFERENCE_TREE'>;
50
52
  uiDescriptor?: ResolvedModuleUiDescriptor;
51
53
  }
52
54
  export interface ModuleRuntimeContextState {
@@ -61,5 +63,5 @@ export interface ModuleRuntimeContextState {
61
63
  recordActions(recordId: string): Promise<ModuleRecordActionAvailability>;
62
64
  recordActionsSnapshot(recordId: string): ModuleRecordActionAvailability | undefined;
63
65
  }
64
- export declare function createModuleRuntimeContextState(http: HttpClient, moduleAlias: string): ModuleRuntimeContextState;
66
+ export declare function createModuleRuntimeContextState(http: HttpClient, moduleAlias: string, access?: 'MENU' | 'REFERENCE'): ModuleRuntimeContextState;
65
67
  export declare function isRuntimeAbilityAvailable(context: ModuleRuntimeContext | undefined, ability: ModuleAbilityCode): boolean;
@@ -22,7 +22,7 @@ export interface StaticModuleCrudClient<TRecord> {
22
22
  disable(id: string, request: RecordActionRequest): Promise<StaticCountMutationResult>;
23
23
  }
24
24
  export interface StaticModuleTreeClient<TRecord> extends StaticModuleCrudClient<TRecord> {
25
- tree(): Promise<WebListResponse<WebTreeNode<TRecord>>>;
25
+ tree(request?: WebQueryRequest): Promise<WebListResponse<WebTreeNode<TRecord>>>;
26
26
  treeFlat(options?: {
27
27
  rootId?: string;
28
28
  includeSelf?: boolean;
@@ -39,8 +39,15 @@ export interface ModuleEnableClient {
39
39
  export declare function createStaticModuleCrudClient<TRecord>(http: HttpClient, options: {
40
40
  moduleAlias: string;
41
41
  }): StaticModuleCrudClient<TRecord>;
42
+ /** The navigation-only read surface deliberately does not reuse the module query endpoint. */
43
+ export declare function createNavigatorReferenceCrudClient<TRecord>(http: HttpClient, options: {
44
+ moduleAlias: string;
45
+ }): StaticModuleCrudClient<TRecord>;
42
46
  export declare function createStaticResourceCrudClient<TRecord>(http: HttpClient, resourcePath: string): StaticModuleCrudClient<TRecord>;
43
47
  export declare function createStaticModuleTreeClient<TRecord>(http: HttpClient, options: {
44
48
  moduleAlias: string;
45
49
  }): StaticModuleTreeClient<TRecord>;
50
+ export declare function createNavigatorReferenceTreeClient<TRecord>(http: HttpClient, options: {
51
+ moduleAlias: string;
52
+ }): StaticModuleTreeClient<TRecord>;
46
53
  export declare function createStaticResourceTreeClient<TRecord>(http: HttpClient, resourcePath: string): StaticModuleTreeClient<TRecord>;
@@ -1,5 +1,5 @@
1
1
  import { type IMessage } from '@stomp/stompjs';
2
- import type { WebBusinessRealtimeEvent, WebCommittedChangeSet, WebRealtimeEnvelope, WebUserNotification } from '../web-contracts/index';
2
+ import type { WebBusinessRealtimeEvent, WebBusinessNotification, WebCommittedChangeSet, WebRealtimeEnvelope, WebUserNotification } from '../web-contracts/index';
3
3
  import type { DataChangeDispatcher } from './dataChanges';
4
4
  export type RealtimeConnectionState = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'disconnected' | 'unauthorized' | 'failed';
5
5
  export interface RealtimeChannel<TPayload> {
@@ -66,11 +66,13 @@ export interface StompErrorFrame {
66
66
  export declare const realtimeMessageTypes: {
67
67
  readonly dataChange: "platform.data-change";
68
68
  readonly securityNotification: "platform.security-notification";
69
+ readonly businessNotification: "platform.business-notification";
69
70
  readonly businessEvent: "platform.business-event";
70
71
  };
71
72
  export declare const realtimeDestinations: {
72
73
  readonly userDataChanges: "/user/queue/platform/data-changes";
73
74
  readonly userNotifications: "/user/queue/platform/notifications";
75
+ readonly userBusinessNotifications: "/user/queue/platform/business-notifications";
74
76
  readonly userBusinessEvents: "/user/queue/platform/business-events";
75
77
  readonly userImMessages: "/user/queue/platform/im/messages";
76
78
  readonly platformPing: "/app/platform/ping";
@@ -79,6 +81,7 @@ export declare const realtimeDestinations: {
79
81
  };
80
82
  export declare const dataChangeChannel: RealtimeChannel<WebCommittedChangeSet>;
81
83
  export declare const userNotificationChannel: RealtimeChannel<WebUserNotification>;
84
+ export declare const userBusinessNotificationChannel: RealtimeChannel<WebBusinessNotification>;
82
85
  export declare const userBusinessEventChannel: RealtimeChannel<WebBusinessRealtimeEvent>;
83
86
  export declare const userImMessageChannel: RealtimeChannel<unknown>;
84
87
  export declare const platformPingCommand: RealtimeCommand<{
@@ -101,4 +104,5 @@ export declare function imConversationMessageChannel(conversationId: string): Re
101
104
  export declare function createRealtimeClient(options?: RealtimeClientOptions): RealtimeClient;
102
105
  export declare function connectRealtimeDataChanges(realtime: RealtimeClient, dispatcher: DataChangeDispatcher): RealtimeSubscription;
103
106
  export declare function connectRealtimeUserNotifications(realtime: RealtimeClient, handler: RealtimeHandler<WebUserNotification>): RealtimeSubscription;
107
+ export declare function connectRealtimeBusinessNotifications(realtime: RealtimeClient, handler: RealtimeHandler<WebBusinessNotification>): RealtimeSubscription;
104
108
  export declare function connectRealtimeBusinessEvents(realtime: RealtimeClient, handler: RealtimeHandler<WebBusinessRealtimeEvent>): RealtimeSubscription;