@acorex-platform/framework-client 0.0.18 → 0.0.21

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 (108) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +872 -314
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs → acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs} +88 -5
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +2666 -693
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +685 -721
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +124 -72
  11. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  12. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs} +8 -6
  13. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs.map} +1 -1
  14. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs} +4 -4
  15. package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map} +1 -1
  16. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2988 -857
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +277 -185
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs +29184 -0
  21. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +1 -0
  22. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs} +34 -20
  23. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map +1 -0
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs +162 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +1 -0
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs} +31 -19
  27. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs} +30 -18
  29. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map +1 -0
  30. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +2 -27090
  31. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +382 -154
  33. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +646 -280
  35. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs} +16 -10
  37. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs} +9 -8
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs.map +1 -0
  40. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs} +20 -12
  41. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs} +32 -18
  43. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map} +1 -1
  44. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs} +8 -7
  45. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map} +1 -1
  46. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs} +4 -4
  47. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs.map} +1 -1
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs} +10 -8
  49. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map} +1 -1
  50. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +4868 -2548
  51. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  52. package/fesm2022/acorex-platform-framework-client-native.mjs +7 -7
  53. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs +29 -0
  54. package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-realtime.mjs +463 -26
  56. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  57. package/fesm2022/acorex-platform-framework-client-runtime.mjs +300 -137
  58. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  59. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs} +10 -7
  60. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs.map} +1 -1
  61. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs} +10 -7
  62. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs.map} +1 -1
  63. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs} +21 -19
  64. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs} +5 -5
  66. package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs} +5 -5
  68. package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs.map} +1 -1
  69. package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs → acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs} +6 -6
  70. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +421 -265
  72. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  73. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs} +8 -6
  74. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs.map} +1 -1
  75. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs} +8 -6
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs.map} +1 -1
  77. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs} +4 -4
  78. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs.map} +1 -1
  79. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs} +16 -10
  80. package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs.map} +1 -1
  81. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +538 -133
  82. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  83. package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -66
  84. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
  85. package/package.json +10 -10
  86. package/realtime/README.md +16 -0
  87. package/runtime/README.md +14 -0
  88. package/types/acorex-platform-framework-client-auth.d.ts +291 -52
  89. package/types/acorex-platform-framework-client-common.d.ts +613 -87
  90. package/types/acorex-platform-framework-client-core.d.ts +213 -206
  91. package/types/acorex-platform-framework-client-layout-builder.d.ts +14 -8
  92. package/types/acorex-platform-framework-client-layout-components.d.ts +392 -28
  93. package/types/acorex-platform-framework-client-layout-entity.d.ts +667 -417
  94. package/types/acorex-platform-framework-client-layout-views.d.ts +31 -11
  95. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +66 -17
  96. package/types/acorex-platform-framework-client-layout-widgets.d.ts +294 -67
  97. package/types/acorex-platform-framework-client-realtime.d.ts +183 -6
  98. package/types/acorex-platform-framework-client-runtime.d.ts +134 -28
  99. package/types/acorex-platform-framework-client-themes-default.d.ts +9 -1
  100. package/types/acorex-platform-framework-client-themes-shared.d.ts +8 -2
  101. package/types/acorex-platform-framework-client-workflow.d.ts +11 -35
  102. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, OnDestroy, EnvironmentProviders } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
+ import { Observable } from 'rxjs';
4
5
 
5
6
  interface AXPRealtimeAudience {
6
7
  userIds?: string[];
@@ -18,16 +19,71 @@ interface AXPRealtimeEnvelope {
18
19
  }
19
20
  interface AXPRealtimeInboxRefreshPayload {
20
21
  deliveryId?: string;
22
+ deliveryIds?: string[];
23
+ /** Optional hint so clients can apply deletes/archives without a fetch. */
24
+ op?: 'created' | 'updated' | 'deleted' | 'archived';
21
25
  }
22
26
  interface AXPRealtimeConversationMessagePayload {
23
27
  conversationId: string;
24
28
  messageId: string;
25
29
  op: 'created' | 'updated' | 'deleted';
30
+ /** Optional entity snapshot so clients can skip a follow-up GET. */
31
+ message?: Record<string, unknown>;
32
+ }
33
+ interface AXPRealtimeConversationTypingPayload {
34
+ conversationId: string;
35
+ userId: string;
36
+ userName?: string;
37
+ active: boolean;
38
+ }
39
+ type AXPRealtimeConversationCallAction = 'invite' | 'ring' | 'accept' | 'decline' | 'cancel' | 'end';
40
+ type AXPRealtimeConversationCallMedia = 'voice' | 'video';
41
+ /** Built-in realtime signaling for chat calls (media joins via RTC when configured). */
42
+ interface AXPRealtimeConversationCallPayload {
43
+ conversationId: string;
44
+ action: AXPRealtimeConversationCallAction;
45
+ media: AXPRealtimeConversationCallMedia;
46
+ /** Caller / actor user id. */
47
+ fromUserId: string;
48
+ fromUserName?: string;
49
+ /** Optional call correlation id shared across invite → accept. */
50
+ callId?: string;
26
51
  }
27
52
  interface AXPRealtimeEntityMutationPayload {
28
53
  entityName: string;
29
54
  operation: 'created' | 'updated' | 'deleted';
30
55
  id?: string;
56
+ /** True when the mutation originated from a server bulk command fan-out. */
57
+ bulk?: boolean;
58
+ /** Number of successfully mutated records in a bulk operation. */
59
+ count?: number;
60
+ bulkExecutionId?: string;
61
+ }
62
+ type AXPRealtimeUserPresenceStatus = 'online' | 'offline' | 'away' | 'busy';
63
+ type AXPRealtimeUserPresenceSource = 'auto' | 'manual';
64
+ interface AXPRealtimeUserPresencePayload {
65
+ userId: string;
66
+ status: AXPRealtimeUserPresenceStatus;
67
+ lastSeen?: string;
68
+ since?: string;
69
+ source?: AXPRealtimeUserPresenceSource;
70
+ }
71
+ interface AXPRealtimeUserPresenceSnapshotItem {
72
+ userId: string;
73
+ status: AXPRealtimeUserPresenceStatus;
74
+ lastSeen?: string;
75
+ since?: string;
76
+ source?: AXPRealtimeUserPresenceSource;
77
+ }
78
+ interface AXPRealtimePresenceSetResult {
79
+ ok: boolean;
80
+ reason?: string;
81
+ item?: AXPRealtimeUserPresenceSnapshotItem;
82
+ }
83
+ interface AXPRealtimePresenceSubscribeResult {
84
+ ok: boolean;
85
+ reason?: string;
86
+ items?: AXPRealtimeUserPresenceSnapshotItem[];
31
87
  }
32
88
  interface AXPRealtimeConfig {
33
89
  /**
@@ -46,10 +102,18 @@ interface AXPRealtimeTopicHandlerRegistration {
46
102
 
47
103
  declare const AXP_REALTIME_TOPIC_INBOX_REFRESH = "inbox.refresh";
48
104
  declare const AXP_REALTIME_TOPIC_CONVERSATION_MESSAGE = "conversation.message";
105
+ declare const AXP_REALTIME_TOPIC_CONVERSATION_TYPING = "conversation.typing";
106
+ declare const AXP_REALTIME_TOPIC_CONVERSATION_CALL = "conversation.call";
49
107
  declare const AXP_REALTIME_TOPIC_ENTITY_MUTATION = "entity.mutation";
108
+ declare const AXP_REALTIME_TOPIC_USER_PRESENCE = "user.presence";
50
109
  declare const AXP_REALTIME_SOCKET_EVENT = "realtime";
51
110
  declare const AXP_REALTIME_SUBSCRIBE_CONVERSATION = "subscribe.conversation";
52
111
  declare const AXP_REALTIME_UNSUBSCRIBE_CONVERSATION = "unsubscribe.conversation";
112
+ declare const AXP_REALTIME_SUBSCRIBE_PRESENCE = "subscribe.presence";
113
+ declare const AXP_REALTIME_UNSUBSCRIBE_PRESENCE = "unsubscribe.presence";
114
+ declare const AXP_REALTIME_PRESENCE_LEAVE = "presence.leave";
115
+ declare const AXP_REALTIME_PRESENCE_SET = "presence.set";
116
+ declare const AXP_REALTIME_EMIT_TYPING = "conversation.typing.emit";
53
117
 
54
118
  /**
55
119
  * Builds Socket.IO namespace URL from an HTTP API baseUrl (`…/api` → `…/realtime`).
@@ -68,7 +132,26 @@ declare class AXPRealtimeDispatcherService {
68
132
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPRealtimeDispatcherService>;
69
133
  }
70
134
 
71
- declare class AXPRealtimeConnectionService implements OnDestroy {
135
+ type AXPRealtimeConnectionStatus = 'connected' | 'connecting' | 'disconnected';
136
+ /**
137
+ * Always-on realtime connection used by the app shell.
138
+ * Built-in implementation uses Socket.IO; alternate backends may replace this port.
139
+ */
140
+ declare abstract class AXPRealtimeConnectionPort {
141
+ abstract readonly connectionStatus$: Observable<AXPRealtimeConnectionStatus>;
142
+ abstract connect(): void;
143
+ abstract disconnect(): void;
144
+ abstract reconnectWithCurrentToken(): void;
145
+ abstract isSocketConnected(): boolean;
146
+ abstract subscribeConversation(conversationId: string): void;
147
+ abstract unsubscribeConversation(conversationId: string): void;
148
+ abstract emitConversationTyping(conversationId: string, active: boolean): void;
149
+ }
150
+
151
+ /**
152
+ * Built-in always-on realtime connection via Socket.IO.
153
+ */
154
+ declare class AXPRealtimeConnectionService extends AXPRealtimeConnectionPort implements OnDestroy {
72
155
  private readonly config;
73
156
  private readonly session;
74
157
  private readonly dispatcher;
@@ -77,9 +160,11 @@ declare class AXPRealtimeConnectionService implements OnDestroy {
77
160
  private readonly joinedConversations;
78
161
  private readonly connectionStatusSubject;
79
162
  /** Latest Socket.IO connection state for feature modules (e.g. chat). */
80
- readonly connectionStatus$: rxjs.Observable<"connected" | "connecting" | "disconnected">;
163
+ readonly connectionStatus$: rxjs.Observable<AXPRealtimeConnectionStatus>;
81
164
  constructor(config: AXPRealtimeConfig | null);
82
165
  ngOnDestroy(): void;
166
+ /** Sign-out: tell the server to skip grace, then close the socket. */
167
+ leaveAndDisconnect(): Promise<void>;
83
168
  connect(): void;
84
169
  disconnect(): void;
85
170
  /** Re-auth with the latest access token (e.g. after refresh). */
@@ -88,13 +173,105 @@ declare class AXPRealtimeConnectionService implements OnDestroy {
88
173
  isSocketConnected(): boolean;
89
174
  subscribeConversation(conversationId: string): void;
90
175
  unsubscribeConversation(conversationId: string): void;
176
+ emitConversationTyping(conversationId: string, active: boolean): void;
177
+ subscribePresence(userIds: readonly string[]): Promise<AXPRealtimeUserPresenceSnapshotItem[]>;
178
+ unsubscribePresence(userIds: readonly string[]): void;
179
+ leavePresence(): Promise<void>;
180
+ setPresence(status: 'online' | 'away' | 'busy', source?: 'auto' | 'manual'): Promise<AXPRealtimeUserPresenceSnapshotItem | undefined>;
91
181
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPRealtimeConnectionService, [{ optional: true; }]>;
92
182
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPRealtimeConnectionService>;
93
183
  }
94
184
 
95
- declare function provideRealtime(config?: AXPRealtimeConfig & {
185
+ interface AXPProvideRealtimeOptions extends AXPRealtimeConfig {
96
186
  apiBaseUrl?: string;
97
- }): EnvironmentProviders;
187
+ /**
188
+ * Always-on backend. Default `builtin` (Socket.IO).
189
+ * Call/media uses extensions/rtc when configured — not this switch.
190
+ */
191
+ backend?: 'builtin';
192
+ }
193
+ /**
194
+ * Registers built-in always-on realtime (Socket.IO) + topic dispatcher.
195
+ */
196
+ declare function provideRealtime(config?: AXPProvideRealtimeOptions): EnvironmentProviders;
197
+
198
+ type AXPUserPresenceStatus = AXPRealtimeUserPresenceStatus;
199
+ type AXPUserPresenceSource = AXPRealtimeUserPresenceSource;
200
+ interface AXPUserPresence {
201
+ userId: string;
202
+ status: AXPUserPresenceStatus;
203
+ lastSeen?: string;
204
+ since?: string;
205
+ source?: AXPUserPresenceSource;
206
+ }
207
+ interface AXPUserPresenceSetInput {
208
+ status: 'online' | 'away' | 'busy';
209
+ source?: AXPUserPresenceSource;
210
+ }
211
+
212
+ declare function isWatchablePresenceUserId(userId: string | null | undefined): boolean;
213
+ declare function parseUserPresencePayload(payload: unknown): AXPUserPresence | null;
214
+
215
+ type AXPPresenceDurationBucket = {
216
+ key: 'duration.less-than-a-minute' | 'duration.one-minute' | 'duration.minutes' | 'duration.one-hour' | 'duration.hours' | 'duration.one-day' | 'duration.days';
217
+ params?: {
218
+ count: number;
219
+ };
220
+ };
221
+ declare function presenceDurationBucket(ms: number): AXPPresenceDurationBucket;
222
+
223
+ declare class AXPUserPresenceService {
224
+ private readonly connection;
225
+ private readonly presenceByUserId;
226
+ private readonly watchCounts;
227
+ private readonly subjects;
228
+ private readonly updatesSubject;
229
+ private flushTimer;
230
+ private pendingSubscribe;
231
+ private pendingUnsubscribe;
232
+ readonly updates$: Observable<AXPUserPresence>;
233
+ constructor();
234
+ get(userId: string): AXPUserPresence | undefined;
235
+ presence$(userId: string): Observable<AXPUserPresence>;
236
+ watch(userId: string): void;
237
+ watchMany(userIds: readonly string[]): void;
238
+ /** Watch only if this user is not already in the local watch set. */
239
+ ensureWatch(userId: string): void;
240
+ ensureWatchMany(userIds: readonly string[]): void;
241
+ unwatch(userId: string): void;
242
+ applySnapshot(items: readonly AXPUserPresence[]): void;
243
+ applyEnvelopePayload(payload: unknown): void;
244
+ setAvailability(status: 'online' | 'away' | 'busy', source?: 'auto' | 'manual'): Promise<void>;
245
+ private applyPresence;
246
+ private scheduleFlush;
247
+ private flush;
248
+ private resubscribeAll;
249
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPUserPresenceService, never>;
250
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPUserPresenceService>;
251
+ }
252
+
253
+ declare class AXPUserPresenceIdleService {
254
+ private readonly document;
255
+ private readonly session;
256
+ private readonly presence;
257
+ private readonly destroyRef;
258
+ private lastActivityAt;
259
+ private lastActivityEmitAt;
260
+ private idle;
261
+ private checkTimer;
262
+ private started;
263
+ constructor();
264
+ start(): void;
265
+ stop(): void;
266
+ private readonly onActivity;
267
+ private readonly onVisibility;
268
+ private checkIdle;
269
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPUserPresenceIdleService, never>;
270
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPUserPresenceIdleService>;
271
+ }
272
+
273
+ /** Idle without input before automatic Away. Keep in sync with server `AXP_USER_PRESENCE_IDLE_MS`. */
274
+ declare const AXP_USER_PRESENCE_IDLE_MS: number;
98
275
 
99
- export { AXPRealtimeConnectionService, AXPRealtimeDispatcherService, AXP_REALTIME_CONFIG, AXP_REALTIME_SOCKET_EVENT, AXP_REALTIME_SUBSCRIBE_CONVERSATION, AXP_REALTIME_TOPIC_CONVERSATION_MESSAGE, AXP_REALTIME_TOPIC_ENTITY_MUTATION, AXP_REALTIME_TOPIC_HANDLER, AXP_REALTIME_TOPIC_INBOX_REFRESH, AXP_REALTIME_UNSUBSCRIBE_CONVERSATION, provideRealtime, resolveRealtimeSocketUrl };
100
- export type { AXPRealtimeAudience, AXPRealtimeConfig, AXPRealtimeConversationMessagePayload, AXPRealtimeEntityMutationPayload, AXPRealtimeEnvelope, AXPRealtimeInboxRefreshPayload, AXPRealtimeTopicHandler, AXPRealtimeTopicHandlerRegistration };
276
+ export { AXPRealtimeConnectionPort, AXPRealtimeConnectionService, AXPRealtimeDispatcherService, AXPUserPresenceIdleService, AXPUserPresenceService, AXP_REALTIME_CONFIG, AXP_REALTIME_EMIT_TYPING, AXP_REALTIME_PRESENCE_LEAVE, AXP_REALTIME_PRESENCE_SET, AXP_REALTIME_SOCKET_EVENT, AXP_REALTIME_SUBSCRIBE_CONVERSATION, AXP_REALTIME_SUBSCRIBE_PRESENCE, AXP_REALTIME_TOPIC_CONVERSATION_CALL, AXP_REALTIME_TOPIC_CONVERSATION_MESSAGE, AXP_REALTIME_TOPIC_CONVERSATION_TYPING, AXP_REALTIME_TOPIC_ENTITY_MUTATION, AXP_REALTIME_TOPIC_HANDLER, AXP_REALTIME_TOPIC_INBOX_REFRESH, AXP_REALTIME_TOPIC_USER_PRESENCE, AXP_REALTIME_UNSUBSCRIBE_CONVERSATION, AXP_REALTIME_UNSUBSCRIBE_PRESENCE, AXP_USER_PRESENCE_IDLE_MS, isWatchablePresenceUserId, parseUserPresencePayload, presenceDurationBucket, provideRealtime, resolveRealtimeSocketUrl };
277
+ export type { AXPPresenceDurationBucket, AXPProvideRealtimeOptions, AXPRealtimeAudience, AXPRealtimeConfig, AXPRealtimeConnectionStatus, AXPRealtimeConversationCallAction, AXPRealtimeConversationCallMedia, AXPRealtimeConversationCallPayload, AXPRealtimeConversationMessagePayload, AXPRealtimeConversationTypingPayload, AXPRealtimeEntityMutationPayload, AXPRealtimeEnvelope, AXPRealtimeInboxRefreshPayload, AXPRealtimePresenceSetResult, AXPRealtimePresenceSubscribeResult, AXPRealtimeTopicHandler, AXPRealtimeTopicHandlerRegistration, AXPRealtimeUserPresencePayload, AXPRealtimeUserPresenceSnapshotItem, AXPRealtimeUserPresenceSource, AXPRealtimeUserPresenceStatus, AXPUserPresence, AXPUserPresenceSetInput, AXPUserPresenceSource, AXPUserPresenceStatus };
@@ -1,17 +1,34 @@
1
- import { AXPExecuteCommandResult, AXPViewDefinition, AXPMetaData } from '@acorex-platform/framework-shared/core';
1
+ import { AXPBulkCommandRequest, AXPCommandExecuteResultPromise, AXPBulkCommandResultData, AXPCommandExecuteOptions, AXPCommandMiddleware, AXPCommand, AXPQueryMiddleware, AXPQuery, AXPQueryExecuteOptions, AXPViewProvider } from '@acorex-platform/framework-shared/runtime';
2
+ export { AXPCommandExecuteOptions, AXPCommandMiddleware, AXPCommandMiddlewareContext, AXPQueryExecuteOptions, AXPQueryMiddleware, AXPQueryMiddlewareContext, AXPQuerySnapshotOption, composeCommandMiddlewares, composeQueryMiddlewares } from '@acorex-platform/framework-shared/runtime';
2
3
  import * as i0 from '@angular/core';
3
4
  import { InjectionToken, EnvironmentProviders, Type, Provider } from '@angular/core';
4
- import { AXPCommand, AXPQuery, AXPViewProvider } from '@acorex-platform/framework-shared/runtime';
5
+ import { AXPRuntimeCommandResult, AXPRuntimeQueryResult, AXPViewDefinition, AXPMetaData } from '@acorex-platform/framework-shared/core';
5
6
  import { AXComponent } from '@acorex/cdk/common';
6
7
 
8
+ /**
9
+ * Invokes filter-only bulk execution via the remote hook transport
10
+ * (`runtime.command.execute-bulk`).
11
+ *
12
+ * Default connectivity posts to `/v1/runtime/commands/bulk`. Host apps on another
13
+ * API stack should register {@link provideExternalRuntimeBulkTransport} instead —
14
+ * this service never fans out one-by-one on the client.
15
+ */
16
+ declare class AXPBulkCommandService {
17
+ private readonly hooks;
18
+ execute(request: AXPBulkCommandRequest): AXPCommandExecuteResultPromise<AXPBulkCommandResultData>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPBulkCommandService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPBulkCommandService>;
21
+ }
22
+
7
23
  type AXPCommandExecutionStage = 'before' | 'after';
8
24
  interface AXPCommandExecutionEvent<TInput = unknown, TResult = unknown> {
9
25
  executionId: string;
10
26
  stage: AXPCommandExecutionStage;
11
27
  key: string;
12
28
  input: TInput;
29
+ options?: AXPCommandExecuteOptions;
13
30
  success?: boolean;
14
- result?: AXPExecuteCommandResult<TResult> | null;
31
+ result?: AXPRuntimeCommandResult<TResult> | null;
15
32
  error?: unknown;
16
33
  durationMs?: number;
17
34
  }
@@ -37,24 +54,25 @@ declare class AXPCommandExecutor {
37
54
  private readonly extensions;
38
55
  private readonly commandEvents;
39
56
  private readonly hooks;
40
- execute<TInput = any, TResult = any>(key: string, input: TInput): Promise<AXPExecuteCommandResult<TResult> | null>;
41
- private executeLocal;
42
- private executeRemote;
57
+ execute<TInput = unknown, TResult = unknown>(key: string, input: TInput, options?: AXPCommandExecuteOptions): Promise<AXPRuntimeCommandResult<TResult> | null>;
58
+ /**
59
+ * Always dispatch via {@link AXPRuntimeRemoteHookKeys.CommandExecute}, even when a local
60
+ * command is registered for the same key. Use from gateway/API clients that wrap remote
61
+ * handlers so local UI commands can call them without async recursion.
62
+ *
63
+ * Skips command middlewares (e.g. toast): the local wrapper owns UX. Running toast
64
+ * middleware here would double-notify when the wrapper also returns a failure message.
65
+ */
66
+ executeRemote<TInput = unknown, TResult = unknown>(key: string, input: TInput, options?: AXPCommandExecuteOptions): Promise<AXPRuntimeCommandResult<TResult> | null>;
67
+ private createLocalHandler;
68
+ private createRemoteHandler;
69
+ private runWithMiddlewareAndEvents;
43
70
  private runWithEvents;
44
71
  private getPluginMiddlewares;
45
72
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPCommandExecutor, never>;
46
73
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPCommandExecutor>;
47
74
  }
48
75
 
49
- /**
50
- * Represents a middleware function in the command execution pipeline.
51
- */
52
- type AXPCommandMiddleware<TInput = any, TResult = any> = (input: TInput, next: (input: TInput) => Promise<AXPExecuteCommandResult<TResult>>) => Promise<AXPExecuteCommandResult<TResult>>;
53
- /**
54
- * Creates a composed handler by chaining the provided command middlewares.
55
- */
56
- declare function composeCommandMiddlewares<TInput, TResult>(middlewares: AXPCommandMiddleware<TInput, TResult>[]): (handler: (input: TInput) => Promise<AXPExecuteCommandResult<TResult>>) => (input: TInput) => Promise<AXPExecuteCommandResult<TResult>>;
57
-
58
76
  interface AXPCommandExtension {
59
77
  target: string | RegExp;
60
78
  middleware: AXPCommandMiddleware;
@@ -85,7 +103,12 @@ declare class AXPCommandService {
85
103
  exists(key: string): boolean;
86
104
  getRegisteredKeys(): string[];
87
105
  clear(): void;
88
- execute<TInput = any, TResult = any>(key: string, input: TInput): Promise<AXPExecuteCommandResult<TResult> | null>;
106
+ execute<TInput = unknown, TResult = unknown>(key: string, input: TInput, options?: AXPCommandExecuteOptions): Promise<AXPRuntimeCommandResult<TResult> | null>;
107
+ /**
108
+ * Force remote transport for {@code key}, ignoring any local command registration.
109
+ * Prefer this in gateway/API clients used by local UI command wrappers.
110
+ */
111
+ executeRemote<TInput = unknown, TResult = unknown>(key: string, input: TInput, options?: AXPCommandExecuteOptions): Promise<AXPRuntimeCommandResult<TResult> | null>;
89
112
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPCommandService, never>;
90
113
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPCommandService>;
91
114
  }
@@ -105,12 +128,10 @@ type AXPCommandLoader = {
105
128
  declare function provideCommandSetups(entries: AXPCommandLoader[]): EnvironmentProviders;
106
129
  declare function provideCommand(key: string, loader: () => Type<AXPCommand> | Promise<Type<AXPCommand>>): EnvironmentProviders;
107
130
 
108
- type AXPQueryMiddleware<TInput = any, TResult = any> = (input: TInput, next: (input: TInput) => Promise<TResult>) => Promise<TResult>;
109
- declare function composeQueryMiddlewares<TInput, TResult>(middlewares: AXPQueryMiddleware<TInput, TResult>[]): (handler: (input: TInput) => Promise<TResult>) => (input: TInput) => Promise<TResult>;
110
-
111
131
  declare const AXP_QUERY_MIDDLEWARE_SETUP: InjectionToken<void>;
112
132
  type AXPQueryMiddlewareEntry = (AXPQueryMiddleware | {
113
- key: string;
133
+ key?: string;
134
+ target?: string | RegExp;
114
135
  middleware: AXPQueryMiddleware;
115
136
  })[];
116
137
  declare function provideQueryMiddleware(entries: AXPQueryMiddlewareEntry): EnvironmentProviders;
@@ -128,6 +149,7 @@ interface AXPQueryExecutionEvent<TInput = unknown, TResult = unknown> {
128
149
  stage: AXPQueryExecutionStage;
129
150
  key: string;
130
151
  input: TInput;
152
+ options?: AXPQueryExecuteOptions;
131
153
  success?: boolean;
132
154
  result?: TResult | null;
133
155
  error?: unknown;
@@ -151,9 +173,10 @@ declare class AXPQueryExecutor {
151
173
  private readonly extensions;
152
174
  private readonly queryEvents;
153
175
  private readonly hooks;
154
- fetch<TInput = any, TResult = any>(key: string, input: TInput): Promise<TResult | null>;
155
- private fetchLocal;
156
- private fetchRemote;
176
+ fetch<TInput = any, TResult = any>(key: string, input: TInput, options?: AXPQueryExecuteOptions): Promise<AXPRuntimeQueryResult<TResult> | null>;
177
+ private createLocalHandler;
178
+ private createRemoteHandler;
179
+ private runWithMiddlewareAndEvents;
157
180
  private runWithEvents;
158
181
  private getPluginMiddlewares;
159
182
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPQueryExecutor, never>;
@@ -190,7 +213,8 @@ declare class AXPQueryService {
190
213
  exists(key: string): boolean;
191
214
  getRegisteredKeys(): string[];
192
215
  clear(): void;
193
- fetch<TInput = any, TResult = any>(key: string, input: TInput): Promise<TResult | null>;
216
+ /** Same envelope pattern as {@link AXPCommandService.execute}. */
217
+ fetch<TInput = unknown, TResult = unknown>(key: string, input: TInput, options?: AXPQueryExecuteOptions): Promise<AXPRuntimeQueryResult<TResult> | null>;
194
218
  static ɵfac: i0.ɵɵFactoryDeclaration<AXPQueryService, never>;
195
219
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPQueryService>;
196
220
  }
@@ -334,26 +358,108 @@ declare class AXPRuntimeModule {
334
358
  /**
335
359
  * Distributed hook keys for remote (non-local) command/query execution.
336
360
  * Connectivity (or another transport) implements these via {@link AXPHookService.runAsync}.
361
+ *
362
+ * Host apps that only consume the client lib and call a different API stack should
363
+ * register {@link provideExternalRuntimeBulkTransport} for {@link AXPRuntimeRemoteHookKeys.CommandExecuteBulk}
364
+ * (see `RUNTIME_REMOTE_BULK_TRANSPORT.md`).
337
365
  */
338
366
  declare const AXPRuntimeRemoteHookKeys: {
339
367
  readonly CommandExecute: "runtime.command.execute";
368
+ readonly CommandExecuteBulk: "runtime.command.execute-bulk";
340
369
  readonly QueryExecute: "runtime.query.execute";
341
370
  };
342
371
  interface AXPRuntimeCommandExecuteHookPayload {
343
372
  name: string;
344
373
  input: unknown;
374
+ /** Execute knobs — forwarded to the server; not command business input. */
375
+ options?: AXPCommandExecuteOptions;
345
376
  /** Set by a provider when it handled the remote call (even if success is false). */
346
377
  handled?: boolean;
347
- result?: AXPExecuteCommandResult | null;
378
+ result?: AXPRuntimeCommandResult | null;
379
+ }
380
+ interface AXPRuntimeCommandExecuteBulkHookPayload {
381
+ request: AXPBulkCommandRequest;
382
+ /** Set by a provider when it handled the remote call (even if success is false). */
383
+ handled?: boolean;
384
+ result?: AXPRuntimeCommandResult<AXPBulkCommandResultData> | null;
348
385
  }
349
386
  interface AXPRuntimeQueryExecuteHookPayload {
350
387
  name: string;
351
388
  input: unknown;
389
+ /** Execute knobs (snapshot, …) — forwarded to the server; not query business input. */
390
+ options?: AXPQueryExecuteOptions;
352
391
  /** Set by a provider when it handled the remote call. */
353
392
  handled?: boolean;
354
- /** Unwrapped query result matching local {@link AXPQueryService.fetch} return shape. */
393
+ /** Full runtime query envelope (same shape as local {@link AXPQuery.fetch}). */
394
+ result?: AXPRuntimeQueryResult | null;
395
+ }
396
+
397
+ /**
398
+ * Distributed hook keys for keyed runtime transports (SSE, beacon, streaming POST).
399
+ * Connectivity implements these via {@link AXPHookService.runAsync}.
400
+ */
401
+ declare const AXPRuntimeTransportHookKeys: {
402
+ readonly Execute: "runtime.transport.execute";
403
+ };
404
+ interface AXPRuntimeTransportExecuteHookPayload {
405
+ key: string;
406
+ input: unknown;
407
+ /** Set by a provider when it handled the transport call. */
408
+ handled?: boolean;
355
409
  result?: unknown;
356
410
  }
357
411
 
358
- export { AXPCommandEventsService, AXPCommandExecutor, AXPCommandRegistry, AXPCommandService, AXPPolicyEngineContext, AXPPolicyEngineDirective, AXPPolicyEngineRegistry, AXPPolicyEngineService, AXPQueryEventsService, AXPQueryExecutor, AXPQueryRegistry, AXPQueryService, AXPRuntimeModule, AXPRuntimeRemoteHookKeys, AXPViewExecutor, AXPViewRegistry, AXPViewService, AXP_COMMAND_EXTENSION, AXP_COMMAND_MIDDLEWARE_SETUP, AXP_COMMAND_SETUP, AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, AXP_POLICY_EXTENSION, AXP_QUERY_EXTENSION, AXP_QUERY_MIDDLEWARE_SETUP, AXP_QUERY_SETUP, AXP_VIEW_EXTENSION, AXP_VIEW_SETUP, composeCommandMiddlewares, composePolicyEngineMiddlewares, composeQueryMiddlewares, composeViewMiddlewares, provideCommand, provideCommandMiddleware, provideCommandSetups, providePolicySetups, provideQueryMiddleware, provideQuerySetups, provideViewSetup, provideViewSetups };
359
- export type { AXPCommandExecutionEvent, AXPCommandExecutionStage, AXPCommandExtension, AXPCommandMiddleware, AXPPolicy, AXPPolicyEngineMiddleware, AXPPolicyExtension, AXPQueryExecutionEvent, AXPQueryExecutionStage, AXPQueryExtension, AXPQueryMiddleware, AXPRuntimeCommandExecuteHookPayload, AXPRuntimeQueryExecuteHookPayload, AXPViewExtension, AXPViewMiddleware };
412
+ /**
413
+ * Dispatches keyed runtime transports (SSE, beacon, streaming) through distributed hooks.
414
+ */
415
+ declare class AXPRuntimeTransportService {
416
+ private readonly hooks;
417
+ execute<TInput = unknown, TResult = unknown>(key: string, input: TInput): Promise<TResult>;
418
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPRuntimeTransportService, never>;
419
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXPRuntimeTransportService>;
420
+ }
421
+
422
+ /**
423
+ * Host-app transport that performs a single real bulk call against any backend stack.
424
+ * Must not fan out one-by-one on the client.
425
+ */
426
+ type AXPExternalRuntimeBulkTransport = (request: AXPBulkCommandRequest) => AXPCommandExecuteResultPromise<AXPBulkCommandResultData>;
427
+ interface AXPExternalRuntimeBulkTransportOptions {
428
+ /**
429
+ * Hook waterfall order (ascending). Default `-100` so this runs before the
430
+ * connectivity default (`priority` unset / `0`) and can mark `handled: true`.
431
+ */
432
+ priority?: number;
433
+ }
434
+ /**
435
+ * Registers an external-stack implementation of `runtime.command.execute-bulk`.
436
+ *
437
+ * Use this when the host app consumes only the ACoreX **client** libraries and
438
+ * implements the API in another stack. Entity bulk actions (`Entity:Bulk`,
439
+ * selected delete, etc.) call {@link AXPBulkCommandService}, which runs this hook
440
+ * once — no client-side per-id fan-out.
441
+ *
442
+ * @example
443
+ * ```typescript
444
+ * @NgModule({
445
+ * providers: [
446
+ * ...provideExternalRuntimeBulkTransport(async (request) => {
447
+ * const response = await fetch(`${apiBase}/v1/runtime/commands/bulk`, {
448
+ * method: 'POST',
449
+ * headers: {
450
+ * 'Content-Type': 'application/json',
451
+ * Authorization: `Bearer ${token}`,
452
+ * },
453
+ * body: JSON.stringify(request),
454
+ * });
455
+ * return response.json();
456
+ * }),
457
+ * ],
458
+ * })
459
+ * export class AppModule {}
460
+ * ```
461
+ */
462
+ declare function provideExternalRuntimeBulkTransport(transport: AXPExternalRuntimeBulkTransport, options?: AXPExternalRuntimeBulkTransportOptions): Provider[];
463
+
464
+ export { AXPBulkCommandService, AXPCommandEventsService, AXPCommandExecutor, AXPCommandRegistry, AXPCommandService, AXPPolicyEngineContext, AXPPolicyEngineDirective, AXPPolicyEngineRegistry, AXPPolicyEngineService, AXPQueryEventsService, AXPQueryExecutor, AXPQueryRegistry, AXPQueryService, AXPRuntimeModule, AXPRuntimeRemoteHookKeys, AXPRuntimeTransportHookKeys, AXPRuntimeTransportService, AXPViewExecutor, AXPViewRegistry, AXPViewService, AXP_COMMAND_EXTENSION, AXP_COMMAND_MIDDLEWARE_SETUP, AXP_COMMAND_SETUP, AXP_POLICY_ENGINE_MIDDLEWARE_SETUP, AXP_POLICY_EXTENSION, AXP_QUERY_EXTENSION, AXP_QUERY_MIDDLEWARE_SETUP, AXP_QUERY_SETUP, AXP_VIEW_EXTENSION, AXP_VIEW_SETUP, composePolicyEngineMiddlewares, composeViewMiddlewares, provideCommand, provideCommandMiddleware, provideCommandSetups, provideExternalRuntimeBulkTransport, providePolicySetups, provideQueryMiddleware, provideQuerySetups, provideViewSetup, provideViewSetups };
465
+ export type { AXPCommandExecutionEvent, AXPCommandExecutionStage, AXPCommandExtension, AXPExternalRuntimeBulkTransport, AXPExternalRuntimeBulkTransportOptions, AXPPolicy, AXPPolicyEngineMiddleware, AXPPolicyExtension, AXPQueryExecutionEvent, AXPQueryExecutionStage, AXPQueryExtension, AXPRuntimeCommandExecuteBulkHookPayload, AXPRuntimeCommandExecuteHookPayload, AXPRuntimeQueryExecuteHookPayload, AXPRuntimeTransportExecuteHookPayload, AXPViewExtension, AXPViewMiddleware };
@@ -24,7 +24,7 @@ import { AXDrawerComponent } from '@acorex/components/drawer';
24
24
  declare class AXPEntityDetailListViewComponent {
25
25
  private actionSheetService;
26
26
  private unsubscriber;
27
- private workflowEventService;
27
+ private entityEvents;
28
28
  protected store: {
29
29
  currentMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPThemeMode>;
30
30
  currentPalette: _angular_core.Signal<string>;
@@ -284,6 +284,12 @@ declare class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponen
284
284
  */
285
285
  private syncListViewQueryParam;
286
286
  private reloadListData;
287
+ /**
288
+ * Manual-mode table gates the body on `isRefreshCalled` (set only by `grid.refresh()`).
289
+ * Card loads use shared `dataSource.refresh()`, so rows/totalCount update while the gate stays closed.
290
+ * Opening the gate here avoids an extra network refresh when switching to table.
291
+ */
292
+ private acknowledgeManualTableReady;
287
293
  private buildListHostTraceSnapshot;
288
294
  /**
289
295
  * Waits until a `refresh()` load cycle completes (loading started, then finished with data).
@@ -451,6 +457,7 @@ declare class AXPRootLayoutMenuComponent {
451
457
  isFullMatch: boolean;
452
458
  }>;
453
459
  setMenuItems: (items: AXPMenuItem[]) => void;
460
+ updateItem: (name: string, updates: Partial<AXPMenuItem>) => boolean;
454
461
  selectMenuItemByRoute: (path: string) => void;
455
462
  executeCommand: (item: AXPMenuItem) => void;
456
463
  isItemOpen: (item: AXPMenuItem) => boolean;
@@ -732,6 +739,7 @@ declare class AXPRootLayoutComponent {
732
739
  isFullMatch: boolean;
733
740
  }>;
734
741
  setMenuItems: (items: _acorex_platform_framework_client_common.AXPMenuItem[]) => void;
742
+ updateItem: (name: string, updates: Partial<_acorex_platform_framework_client_common.AXPMenuItem>) => boolean;
735
743
  selectMenuItemByRoute: (path: string) => void;
736
744
  executeCommand: (item: _acorex_platform_framework_client_common.AXPMenuItem) => void;
737
745
  isItemOpen: (item: _acorex_platform_framework_client_common.AXPMenuItem) => boolean;
@@ -198,5 +198,11 @@ declare class AXPThemesSharedModule {
198
198
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXPThemesSharedModule>;
199
199
  }
200
200
 
201
- export { AXPLayoutThemeService, AXPMenuOrientation, AXPMenuVerticalMode, AXPSideMenuState, AXPThemeLayoutSetting, AXPThemeMode, AXPThemePaletteProviderDefault, AXPThemeSlotComponent, AXPThemesSharedModule, AXP_SIDE_MENU_COMPACT_WIDTH, AXP_SIDE_MENU_FULL_DEFAULT_WIDTH, AXP_THEME_PALETTE_PROVIDER };
202
- export type { AXPThemePalette, AXPThemePaletteColors, AXPThemePaletteProvider };
201
+ /** font id → @font-face stylesheet href (app assets). Universal fonts omit an entry. */
202
+ type AXPRegionalFontStylesheetMap = Readonly<Record<string, string>>;
203
+ /** App-level font-face stylesheets keyed by font-style-chooser id (demo assets). */
204
+ declare function configureRegionalFontStylesheets(map: AXPRegionalFontStylesheetMap): void;
205
+ declare function getRegionalFontStylesheet(fontId: string): string | undefined;
206
+
207
+ export { AXPLayoutThemeService, AXPMenuOrientation, AXPMenuVerticalMode, AXPSideMenuState, AXPThemeLayoutSetting, AXPThemeMode, AXPThemePaletteProviderDefault, AXPThemeSlotComponent, AXPThemesSharedModule, AXP_SIDE_MENU_COMPACT_WIDTH, AXP_SIDE_MENU_FULL_DEFAULT_WIDTH, AXP_THEME_PALETTE_PROVIDER, configureRegionalFontStylesheets, getRegionalFontStylesheet };
208
+ export type { AXPRegionalFontStylesheetMap, AXPThemePalette, AXPThemePaletteColors, AXPThemePaletteProvider };
@@ -1,39 +1,8 @@
1
- import { OperatorFunction, Observable } from 'rxjs';
2
1
  import * as i0 from '@angular/core';
3
- import { ModuleWithProviders, InjectionToken } from '@angular/core';
2
+ import { InjectionToken, ModuleWithProviders } from '@angular/core';
4
3
  import { AXPActivityCategory, AXPActivityDefinition, AXPWorkflowContinuationMetadata, AXPExpressionEvaluatorScope, AXPWorkflowContinuationBeforeInteractive, AXPWorkflowCategory, AXPWorkflowDefinition } from '@acorex-platform/framework-shared/core';
5
4
  export { AXPWorkflowCategory } from '@acorex-platform/framework-shared/core';
6
-
7
- interface AXPWorkflowEvent<T = unknown> {
8
- type: string;
9
- payload?: T;
10
- }
11
- /** Event shape after {@link createWorkFlowEvent} dispatch — payload is always set. */
12
- interface AXPWorkflowEventWithPayload<T> {
13
- type: string;
14
- payload: T;
15
- }
16
- interface AXPWorkflowEventCreator<T> {
17
- (payload: T): AXPWorkflowEventWithPayload<T>;
18
- type: string;
19
- }
20
- declare function createWorkFlowEvent<T>(type: string): AXPWorkflowEventCreator<T>;
21
- declare function ofType<T>(...allowedTypes: Array<AXPWorkflowEventCreator<T>>): OperatorFunction<AXPWorkflowEvent, AXPWorkflowEventWithPayload<T>>;
22
-
23
- declare class AXPWorkflowEventService {
24
- private eventSubject;
25
- dispatch(event: AXPWorkflowEvent): void;
26
- get events$(): Observable<AXPWorkflowEvent>;
27
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPWorkflowEventService, never>;
28
- static ɵprov: i0.ɵɵInjectableDeclaration<AXPWorkflowEventService>;
29
- }
30
-
31
- declare class AXPWorkflowModule {
32
- static forRoot(): ModuleWithProviders<AXPWorkflowModule>;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<AXPWorkflowModule, never>;
34
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXPWorkflowModule, never, never, never>;
35
- static ɵinj: i0.ɵɵInjectorDeclaration<AXPWorkflowModule>;
36
- }
5
+ export { AXPWorkflowCommandKeys, AXPWorkflowQueryKeys, AXP_WORKFLOW_CANCEL_INSTANCE_DEFAULT, AXP_WORKFLOW_CLAIM_TASK_DEFAULT, AXP_WORKFLOW_FRONT_ACTIVITY_COMPLETE_DEFAULT, AXP_WORKFLOW_GET_STATE_DEFAULT, AXP_WORKFLOW_REASSIGN_TASK_TO_SELF_DEFAULT, AXP_WORKFLOW_RESUME_DEFAULT, AXP_WORKFLOW_REVERT_RESUME_DEFAULT, AXP_WORKFLOW_START_DEFAULT } from '@acorex-platform/framework-shared/runtime';
37
6
 
38
7
  type AXPActivityProviderToken = AXPActivityProvider | Promise<AXPActivityProvider>;
39
8
  declare const AXP_ACTIVITY_PROVIDER: InjectionToken<AXPActivityProviderToken[]>;
@@ -1229,5 +1198,12 @@ declare class AXPWorkflowDefinitionService {
1229
1198
  static ɵprov: i0.ɵɵInjectableDeclaration<AXPWorkflowDefinitionService>;
1230
1199
  }
1231
1200
 
1232
- export { AXPActivityDefinitionService, AXPWorkflowDefinitionService, AXPWorkflowEngineError, AXPWorkflowEventService, AXPWorkflowLocalEngine, AXPWorkflowManager, AXPWorkflowModule, AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER, AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_CONTINUATION_HOOK, AXP_WORKFLOW_ENGINE, AXP_WORKFLOW_ERROR_CODES, AXP_WORKFLOW_PROVIDER, AXP_WORKFLOW_SUPPRESS_CONTINUATION_INPUT_KEY, AXP_WORKFLOW_TASK_BOARD_ACTIVITY_TYPES, ActivityExecutor, WorkflowExpressionScopeService, axpIsWorkflowInlineFrontendTask, axpIsWorkflowInteractiveFrontendTask, axpIsWorkflowTaskBoardActivityType, axpResolveWorkflowContinuationBeforeInteractive, axpShouldOfferBeforeInteractiveFlow, axpShouldOfferWorkflowContinuationAfterStep, axpShouldSkipBeforeInteractiveFromMetadata, createWorkFlowEvent, getWorkflowEngineErrorCode, getWorkflowEngineErrorInfo, isWorkflowContinuationSuppressed, ofType };
1233
- export type { AXPActivityCategoryProvider, AXPActivityCategoryProviderToken, AXPActivityProvider, AXPActivityProviderToken, AXPClaimWorkflowTaskRequest, AXPClaimWorkflowTaskResponse, AXPFrontActivityCompleteRequest, AXPFrontActivityCompleteResponse, AXPGetWorkflowStateRequest, AXPReassignWorkflowTaskToSelfRequest, AXPReassignWorkflowTaskToSelfResponse, AXPResumeWorkflowRequest, AXPResumeWorkflowResponse, AXPRevertResumeAfterDeclinedInteractiveContinuationRequest, AXPRevertResumeAfterDeclinedInteractiveContinuationResponse, AXPStartWorkflowRequest, AXPStartWorkflowResponse, AXPWorkflowCategoryProvider, AXPWorkflowCategoryProviderToken, AXPWorkflowContinuationHook, AXPWorkflowContinuationOfferResult, AXPWorkflowContinuationStepContext, AXPWorkflowEngine, AXPWorkflowErrorCode, AXPWorkflowEvent, AXPWorkflowEventCreator, AXPWorkflowEventWithPayload, AXPWorkflowInstanceState, AXPWorkflowProvider, AXPWorkflowProviderToken, AXPWorkflowTask, ActivityExecutionResult, WorkflowClaimTaskResult, WorkflowCompleteResult, WorkflowExpressionContext, WorkflowReassignTaskToSelfResult, WorkflowResumeResult, WorkflowStartResult };
1201
+ declare class AXPWorkflowModule {
1202
+ static forRoot(): ModuleWithProviders<AXPWorkflowModule>;
1203
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXPWorkflowModule, never>;
1204
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXPWorkflowModule, never, never, never>;
1205
+ static ɵinj: i0.ɵɵInjectorDeclaration<AXPWorkflowModule>;
1206
+ }
1207
+
1208
+ export { AXPActivityDefinitionService, AXPWorkflowDefinitionService, AXPWorkflowEngineError, AXPWorkflowLocalEngine, AXPWorkflowManager, AXPWorkflowModule, AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER, AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_CONTINUATION_HOOK, AXP_WORKFLOW_ENGINE, AXP_WORKFLOW_ERROR_CODES, AXP_WORKFLOW_PROVIDER, AXP_WORKFLOW_SUPPRESS_CONTINUATION_INPUT_KEY, AXP_WORKFLOW_TASK_BOARD_ACTIVITY_TYPES, ActivityExecutor, WorkflowExpressionScopeService, axpIsWorkflowInlineFrontendTask, axpIsWorkflowInteractiveFrontendTask, axpIsWorkflowTaskBoardActivityType, axpResolveWorkflowContinuationBeforeInteractive, axpShouldOfferBeforeInteractiveFlow, axpShouldOfferWorkflowContinuationAfterStep, axpShouldSkipBeforeInteractiveFromMetadata, getWorkflowEngineErrorCode, getWorkflowEngineErrorInfo, isWorkflowContinuationSuppressed };
1209
+ export type { AXPActivityCategoryProvider, AXPActivityCategoryProviderToken, AXPActivityProvider, AXPActivityProviderToken, AXPClaimWorkflowTaskRequest, AXPClaimWorkflowTaskResponse, AXPFrontActivityCompleteRequest, AXPFrontActivityCompleteResponse, AXPGetWorkflowStateRequest, AXPReassignWorkflowTaskToSelfRequest, AXPReassignWorkflowTaskToSelfResponse, AXPResumeWorkflowRequest, AXPResumeWorkflowResponse, AXPRevertResumeAfterDeclinedInteractiveContinuationRequest, AXPRevertResumeAfterDeclinedInteractiveContinuationResponse, AXPStartWorkflowRequest, AXPStartWorkflowResponse, AXPWorkflowCategoryProvider, AXPWorkflowCategoryProviderToken, AXPWorkflowContinuationHook, AXPWorkflowContinuationOfferResult, AXPWorkflowContinuationStepContext, AXPWorkflowEngine, AXPWorkflowErrorCode, AXPWorkflowInstanceState, AXPWorkflowProvider, AXPWorkflowProviderToken, AXPWorkflowTask, ActivityExecutionResult, WorkflowClaimTaskResult, WorkflowCompleteResult, WorkflowExpressionContext, WorkflowReassignTaskToSelfResult, WorkflowResumeResult, WorkflowStartResult };
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs","sources":["../../../../../libs/framework/client/common/src/lib/configs/common-settings.provider.ts"],"sourcesContent":["\n\nimport { AXPPlatformScope, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { Injectable, Injector } from '@angular/core';\nimport {\n AXP_EXPERIENCE_SETTINGS_GROUP,\n AXP_EXPERIENCE_SETTINGS_SECTIONS,\n} from '../settings/experience-settings.constants';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '../settings';\nimport { AXPCommonSettings } from './common-settings.key';\n\nconst I18N = '@general:settings';\n\n@Injectable()\nexport class AXPCommonSettingProvider implements AXPSettingDefinitionProvider {\n constructor(private _injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .group(AXP_EXPERIENCE_SETTINGS_GROUP)\n ?.addSection(\n AXP_EXPERIENCE_SETTINGS_SECTIONS.Notifications,\n `${I18N}.experience.notifications.title`,\n `${I18N}.experience.notifications.description`,\n )\n .addSetting({\n key: AXPCommonSettings.EnableOperationToasts,\n title: `${I18N}.experience.notifications.enable-operation-toasts.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.notifications.enable-operation-toasts.description`,\n })\n .endSection()\n .addSection(\n AXP_EXPERIENCE_SETTINGS_SECTIONS.Entity,\n `${I18N}.experience.entity.title`,\n `${I18N}.experience.entity.description`,\n )\n .addSetting({\n key: AXPCommonSettings.EntityFilterApplyMode,\n title: `${I18N}.experience.entity.filter-apply-mode.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: 'auto',\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n label: null,\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'auto', text: `${I18N}.experience.entity.filter-apply-mode.options.auto` },\n { value: 'manual', text: `${I18N}.experience.entity.filter-apply-mode.options.manual` },\n ],\n },\n },\n description: `${I18N}.experience.entity.filter-apply-mode.description`,\n })\n .addSetting({\n key: AXPCommonSettings.EntityListPersistenceMode,\n title: `${I18N}.experience.entity.list-persistence-mode.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: 'persistent',\n widget: {\n type: AXPWidgetsCatalog.select,\n options: {\n label: null,\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'none', text: `${I18N}.experience.entity.list-persistence-mode.options.none` },\n {\n value: 'persistent',\n text: `${I18N}.experience.entity.list-persistence-mode.options.persistent`,\n },\n { value: 'route', text: `${I18N}.experience.entity.list-persistence-mode.options.route` },\n ],\n },\n },\n description: `${I18N}.experience.entity.list-persistence-mode.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowCategoryColumnsByDefault,\n title: `${I18N}.experience.entity.show-category-columns-by-default.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: false,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.show-category-columns-by-default.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ApplyLayoutOrdering,\n title: `${I18N}.experience.entity.apply-layout-ordering.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.apply-layout-ordering.description`,\n })\n .addSetting({\n key: AXPCommonSettings.RedirectToDetailsAfterCreate,\n title: `${I18N}.experience.entity.redirect-to-details-after-create.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.redirect-to-details-after-create.description`,\n })\n .addSetting({\n key: AXPCommonSettings.HighlightAfterCreateInList,\n title: `${I18N}.experience.entity.highlight-after-create-in-list.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: false,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.highlight-after-create-in-list.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowPageBadge,\n title: `${I18N}.experience.entity.show-page-badge.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.show-page-badge.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ConfirmUnsavedChanges,\n title: `${I18N}.experience.entity.confirm-unsaved-changes.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.confirm-unsaved-changes.description`,\n })\n .addSetting({\n key: AXPCommonSettings.ShowRowIndexColumn,\n title: `${I18N}.experience.entity.show-row-index-column.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: false,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.show-row-index-column.description`,\n })\n .addSetting({\n key: AXPCommonSettings.QuickSearchEnabled,\n title: `${I18N}.experience.entity.quick-search-enabled.title`,\n scope: AXPPlatformScope.User,\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n label: null,\n },\n },\n description: `${I18N}.experience.entity.quick-search-enabled.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n"],"names":[],"mappings":"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"}