@acorex-platform/module-conversation-client 0.0.32 → 0.0.37

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 (57) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs} +897 -234
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Dgs6fpN3.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs} +3 -3
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Dgs6fpN3.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BRW1cHN6.mjs → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BRW1cHN6.mjs.map → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs.map} +1 -1
  9. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs +1607 -0
  10. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs +92 -0
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-DLYtqFLi.mjs → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-DLYtqFLi.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs.map} +1 -1
  19. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +274 -0
  20. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +295 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +52 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs +242 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +263 -0
  28. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +2 -0
  30. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-module-conversation-client-emit-typing-indicator.command-BzsN1_ns.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +30 -0
  34. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs → acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs} +5 -5
  38. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs} +2 -2
  40. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs.map} +1 -1
  41. package/fesm2022/acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs.map +1 -1
  42. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs → acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs} +26 -13
  43. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  45. package/package.json +18 -2
  46. package/types/acorex-platform-module-conversation-client-contracts-entities-message.d.ts +5 -0
  47. package/types/acorex-platform-module-conversation-client-contracts-entities-room.d.ts +5 -0
  48. package/types/acorex-platform-module-conversation-client-contracts-entity-catalog.d.ts +10 -0
  49. package/types/acorex-platform-module-conversation-client-local-entities.d.ts +12 -0
  50. package/types/acorex-platform-module-conversation-client.d.ts +24 -1
  51. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs.map +0 -1
  52. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs +0 -1379
  53. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs.map +0 -1
  54. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs +0 -89
  55. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs.map +0 -1
  56. package/fesm2022/acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs.map +0 -1
  57. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs.map +0 -1
@@ -4,7 +4,7 @@ import { AXPInAppInboxConnectorService } from '@acorex-platform/module-communica
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, Injectable } from '@angular/core';
6
6
  import { Router } from '@angular/router';
7
- import { f as buildConversationChatInAppCorrelationPrefix } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs';
7
+ import { g as buildConversationChatInAppCorrelationPrefix } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs';
8
8
 
9
9
  //#endregion
10
10
  //#region ----- Command -----
@@ -25,18 +25,18 @@ class AXMConversationOpenChatCommand {
25
25
  if (!conversationId) {
26
26
  return { success: false, message: { text: '@conversation:chat.route.conversation-not-found' } };
27
27
  }
28
- await this.dismissConversationInAppNotification(conversationId);
28
+ await this.markConversationInAppNotificationRead(conversationId);
29
29
  await this.conversationService.selectConversation(conversationId);
30
30
  await this.router.navigate([this.applicationRouteSegment(), 'chat', conversationId]);
31
31
  return { success: true, kind: 'object', data: { conversationId } };
32
32
  }
33
33
  //#region ----- Private -----
34
- async dismissConversationInAppNotification(conversationId) {
34
+ async markConversationInAppNotificationRead(conversationId) {
35
35
  if (!this.inboxConnector) {
36
36
  return;
37
37
  }
38
38
  try {
39
- await this.inboxConnector.dismissByCorrelationIdPrefix(buildConversationChatInAppCorrelationPrefix(conversationId));
39
+ await this.inboxConnector.markReadByCorrelationIdPrefix(buildConversationChatInAppCorrelationPrefix(conversationId));
40
40
  }
41
41
  catch {
42
42
  // Best-effort — navigation should still proceed.
@@ -54,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
54
54
  }] });
55
55
 
56
56
  export { AXMConversationOpenChatCommand };
57
- //# sourceMappingURL=acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs.map
57
+ //# sourceMappingURL=acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/open-chat.command.ts"],"sourcesContent":["import { AXConversationService } from '@acorex/components/conversation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPInAppInboxConnectorService } from '@acorex-platform/module-communication-management-client';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { buildConversationChatInAppCorrelationPrefix } from '../chat/services/conversation-chat-notification.util';\n\n//#region ----- Types -----\n\nexport interface AXMOpenChatOptions {\n conversationId?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Opens an existing conversation in the chat app. */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationOpenChatCommand implements AXPCommand<AXMOpenChatOptions, { conversationId: string }> {\n //#region ----- Services & Dependencies -----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly router = inject(Router);\n private readonly inboxConnector = inject(AXPInAppInboxConnectorService, { optional: true });\n\n //#endregion\n\n async execute(input: AXMOpenChatOptions | unknown): AXPCommandExecuteResultPromise<{ conversationId: string }> {\n const conversationId =\n typeof (input as AXMOpenChatOptions)?.conversationId === 'string'\n ? (input as AXMOpenChatOptions).conversationId!.trim()\n : '';\n\n if (!conversationId) {\n return { success: false, message: { text: '@conversation:chat.route.conversation-not-found' } };\n }\n\n await this.markConversationInAppNotificationRead(conversationId);\n\n await this.conversationService.selectConversation(conversationId);\n await this.router.navigate([this.applicationRouteSegment(), 'chat', conversationId]);\n return { success: true, kind: 'object', data: { conversationId } };\n }\n\n //#region ----- Private -----\n\n private async markConversationInAppNotificationRead(conversationId: string): Promise<void> {\n if (!this.inboxConnector) {\n return;\n }\n try {\n await this.inboxConnector.markReadByCorrelationIdPrefix(\n buildConversationChatInAppCorrelationPrefix(conversationId),\n );\n } catch {\n // Best-effort — navigation should still proceed.\n }\n }\n\n private applicationRouteSegment(): string {\n return this.sessionService.application?.name?.trim() || 'platform';\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;;AAcA;AAEA;AAEA;MAEa,8BAA8B,CAAA;AAD3C,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACnD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAyC5F,IAAA;;IArCC,MAAM,OAAO,CAAC,KAAmC,EAAA;AAC/C,QAAA,MAAM,cAAc,GAClB,OAAQ,KAA4B,EAAE,cAAc,KAAK;AACvD,cAAG,KAA4B,CAAC,cAAe,CAAC,IAAI;cAClD,EAAE;QAER,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,iDAAiD,EAAE,EAAE;QACjG;AAEA,QAAA,MAAM,IAAI,CAAC,qCAAqC,CAAC,cAAc,CAAC;QAEhE,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC;AACjE,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AACpF,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE;IACpE;;IAIQ,MAAM,qCAAqC,CAAC,cAAsB,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB;QACF;AACA,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC,6BAA6B,CACrD,2CAA2C,CAAC,cAAc,CAAC,CAC5D;QACH;AAAE,QAAA,MAAM;;QAER;IACF;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,UAAU;IACpE;8GA5CW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cADjB,MAAM,EAAA,CAAA,CAAA;;2FACnB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs';
3
+ import { a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
31
31
  }] });
32
32
 
33
33
  export { AXMConversationRetryAssistResponseCommand };
34
- //# sourceMappingURL=acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs.map
34
+ //# sourceMappingURL=acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/retry-assist-response.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMRetryAssistResponseOptions {\n conversationId: string;\n messageId: string;\n}\n\nexport interface AXMRetryAssistResponseResult {\n message: AXConversationMessage;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationRetryAssistResponseCommand\n implements AXPCommand<AXMRetryAssistResponseOptions, AXMRetryAssistResponseResult>\n{\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n\n async execute(input: AXMRetryAssistResponseOptions | unknown): AXPCommandExecuteResultPromise<AXMRetryAssistResponseResult> {\n const options = input as AXMRetryAssistResponseOptions;\n if (!this.assistResponse) {\n return { success: false, message: { text: 'Assist response service is not available.' } };\n }\n\n try {\n const message = await this.assistResponse.retryAssistResponse(options.conversationId, options.messageId);\n return { success: true, kind: 'object', data: { message } };\n } catch (error: unknown) {\n console.error('[Conversation:RetryAssistResponse] Failed:', error);\n return { success: false };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAuBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;QAImB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAgBpG,IAAA;IAdC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,EAAE;QAC3F;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;AACxG,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;QAC7D;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAClE,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;IACF;8GAlBW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/retry-assist-response.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMRetryAssistResponseOptions {\n conversationId: string;\n messageId: string;\n}\n\nexport interface AXMRetryAssistResponseResult {\n message: AXConversationMessage;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationRetryAssistResponseCommand\n implements AXPCommand<AXMRetryAssistResponseOptions, AXMRetryAssistResponseResult>\n{\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n\n async execute(input: AXMRetryAssistResponseOptions | unknown): AXPCommandExecuteResultPromise<AXMRetryAssistResponseResult> {\n const options = input as AXMRetryAssistResponseOptions;\n if (!this.assistResponse) {\n return { success: false, message: { text: 'Assist response service is not available.' } };\n }\n\n try {\n const message = await this.assistResponse.retryAssistResponse(options.conversationId, options.messageId);\n return { success: true, kind: 'object', data: { message } };\n } catch (error: unknown) {\n console.error('[Conversation:RetryAssistResponse] Failed:', error);\n return { success: false };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAuBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;QAImB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAgBpG,IAAA;IAdC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,EAAE;QAC3F;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;AACxG,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;QAC7D;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAClE,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;IACF;8GAlBW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/start-direct-chat.command.ts"],"sourcesContent":["import { AXDialogService } from '@acorex/components/dialog';\nimport { AXConversationService } from '@acorex/components/conversation';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPUserAvatarService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { firstValueFrom, take } from 'rxjs';\n\n//#region ----- Types -----\n\nexport interface AXMStartDirectChatOptions {\n userId?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Creates or reuses a private conversation with {@link AXMStartDirectChatOptions.userId} and opens chat. */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationStartDirectChatCommand implements AXPCommand<AXMStartDirectChatOptions, { conversationId: string }> {\n //#region ----- Services & Dependencies -----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly avatarService = inject(AXPUserAvatarService);\n private readonly router = inject(Router);\n private readonly dialogService = inject(AXDialogService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n async execute(input: AXMStartDirectChatOptions | unknown): AXPCommandExecuteResultPromise<{ conversationId: string }> {\n const userId = typeof (input as AXMStartDirectChatOptions)?.userId === 'string'\n ? (input as AXMStartDirectChatOptions).userId!.trim()\n : '';\n\n if (!userId) {\n await this.showError('missing-user');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.missing-user' } };\n }\n\n const currentUserId = this.sessionService.user?.id;\n if (currentUserId != null && userId === currentUserId) {\n await this.showError('self-chat');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.self-chat' } };\n }\n\n const title = await this.resolveChatTitle(userId);\n try {\n const conversation = await this.conversationService.createConversation([userId], 'private', { title });\n await this.router.navigate([this.applicationRouteSegment(), 'chat', conversation.id]);\n return { success: true, kind: 'object', data: { conversationId: conversation.id } };\n } catch {\n await this.showError('create-room');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.create-room' } };\n }\n }\n\n //#region ----- Private -----\n\n private applicationRouteSegment(): string {\n return this.sessionService.application?.name?.trim() || 'platform';\n }\n\n private async resolveChatTitle(userId: string): Promise<string> {\n try {\n const info = await firstValueFrom(this.avatarService.getUserInfo$(userId).pipe(take(1)));\n const parts = [info?.firstName, info?.lastName].map((part) => part?.trim()).filter(Boolean) as string[];\n if (parts.length > 0) {\n return parts.join(' ');\n }\n return info?.username?.trim() || '';\n } catch {\n return '';\n }\n }\n\n private async showError(key: string): Promise<void> {\n const title = await this.translation.translateAsync('@conversation:chat.user-card.error-title');\n const message = await this.translation.translateAsync(`@conversation:chat.user-card.errors.${key}`);\n await this.dialogService.alert(title, message, 'danger');\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-start-direct-chat.command-CfSIVHDu.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/start-direct-chat.command.ts"],"sourcesContent":["import { AXDialogService } from '@acorex/components/dialog';\nimport { AXConversationService } from '@acorex/components/conversation';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPUserAvatarService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { firstValueFrom, take } from 'rxjs';\n\n//#region ----- Types -----\n\nexport interface AXMStartDirectChatOptions {\n userId?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Creates or reuses a private conversation with {@link AXMStartDirectChatOptions.userId} and opens chat. */\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationStartDirectChatCommand implements AXPCommand<AXMStartDirectChatOptions, { conversationId: string }> {\n //#region ----- Services & Dependencies -----\n\n private readonly conversationService = inject(AXConversationService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly avatarService = inject(AXPUserAvatarService);\n private readonly router = inject(Router);\n private readonly dialogService = inject(AXDialogService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n async execute(input: AXMStartDirectChatOptions | unknown): AXPCommandExecuteResultPromise<{ conversationId: string }> {\n const userId = typeof (input as AXMStartDirectChatOptions)?.userId === 'string'\n ? (input as AXMStartDirectChatOptions).userId!.trim()\n : '';\n\n if (!userId) {\n await this.showError('missing-user');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.missing-user' } };\n }\n\n const currentUserId = this.sessionService.user?.id;\n if (currentUserId != null && userId === currentUserId) {\n await this.showError('self-chat');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.self-chat' } };\n }\n\n const title = await this.resolveChatTitle(userId);\n try {\n const conversation = await this.conversationService.createConversation([userId], 'private', { title });\n await this.router.navigate([this.applicationRouteSegment(), 'chat', conversation.id]);\n return { success: true, kind: 'object', data: { conversationId: conversation.id } };\n } catch {\n await this.showError('create-room');\n return { success: false, message: { text: '@conversation:chat.user-card.errors.create-room' } };\n }\n }\n\n //#region ----- Private -----\n\n private applicationRouteSegment(): string {\n return this.sessionService.application?.name?.trim() || 'platform';\n }\n\n private async resolveChatTitle(userId: string): Promise<string> {\n try {\n const info = await firstValueFrom(this.avatarService.getUserInfo$(userId).pipe(take(1)));\n const parts = [info?.firstName, info?.lastName].map((part) => part?.trim()).filter(Boolean) as string[];\n if (parts.length > 0) {\n return parts.join(' ');\n }\n return info?.username?.trim() || '';\n } catch {\n return '';\n }\n }\n\n private async showError(key: string): Promise<void> {\n const title = await this.translation.translateAsync('@conversation:chat.user-card.error-title');\n const message = await this.translation.translateAsync(`@conversation:chat.user-card.errors.${key}`);\n await this.dialogService.alert(title, message, 'danger');\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { A as AXMConversationEntityStoreService, d as AXMConversationFocusService, e as AXMConversationInAppNotificationSyncService } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs';
3
+ import { A as AXMConversationEntityStoreService, d as AXMConversationFocusService, e as AXMConversationInAppNotificationSyncService, f as axmMessageCountsTowardUnread } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -16,28 +16,41 @@ class AXMConversationSyncReadStateCommand {
16
16
  if (!conversationId) {
17
17
  return { success: true, kind: 'object', data: undefined };
18
18
  }
19
- // Cached chat tabs keep the message list mounted after leave. The widget still
20
- // auto-marks visible messages as read (~3s), which was deleting the inbox row.
21
- if (!options.force && !this.focus.isFocused(conversationId)) {
19
+ const allowWithoutFocus = Boolean(options.force || options.fromInbox);
20
+ if (!allowWithoutFocus && !this.focus.isFocused(conversationId)) {
22
21
  return { success: true, kind: 'object', data: undefined };
23
22
  }
24
- if (!options.messageIds?.length) {
23
+ const currentUserId = options.currentUserId?.trim();
24
+ const messageIds = options.messageIds?.filter((id) => id?.trim()) ?? [];
25
+ const idsToMark = messageIds.length > 0
26
+ ? messageIds
27
+ : currentUserId
28
+ ? await this.collectUnreadMessageIds(conversationId, currentUserId)
29
+ : [];
30
+ if (idsToMark.length > 0 && currentUserId) {
31
+ await this.focus.markMessagesRead(conversationId, idsToMark, currentUserId);
32
+ }
33
+ else {
25
34
  const cachedConversation = this.store.getCachedConversation(conversationId);
26
35
  if ((cachedConversation?.unreadCount ?? 0) !== 0) {
27
36
  await this.store.setUnreadCount(conversationId, 0);
28
37
  }
29
- await this.inAppSync.dismissConversationInAppNotification(conversationId, options.currentUserId, {
38
+ }
39
+ if (currentUserId) {
40
+ await this.inAppSync.markConversationInAppNotificationRead(conversationId, currentUserId, {
30
41
  force: true,
31
42
  });
32
- return { success: true, kind: 'object', data: undefined };
33
43
  }
34
- const marked = await this.focus.markMessagesRead(conversationId, options.messageIds, options.currentUserId);
35
- await this.inAppSync.dismissConversationInAppNotification(conversationId, options.currentUserId, {
36
- force: true,
37
- });
38
- void marked;
39
44
  return { success: true, kind: 'object', data: undefined };
40
45
  }
46
+ async collectUnreadMessageIds(conversationId, currentUserId) {
47
+ const cached = this.store.getCachedMessageList(conversationId);
48
+ const messages = cached ?? (await this.store.loadConversationMessages(conversationId));
49
+ return messages
50
+ .filter((message) => axmMessageCountsTowardUnread(message, currentUserId))
51
+ .map((message) => message.id)
52
+ .filter((id) => Boolean(id?.trim()));
53
+ }
41
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMConversationSyncReadStateCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
42
55
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMConversationSyncReadStateCommand, providedIn: 'root' }); }
43
56
  }
@@ -47,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
47
60
  }] });
48
61
 
49
62
  export { AXMConversationSyncReadStateCommand };
50
- //# sourceMappingURL=acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs.map
63
+ //# sourceMappingURL=acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/sync-read-state.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationInAppNotificationSyncService } from '../chat/services/conversation-in-app-notification-sync.service';\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\nimport { AXMConversationFocusService } from '../chat/services/conversation-focus.service';\nimport { axmMessageCountsTowardUnread } from '../chat/plugins/utils/conversation-unread.util';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMSyncReadStateOptions {\n conversationId: string;\n messageIds?: string[];\n currentUserId: string;\n /** Explicit user action (sidebar Mark as Read). Skips the “must be viewing” guard. */\n force?: boolean;\n /** Inbox row was marked read — do not treat as a chat-page focus requirement. */\n fromInbox?: boolean;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationSyncReadStateCommand implements AXPCommand<AXMSyncReadStateOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n private readonly focus = inject(AXMConversationFocusService);\n private readonly inAppSync = inject(AXMConversationInAppNotificationSyncService);\n\n async execute(input: AXMSyncReadStateOptions | unknown): AXPCommandExecuteResultPromise<void> {\n const options = input as AXMSyncReadStateOptions;\n const conversationId = options.conversationId?.trim();\n if (!conversationId) {\n return { success: true, kind: 'object', data: undefined };\n }\n\n const allowWithoutFocus = Boolean(options.force || options.fromInbox);\n if (!allowWithoutFocus && !this.focus.isFocused(conversationId)) {\n return { success: true, kind: 'object', data: undefined };\n }\n\n const currentUserId = options.currentUserId?.trim();\n const messageIds = options.messageIds?.filter((id) => id?.trim()) ?? [];\n const idsToMark =\n messageIds.length > 0\n ? messageIds\n : currentUserId\n ? await this.collectUnreadMessageIds(conversationId, currentUserId)\n : [];\n\n if (idsToMark.length > 0 && currentUserId) {\n await this.focus.markMessagesRead(conversationId, idsToMark, currentUserId);\n } else {\n const cachedConversation = this.store.getCachedConversation(conversationId);\n if ((cachedConversation?.unreadCount ?? 0) !== 0) {\n await this.store.setUnreadCount(conversationId, 0);\n }\n }\n\n if (currentUserId) {\n await this.inAppSync.markConversationInAppNotificationRead(conversationId, currentUserId, {\n force: true,\n });\n }\n return { success: true, kind: 'object', data: undefined };\n }\n\n private async collectUnreadMessageIds(conversationId: string, currentUserId: string): Promise<string[]> {\n const cached = this.store.getCachedMessageList(conversationId);\n const messages = cached ?? (await this.store.loadConversationMessages(conversationId));\n return messages\n .filter((message) => axmMessageCountsTowardUnread(message, currentUserId))\n .map((message) => message.id)\n .filter((id): id is string => Boolean(id?.trim()));\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAyBA;AAEA;MAGa,mCAAmC,CAAA;AADhD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AACjD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAC3C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2CAA2C,CAAC;AAgDjF,IAAA;IA9CC,MAAM,OAAO,CAAC,KAAwC,EAAA;QACpD,MAAM,OAAO,GAAG,KAAgC;QAChD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE;QACrD,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3D;AAEA,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;AACrE,QAAA,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;AAC/D,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3D;QAEA,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACvE,QAAA,MAAM,SAAS,GACb,UAAU,CAAC,MAAM,GAAG;AAClB,cAAE;AACF,cAAE;kBACE,MAAM,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,aAAa;kBAChE,EAAE;QAEV,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,EAAE;AACzC,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC;QAC7E;aAAO;YACL,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,cAAc,CAAC;YAC3E,IAAI,CAAC,kBAAkB,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,EAAE;gBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC;YACpD;QACF;QAEA,IAAI,aAAa,EAAE;YACjB,MAAM,IAAI,CAAC,SAAS,CAAC,qCAAqC,CAAC,cAAc,EAAE,aAAa,EAAE;AACxF,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;AAEQ,IAAA,MAAM,uBAAuB,CAAC,cAAsB,EAAE,aAAqB,EAAA;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,cAAc,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;AACtF,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,OAAO,KAAK,4BAA4B,CAAC,OAAO,EAAE,aAAa,CAAC;aACxE,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;AAC3B,aAAA,MAAM,CAAC,CAAC,EAAE,KAAmB,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD;8GAlDW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cADtB,MAAM,EAAA,CAAA,CAAA;;2FACnB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -1,2 +1,2 @@
1
- export { H as AXMAddReactionCommand, G as AXMAssistSuggestionChipsComponent, I as AXMChatComponent, m as AXMChatConversationApi, l as AXMChatEntityConversationApi, J as AXMChatEntityConversationFocusHandler, K as AXMChatEntityConversationRoomQueryService, L as AXMChatEntityMessageApi, M as AXMChatEntityRealtimeApi, N as AXMChatEntityUserApi, O as AXMChatMessageApi, P as AXMChatRealtimeApi, k as AXMChatUserApi, g as AXMCommentComponent, Q as AXMCommentManagementService, R as AXMCommentPopupComponent, S as AXMCommentRealtimeService, T as AXMCommentRealtimeServiceImpl, U as AXMCommentService, V as AXMCommentServiceImpl, W as AXMCommentWidgetViewComponent, X as AXMConversationAssistBackgroundOperationHandler, A as AXMConversationEntityStoreService, d as AXMConversationFocusService, Y as AXMConversationModule, r as AXMConversationRealtimeBus, Z as AXMEntityChatService, _ as AXMMiniChatComponent, $ as AXMMiniChatHeaderSlotComponent, a0 as AXMMiniChatHistoryComponent, a1 as AXMMiniChatInboxHistoryComponent, a2 as AXMMiniChatInboxPanelHostComponent, a3 as AXMMiniChatLauncherComponent, a4 as AXMMiniChatPanelComponent, a5 as AXMMiniChatPanelService, a6 as AXMShowCommentPopupCommand, a7 as AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, a8 as AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, a9 as AXM_AI_MANAGEMENT_MODULE_NAME, aa as AXM_ASSIST_DEFAULT_RESOLVER_PORT, ab as AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, ac as AXM_CHAT_ASSIST_CATALOG_PORT, ad as AXM_CHAT_EMPTY_STATE_COMPONENT, ae as AXM_CHAT_SIDEBAR_ACTION_PROVIDER, af as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, ag as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, ah as AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, ai as AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, b as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, aj as AXM_CONVERSATION_TAB_BOT, ak as AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, al as AXM_MINI_CHAT_INBOX_SESSION_KEY, am as AXPCommentWidget, an as COMMENTS_PAGE_COMPONENT_KEY, ao as CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, ap as CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, aq as CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, ar as CONVERSATION_OPEN_CHAT_COMMAND, as as CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, at as CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, au as CONVERSATION_START_ASSIST_CHAT_COMMAND, av as CONVERSATION_START_DIRECT_CHAT_COMMAND, aw as CONVERSATION_SYNC_READ_STATE_COMMAND, ax as axmApplyAnswerTextToAssistPayloadLine, ay as axmAssistFollowUpItemsFromUnknown, az as axmAssistHasFinalizeMetadata, aA as axmAssistLastTranscriptLine, aB as axmAssistNormalizeFollowUpItemForConversation, aC as axmAssistNormalizeFollowUpItemsForConversation, aD as axmAssistPersistedMessageLooksComplete, aE as axmAssistResolveFollowUpCommandName, aF as axmAssistStarterPromptChipItems, aG as axmAssistUserFacingPayloadLine, aH as axmAssistUserVisibleItemsForLine, aI as axmAssistWidgetNodeDedupeKey, B as axmAssistWidgetNodeFromUnknown, aJ as axmBuildAiChatConversationMetadata, aK as axmBuildAssistPeerParticipantFromCreateData, aL as axmBuildAssistPeerParticipantFromId, aM as axmBuildAssistTranscriptLinePayload, aN as axmBuildAutoTitleFromUserText, aO as axmBuildEntityChatConversationMetadata, aP as axmChatAiPeerParticipantId, aQ as axmChatAiTargetAvatarUrl, aR as axmChatAiTargetDisplayDescription, aS as axmChatAiTargetDisplayName, aT as axmChatAiTargetShortcutDescriptionKey, aU as axmCoerceDate, aV as axmCoerceTimestampMs, aW as axmComputeConversationUnreadCount, c as axmConversationHasAiChat, aX as axmConversationIsEntityChat, aY as axmConversationMatchesEntity, aZ as axmExtractAssistIdFromMetadata, a_ as axmExtractAssistSnapshotFromMetadata, a$ as axmExtractDirectAgentIdFromMetadata, b0 as axmExtractEntityRefFromMetadata, b1 as axmExtractModelEntityIdFromMetadata, b2 as axmExtractTextFromPayload, b3 as axmFilterChatAiTargets, b4 as axmHydrateRealtimeConversationMessage, b5 as axmIsAssistBotConversation, b6 as axmIsAssistPeerParticipant, b7 as axmIsAssistRetryableStatus, b8 as axmIsAssistStreamingMessage, b9 as axmIsAssistStreamingStatus, ba as axmIsAssistTerminalStatus, bb as axmIsUnsupportedLegacyAgentAssistConversation, bc as axmLoadChatAiTargets, bd as axmMessageCountsTowardUnread, be as axmMessageEntityToMessage, bf as axmNormalizeAssistTranscriptForChatUi, bg as axmNormalizeAssistTranscriptLineResponses, bh as axmParseAssistTranscriptLinePayload, z as axmParseAssistTranscriptTextEnvelope, C as axmPartitionAssistAnswerText, w as axmReadAssistAiTranscript, x as axmReadAssistAiTranscriptRaw, bi as axmReadAssistResponseError, bj as axmReadAssistResponseStatus, bk as axmReadPlainTextMessagePayload, bl as axmReadReplyToUserMessageId, bm as axmResolveAssistFinalAnswerText, bn as axmResolveChatAiTargetText, bo as axmRoomEntityToConversation, bp as axmRoomWithAssistPeerDisplayName, bq as axmSanitizeAssistUserAnswerText, br as axmShouldPreferPersistedAssistOverLiveCache, bs as axmShowCommentPopupCommandDefinition, bt as axmSortMessagesNewestFirst, bu as axmSyncAssistPeerDisplayName, D as axmSyntheticEmbedMessage, bv as axmUserRowToParticipant, bw as commentsPlugin, bx as createConversationServiceSessionAdapter, by as persistChatAttachment } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs';
1
+ export { M as AXMAddReactionCommand, L as AXMAssistSuggestionChipsComponent, N as AXMChatComponent, p as AXMChatConversationApi, o as AXMChatEntityConversationApi, O as AXMChatEntityConversationFocusHandler, P as AXMChatEntityConversationRoomQueryService, Q as AXMChatEntityMessageApi, R as AXMChatEntityRealtimeApi, S as AXMChatEntityUserApi, T as AXMChatMessageApi, U as AXMChatRealtimeApi, n as AXMChatUserApi, h as AXMCommentComponent, V as AXMCommentManagementService, W as AXMCommentPopupComponent, X as AXMCommentRealtimeService, Y as AXMCommentRealtimeServiceImpl, Z as AXMCommentService, _ as AXMCommentServiceImpl, $ as AXMCommentWidgetViewComponent, a0 as AXMConversationAssistBackgroundOperationHandler, A as AXMConversationEntityStoreService, d as AXMConversationFocusService, a1 as AXMConversationModule, t as AXMConversationRealtimeBus, a2 as AXMEntityChatService, a3 as AXMMiniChatComponent, a4 as AXMMiniChatHeaderSlotComponent, a5 as AXMMiniChatHistoryComponent, a6 as AXMMiniChatInboxHistoryComponent, a7 as AXMMiniChatInboxPanelHostComponent, a8 as AXMMiniChatLauncherComponent, a9 as AXMMiniChatPanelComponent, aa as AXMMiniChatPanelService, ab as AXMShowCommentPopupCommand, ac as AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, ad as AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, ae as AXM_AI_MANAGEMENT_MODULE_NAME, af as AXM_ASSIST_DEFAULT_RESOLVER_PORT, ag as AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, ah as AXM_CHAT_ASSIST_CATALOG_PORT, ai as AXM_CHAT_EMPTY_STATE_COMPONENT, aj as AXM_CHAT_SIDEBAR_ACTION_PROVIDER, ak as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, al as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, am as AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, an as AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, b as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, ao as AXM_CONVERSATION_TAB_BOT, ap as AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, aq as AXM_MINI_CHAT_INBOX_SESSION_KEY, ar as AXPCommentWidget, as as COMMENTS_PAGE_COMPONENT_KEY, at as CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, au as CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, av as CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, aw as CONVERSATION_OPEN_CHAT_COMMAND, ax as CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, ay as CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, az as CONVERSATION_START_ASSIST_CHAT_COMMAND, aA as CONVERSATION_START_DIRECT_CHAT_COMMAND, aB as CONVERSATION_SYNC_READ_STATE_COMMAND, aC as axmApplyAnswerTextToAssistPayloadLine, aD as axmAssistFollowUpItemsFromUnknown, aE as axmAssistHasFinalizeMetadata, aF as axmAssistLastTranscriptLine, aG as axmAssistNormalizeFollowUpItemForConversation, aH as axmAssistNormalizeFollowUpItemsForConversation, aI as axmAssistPersistedMessageLooksComplete, aJ as axmAssistResolveFollowUpCommandName, aK as axmAssistStarterPromptChipItems, aL as axmAssistUserFacingPayloadLine, aM as axmAssistUserVisibleItemsForLine, aN as axmAssistWidgetNodeDedupeKey, G as axmAssistWidgetNodeFromUnknown, aO as axmBuildAiChatConversationMetadata, aP as axmBuildAssistPeerParticipantFromCreateData, aQ as axmBuildAssistPeerParticipantFromId, aR as axmBuildAssistTranscriptLinePayload, aS as axmBuildAutoTitleFromUserText, aT as axmBuildEntityChatConversationMetadata, aU as axmChatAiPeerParticipantId, aV as axmChatAiTargetAvatarUrl, aW as axmChatAiTargetDisplayDescription, aX as axmChatAiTargetDisplayName, aY as axmChatAiTargetShortcutDescriptionKey, aZ as axmCoerceDate, a_ as axmCoerceTimestampMs, a$ as axmComputeConversationUnreadCount, c as axmConversationHasAiChat, b0 as axmConversationIsEntityChat, b1 as axmConversationMatchesEntity, b2 as axmExtractAssistIdFromMetadata, b3 as axmExtractAssistSnapshotFromMetadata, b4 as axmExtractDirectAgentIdFromMetadata, b5 as axmExtractEntityRefFromMetadata, b6 as axmExtractModelEntityIdFromMetadata, b7 as axmExtractTextFromPayload, b8 as axmFilterChatAiTargets, b9 as axmHydrateRealtimeConversationMessage, ba as axmIsAssistBotConversation, bb as axmIsAssistPeerParticipant, bc as axmIsAssistResponseMessage, bd as axmIsAssistRetryableStatus, be as axmIsAssistStreamingMessage, bf as axmIsAssistStreamingStatus, bg as axmIsAssistTerminalStatus, bh as axmIsUnsupportedLegacyAgentAssistConversation, bi as axmLoadChatAiTargets, f as axmMessageCountsTowardUnread, bj as axmMessageEntityToMessage, bk as axmNormalizeAssistTranscriptForChatUi, bl as axmNormalizeAssistTranscriptLineResponses, bm as axmParseAssistTranscriptLinePayload, F as axmParseAssistTranscriptTextEnvelope, H as axmPartitionAssistAnswerText, bn as axmPreferLocalUnreadCount, C as axmReadAssistAiTranscript, D as axmReadAssistAiTranscriptRaw, bo as axmReadAssistResponseError, bp as axmReadAssistResponseStatus, bq as axmReadPlainTextMessagePayload, br as axmReadReplyToUserMessageId, bs as axmResolveAssistFinalAnswerText, bt as axmResolveChatAiTargetText, bu as axmRoomEntityToConversation, bv as axmRoomWithAssistPeerDisplayName, bw as axmSanitizeAssistUserAnswerText, bx as axmShouldPreferPersistedAssistOverLiveCache, by as axmShowCommentPopupCommandDefinition, bz as axmSortMessagesNewestFirst, bA as axmSyncAssistPeerDisplayName, I as axmSyntheticEmbedMessage, bB as axmUserRowToParticipant, bC as commentsPlugin, bD as createConversationServiceSessionAdapter, bE as persistChatAttachment } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs';
2
2
  //# sourceMappingURL=acorex-platform-module-conversation-client.mjs.map
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-conversation-client",
3
- "version": "0.0.32",
3
+ "version": "0.0.37",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0 || ^22.0.0",
7
7
  "@angular/core": "^21.0.0 || ^22.0.0"
8
8
  },
9
9
  "dependencies": {
10
- "@acorex-platform/extension-rtc-core-gateway": "0.0.32",
10
+ "@acorex-platform/extension-rtc-core-gateway": "0.0.37",
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "module": "fesm2022/acorex-platform-module-conversation-client.mjs",
@@ -23,6 +23,22 @@
23
23
  "./contracts": {
24
24
  "types": "./types/acorex-platform-module-conversation-client-contracts.d.ts",
25
25
  "default": "./fesm2022/acorex-platform-module-conversation-client-contracts.mjs"
26
+ },
27
+ "./contracts/entities/message": {
28
+ "types": "./types/acorex-platform-module-conversation-client-contracts-entities-message.d.ts",
29
+ "default": "./fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs"
30
+ },
31
+ "./contracts/entities/room": {
32
+ "types": "./types/acorex-platform-module-conversation-client-contracts-entities-room.d.ts",
33
+ "default": "./fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs"
34
+ },
35
+ "./contracts/entity-catalog": {
36
+ "types": "./types/acorex-platform-module-conversation-client-contracts-entity-catalog.d.ts",
37
+ "default": "./fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs"
38
+ },
39
+ "./local-entities": {
40
+ "types": "./types/acorex-platform-module-conversation-client-local-entities.d.ts",
41
+ "default": "./fesm2022/acorex-platform-module-conversation-client-local-entities.mjs"
26
42
  }
27
43
  },
28
44
  "type": "module"
@@ -0,0 +1,5 @@
1
+ import { AXPEntity } from '@acorex-platform/framework-shared/entity';
2
+
3
+ declare function messageFactory(): Promise<AXPEntity | null>;
4
+
5
+ export { messageFactory };
@@ -0,0 +1,5 @@
1
+ import { AXPEntity } from '@acorex-platform/framework-shared/entity';
2
+
3
+ declare function roomFactory(): Promise<AXPEntity | null>;
4
+
5
+ export { roomFactory };
@@ -0,0 +1,10 @@
1
+ import { AXPLocalEntityCatalog } from '@acorex-platform/framework-shared/entity';
2
+
3
+ /**
4
+ * Lazy per-entity layout factories. Do not re-export from the contracts barrel
5
+ * so RootConfig imports stay light. Server seed and client `local-entities`
6
+ * consume this catalog explicitly.
7
+ */
8
+ declare const conversationLocalEntityCatalog: AXPLocalEntityCatalog;
9
+
10
+ export { conversationLocalEntityCatalog };
@@ -0,0 +1,12 @@
1
+ import * as _angular_core from '@angular/core';
2
+ export { conversationLocalEntityCatalog } from '@acorex-platform/module-conversation-client/contracts/entity-catalog';
3
+
4
+ /**
5
+ * Registers conversation layouts on the client from packaged factories.
6
+ * Each `import()` targets a secondary entry so unused entities stay out of the
7
+ * bundle. Do not add this to the demo app; demo continues to load layouts via
8
+ * `Domain:GetEntityLayout`.
9
+ */
10
+ declare function provideConversationLocalEntities(): _angular_core.EnvironmentProviders;
11
+
12
+ export { provideConversationLocalEntities };
@@ -47,6 +47,7 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
47
47
  private readonly conversationService;
48
48
  private readonly chatConversationApi;
49
49
  private readonly miniChatPanelService;
50
+ private readonly activeCallSessions;
50
51
  private readonly composerService;
51
52
  private readonly infoBarService;
52
53
  /** Eagerly resolves tenant debug mode for assist debug download action visibility. */
@@ -138,6 +139,7 @@ declare abstract class AXMChatRealtimeApi extends AXConversationRealtimeApi {
138
139
  * Entity-backed implementation of {@link AXMChatConversationApi} using Conversation.room.
139
140
  */
140
141
  declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
142
+ #private;
141
143
  private readonly entityService;
142
144
  private readonly filterService;
143
145
  private readonly userApi;
@@ -166,9 +168,18 @@ declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
166
168
  findEntityConversations(entityType: string, entityId: string): Promise<AXConversation[]>;
167
169
  getParticipants(conversationId: string): Promise<AXConversationParticipant[]>;
168
170
  addParticipants(conversationId: string, userIds: string[]): Promise<AXConversation>;
171
+ /**
172
+ * Creates a new group from a private chat when a third participant accepts a call invite.
173
+ * The private room is left unchanged; the inviter becomes group owner.
174
+ */
175
+ forkPrivateToGroupForCall(sourceConversationId: string, acceptedUserIds: string[], options?: {
176
+ callId?: string;
177
+ }): Promise<AXConversation>;
178
+ findForkedGroupFromPrivateChat(sourceConversationId: string, callId?: string): Promise<AXConversation | null>;
169
179
  removeParticipant(conversationId: string, userId: string): Promise<AXConversation>;
170
180
  leaveConversation(conversationId: string): Promise<void>;
171
181
  updateParticipant(conversationId: string, update: AXConversationParticipantUpdate): Promise<AXConversation>;
182
+ private persistParticipants;
172
183
  uploadConversationAvatar(_conversationId: string, _file: File): Promise<string>;
173
184
  getConversationMedia(_conversationId: string, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<unknown>>;
174
185
  addConversationTags(_conversationId: string, _tags: string[]): Promise<void>;
@@ -650,6 +661,8 @@ declare function axmAssistPersistedMessageLooksComplete(message: {
650
661
  metadata?: unknown;
651
662
  }): boolean;
652
663
 
664
+ /** True when the bubble is an assist-response row (streaming or terminal). */
665
+ declare function axmIsAssistResponseMessage(message: AXConversationMessage): boolean;
653
666
  /**
654
667
  * True while an assist placeholder is still generating (not yet a deliverable reply).
655
668
  */
@@ -660,6 +673,12 @@ declare function axmIsAssistStreamingMessage(message: AXConversationMessage): bo
660
673
  declare function axmMessageCountsTowardUnread(message: AXConversationMessage, currentUserId: string): boolean;
661
674
  /** Recomputes unread badge count from persisted messages. */
662
675
  declare function axmComputeConversationUnreadCount(messages: AXConversationMessage[], currentUserId: string): number;
676
+ /**
677
+ * `room.unreadCount` is a shared document field, not per-user.
678
+ * A sender's last-message touch refetch often carries 0 and must not replace
679
+ * a higher in-memory unread on the recipient.
680
+ */
681
+ declare function axmPreferLocalUnreadCount(localUnread: number | undefined, incomingUnread: number | undefined): number;
663
682
 
664
683
  declare function axmCoerceTimestampMs(value: unknown): number;
665
684
  /** Coerces entity / IndexedDB values to {@link Date} for conversation UI sorting. */
@@ -734,6 +753,8 @@ declare class AXMConversationEntityStoreService {
734
753
  private readonly persistChains;
735
754
  /** Avoids GET-by-id existence probes for assist rows already written in this session. */
736
755
  private readonly persistedMessageIds;
756
+ /** Bumped on session reset so in-flight assist persists do not write into the next user. */
757
+ private persistGeneration;
737
758
  /** In-memory snapshots to avoid redundant GetById after local writes. */
738
759
  private readonly conversationCache;
739
760
  private readonly messageCache;
@@ -764,6 +785,7 @@ declare class AXMConversationEntityStoreService {
764
785
  cacheEmptyMessageList(conversationId: string): void;
765
786
  private patchMessageListCache;
766
787
  private appendToMessageListCache;
788
+ private mergeRealtimeMessagesIntoList;
767
789
  loadConversationMessages(conversationId: string, options?: {
768
790
  skip?: number;
769
791
  take?: number;
@@ -1555,6 +1577,7 @@ declare class AXMMiniChatPanelService {
1555
1577
  private buildEntityKey;
1556
1578
  private disposeOverlayOnly;
1557
1579
  private handleOverlayDisposed;
1580
+ private finishOverlayClose;
1558
1581
  private bindDismissHandlers;
1559
1582
  /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
1560
1583
  private isInsideInteractiveSurface;
@@ -1684,5 +1707,5 @@ declare const CONVERSATION_START_DIRECT_CHAT_COMMAND = "Conversation:StartDirect
1684
1707
  /** Opens an existing conversation in the chat app. */
1685
1708
  declare const CONVERSATION_OPEN_CHAT_COMMAND = "Conversation:OpenChat";
1686
1709
 
1687
- export { AXMAddReactionCommand, AXMAssistSuggestionChipsComponent, AXMChatComponent, AXMChatConversationApi, AXMChatEntityConversationApi, AXMChatEntityConversationFocusHandler, AXMChatEntityConversationRoomQueryService, AXMChatEntityMessageApi, AXMChatEntityRealtimeApi, AXMChatEntityUserApi, AXMChatMessageApi, AXMChatRealtimeApi, AXMChatUserApi, AXMCommentComponent, AXMCommentManagementService, AXMCommentPopupComponent, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXMCommentWidgetViewComponent, AXMConversationAssistBackgroundOperationHandler, AXMConversationEntityStoreService, AXMConversationFocusService, AXMConversationModule, AXMConversationRealtimeBus, AXMEntityChatService, AXMMiniChatComponent, AXMMiniChatHeaderSlotComponent, AXMMiniChatHistoryComponent, AXMMiniChatInboxHistoryComponent, AXMMiniChatInboxPanelHostComponent, AXMMiniChatLauncherComponent, AXMMiniChatPanelComponent, AXMMiniChatPanelService, AXMShowCommentPopupCommand, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, AXM_AI_MANAGEMENT_MODULE_NAME, AXM_ASSIST_DEFAULT_RESOLVER_PORT, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, AXM_CHAT_ASSIST_CATALOG_PORT, AXM_CHAT_EMPTY_STATE_COMPONENT, AXM_CHAT_SIDEBAR_ACTION_PROVIDER, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, AXM_CONVERSATION_ASSIST_RESPONSE_PORT, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, AXM_CONVERSATION_TAB_BOT, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, AXM_MINI_CHAT_INBOX_SESSION_KEY, AXPCommentWidget, COMMENTS_PAGE_COMPONENT_KEY, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, CONVERSATION_OPEN_CHAT_COMMAND, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, CONVERSATION_START_ASSIST_CHAT_COMMAND, CONVERSATION_START_DIRECT_CHAT_COMMAND, CONVERSATION_SYNC_READ_STATE_COMMAND, axmApplyAnswerTextToAssistPayloadLine, axmAssistFollowUpItemsFromUnknown, axmAssistHasFinalizeMetadata, axmAssistLastTranscriptLine, axmAssistNormalizeFollowUpItemForConversation, axmAssistNormalizeFollowUpItemsForConversation, axmAssistPersistedMessageLooksComplete, axmAssistResolveFollowUpCommandName, axmAssistStarterPromptChipItems, axmAssistUserFacingPayloadLine, axmAssistUserVisibleItemsForLine, axmAssistWidgetNodeDedupeKey, axmAssistWidgetNodeFromUnknown, axmBuildAiChatConversationMetadata, axmBuildAssistPeerParticipantFromCreateData, axmBuildAssistPeerParticipantFromId, axmBuildAssistTranscriptLinePayload, axmBuildAutoTitleFromUserText, axmBuildEntityChatConversationMetadata, axmChatAiPeerParticipantId, axmChatAiTargetAvatarUrl, axmChatAiTargetDisplayDescription, axmChatAiTargetDisplayName, axmChatAiTargetShortcutDescriptionKey, axmCoerceDate, axmCoerceTimestampMs, axmComputeConversationUnreadCount, axmConversationHasAiChat, axmConversationIsEntityChat, axmConversationMatchesEntity, axmExtractAssistIdFromMetadata, axmExtractAssistSnapshotFromMetadata, axmExtractDirectAgentIdFromMetadata, axmExtractEntityRefFromMetadata, axmExtractModelEntityIdFromMetadata, axmExtractTextFromPayload, axmFilterChatAiTargets, axmHydrateRealtimeConversationMessage, axmIsAssistBotConversation, axmIsAssistPeerParticipant, axmIsAssistRetryableStatus, axmIsAssistStreamingMessage, axmIsAssistStreamingStatus, axmIsAssistTerminalStatus, axmIsUnsupportedLegacyAgentAssistConversation, axmLoadChatAiTargets, axmMessageCountsTowardUnread, axmMessageEntityToMessage, axmNormalizeAssistTranscriptForChatUi, axmNormalizeAssistTranscriptLineResponses, axmParseAssistTranscriptLinePayload, axmParseAssistTranscriptTextEnvelope, axmPartitionAssistAnswerText, axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw, axmReadAssistResponseError, axmReadAssistResponseStatus, axmReadPlainTextMessagePayload, axmReadReplyToUserMessageId, axmResolveAssistFinalAnswerText, axmResolveChatAiTargetText, axmRoomEntityToConversation, axmRoomWithAssistPeerDisplayName, axmSanitizeAssistUserAnswerText, axmShouldPreferPersistedAssistOverLiveCache, axmShowCommentPopupCommandDefinition, axmSortMessagesNewestFirst, axmSyncAssistPeerDisplayName, axmSyntheticEmbedMessage, axmUserRowToParticipant, commentsPlugin, createConversationServiceSessionAdapter, persistChatAttachment };
1710
+ export { AXMAddReactionCommand, AXMAssistSuggestionChipsComponent, AXMChatComponent, AXMChatConversationApi, AXMChatEntityConversationApi, AXMChatEntityConversationFocusHandler, AXMChatEntityConversationRoomQueryService, AXMChatEntityMessageApi, AXMChatEntityRealtimeApi, AXMChatEntityUserApi, AXMChatMessageApi, AXMChatRealtimeApi, AXMChatUserApi, AXMCommentComponent, AXMCommentManagementService, AXMCommentPopupComponent, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXMCommentWidgetViewComponent, AXMConversationAssistBackgroundOperationHandler, AXMConversationEntityStoreService, AXMConversationFocusService, AXMConversationModule, AXMConversationRealtimeBus, AXMEntityChatService, AXMMiniChatComponent, AXMMiniChatHeaderSlotComponent, AXMMiniChatHistoryComponent, AXMMiniChatInboxHistoryComponent, AXMMiniChatInboxPanelHostComponent, AXMMiniChatLauncherComponent, AXMMiniChatPanelComponent, AXMMiniChatPanelService, AXMShowCommentPopupCommand, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, AXM_AI_MANAGEMENT_MODULE_NAME, AXM_ASSIST_DEFAULT_RESOLVER_PORT, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, AXM_CHAT_ASSIST_CATALOG_PORT, AXM_CHAT_EMPTY_STATE_COMPONENT, AXM_CHAT_SIDEBAR_ACTION_PROVIDER, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, AXM_CONVERSATION_ASSIST_RESPONSE_PORT, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, AXM_CONVERSATION_TAB_BOT, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, AXM_MINI_CHAT_INBOX_SESSION_KEY, AXPCommentWidget, COMMENTS_PAGE_COMPONENT_KEY, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, CONVERSATION_OPEN_CHAT_COMMAND, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, CONVERSATION_START_ASSIST_CHAT_COMMAND, CONVERSATION_START_DIRECT_CHAT_COMMAND, CONVERSATION_SYNC_READ_STATE_COMMAND, axmApplyAnswerTextToAssistPayloadLine, axmAssistFollowUpItemsFromUnknown, axmAssistHasFinalizeMetadata, axmAssistLastTranscriptLine, axmAssistNormalizeFollowUpItemForConversation, axmAssistNormalizeFollowUpItemsForConversation, axmAssistPersistedMessageLooksComplete, axmAssistResolveFollowUpCommandName, axmAssistStarterPromptChipItems, axmAssistUserFacingPayloadLine, axmAssistUserVisibleItemsForLine, axmAssistWidgetNodeDedupeKey, axmAssistWidgetNodeFromUnknown, axmBuildAiChatConversationMetadata, axmBuildAssistPeerParticipantFromCreateData, axmBuildAssistPeerParticipantFromId, axmBuildAssistTranscriptLinePayload, axmBuildAutoTitleFromUserText, axmBuildEntityChatConversationMetadata, axmChatAiPeerParticipantId, axmChatAiTargetAvatarUrl, axmChatAiTargetDisplayDescription, axmChatAiTargetDisplayName, axmChatAiTargetShortcutDescriptionKey, axmCoerceDate, axmCoerceTimestampMs, axmComputeConversationUnreadCount, axmConversationHasAiChat, axmConversationIsEntityChat, axmConversationMatchesEntity, axmExtractAssistIdFromMetadata, axmExtractAssistSnapshotFromMetadata, axmExtractDirectAgentIdFromMetadata, axmExtractEntityRefFromMetadata, axmExtractModelEntityIdFromMetadata, axmExtractTextFromPayload, axmFilterChatAiTargets, axmHydrateRealtimeConversationMessage, axmIsAssistBotConversation, axmIsAssistPeerParticipant, axmIsAssistResponseMessage, axmIsAssistRetryableStatus, axmIsAssistStreamingMessage, axmIsAssistStreamingStatus, axmIsAssistTerminalStatus, axmIsUnsupportedLegacyAgentAssistConversation, axmLoadChatAiTargets, axmMessageCountsTowardUnread, axmMessageEntityToMessage, axmNormalizeAssistTranscriptForChatUi, axmNormalizeAssistTranscriptLineResponses, axmParseAssistTranscriptLinePayload, axmParseAssistTranscriptTextEnvelope, axmPartitionAssistAnswerText, axmPreferLocalUnreadCount, axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw, axmReadAssistResponseError, axmReadAssistResponseStatus, axmReadPlainTextMessagePayload, axmReadReplyToUserMessageId, axmResolveAssistFinalAnswerText, axmResolveChatAiTargetText, axmRoomEntityToConversation, axmRoomWithAssistPeerDisplayName, axmSanitizeAssistUserAnswerText, axmShouldPreferPersistedAssistOverLiveCache, axmShowCommentPopupCommandDefinition, axmSortMessagesNewestFirst, axmSyncAssistPeerDisplayName, axmSyntheticEmbedMessage, axmUserRowToParticipant, commentsPlugin, createConversationServiceSessionAdapter, persistChatAttachment };
1688
1711
  export type { AXMAddReactionCommandInput, AXMAssistConversationSnapshotLite, AXMAssistDefaultResolverPort, AXMAssistStarterPromptChipOptions, AXMChatAiTargetRow, AXMChatAssistCatalogPort, AXMChatSidebarAction, AXMComment, AXMCommentEvent, AXMCommentEventType, AXMCommentThread, AXMConversationAssistResponsePort, AXMConversationRegularAutoReplyPort, AXMConversationServiceSessionAdapter, AXMEntityChatCreateData, AXMEntityChatRef, AXMMiniChatInboxConversationFilter, AXMMiniChatPanelAnchor, AXMMiniChatPanelOpenOptions, AXMMiniChatPanelPosition, AXMMiniChatPanelScope, AXMMiniChatPanelSessionState, AXMMiniChatPanelSide, AXMSendAssistChatMessageOptions, AXMShowCommentPopupCommandInput, AXMThreadEvent, AXMThreadEventType, AXPAiChatFollowUpCommandLite, AXPAiChatFollowUpItemLite, AXPAiChatMessageLite, AXPAiChatNodeOrFollowUpResponseLite, AXPAiChatTextResponseLite, AXPAiEffectiveAssistRowLite, AxmAssistPartitionedAnswerText, AxmAssistResponseStatus, AxmAssistTranscriptLinePayload, AxmAssistUserVisibleItem, CommentsDisplayMode, CommentsPluginOptions };