@ximatai/muyun-web-app 0.26.9 → 0.26.11

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 (99) hide show
  1. package/dist/{MetadataOrchestrationView-CzhAgEdX.js → MetadataOrchestrationView-F_Bmfn9K.js} +188 -188
  2. package/dist/{ModuleActionManagementView-CM2d8jPO.js → ModuleActionManagementView-Db_3Twom.js} +70 -70
  3. package/dist/RoleDetailWorkspaceView-UOm1ejGH.js +1369 -0
  4. package/dist/index.css +1 -1
  5. package/dist/index.js +274 -299
  6. package/dist/{platform-components-CIi6GdC9.js → platform-components-59b4qzUL.js} +2738 -2453
  7. package/dist/types/app/StaticRoutePageHost.vue.d.ts +2 -0
  8. package/dist/types/consumer/AppWorkbenchShell.vue.d.ts +4 -2
  9. package/dist/types/consumer/index.d.ts +1 -1
  10. package/dist/types/dynamic-page-runtime/ManagedDetailRelationInlineSurface.vue.d.ts +3 -1
  11. package/dist/types/dynamic-page-runtime/ManagedDetailRelationSurface.vue.d.ts +2 -1
  12. package/dist/types/dynamic-page-runtime/ModulePageDetailRelations.vue.d.ts +3 -1
  13. package/dist/types/dynamic-page-runtime/ModulePageListExpansionSurface.vue.d.ts +2 -1
  14. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansion.vue.d.ts +2 -1
  15. package/dist/types/dynamic-page-runtime/ModulePageListRelationExpansions.vue.d.ts +2 -1
  16. package/dist/types/dynamic-page-runtime/ModulePageRecordContent.vue.d.ts +3 -1
  17. package/dist/types/dynamic-page-runtime/PageNavigatorExplorer.vue.d.ts +7 -2
  18. package/dist/types/dynamic-page-runtime/composables/useModulePageDetailExtensionRuntime.d.ts +5 -1
  19. package/dist/types/dynamic-page-runtime/composables/useModulePageFormContributionRuntime.d.ts +5 -3
  20. package/dist/types/dynamic-page-runtime/composables/useNavigatorRuntime.d.ts +95 -41
  21. package/dist/types/dynamic-page-runtime/composables/useRecordEditingSession.d.ts +3 -2
  22. package/dist/types/dynamic-page-runtime/index.d.ts +2 -2
  23. package/dist/types/dynamic-page-runtime/modulePageEnhancements.d.ts +103 -3
  24. package/dist/types/dynamic-page-runtime/navigatorEntrySelection.d.ts +18 -0
  25. package/dist/types/dynamic-page-runtime/pageContextRuntime.d.ts +8 -0
  26. package/dist/types/dynamic-page-runtime/pageNavigatorItemModel.d.ts +13 -0
  27. package/dist/types/dynamic-page-runtime/recordDetailController.d.ts +9 -8
  28. package/dist/types/formula/FormulaRuntime.d.ts +3 -0
  29. package/dist/types/platform-admin-runtime/platformModulePageEnhancement.d.ts +6 -0
  30. package/dist/types/{views/SystemUserManagementView.vue.d.ts → platform-admin-runtime/role/RoleAccountGrantDrawerSurface.vue.d.ts} +2 -2
  31. package/dist/types/{views/UserDetailRouteView.vue.d.ts → platform-admin-runtime/role/RoleAuthorizationDrawerSurface.vue.d.ts} +2 -3
  32. package/dist/types/{views/SystemUserDetailWorkspaceView.vue.d.ts → platform-admin-runtime/role/RoleEmploymentGrantDrawerSurface.vue.d.ts} +2 -2
  33. package/dist/types/platform-admin-runtime/role/RoleEnumTitleCell.vue.d.ts +8 -0
  34. package/dist/types/{dynamic-page-runtime/DynamicModuleHost.vue.d.ts → platform-admin-runtime/role/RoleGroupMemberFormField.vue.d.ts} +2 -2
  35. package/dist/types/platform-admin-runtime/role/RoleScopeTree.vue.d.ts +7 -0
  36. package/dist/types/platform-admin-runtime/roleModulePageEnhancement.d.ts +7 -0
  37. package/dist/types/platform-components/CrudRecordListExplorer.vue.d.ts +5 -1
  38. package/dist/types/platform-components/DrawerOperationBar.vue.d.ts +4 -2
  39. package/dist/types/platform-components/ManagementPanelHeader.vue.d.ts +2 -0
  40. package/dist/types/platform-components/RecordDetailDrawer.vue.d.ts +6 -3
  41. package/dist/types/platform-components/RecordDetailLayout.vue.d.ts +4 -2
  42. package/dist/types/platform-components/RecordExplorerPanel.vue.d.ts +2 -0
  43. package/dist/types/platform-components/RecordFormFields.vue.d.ts +2 -2
  44. package/dist/types/platform-components/RecordModeDrawer.vue.d.ts +2 -0
  45. package/dist/types/platform-components/RecordMultiPicker.vue.d.ts +1 -1
  46. package/dist/types/platform-components/RecordPanelButton.vue.d.ts +2 -0
  47. package/dist/types/platform-components/RecordPicker.vue.d.ts +3 -1
  48. package/dist/types/platform-components/RecordQueryListPanel.vue.d.ts +13 -4
  49. package/dist/types/platform-components/RecordStatusSwitch.vue.d.ts +2 -0
  50. package/dist/types/platform-components/TreeRecordExplorer.vue.d.ts +5 -1
  51. package/dist/types/platform-components/index.d.ts +1 -3
  52. package/dist/types/platform-components/recordFormFieldModel.d.ts +16 -2
  53. package/dist/types/platform-components/recordPickerConstraints.d.ts +2 -0
  54. package/dist/types/platform-components/scopedTreeModuleContext.d.ts +2 -2
  55. package/dist/types/platform-components/staticTreeResourceModuleContext.d.ts +3 -3
  56. package/dist/types/platform-workbench/Workbench.vue.d.ts +4 -2
  57. package/dist/types/views/EmployeeEmploymentTable.vue.d.ts +5 -0
  58. package/dist/types/views/RoleAccountGrantDrawer.vue.d.ts +6 -2
  59. package/dist/types/views/RoleAuthorizationView.vue.d.ts +7 -0
  60. package/dist/types/views/RoleEmploymentGrantDrawer.vue.d.ts +5 -1
  61. package/dist/types/views/roleGrantClient.d.ts +8 -5
  62. package/dist/types/vue-ui-antdv/components/UiSidePanel.vue.d.ts +4 -2
  63. package/dist/types/vue-ui-antdv/components/UiSwitch.vue.d.ts +2 -0
  64. package/dist/types/vue-ui-antdv/components/UiTable.vue.d.ts +1 -0
  65. package/dist/types/vue-ui-antdv/components/UiTree.vue.d.ts +20 -1
  66. package/dist/types/vue-ui-antdv/types.d.ts +6 -0
  67. package/dist/types/web-contracts/index.d.ts +81 -4
  68. package/dist/types/web-core/http.d.ts +6 -0
  69. package/dist/types/web-core/module/index.d.ts +1 -1
  70. package/dist/types/web-core/module/moduleContext.d.ts +2 -1
  71. package/dist/types/web-core/module/staticModuleClient.d.ts +10 -4
  72. package/dist/types/web-core/realtime.d.ts +8 -0
  73. package/dist/workspaceViews-BvV8mpML.js +11149 -0
  74. package/package.json +1 -1
  75. package/dist/DictionaryManagementView-CtIQpqVA.js +0 -1035
  76. package/dist/MenuManagementView-DJhkN2sG.js +0 -837
  77. package/dist/RoleAuthorizationView-jn_WUCeg.js +0 -599
  78. package/dist/RoleDetailWorkspaceView-CzaQ3Dz1.js +0 -26
  79. package/dist/RoleManagementView-nY7qu4GF.js +0 -1951
  80. package/dist/SystemUserDetailWorkspaceView-CBvqmWvP.js +0 -17
  81. package/dist/SystemUserManagementView-AEomKvK7.js +0 -887
  82. package/dist/currentUserContext-B1lj1WgF.js +0 -11
  83. package/dist/types/dynamic-page-runtime/DynamicRecordDetailActions.vue.d.ts +0 -39
  84. package/dist/types/dynamic-page-runtime/dynamicModuleDetailStateModel.d.ts +0 -5
  85. package/dist/types/platform-components/scopedResourceTreeModuleContext.d.ts +0 -6
  86. package/dist/types/views/DictionaryManagementView.vue.d.ts +0 -3
  87. package/dist/types/views/MenuManagementView.vue.d.ts +0 -3
  88. package/dist/types/views/UserDetailContent.vue.d.ts +0 -32
  89. package/dist/types/views/UserManagementListView.vue.d.ts +0 -3
  90. package/dist/types/views/UserManagementView.vue.d.ts +0 -3
  91. package/dist/types/views/dictionaryManagementState.d.ts +0 -215
  92. package/dist/types/views/menuManagementState.d.ts +0 -180
  93. package/dist/types/views/systemUserDetailWorkspaceSession.d.ts +0 -12
  94. package/dist/types/views/systemUserDetailWorkspaceView.d.ts +0 -5
  95. package/dist/types/views/useUserSessionRows.d.ts +0 -28
  96. package/dist/types/views/userDetailStateModel.d.ts +0 -9
  97. package/dist/types/views/userManagementRouteState.d.ts +0 -11
  98. package/dist/workspaceViewSessions-B5g4M0rT.js +0 -51
  99. package/dist/workspaceViews-CkERhK0K.js +0 -8748
@@ -1,5 +1,5 @@
1
1
  import type { Component } from 'vue';
2
- import type { PageDescriptor, PageLayoutMode, RouteQueryValue } from '../web-contracts/index';
2
+ import type { CurrentUser, PageDescriptor, PageLayoutMode, RouteQueryValue, WebPageResponse, WebQueryCondition, WebQueryRequest } from '../web-contracts/index';
3
3
  import type { ModuleContext } from '../web-core/index';
4
4
  import type { RecordActionItem, RecordFormFieldState, RecordFormFieldValue, RecordQueryListColumn, QueryListRecord } from '../platform-components/index';
5
5
  import type { DrawerTitleAction } from '../platform-components/index';
@@ -20,6 +20,13 @@ export interface ModulePageEnhancement {
20
20
  */
21
21
  activate?(context: ModulePageEnhancementActivationContext): void | (() => void);
22
22
  list?: ModuleListEnhancement;
23
+ /**
24
+ * Business record actions shown by default in both the list-row "more"
25
+ * menu and the standard detail drawer operation area. Use the surface-local
26
+ * `list.rowActions` or `detail.actions` only when an action is intentionally
27
+ * limited to one presentation.
28
+ */
29
+ recordActions?: ModulePageRecordActionContribution[];
23
30
  detail?: ModuleDetailEnhancement;
24
31
  /**
25
32
  * Frontend-owned editor content mounted at a typed standard-form boundary.
@@ -36,12 +43,94 @@ export interface ModulePageEnhancement {
36
43
  * retains that flow's action checks, shell and lifecycle.
37
44
  */
38
45
  recordView?: ModulePageRecordView;
46
+ /** Restricts standard runner actions for one business-owned entry without replacing the runner. */
47
+ standardActions?: ModulePageStandardActionsEnhancement;
48
+ /** Entry-owned adjustments to descriptor-provided navigator presentation and list readiness. */
49
+ navigator?: ModulePageNavigatorEnhancement;
39
50
  workspaceViews?: ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
40
51
  }
52
+ export interface ModulePageStandardActionsEnhancement {
53
+ disabled?: readonly string[];
54
+ }
55
+ export interface ModulePageNavigatorEnhancement {
56
+ /** Hides descriptor navigators when this entry is not navigated by their business scope. */
57
+ hidden?: boolean;
58
+ /**
59
+ * One application-owned navigator surface mounted beside descriptor navigators.
60
+ *
61
+ * This is intentionally a single region: the page runner retains layout,
62
+ * record querying and mutation ownership. An extension may render an
63
+ * authorized business range selector, but it cannot replace the standard
64
+ * list or declare executable page context.
65
+ */
66
+ extension?: ModulePageNavigatorExtension;
67
+ /** Declares one navigator as an entry-owned, immutable page context. */
68
+ lockedEntry?: ModulePageLockedNavigatorEntry;
69
+ /** Allows the standard list to load without navigator-derived list criteria. */
70
+ bypassListScope?: boolean;
71
+ /**
72
+ * Optional business-owned fallback when no navigator item is selected. The platform still owns
73
+ * navigator rendering and request lifecycle; this hook contributes only typed list conditions.
74
+ */
75
+ emptyListScope?(context: ModulePageEmptyNavigatorScopeContext): readonly WebQueryCondition[] | undefined;
76
+ }
77
+ export interface ModulePageNavigatorExtension {
78
+ key: string;
79
+ /** Frontend-owned component; backend descriptors never select a component. */
80
+ component: Component;
81
+ /**
82
+ * Optional opaque selection channel owned by the standard page host.
83
+ *
84
+ * A navigator extension may select only a declared `key`; the host serializes
85
+ * the `{ kind, key }` pair into its controlled request header. Extensions
86
+ * never receive a mutable query map or mutation payload.
87
+ */
88
+ selection?: ModulePageNavigatorSelection;
89
+ }
90
+ export interface ModulePageNavigatorSelection {
91
+ /** Server-registered resolver kind, not a business field name. */
92
+ kind: string;
93
+ /** Resolves the first trusted selection before the standard page starts its requests. */
94
+ initialKey?(currentUser?: CurrentUser): string | undefined;
95
+ /** Presentation-only copy for the initial trusted selection. It is never sent to the server. */
96
+ initialPresentation?(currentUser?: CurrentUser): ModulePageSelectionPresentation | undefined;
97
+ }
98
+ /** The only display facts a navigator extension may contribute to PAGE_TEXT. */
99
+ export interface ModulePageSelectionPresentation {
100
+ label: string;
101
+ secondaryLabel?: string;
102
+ }
103
+ /** Deliberately small host context for one navigator extension surface. */
104
+ export interface ModulePageNavigatorExtensionContext {
105
+ moduleAlias: string;
106
+ /** Current opaque selection key, if this extension declared a selection channel. */
107
+ selectionKey?: string;
108
+ /**
109
+ * Replaces the extension's opaque selection key and reloads the standard
110
+ * list. The host owns header serialization and every CRUD request.
111
+ */
112
+ selectSelectionKey(key: string, presentation?: ModulePageSelectionPresentation): void;
113
+ /** Reloads only the standard list while retaining the platform-owned query state. */
114
+ refreshList(): void;
115
+ /** Reloads the page's standard record surfaces. */
116
+ reload(): void;
117
+ }
118
+ export interface ModulePageLockedNavigatorEntry {
119
+ /** Descriptor navigator key whose selection is supplied by the page address. */
120
+ navigatorKey: string;
121
+ /** Text shown if the addressed record cannot be resolved or authorized. */
122
+ unavailableDescription: string;
123
+ }
124
+ export interface ModulePageEmptyNavigatorScopeContext {
125
+ currentUser?: CurrentUser;
126
+ selectedNavigatorRecords: Readonly<Record<string, QueryListRecord | undefined>>;
127
+ }
41
128
  export interface ModulePageEnhancementTarget {
42
129
  moduleAlias: string;
43
130
  /** Omit to apply to every list view of the module. */
44
131
  viewCode?: string;
132
+ /** Omit to apply to every visible menu entry of the module. */
133
+ menuId?: string;
45
134
  }
46
135
  export interface ModulePageEnhancementActivationContext {
47
136
  module: ModuleContext<QueryListRecord>;
@@ -116,6 +205,8 @@ export interface ModulePageFormContributionContext {
116
205
  fields: readonly Readonly<RecordFormFieldState>[];
117
206
  /** The field at a field-boundary location, otherwise undefined. */
118
207
  field?: Readonly<RecordFormFieldState>;
208
+ /** Read-only query through the host-owned module context and page scope. */
209
+ queryRecords(request?: WebQueryRequest): Promise<WebPageResponse<QueryListRecord>>;
119
210
  setField(fieldName: string, value: RecordFormFieldValue): void;
120
211
  formSessionKey: number;
121
212
  /** Reports only this contribution's validation fact to the standard save boundary. */
@@ -246,6 +337,11 @@ export interface ModulePageDrawer {
246
337
  }
247
338
  /** A business-owned action rendered by the platform in a semantic drawer region. */
248
339
  export type ModulePageDrawerAction = DrawerTitleAction;
340
+ /** Facts rendered by the platform-owned fixed operation region of an action drawer. */
341
+ export interface ModulePageDrawerOperation {
342
+ summary?: string;
343
+ actions: ModulePageDrawerAction[];
344
+ }
249
345
  /** Matches the Workbench input boundary; `parse` remains responsible for route-value validation. */
250
346
  export type ModulePageWorkspaceViewInput = object;
251
347
  /** A business-owned view with stable, serializable identity. */
@@ -274,6 +370,10 @@ export interface ModulePageDrawerContext {
274
370
  reload(): void;
275
371
  /** Replaces contextual actions beside the drawer title; actions are cleared with the drawer. */
276
372
  setTitleActions(actions: ModulePageDrawerAction[]): void;
373
+ /** Replaces the fixed operation-region facts; the host owns their position and responsive layout. */
374
+ setOperation(operation?: ModulePageDrawerOperation): void;
375
+ /** Replaces the presentation-only subtitle below the platform-owned drawer title. */
376
+ setSubtitle(subtitle?: string): void;
277
377
  }
278
378
  /**
279
379
  * Context for a custom body inside the platform-owned record-view shell.
@@ -331,7 +431,7 @@ export interface ModulePageDetailSectionContext {
331
431
  reload(): void;
332
432
  }
333
433
  export interface ModulePageEnhancementRegistry {
334
- resolve(moduleAlias: string, viewCode?: string): ModulePageEnhancement | undefined;
434
+ resolve(moduleAlias: string, viewCode?: string, menuId?: string): ModulePageEnhancement | undefined;
335
435
  workspaceViews(): readonly ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
336
436
  }
337
437
  export declare function createModulePageEnhancementRegistry(enhancements: readonly ModulePageEnhancement[]): ModulePageEnhancementRegistry;
@@ -350,7 +450,7 @@ export declare function configureModulePageEnhancementContributions(owner: strin
350
450
  * configureModulePageEnhancementContributions(owner, enhancements).
351
451
  */
352
452
  export declare function configureModulePageEnhancements(enhancements: readonly ModulePageEnhancement[]): void;
353
- export declare function resolveModulePageEnhancement(moduleAlias: string, viewCode?: string): ModulePageEnhancement | undefined;
453
+ export declare function resolveModulePageEnhancement(moduleAlias: string, viewCode?: string, menuId?: string): ModulePageEnhancement | undefined;
354
454
  export declare function modulePageWorkspaceViews(): readonly ModulePageWorkspaceView<ModulePageWorkspaceViewInput>[];
355
455
  /** Creates the only record shape that a card assistant may receive. */
356
456
  export declare function createReadonlyCardRecordSnapshot(record: Record<string, unknown>): Readonly<Record<string, unknown>>;
@@ -0,0 +1,18 @@
1
+ import type { RouteQueryValue } from '../web-contracts/index';
2
+ /**
3
+ * Controlled module-page entries may nominate one navigator source record.
4
+ * These are framework query keys, deliberately separate from a module's
5
+ * business query fields and from the navigator REFERENCE transport.
6
+ */
7
+ export declare const NAVIGATOR_ENTRY_MODULE_ALIAS_QUERY_KEY = "_muyunNavigatorModuleAlias";
8
+ export declare const NAVIGATOR_ENTRY_RECORD_ID_QUERY_KEY = "_muyunNavigatorRecordId";
9
+ export interface NavigatorEntrySelection {
10
+ moduleAlias: string;
11
+ recordId: string;
12
+ identity: string;
13
+ }
14
+ /**
15
+ * Accept only the complete scalar pair. A malformed public address must leave
16
+ * the page in its normal, unselected state rather than guessing a scope.
17
+ */
18
+ export declare function navigatorEntrySelectionOf(params: Record<string, RouteQueryValue> | undefined): NavigatorEntrySelection | undefined;
@@ -2,5 +2,13 @@ import type { ResolvedPageContextBindingDescriptor } from '../web-contracts/inde
2
2
  export type PageContextSourceValues = Partial<Record<ResolvedPageContextBindingDescriptor['source'], Record<string, unknown>>>;
3
3
  /** Returns context fields that must be supplied by the browser for a query target. */
4
4
  export declare function externalPageContextCriteriaKeys(bindings: readonly ResolvedPageContextBindingDescriptor[], target: ResolvedPageContextBindingDescriptor['target'], targetNavigatorLevelKey?: string): string[];
5
+ /** Browser-provided navigator keys that must be selected before a page list may query. */
6
+ export declare function requiredNavigatorListScopeCriteriaKeys(bindings: readonly ResolvedPageContextBindingDescriptor[]): string[];
5
7
  /** Resolves declared context flows without coupling a target to navigator UI state. */
6
8
  export declare function resolvePageContextTargetValues(bindings: readonly ResolvedPageContextBindingDescriptor[], target: ResolvedPageContextBindingDescriptor['target'], sourceValues: PageContextSourceValues, targetNavigatorLevelKey?: string): Record<string, unknown> | undefined;
9
+ /**
10
+ * Query scopes are values, not refresh signals. Preserve the prior object when
11
+ * a render reconstructs the same flat criteria so consumers do not reload just
12
+ * because their parent component rendered for an unrelated state transition.
13
+ */
14
+ export declare function reuseEquivalentQueryValues(previous: Record<string, unknown> | undefined, next: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
@@ -0,0 +1,13 @@
1
+ import type { RecordExplorerItemDescriptor } from '../platform-components/index';
2
+ import type { RecordInlineAction } from '../web-contracts/index';
3
+ export interface NavigatorItemRecord {
4
+ id?: string;
5
+ title?: string;
6
+ name?: string;
7
+ code?: string;
8
+ alias?: string;
9
+ }
10
+ /** Page navigators expose only the actions explicitly declared by the page. */
11
+ export declare function navigatorItemOf(record: NavigatorItemRecord, secondaryField: string | undefined, manageable: boolean, actionsOf: ((record: {
12
+ id?: string;
13
+ }) => RecordInlineAction[]) | undefined): RecordExplorerItemDescriptor;
@@ -1,11 +1,12 @@
1
1
  export type RecordDetailMode = 'create' | 'edit' | 'view';
2
- export interface RecordDetailCreateOptions<TRecord> {
2
+ export type RecordDetailCancelDestination = 'close' | 'restore-view';
3
+ export interface RecordDetailTransitionOptions {
3
4
  /**
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.
5
+ * The detail surface to return to when the user cancels the operation.
6
+ * A row action starts an independent task and closes; an edit launched from
7
+ * an open detail returns to that detail view.
7
8
  */
8
- restoreRecord?: TRecord;
9
+ cancelDestination?: RecordDetailCancelDestination;
9
10
  }
10
11
  /**
11
12
  * State transitions shared by descriptor-driven record detail surfaces.
@@ -22,12 +23,12 @@ export declare function useRecordDetailController<TRecord extends Record<string,
22
23
  saving: import("vue").Ref<boolean, boolean>;
23
24
  togglingEnabled: import("vue").Ref<boolean, boolean>;
24
25
  formSessionKey: import("vue").Ref<number, number>;
25
- beginLoad: (next: TRecord, nextMode: Extract<RecordDetailMode, "edit" | "view">) => void;
26
+ beginLoad: (next: TRecord, nextMode: Extract<RecordDetailMode, "edit" | "view">, options?: RecordDetailTransitionOptions) => void;
26
27
  resolveLoad: (next: TRecord) => void;
27
28
  failLoad: () => void;
28
29
  finishLoad: () => void;
29
- beginCreate: (initial: TRecord, options?: RecordDetailCreateOptions<TRecord>) => void;
30
- beginEdit: () => boolean;
30
+ beginCreate: (initial: TRecord, options?: RecordDetailTransitionOptions) => void;
31
+ beginEdit: (options?: RecordDetailTransitionOptions) => boolean;
31
32
  cancelEdit: () => void;
32
33
  applySaved: (next: TRecord) => void;
33
34
  clearDeleted: () => void;
@@ -12,6 +12,8 @@ export interface FormulaComputeResult {
12
12
  */
13
13
  export declare class FormulaRuntime {
14
14
  evaluateWebUi(program: FormulaProgram | undefined, record: FormulaRecord): boolean;
15
+ /** Evaluates a server-issued PAGE_TEXT program against a host-whitelisted display context. */
16
+ evaluatePageText(program: FormulaProgram | undefined, context: FormulaRecord): string | undefined;
15
17
  /**
16
18
  * Evaluates one server-issued FORM_COMPUTE assignment against a draft without mutating it.
17
19
  * Applying the returned patch, ordering rules, and user-value ownership remain form-runtime concerns.
@@ -22,6 +24,7 @@ export declare class FormulaRuntime {
22
24
  private evaluateNode;
23
25
  private toBoolean;
24
26
  private evaluateComputeNode;
27
+ private evaluatePageTextNode;
25
28
  }
26
29
  type FormulaValue = string | number | boolean | null | undefined;
27
30
  /** Mirrors FormulaEngine.equalsLoose for the primitive values admitted by the WEB_UI profile. */
@@ -7,3 +7,9 @@ import type { ModulePageEnhancement } from '../dynamic-page-runtime/index';
7
7
  * Vue component or arbitrary client-side behavior.
8
8
  */
9
9
  export declare const platformModulePageEnhancement: ModulePageEnhancement;
10
+ /**
11
+ * Action management has no menu identity of its own. Its standard CRUD page is
12
+ * entered from exactly one governed platform module, which is the hidden and
13
+ * immutable navigator scope.
14
+ */
15
+ export declare const platformModuleActionPageEnhancement: ModulePageEnhancement;
@@ -1,6 +1,6 @@
1
+ import type { ModulePageDrawerContext } from '../../dynamic-page-runtime/index';
1
2
  type __VLS_Props = {
2
- recordId?: string;
3
- mode?: 'view' | 'edit';
3
+ context: ModulePageDrawerContext;
4
4
  };
5
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
6
  declare const _default: typeof __VLS_export;
@@ -1,7 +1,6 @@
1
- import { type UserRouteAction } from './userManagementRouteState';
1
+ import type { ModulePageDrawerContext } from '../../dynamic-page-runtime/index';
2
2
  type __VLS_Props = {
3
- action: UserRouteAction;
4
- userId?: string;
3
+ context: ModulePageDrawerContext;
5
4
  };
6
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>;
7
6
  declare const _default: typeof __VLS_export;
@@ -1,6 +1,6 @@
1
+ import type { ModulePageDrawerContext } from '../../dynamic-page-runtime/index';
1
2
  type __VLS_Props = {
2
- recordId: string;
3
- title?: string;
3
+ context: ModulePageDrawerContext;
4
4
  };
5
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
6
  declare const _default: typeof __VLS_export;
@@ -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;
@@ -1,6 +1,6 @@
1
- import type { StandardModulePageDescriptor } from '../web-contracts/index';
1
+ import type { ModulePageFormContributionContext } from '../../dynamic-page-runtime/index';
2
2
  type __VLS_Props = {
3
- descriptor: StandardModulePageDescriptor;
3
+ context: ModulePageFormContributionContext;
4
4
  };
5
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
6
  declare const _default: typeof __VLS_export;
@@ -0,0 +1,7 @@
1
+ import type { ModulePageNavigatorExtensionContext } from '../../dynamic-page-runtime/index';
2
+ type __VLS_Props = {
3
+ context: ModulePageNavigatorExtensionContext;
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 contributes only the role-specific surfaces. The descriptor-driven host
4
+ * remains responsible for the list, standard form, CRUD, pagination and all
5
+ * request transport.
6
+ */
7
+ export declare const roleModulePageEnhancement: ModulePageEnhancement;
@@ -12,6 +12,8 @@ type __VLS_Props = {
12
12
  * They are forwarded as standard query values rather than filtered in the browser.
13
13
  */
14
14
  externalQueryValues?: Record<string, unknown>;
15
+ navigatorHostModuleAlias?: string;
16
+ navigatorTargetLevelKey?: string;
15
17
  keyword?: string;
16
18
  emptyDescription?: string;
17
19
  loadingTip?: string;
@@ -42,7 +44,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
42
44
  }>, {
43
45
  mode: CrudRecordListMode;
44
46
  filterOption: (record: CrudRecordListBase, normalizedKeyword: string) => boolean;
47
+ reloadKey: number;
45
48
  emptyDescription: string;
49
+ navigatorHostModuleAlias: string;
50
+ navigatorTargetLevelKey: string;
46
51
  selectedId: string;
47
52
  keyword: string;
48
53
  titleOf: (record: CrudRecordListBase) => string;
@@ -50,7 +55,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
50
55
  actionsOf: (record: CrudRecordListBase) => UiRecordInlineAction[];
51
56
  tagOf: (record: CrudRecordListBase) => string | undefined;
52
57
  mutedOf: (record: CrudRecordListBase) => boolean;
53
- reloadKey: number;
54
58
  externalQueryValues: Record<string, unknown>;
55
59
  loadingTip: string;
56
60
  fallbackTitle: string;
@@ -1,9 +1,11 @@
1
1
  type __VLS_Props = {
2
2
  label?: string;
3
3
  };
4
- declare var __VLS_1: {};
4
+ declare var __VLS_1: {}, __VLS_3: {};
5
5
  type __VLS_Slots = {} & {
6
- default?: (props: typeof __VLS_1) => any;
6
+ summary?: (props: typeof __VLS_1) => any;
7
+ } & {
8
+ default?: (props: typeof __VLS_3) => any;
7
9
  };
8
10
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
9
11
  label: string;
@@ -4,6 +4,7 @@ type __VLS_Props = {
4
4
  subtitle?: string;
5
5
  titleActionIcon?: UiIconName;
6
6
  titleActionTitle?: string;
7
+ titleActionDisabled?: boolean;
7
8
  };
8
9
  declare var __VLS_1: {}, __VLS_11: {}, __VLS_13: {};
9
10
  type __VLS_Slots = {} & {
@@ -21,6 +22,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
21
22
  subtitle: string;
22
23
  titleActionIcon: UiIconName;
23
24
  titleActionTitle: string;
25
+ titleActionDisabled: boolean;
24
26
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
27
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
26
28
  declare const _default: typeof __VLS_export;
@@ -3,8 +3,8 @@ import type { DrawerPromotion } from './drawerPromotion';
3
3
  type __VLS_Props = {
4
4
  open: boolean;
5
5
  title: string;
6
- /** Explicit page container for a locally scoped drawer. Omitted uses the active tab host. */
7
- container?: HTMLElement | null;
6
+ /** `inline` keeps slot anchors in the owning workspace; `portal` uses the standard side-panel host. */
7
+ renderMode?: 'inline' | 'portal';
8
8
  subtitle?: string;
9
9
  width?: number | string;
10
10
  scope?: UiSidePanelScope;
@@ -17,19 +17,22 @@ type __VLS_Slots = {
17
17
  'title-prefix'(): unknown;
18
18
  'title-actions'(): unknown;
19
19
  'header-actions'(): unknown;
20
+ 'operation-summary'(): unknown;
20
21
  default(): unknown;
21
22
  operation(): unknown;
22
23
  };
23
24
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
24
25
  close: () => any;
26
+ afterClose: () => any;
25
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
28
  onClose?: (() => any) | undefined;
29
+ onAfterClose?: (() => any) | undefined;
27
30
  }>, {
28
31
  scope: UiSidePanelScope;
29
32
  width: number | string;
30
33
  subtitle: string;
31
34
  closeOnOutside: boolean;
32
- container: HTMLElement | null;
35
+ renderMode: "inline" | "portal";
33
36
  closeTitle: string;
34
37
  promotion: DrawerPromotion;
35
38
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -8,7 +8,7 @@ type __VLS_Props = {
8
8
  /** Internal composition surface selected by the hosting platform component. */
9
9
  surface?: 'workspace' | 'drawer';
10
10
  };
11
- declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {}, __VLS_15: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {}, __VLS_29: {};
11
+ declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_11: {}, __VLS_13: {}, __VLS_15: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {}, __VLS_30: {}, __VLS_32: {};
12
12
  type __VLS_Slots = {} & {
13
13
  header?: (props: typeof __VLS_1) => any;
14
14
  } & {
@@ -32,7 +32,9 @@ type __VLS_Slots = {} & {
32
32
  } & {
33
33
  'content-bottom'?: (props: typeof __VLS_21) => any;
34
34
  } & {
35
- operation?: (props: typeof __VLS_29) => any;
35
+ 'operation-summary'?: (props: typeof __VLS_30) => any;
36
+ } & {
37
+ operation?: (props: typeof __VLS_32) => any;
36
38
  };
37
39
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
38
40
  subtitle: string;
@@ -1,5 +1,6 @@
1
1
  type __VLS_Props = {
2
2
  title: string;
3
+ subtitle?: string;
3
4
  refreshTitle?: string;
4
5
  searchKeyword?: string;
5
6
  searchPlaceholder?: string;
@@ -24,6 +25,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
24
25
  onRefresh?: (() => any) | undefined;
25
26
  "onUpdate:searchKeyword"?: ((keyword: string) => any) | undefined;
26
27
  }>, {
28
+ subtitle: string;
27
29
  searchPlaceholder: string;
28
30
  refreshTitle: string;
29
31
  searchKeyword: string;
@@ -25,13 +25,13 @@ type __VLS_Props = {
25
25
  };
26
26
  declare var __VLS_1: {
27
27
  field: RecordFormFieldState;
28
- }, __VLS_126: {
28
+ }, __VLS_134: {
29
29
  field: RecordFormFieldState;
30
30
  };
31
31
  type __VLS_Slots = {} & {
32
32
  'before-field'?: (props: typeof __VLS_1) => any;
33
33
  } & {
34
- 'after-field'?: (props: typeof __VLS_126) => any;
34
+ 'after-field'?: (props: typeof __VLS_134) => any;
35
35
  };
36
36
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
37
37
  "update:field": (fieldName: string, value: RecordFormFieldValue) => any;
@@ -47,6 +47,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
47
47
  close: () => any;
48
48
  edit: () => any;
49
49
  save: () => any;
50
+ afterClose: () => any;
50
51
  retry: () => any;
51
52
  reloadExternalChange: () => any;
52
53
  dismissExternalChange: () => any;
@@ -54,6 +55,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
54
55
  onClose?: (() => any) | undefined;
55
56
  onEdit?: (() => any) | undefined;
56
57
  onSave?: (() => any) | undefined;
58
+ onAfterClose?: (() => any) | undefined;
57
59
  onRetry?: (() => any) | undefined;
58
60
  onReloadExternalChange?: (() => any) | undefined;
59
61
  onDismissExternalChange?: (() => any) | undefined;
@@ -31,8 +31,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
31
31
  placeholder: string;
32
32
  allowClear: boolean;
33
33
  filterOption: (record: RecordPickerRecord, keyword: string) => boolean;
34
- titleOf: (record: RecordPickerRecord) => string;
35
34
  reloadKey: number;
35
+ titleOf: (record: RecordPickerRecord) => string;
36
36
  loadOptions: (keyword: string) => Promise<RecordPickerRecord[]>;
37
37
  loadTree: () => Promise<WebTreeNode<RecordPickerRecord>[]>;
38
38
  resolveOptions: (values: string[]) => Promise<RecordPickerRecord[]>;
@@ -4,6 +4,7 @@ type __VLS_Props = {
4
4
  disabled?: boolean;
5
5
  loading?: boolean;
6
6
  danger?: boolean;
7
+ size?: 'small' | 'middle' | 'large';
7
8
  title?: string;
8
9
  ariaLabel?: string;
9
10
  iconName?: UiIconName;
@@ -20,6 +21,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
20
21
  type: "default" | "primary" | "dashed" | "link" | "text";
21
22
  title: string;
22
23
  danger: boolean;
24
+ size: "small" | "middle" | "large";
23
25
  disabled: boolean;
24
26
  loading: boolean;
25
27
  ariaLabel: string;
@@ -21,9 +21,11 @@ type __VLS_Props = {
21
21
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
22
22
  select: (record: RecordPickerRecord | undefined) => any;
23
23
  "update:value": (value: string | undefined) => any;
24
+ "selection-resolved": (record: RecordPickerRecord | undefined) => any;
24
25
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
25
26
  onSelect?: ((record: RecordPickerRecord | undefined) => any) | undefined;
26
27
  "onUpdate:value"?: ((value: string | undefined) => any) | undefined;
28
+ "onSelection-resolved"?: ((record: RecordPickerRecord | undefined) => any) | undefined;
27
29
  }>, {
28
30
  mode: RecordPickerMode;
29
31
  disabled: boolean;
@@ -31,8 +33,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
31
33
  placeholder: string;
32
34
  allowClear: boolean;
33
35
  filterOption: (record: RecordPickerRecord, keyword: string) => boolean;
34
- titleOf: (record: RecordPickerRecord) => string;
35
36
  reloadKey: number;
37
+ titleOf: (record: RecordPickerRecord) => string;
36
38
  loadOptions: (keyword: string) => Promise<RecordPickerRecord[]>;
37
39
  loadTree: () => Promise<WebTreeNode<RecordPickerRecord>[]>;
38
40
  resolveOptions: (values: string[]) => Promise<RecordPickerRecord[]>;
@@ -1,5 +1,5 @@
1
1
  import { type Component } from 'vue';
2
- import type { QuerySchema, ResolvedViewFieldDescriptor } from '../web-contracts/index';
2
+ import type { QuerySchema, ResolvedPageListPersistentQueryControlDescriptor, ResolvedViewFieldDescriptor, ResolvedPageListQuerySummaryDescriptor } from '../web-contracts/index';
3
3
  import { type ModuleContext } from '../web-core/index';
4
4
  import { type RecordActionItem, type ResolvedRecordActionItem } from './recordActionBarModel';
5
5
  export type QueryListRecord = Record<string, unknown> & {
@@ -27,6 +27,8 @@ export interface RecordQueryListCellComponent {
27
27
  type __VLS_Props = {
28
28
  context: ModuleContext<QueryListRecord>;
29
29
  title: string;
30
+ /** Descriptor-owned secondary copy in the main content header. */
31
+ subtitle?: string;
30
32
  columns?: RecordQueryListColumn[];
31
33
  /** Columns appended to, or anchored around, the descriptor-owned list fields. */
32
34
  additionalColumns?: Array<RecordQueryListColumn & {
@@ -78,6 +80,10 @@ type __VLS_Props = {
78
80
  pageable?: boolean;
79
81
  ready?: boolean;
80
82
  externalQueryValues?: Record<string, unknown>;
83
+ /** Descriptor-owned controls rendered after quick search and before advanced filtering. */
84
+ persistentQueryControls?: ResolvedPageListPersistentQueryControlDescriptor[];
85
+ /** Descriptor-owned result-set facts rendered at the left of the list footer. */
86
+ querySummaries?: ResolvedPageListQuerySummaryDescriptor[];
81
87
  /** Descriptor-owned external criteria that must be exposed by the query schema. */
82
88
  requiredExternalCriteriaKeys?: string[];
83
89
  quickSearchPlaceholder?: string;
@@ -109,9 +115,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
109
115
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
110
116
  action: (action: RecordActionItem, event: MouseEvent) => any;
111
117
  select: (record: QueryListRecord) => any;
118
+ loaded: (records: QueryListRecord[]) => any;
112
119
  rowDblclick: (record: QueryListRecord, event: MouseEvent) => any;
113
120
  rowExpand: (record: QueryListRecord, expanded: boolean) => any;
114
- loaded: (records: QueryListRecord[]) => any;
115
121
  restored: () => any;
116
122
  batchAction: (action: RecordActionItem, records: QueryListRecord[], event: MouseEvent, clearSelection: () => void) => any;
117
123
  rowAction: (action: ResolvedRecordActionItem, record: QueryListRecord, event?: MouseEvent | undefined) => any;
@@ -120,9 +126,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
120
126
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
121
127
  onAction?: ((action: RecordActionItem, event: MouseEvent) => any) | undefined;
122
128
  onSelect?: ((record: QueryListRecord) => any) | undefined;
129
+ onLoaded?: ((records: QueryListRecord[]) => any) | undefined;
123
130
  onRowDblclick?: ((record: QueryListRecord, event: MouseEvent) => any) | undefined;
124
131
  onRowExpand?: ((record: QueryListRecord, expanded: boolean) => any) | undefined;
125
- onLoaded?: ((records: QueryListRecord[]) => any) | undefined;
126
132
  onRestored?: (() => any) | undefined;
127
133
  onBatchAction?: ((action: RecordActionItem, records: QueryListRecord[], event: MouseEvent, clearSelection: () => void) => any) | undefined;
128
134
  onRowAction?: ((action: ResolvedRecordActionItem, record: QueryListRecord, event?: MouseEvent | undefined) => any) | undefined;
@@ -132,7 +138,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
132
138
  uiConfigId: string;
133
139
  mode: RecordQueryListMode;
134
140
  actions: RecordActionItem[];
141
+ subtitle: string;
135
142
  selectedKey: string;
143
+ reloadKey: number;
136
144
  columns: RecordQueryListColumn[];
137
145
  rowKey: string;
138
146
  expandedRowKeys: string[];
@@ -141,7 +149,6 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
141
149
  pageSize: number;
142
150
  pageSizeOptions: number[];
143
151
  queryTemplateId: string;
144
- reloadKey: number;
145
152
  externalQueryValues: Record<string, unknown>;
146
153
  ready: boolean;
147
154
  additionalColumns: Array<RecordQueryListColumn & {
@@ -169,6 +176,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
169
176
  querySchema: QuerySchema;
170
177
  queryable: boolean;
171
178
  pageable: boolean;
179
+ persistentQueryControls: ResolvedPageListPersistentQueryControlDescriptor[];
180
+ querySummaries: ResolvedPageListQuerySummaryDescriptor[];
172
181
  requiredExternalCriteriaKeys: string[];
173
182
  quickSearchPlaceholder: string;
174
183
  waitingDescription: string;