@acorex-platform/module-conversation-client 0.0.59 → 0.0.60

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 (29) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs} +379 -276
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-e_3t71gw.mjs → acorex-platform-module-conversation-client-after-message-sent.command-JjZrYD2R.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-e_3t71gw.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-JjZrYD2R.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BmfLuUaU.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BhED754u.mjs} +3 -3
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BmfLuUaU.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-BhED754u.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-conversation-client-assist-message-renderer.component-jsHo7NZq.mjs → acorex-platform-module-conversation-client-assist-message-renderer.component-CR4OxDV6.mjs} +3 -3
  8. package/fesm2022/{acorex-platform-module-conversation-client-assist-message-renderer.component-jsHo7NZq.mjs.map → acorex-platform-module-conversation-client-assist-message-renderer.component-CR4OxDV6.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-ePQikBd2.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-DJreBgNo.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-ePQikBd2.mjs.map → acorex-platform-module-conversation-client-chat-call-session-page.component-DJreBgNo.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-ooiJkC8U.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-BEa8wEJt.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-ooiJkC8U.mjs.map → acorex-platform-module-conversation-client-chat-call-start-popup.component-BEa8wEJt.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-BW_XRzT6.mjs → acorex-platform-module-conversation-client-comments-page.component-BsE6bCZT.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-BW_XRzT6.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BsE6bCZT.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-Cdd6Cxkf.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-B1mvtbaA.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-Cdd6Cxkf.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-B1mvtbaA.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-TfSLQn3K.mjs → acorex-platform-module-conversation-client-open-chat.command-CbJ0gXZq.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-TfSLQn3K.mjs.map → acorex-platform-module-conversation-client-open-chat.command-CbJ0gXZq.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-CC0jPXGP.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BvzWaKX4.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-CC0jPXGP.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BvzWaKX4.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-BUtdyniC.mjs → acorex-platform-module-conversation-client-sync-read-state.command-DQXezGRu.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-BUtdyniC.mjs.map → acorex-platform-module-conversation-client-sync-read-state.command-DQXezGRu.mjs.map} +1 -1
  23. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  24. package/i18n/en-AU/conversation.json +6 -1
  25. package/i18n/en-US/conversation.json +6 -1
  26. package/i18n/fa-IR/conversation.json +6 -1
  27. package/package.json +2 -2
  28. package/types/acorex-platform-module-conversation-client.d.ts +41 -44
  29. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs.map +0 -1
@@ -9,7 +9,7 @@ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translat
9
9
  import { AsyncPipe } from '@angular/common';
10
10
  import * as i0 from '@angular/core';
11
11
  import { inject, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
12
- import { H as AXMChatCallActiveSessionService, I as axmResolveConversationListAvatar, J as axmEnsureChatCallRtcReady, K as axmOpenChatCallSessionDialog } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs';
12
+ import { H as AXMChatCallActiveSessionService, I as axmResolveConversationListAvatar, J as axmEnsureChatCallRtcReady, K as axmOpenChatCallSessionDialog } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs';
13
13
 
14
14
  //#region ----- Imports -----
15
15
  //#endregion
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
93
93
  }] });
94
94
 
95
95
  export { AXMChatCallStartPopupComponent };
96
- //# sourceMappingURL=acorex-platform-module-conversation-client-chat-call-start-popup.component-ooiJkC8U.mjs.map
96
+ //# sourceMappingURL=acorex-platform-module-conversation-client-chat-call-start-popup.component-BEa8wEJt.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-chat-call-start-popup.component-ooiJkC8U.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/call/chat-call-start-popup.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/call/chat-call-start-popup.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRtcApiAbstract } from '@acorex-platform/extension-rtc-core-gateway';\nimport type { AXConversation } from '@acorex/components/conversation';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\n\nimport { axmResolveConversationListAvatar } from '../utils/chat-avatar.util';\nimport { axmEnsureChatCallRtcReady } from './chat-call-rtc-ready.util';\nimport type { AXMChatCallMediaType } from './chat-call-session.types';\nimport { axmOpenChatCallSessionDialog } from './open-chat-call-session.dialog';\nimport { AXMChatCallActiveSessionService } from './chat-call-active-session.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type { AXMChatCallMediaType } from './chat-call-session.types';\n\nexport interface AXMChatCallStartPopupData {\n conversation: AXConversation;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n/**\n * Call-start popup: choose voice or video for a conversation contact.\n */\n@Component({\n selector: 'axm-chat-call-start-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-dark',\n },\n imports: [AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n templateUrl: './chat-call-start-popup.component.html',\n styles: [\n `\n .axm-chat-call-start-overlay .ax-popup {\n width: min(24rem, 92vw) !important;\n max-width: 92vw;\n }\n\n axm-chat-call-start-popup {\n display: block;\n width: 100%;\n }\n\n .axm-chat-call-start {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n min-height: 0;\n padding: 2rem 1.25rem 1.5rem;\n }\n\n .axm-chat-call-start__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 22rem;\n min-height: 0;\n gap: 2rem;\n }\n\n .axm-chat-call-start__profile {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 0.625rem;\n margin-top: 0;\n }\n\n .axm-chat-call-start__avatar {\n margin-bottom: 0.25rem;\n }\n\n .axm-chat-call-start__name {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 1.3;\n }\n\n .axm-chat-call-start__hint {\n margin: 0;\n max-width: 18rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n opacity: 0.65;\n }\n\n .axm-chat-call-start__actions {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n gap: 0.5rem;\n padding-bottom: 0.25rem;\n }\n\n .axm-chat-call-start__action {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n max-width: 6.5rem;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n\n .axm-chat-call-start__action:focus-visible {\n outline: 2px solid rgba(76, 175, 80, 0.8);\n outline-offset: 4px;\n border-radius: 0.5rem;\n }\n\n .axm-chat-call-start__action-circle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n border-radius: 9999px;\n font-size: 1.25rem;\n }\n\n .axm-chat-call-start__action-circle--primary {\n background: #4caf50;\n color: #ffffff;\n }\n\n .axm-chat-call-start__action-circle--cancel {\n background: #ffffff;\n color: #1a1c1e;\n }\n\n .axm-chat-call-start__action-label {\n font-size: 0.6875rem;\n line-height: 1.25;\n text-align: center;\n white-space: normal;\n word-break: break-word;\n }\n\n .axm-chat-call-start__status {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n padding: 2rem;\n text-align: center;\n font-size: 0.9375rem;\n }\n\n .axm-chat-call-start__status--error {\n color: #ff8a80;\n }\n\n .axm-chat-call-start__text-button {\n padding: 0.5rem 1rem;\n border: 1px solid currentColor;\n border-radius: 9999px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0.85;\n }\n `,\n ],\n})\nexport class AXMChatCallStartPopupComponent extends AXBasePageComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly activeCallSessions = inject(AXMChatCallActiveSessionService);\n private readonly rtcApi = inject(AXPRtcApiAbstract, { optional: true });\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ----- Popup Inputs -----\n\n /** Assigned by {@link AXPopupService} via `data`. */\n conversation?: AXConversation;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected get hasConversation(): boolean {\n return !!this.conversation?.id?.trim();\n }\n\n protected get displayName(): string {\n if (!this.conversation) {\n return '';\n }\n return axmResolveConversationListAvatar(this.conversation).title;\n }\n\n protected get avatarSrc(): string {\n if (!this.conversation) {\n return '';\n }\n return axmResolveConversationListAvatar(this.conversation).avatar ?? '';\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onStartVideo(): void {\n void this.#beginCall('video');\n }\n\n protected onStartVoice(): void {\n void this.#beginCall('voice');\n }\n\n protected onCancel(): void {\n this.close();\n }\n\n //#endregion\n\n //#region ----- Call Actions -----\n\n async #beginCall(mediaType: AXMChatCallMediaType): Promise<void> {\n const conversation = this.conversation;\n if (!conversation?.id?.trim()) {\n return;\n }\n\n if (\n !(await axmEnsureChatCallRtcReady({\n rtc: this.rtcApi,\n translation: this.translationService,\n toast: this.toastService,\n }))\n ) {\n return;\n }\n\n const popupService = this.popupService;\n const dialogOpener = this.dialogOpener;\n const activeCallSessions = this.activeCallSessions;\n this.close();\n await axmOpenChatCallSessionDialog({\n conversation,\n media: mediaType,\n popupService,\n dialogOpener,\n activeCallSessions,\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-chat-call-start\">\n <!-- ----- Missing conversation payload ----- -->\n @if (!hasConversation) {\n <div class=\"axm-chat-call-start__status axm-chat-call-start__status--error\">\n <p>{{ '@conversation:chat.call.load-error' | translate | async }}</p>\n <button type=\"button\" class=\"axm-chat-call-start__text-button\" (click)=\"onCancel()\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </button>\n </div>\n }\n <!-- ----- Call start content ----- -->\n @else {\n <div class=\"axm-chat-call-start__content\">\n <!-- ----- Contact avatar and name ----- -->\n <div class=\"axm-chat-call-start__profile\">\n <axp-avatar\n class=\"axm-chat-call-start__avatar\"\n [size]=\"96\"\n [fullName]=\"displayName\"\n [src]=\"avatarSrc\"\n />\n <h1 class=\"axm-chat-call-start__name\">{{ displayName }}</h1>\n <p class=\"axm-chat-call-start__hint\">\n {{ '@conversation:chat.call.hint' | translate | async }}\n </p>\n </div>\n\n <!-- ----- Voice / cancel / video actions ----- -->\n <div class=\"axm-chat-call-start__actions\">\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onStartVideo()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--primary\">\n <i class=\"fa-solid fa-video\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.start-video' | translate | async }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onCancel()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--cancel\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onStartVoice()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--primary\">\n <i class=\"fa-solid fa-phone\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.start-call' | translate | async }}\n </span>\n </button>\n </div>\n </div>\n }\n</div>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-chat-call-start-popup.component-BEa8wEJt.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/call/chat-call-start-popup.component.ts","../../../../libs/modules/conversation/client/src/lib/features/chat/plugins/call/chat-call-start-popup.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPAvatarComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPRtcApiAbstract } from '@acorex-platform/extension-rtc-core-gateway';\nimport type { AXConversation } from '@acorex/components/conversation';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\n\nimport { axmResolveConversationListAvatar } from '../utils/chat-avatar.util';\nimport { axmEnsureChatCallRtcReady } from './chat-call-rtc-ready.util';\nimport type { AXMChatCallMediaType } from './chat-call-session.types';\nimport { axmOpenChatCallSessionDialog } from './open-chat-call-session.dialog';\nimport { AXMChatCallActiveSessionService } from './chat-call-active-session.service';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type { AXMChatCallMediaType } from './chat-call-session.types';\n\nexport interface AXMChatCallStartPopupData {\n conversation: AXConversation;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n/**\n * Call-start popup: choose voice or video for a conversation contact.\n */\n@Component({\n selector: 'axm-chat-call-start-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-dark',\n },\n imports: [AXPAvatarComponent, AXTranslationModule, AsyncPipe],\n templateUrl: './chat-call-start-popup.component.html',\n styles: [\n `\n .axm-chat-call-start-overlay .ax-popup {\n width: min(24rem, 92vw) !important;\n max-width: 92vw;\n }\n\n axm-chat-call-start-popup {\n display: block;\n width: 100%;\n }\n\n .axm-chat-call-start {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n min-height: 0;\n padding: 2rem 1.25rem 1.5rem;\n }\n\n .axm-chat-call-start__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n max-width: 22rem;\n min-height: 0;\n gap: 2rem;\n }\n\n .axm-chat-call-start__profile {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 0.625rem;\n margin-top: 0;\n }\n\n .axm-chat-call-start__avatar {\n margin-bottom: 0.25rem;\n }\n\n .axm-chat-call-start__name {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 1.3;\n }\n\n .axm-chat-call-start__hint {\n margin: 0;\n max-width: 18rem;\n font-size: 0.8125rem;\n line-height: 1.45;\n opacity: 0.65;\n }\n\n .axm-chat-call-start__actions {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n width: 100%;\n gap: 0.5rem;\n padding-bottom: 0.25rem;\n }\n\n .axm-chat-call-start__action {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n max-width: 6.5rem;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n }\n\n .axm-chat-call-start__action:focus-visible {\n outline: 2px solid rgba(76, 175, 80, 0.8);\n outline-offset: 4px;\n border-radius: 0.5rem;\n }\n\n .axm-chat-call-start__action-circle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 3.5rem;\n height: 3.5rem;\n border-radius: 9999px;\n font-size: 1.25rem;\n }\n\n .axm-chat-call-start__action-circle--primary {\n background: #4caf50;\n color: #ffffff;\n }\n\n .axm-chat-call-start__action-circle--cancel {\n background: #ffffff;\n color: #1a1c1e;\n }\n\n .axm-chat-call-start__action-label {\n font-size: 0.6875rem;\n line-height: 1.25;\n text-align: center;\n white-space: normal;\n word-break: break-word;\n }\n\n .axm-chat-call-start__status {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n padding: 2rem;\n text-align: center;\n font-size: 0.9375rem;\n }\n\n .axm-chat-call-start__status--error {\n color: #ff8a80;\n }\n\n .axm-chat-call-start__text-button {\n padding: 0.5rem 1rem;\n border: 1px solid currentColor;\n border-radius: 9999px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0.85;\n }\n `,\n ],\n})\nexport class AXMChatCallStartPopupComponent extends AXBasePageComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly popupService = inject(AXPopupService);\n private readonly dialogOpener = inject(AXPDialogOpener);\n private readonly activeCallSessions = inject(AXMChatCallActiveSessionService);\n private readonly rtcApi = inject(AXPRtcApiAbstract, { optional: true });\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ----- Popup Inputs -----\n\n /** Assigned by {@link AXPopupService} via `data`. */\n conversation?: AXConversation;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected get hasConversation(): boolean {\n return !!this.conversation?.id?.trim();\n }\n\n protected get displayName(): string {\n if (!this.conversation) {\n return '';\n }\n return axmResolveConversationListAvatar(this.conversation).title;\n }\n\n protected get avatarSrc(): string {\n if (!this.conversation) {\n return '';\n }\n return axmResolveConversationListAvatar(this.conversation).avatar ?? '';\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onStartVideo(): void {\n void this.#beginCall('video');\n }\n\n protected onStartVoice(): void {\n void this.#beginCall('voice');\n }\n\n protected onCancel(): void {\n this.close();\n }\n\n //#endregion\n\n //#region ----- Call Actions -----\n\n async #beginCall(mediaType: AXMChatCallMediaType): Promise<void> {\n const conversation = this.conversation;\n if (!conversation?.id?.trim()) {\n return;\n }\n\n if (\n !(await axmEnsureChatCallRtcReady({\n rtc: this.rtcApi,\n translation: this.translationService,\n toast: this.toastService,\n }))\n ) {\n return;\n }\n\n const popupService = this.popupService;\n const dialogOpener = this.dialogOpener;\n const activeCallSessions = this.activeCallSessions;\n this.close();\n await axmOpenChatCallSessionDialog({\n conversation,\n media: mediaType,\n popupService,\n dialogOpener,\n activeCallSessions,\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-chat-call-start\">\n <!-- ----- Missing conversation payload ----- -->\n @if (!hasConversation) {\n <div class=\"axm-chat-call-start__status axm-chat-call-start__status--error\">\n <p>{{ '@conversation:chat.call.load-error' | translate | async }}</p>\n <button type=\"button\" class=\"axm-chat-call-start__text-button\" (click)=\"onCancel()\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </button>\n </div>\n }\n <!-- ----- Call start content ----- -->\n @else {\n <div class=\"axm-chat-call-start__content\">\n <!-- ----- Contact avatar and name ----- -->\n <div class=\"axm-chat-call-start__profile\">\n <axp-avatar\n class=\"axm-chat-call-start__avatar\"\n [size]=\"96\"\n [fullName]=\"displayName\"\n [src]=\"avatarSrc\"\n />\n <h1 class=\"axm-chat-call-start__name\">{{ displayName }}</h1>\n <p class=\"axm-chat-call-start__hint\">\n {{ '@conversation:chat.call.hint' | translate | async }}\n </p>\n </div>\n\n <!-- ----- Voice / cancel / video actions ----- -->\n <div class=\"axm-chat-call-start__actions\">\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onStartVideo()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--primary\">\n <i class=\"fa-solid fa-video\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.start-video' | translate | async }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onCancel()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--cancel\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.cancel' | translate | async }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"axm-chat-call-start__action\"\n (click)=\"onStartVoice()\"\n >\n <span class=\"axm-chat-call-start__action-circle axm-chat-call-start__action-circle--primary\">\n <i class=\"fa-solid fa-phone\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"axm-chat-call-start__action-label\">\n {{ '@conversation:chat.call.start-call' | translate | async }}\n </span>\n </button>\n </div>\n </div>\n }\n</div>\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { input, inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { AXPPageLayoutBaseComponent, AXPPageLayoutBase } from '@acorex-platform/framework-client/layout/views';
5
- import { h as AXMCommentComponent } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs';
5
+ import { h as AXMCommentComponent } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs';
6
6
 
7
7
  //#region ---- Comments Page Component ----
8
8
  /**
@@ -80,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
80
80
  }], propDecorators: { rootContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootContext", required: true }] }], pageConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageConfig", required: false }] }] } });
81
81
 
82
82
  export { AXMCommentsPageComponent };
83
- //# sourceMappingURL=acorex-platform-module-conversation-client-comments-page.component-BW_XRzT6.mjs.map
83
+ //# sourceMappingURL=acorex-platform-module-conversation-client-comments-page.component-BsE6bCZT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-comments-page.component-BW_XRzT6.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/comment/comments-page/comments-page.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXMCommentComponent } from '../comment.component';\n\n//#region ---- Comments Page Component ----\n\n/**\n * Page component that renders comments using AXMCommentComponent.\n * Used when comments plugin has display: 'page'.\n * Receives rootContext (entity data) and derives refrenceType/refrenceId from route params and context.\n */\n@Component({\n selector: 'axm-comments-page',\n imports: [AXMCommentComponent],\n template: `\n @if (refrenceType() && refrenceId()) {\n <axm-comment\n [refrenceType]=\"refrenceType()!\"\n [refrenceId]=\"refrenceId()!\"\n [subject]=\"subject()\"\n ></axm-comment>\n }\n `,\n styles: `\n\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMCommentsPageComponent,\n },\n ],\n})\nexport class AXMCommentsPageComponent extends AXPPageLayoutBaseComponent {\n\n //#region ---- Inputs ----\n\n /** Entity data context passed by the page host */\n rootContext = input.required<Record<string, any>>();\n\n /** Page-level configuration from the entity page definition */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected refrenceType = computed(() => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n if (moduleName && entityName) {\n return `${moduleName}.${entityName}`;\n }\n return null;\n });\n\n protected refrenceId = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['id'] ?? null;\n });\n\n protected subject = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['title'] ?? '';\n });\n\n //#endregion\n\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-comments-page.component-BsE6bCZT.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/comment/comments-page/comments-page.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXMCommentComponent } from '../comment.component';\n\n//#region ---- Comments Page Component ----\n\n/**\n * Page component that renders comments using AXMCommentComponent.\n * Used when comments plugin has display: 'page'.\n * Receives rootContext (entity data) and derives refrenceType/refrenceId from route params and context.\n */\n@Component({\n selector: 'axm-comments-page',\n imports: [AXMCommentComponent],\n template: `\n @if (refrenceType() && refrenceId()) {\n <axm-comment\n [refrenceType]=\"refrenceType()!\"\n [refrenceId]=\"refrenceId()!\"\n [subject]=\"subject()\"\n ></axm-comment>\n }\n `,\n styles: `\n\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMCommentsPageComponent,\n },\n ],\n})\nexport class AXMCommentsPageComponent extends AXPPageLayoutBaseComponent {\n\n //#region ---- Inputs ----\n\n /** Entity data context passed by the page host */\n rootContext = input.required<Record<string, any>>();\n\n /** Page-level configuration from the entity page definition */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected refrenceType = computed(() => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n if (moduleName && entityName) {\n return `${moduleName}.${entityName}`;\n }\n return null;\n });\n\n protected refrenceId = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['id'] ?? null;\n });\n\n protected subject = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['title'] ?? '';\n });\n\n //#endregion\n\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 } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs';
3
+ import { A as AXMConversationEntityStoreService } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
27
27
  }] });
28
28
 
29
29
  export { AXMConversationMarkConversationUnreadCommand };
30
- //# sourceMappingURL=acorex-platform-module-conversation-client-mark-conversation-unread.command-Cdd6Cxkf.mjs.map
30
+ //# sourceMappingURL=acorex-platform-module-conversation-client-mark-conversation-unread.command-B1mvtbaA.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-mark-conversation-unread.command-Cdd6Cxkf.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/mark-conversation-unread.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMMarkConversationUnreadOptions {\n conversationId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationMarkConversationUnreadCommand implements AXPCommand<AXMMarkConversationUnreadOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMMarkConversationUnreadOptions | unknown): AXPCommandExecuteResultPromise<void> {\n const options = input as AXMMarkConversationUnreadOptions;\n const conversation = await this.store.getConversation(options.conversationId);\n if (!conversation) {\n return { success: false };\n }\n const unreadCount = Math.max(1, conversation.unreadCount ?? 0);\n await this.store.setUnreadCount(options.conversationId, unreadCount);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAiBA;AAEA;MAGa,4CAA4C,CAAA;AADzD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAAiD,EAAA;QAC7D,MAAM,OAAO,GAAG,KAAyC;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;AACpE,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAZW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5C,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,4CAA4C,cAD/B,MAAM,EAAA,CAAA,CAAA;;2FACnB,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBADxD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-mark-conversation-unread.command-B1mvtbaA.mjs","sources":["../../../../libs/modules/conversation/client/src/lib/features/commands/mark-conversation-unread.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\n\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMMarkConversationUnreadOptions {\n conversationId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationMarkConversationUnreadCommand implements AXPCommand<AXMMarkConversationUnreadOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMMarkConversationUnreadOptions | unknown): AXPCommandExecuteResultPromise<void> {\n const options = input as AXMMarkConversationUnreadOptions;\n const conversation = await this.store.getConversation(options.conversationId);\n if (!conversation) {\n return { success: false };\n }\n const unreadCount = Math.max(1, conversation.unreadCount ?? 0);\n await this.store.setUnreadCount(options.conversationId, unreadCount);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAiBA;AAEA;MAGa,4CAA4C,CAAA;AADzD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAAiD,EAAA;QAC7D,MAAM,OAAO,GAAG,KAAyC;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;AACpE,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAZW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5C,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,4CAA4C,cAD/B,MAAM,EAAA,CAAA,CAAA;;2FACnB,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBADxD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -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 { g as buildConversationChatInAppCorrelationPrefix } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs';
7
+ import { g as buildConversationChatInAppCorrelationPrefix } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs';
8
8
 
9
9
  //#endregion
10
10
  //#region ----- Command -----
@@ -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-TfSLQn3K.mjs.map
57
+ //# sourceMappingURL=acorex-platform-module-conversation-client-open-chat.command-CbJ0gXZq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-open-chat.command-TfSLQn3K.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
+ {"version":3,"file":"acorex-platform-module-conversation-client-open-chat.command-CbJ0gXZq.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-1tv00m7Y.mjs';
3
+ import { a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.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-CC0jPXGP.mjs.map
34
+ //# sourceMappingURL=acorex-platform-module-conversation-client-retry-assist-response.command-BvzWaKX4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-retry-assist-response.command-CC0jPXGP.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-BvzWaKX4.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,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, f as axmMessageCountsTowardUnread } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.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-CmRULmpl.mjs';
4
4
  import { axmIsChannelRoom } from '@acorex-platform/module-conversation-client/contracts';
5
5
 
6
6
  //#endregion
@@ -65,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
65
65
  }] });
66
66
 
67
67
  export { AXMConversationSyncReadStateCommand };
68
- //# sourceMappingURL=acorex-platform-module-conversation-client-sync-read-state.command-BUtdyniC.mjs.map
68
+ //# sourceMappingURL=acorex-platform-module-conversation-client-sync-read-state.command-DQXezGRu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-conversation-client-sync-read-state.command-BUtdyniC.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';\nimport { axmIsChannelRoom } from '@acorex-platform/module-conversation-client/contracts';\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 channelConversation =\n this.store.getCachedConversation(conversationId) ?? (await this.store.getConversation(conversationId));\n if (axmIsChannelRoom(channelConversation)) {\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":"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"}
1
+ {"version":3,"file":"acorex-platform-module-conversation-client-sync-read-state.command-DQXezGRu.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';\nimport { axmIsChannelRoom } from '@acorex-platform/module-conversation-client/contracts';\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 channelConversation =\n this.store.getCachedConversation(conversationId) ?? (await this.store.getConversation(conversationId));\n if (axmIsChannelRoom(channelConversation)) {\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":"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"}
@@ -1,3 +1,3 @@
1
- export { a4 as AXMAddReactionCommand, G as AXMAssistSuggestionChipsComponent, a5 as AXMChannelFeedItemComponent, a6 as AXMChannelFeedPage, a7 as AXMChatAnnouncementChannelService, a8 as AXMChatComponent, a9 as AXMChatComposerAssistPickerComponent, T as AXMChatComposerEnsureAssistConversationDirective, W as AXMChatConversationApi, aa as AXMChatEmptyAssistSessionService, V as AXMChatEntityConversationApi, ab as AXMChatEntityConversationFocusHandler, ac as AXMChatEntityConversationRoomQueryService, ad as AXMChatEntityMessageApi, ae as AXMChatEntityRealtimeApi, af as AXMChatEntityUserApi, o as AXMChatMessageApi, ag as AXMChatRealtimeApi, U as AXMChatUserApi, h as AXMCommentComponent, ah as AXMCommentManagementService, ai as AXMCommentPopupComponent, aj as AXMCommentRealtimeService, ak as AXMCommentRealtimeServiceImpl, al as AXMCommentService, am as AXMCommentServiceImpl, an as AXMCommentWidgetViewComponent, ao as AXMConversationAssistBackgroundOperationHandler, A as AXMConversationEntityStoreService, d as AXMConversationFocusService, ap as AXMConversationModule, Z as AXMConversationRealtimeBus, aq as AXMEntityChatService, ar as AXMMiniChatComponent, as as AXMMiniChatFileDropService, at as AXMMiniChatFooterDockComponent, au as AXMMiniChatHeaderSlotComponent, av as AXMMiniChatHistoryComponent, aw as AXMMiniChatInboxHistoryComponent, ax as AXMMiniChatLauncherComponent, ay as AXMMiniChatPageActionComponent, az as AXMMiniChatPanelComponent, aA as AXMMiniChatPanelService, aB as AXMMiniChatPopupWindowComponent, aC as AXMShowCommentPopupCommand, q as AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, aD as AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, p as AXM_AI_MANAGEMENT_MODULE_NAME, aE as AXM_ASSIST_DEFAULT_RESOLVER_PORT, aF as AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, aG as AXM_CHAT_ASSIST_CATALOG_PORT, aH as AXM_CHAT_EMPTY_STATE_COMPONENT, aI as AXM_CHAT_SIDEBAR_ACTION_PROVIDER, aJ as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, aK as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, aL as AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, aM as AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, b as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, aN as AXM_CONVERSATION_TAB_BOT, aO as AXM_ENTITY_LIST_CHAT_ID, aP as AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, aQ as AXM_MINI_CHAT_INBOX_SESSION_KEY, aR as AXM_MINI_CHAT_POPUP_DOCK, aS as AXM_MINI_CHAT_SCOPE_ENTITY, aT as AXM_MINI_CHAT_SCOPE_METADATA_KEY, aU as AXPCommentWidget, aV as COMMENTS_PAGE_COMPONENT_KEY, aW as CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, aX as CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, aY as CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, aZ as CONVERSATION_OPEN_CHAT_COMMAND, a_ as CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, a$ as CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, b0 as CONVERSATION_START_ASSIST_CHAT_COMMAND, b1 as CONVERSATION_START_DIRECT_CHAT_COMMAND, b2 as CONVERSATION_SYNC_READ_STATE_COMMAND, b3 as axmApplyAnswerTextToAssistPayloadLine, b4 as axmAssistFollowUpItemsFromUnknown, z as axmAssistHasFinalizeMetadata, b5 as axmAssistLastTranscriptLine, b6 as axmAssistNormalizeFollowUpItemForConversation, b7 as axmAssistNormalizeFollowUpItemsForConversation, b8 as axmAssistPersistedMessageLooksComplete, b9 as axmAssistResolveFollowUpCommandName, ba as axmAssistStarterPromptChipItems, bb as axmAssistSuggestionIconForLabel, x as axmAssistUserFacingPayloadLine, C as axmAssistUserVisibleItemsForLine, bc as axmAssistWidgetNodeDedupeKey, a3 as axmAssistWidgetNodeFromUnknown, bd as axmBuildAiChatConversationMetadata, be as axmBuildAssistPeerParticipantFromCreateData, bf as axmBuildAssistPeerParticipantFromId, bg as axmBuildAssistTranscriptLinePayload, bh as axmBuildAutoTitleFromUserText, bi as axmBuildEntityChatConversationMetadata, bj as axmBuildEntityChatRoomEntityRef, bk as axmChatAiPeerParticipantId, bl as axmChatAiTargetAvatarUrl, bm as axmChatAiTargetDisplayDescription, bn as axmChatAiTargetDisplayName, bo as axmChatAiTargetShortcutDescriptionKey, k as axmChatRenderableAssistWidgetNode, bp as axmCoerceDate, bq as axmCoerceTimestampMs, br as axmComputeConversationUnreadCount, c as axmConversationHasAiChat, bs as axmConversationIsEntityChat, bt as axmConversationIsGlobalChat, bu as axmConversationMatchesEntity, bv as axmConversationMatchesHistoryScope, bw as axmEntityRefForMiniChatPageContext, bx as axmEntityRefFromLaunchContext, by as axmExcludeEntityChatConversations, bz as axmExtractAssistIdFromMetadata, bA as axmExtractAssistSnapshotFromMetadata, bB as axmExtractDirectAgentIdFromMetadata, bC as axmExtractEntityRefFromMetadata, bD as axmExtractModelEntityIdFromMetadata, bE as axmExtractTextFromPayload, bF as axmFilterChatAiTargets, bG as axmFlattenConversationCreateMetadata, bH as axmHydrateRealtimeConversationMessage, bI as axmInboxConversationTab, bJ as axmIsAssistBotConversation, bK as axmIsAssistPeerParticipant, bL as axmIsAssistResponseMessage, s as axmIsAssistRetryableStatus, bM as axmIsAssistStreamingMessage, y as axmIsAssistStreamingStatus, bN as axmIsAssistTerminalStatus, bO as axmIsUnsupportedLegacyAgentAssistConversation, bP as axmLoadChatAiTargets, f as axmMessageCountsTowardUnread, bQ as axmMessageEntityToMessage, bR as axmMiniChatHistoryScopeFromDraft, bS as axmMiniChatHistoryScopeFromOpen, bT as axmMiniChatHistoryScopeKey, bU as axmMiniChatWindowOwnsRoute, bV as axmNormalizeAssistTranscriptForChatUi, bW as axmNormalizeAssistTranscriptLineResponses, v as axmParseAssistTranscriptLinePayload, m as axmParseAssistTranscriptTextEnvelope, l as axmPartitionAssistAnswerText, bX as axmPreferLocalUnreadCount, u as axmReadAssistAiTranscript, w as axmReadAssistAiTranscriptRaw, D as axmReadAssistFollowUpStatus, t as axmReadAssistResponseError, r as axmReadAssistResponseStatus, E as axmReadPlainTextMessagePayload, bY as axmReadReplyToUserMessageId, bZ as axmRemoveMiniChatHistoryItem, b_ as axmResolveAssistFinalAnswerText, b$ as axmResolveChatAiTargetText, c0 as axmRoomEntityToConversation, c1 as axmRoomIsEntityChat, c2 as axmRoomLaunchContext, c3 as axmRoomMatchesEntity, c4 as axmRoomWithAssistPeerDisplayName, B as axmSanitizeAssistUserAnswerText, c5 as axmShouldPreferPersistedAssistOverLiveCache, c6 as axmSortMessagesNewestFirst, c7 as axmSyncAssistPeerDisplayName, j as axmSyntheticEmbedMessage, c8 as axmUpsertMiniChatHistoryItem, c9 as axmUserRowToParticipant, ca as axpShowCommentPopupCommandDefinition, cb as channelFeedPageRoutes, cc as commentsPlugin, cd as createConversationServiceSessionAdapter, ce as persistChatAttachment } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-1tv00m7Y.mjs';
1
+ export { a4 as AXMAddReactionCommand, G as AXMAssistSuggestionChipsComponent, a5 as AXMChannelFeedItemComponent, a6 as AXMChannelFeedPage, a7 as AXMChatAnnouncementChannelService, a8 as AXMChatComponent, a9 as AXMChatComposerAssistPickerComponent, T as AXMChatComposerEnsureAssistConversationDirective, W as AXMChatConversationApi, aa as AXMChatEmptyAssistSessionService, V as AXMChatEntityConversationApi, ab as AXMChatEntityConversationFocusHandler, ac as AXMChatEntityConversationRoomQueryService, ad as AXMChatEntityMessageApi, ae as AXMChatEntityRealtimeApi, af as AXMChatEntityUserApi, o as AXMChatMessageApi, ag as AXMChatRealtimeApi, U as AXMChatUserApi, h as AXMCommentComponent, ah as AXMCommentManagementService, ai as AXMCommentPopupComponent, aj as AXMCommentRealtimeService, ak as AXMCommentRealtimeServiceImpl, al as AXMCommentService, am as AXMCommentServiceImpl, an as AXMCommentWidgetViewComponent, ao as AXMConversationAssistBackgroundOperationHandler, A as AXMConversationEntityStoreService, d as AXMConversationFocusService, ap as AXMConversationModule, Z as AXMConversationRealtimeBus, aq as AXMEntityChatService, ar as AXMMiniChatComponent, as as AXMMiniChatFileDropService, at as AXMMiniChatFooterDockComponent, au as AXMMiniChatHeaderSlotComponent, av as AXMMiniChatHistoryComponent, aw as AXMMiniChatInboxHistoryComponent, ax as AXMMiniChatLauncherComponent, ay as AXMMiniChatPageActionComponent, az as AXMMiniChatPanelComponent, aA as AXMMiniChatPanelService, aB as AXMMiniChatPopupWindowComponent, aC as AXMShowCommentPopupCommand, q as AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, aD as AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, p as AXM_AI_MANAGEMENT_MODULE_NAME, aE as AXM_ASSIST_DEFAULT_RESOLVER_PORT, aF as AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, aG as AXM_CHAT_ASSIST_CATALOG_PORT, aH as AXM_CHAT_EMPTY_STATE_COMPONENT, aI as AXM_CHAT_SIDEBAR_ACTION_PROVIDER, aJ as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, aK as AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, a as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, aL as AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, aM as AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, b as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, aN as AXM_CONVERSATION_TAB_BOT, aO as AXM_ENTITY_LIST_CHAT_ID, aP as AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, aQ as AXM_MINI_CHAT_INBOX_SESSION_KEY, aR as AXM_MINI_CHAT_POPUP_DOCK, aS as AXM_MINI_CHAT_SCOPE_ENTITY, aT as AXM_MINI_CHAT_SCOPE_METADATA_KEY, aU as AXPCommentWidget, aV as COMMENTS_PAGE_COMPONENT_KEY, aW as CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, aX as CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, aY as CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, aZ as CONVERSATION_OPEN_CHAT_COMMAND, a_ as CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, a$ as CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, b0 as CONVERSATION_START_ASSIST_CHAT_COMMAND, b1 as CONVERSATION_START_DIRECT_CHAT_COMMAND, b2 as CONVERSATION_SYNC_READ_STATE_COMMAND, b3 as axmApplyAnswerTextToAssistPayloadLine, b4 as axmAssistFollowUpItemsFromUnknown, z as axmAssistHasFinalizeMetadata, b5 as axmAssistLastTranscriptLine, b6 as axmAssistNormalizeFollowUpItemForConversation, b7 as axmAssistNormalizeFollowUpItemsForConversation, b8 as axmAssistPersistedMessageLooksComplete, b9 as axmAssistResolveFollowUpCommandName, ba as axmAssistStarterPromptChipItems, bb as axmAssistSuggestionIconForLabel, x as axmAssistUserFacingPayloadLine, C as axmAssistUserVisibleItemsForLine, bc as axmAssistWidgetNodeDedupeKey, a3 as axmAssistWidgetNodeFromUnknown, bd as axmBuildAiChatConversationMetadata, be as axmBuildAssistPeerParticipantFromCreateData, bf as axmBuildAssistPeerParticipantFromId, bg as axmBuildAssistTranscriptLinePayload, bh as axmBuildAutoTitleFromUserText, bi as axmBuildEntityChatConversationMetadata, bj as axmBuildEntityChatRoomEntityRef, bk as axmChatAiPeerParticipantId, bl as axmChatAiTargetAvatarUrl, bm as axmChatAiTargetDisplayDescription, bn as axmChatAiTargetDisplayName, bo as axmChatAiTargetShortcutDescriptionKey, k as axmChatRenderableAssistWidgetNode, bp as axmCoerceDate, bq as axmCoerceTimestampMs, br as axmComputeConversationUnreadCount, c as axmConversationHasAiChat, bs as axmConversationIsEntityChat, bt as axmConversationIsGlobalChat, bu as axmConversationMatchesEntity, bv as axmConversationMatchesHistoryScope, bw as axmEntityRefForMiniChatPageContext, bx as axmEntityRefFromLaunchContext, by as axmExcludeEntityChatConversations, bz as axmExtractAssistIdFromMetadata, bA as axmExtractAssistSnapshotFromMetadata, bB as axmExtractDirectAgentIdFromMetadata, bC as axmExtractEntityRefFromMetadata, bD as axmExtractModelEntityIdFromMetadata, bE as axmExtractTextFromPayload, bF as axmFilterChatAiTargets, bG as axmFlattenConversationCreateMetadata, bH as axmHydrateRealtimeConversationMessage, bI as axmInboxConversationTab, bJ as axmIsAssistBotConversation, bK as axmIsAssistPeerParticipant, bL as axmIsAssistResponseMessage, s as axmIsAssistRetryableStatus, bM as axmIsAssistStreamingMessage, y as axmIsAssistStreamingStatus, bN as axmIsAssistTerminalStatus, bO as axmIsUnsupportedLegacyAgentAssistConversation, bP as axmLoadChatAiTargets, f as axmMessageCountsTowardUnread, bQ as axmMessageEntityToMessage, bR as axmMiniChatHistoryScopeFromDraft, bS as axmMiniChatHistoryScopeFromOpen, bT as axmMiniChatHistoryScopeKey, bU as axmMiniChatWindowOwnsRoute, bV as axmNormalizeAssistTranscriptForChatUi, bW as axmNormalizeAssistTranscriptLineResponses, v as axmParseAssistTranscriptLinePayload, m as axmParseAssistTranscriptTextEnvelope, l as axmPartitionAssistAnswerText, bX as axmPreferLocalUnreadCount, u as axmReadAssistAiTranscript, w as axmReadAssistAiTranscriptRaw, D as axmReadAssistFollowUpStatus, t as axmReadAssistResponseError, r as axmReadAssistResponseStatus, E as axmReadPlainTextMessagePayload, bY as axmReadReplyToUserMessageId, bZ as axmRemoveMiniChatHistoryItem, b_ as axmResolveAssistFinalAnswerText, b$ as axmResolveChatAiTargetText, c0 as axmRoomEntityToConversation, c1 as axmRoomIsEntityChat, c2 as axmRoomLaunchContext, c3 as axmRoomMatchesEntity, c4 as axmRoomWithAssistPeerDisplayName, B as axmSanitizeAssistUserAnswerText, c5 as axmShouldPreferPersistedAssistOverLiveCache, c6 as axmSortMessagesNewestFirst, c7 as axmSyncAssistPeerDisplayName, j as axmSyntheticEmbedMessage, c8 as axmUpsertMiniChatHistoryItem, c9 as axmUserRowToParticipant, ca as axpShowCommentPopupCommandDefinition, cb as channelFeedPageRoutes, cc as commentsPlugin, cd as createConversationServiceSessionAdapter, ce as persistChatAttachment } from './acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CmRULmpl.mjs';
2
2
  export { AXM_CONTEXTUAL_ASSIST_KIND_ENTITY_RECORD } from '@acorex-platform/module-conversation-client/contracts';
3
3
  //# sourceMappingURL=acorex-platform-module-conversation-client.mjs.map
@@ -684,7 +684,12 @@
684
684
  "title": "Cancel"
685
685
  },
686
686
  "reply-to": "Reply to",
687
- "edit-message": "Edit Message"
687
+ "edit-message": "Edit Message",
688
+ "more": "More"
689
+ },
690
+ "composer": {
691
+ "placeholder": "Write a comment...",
692
+ "reply-placeholder": "Write a reply..."
688
693
  },
689
694
  "components": {
690
695
  "comment": {
@@ -684,7 +684,12 @@
684
684
  "title": "Cancel"
685
685
  },
686
686
  "reply-to": "Reply to",
687
- "edit-message": "Edit Message"
687
+ "edit-message": "Edit Message",
688
+ "more": "More"
689
+ },
690
+ "composer": {
691
+ "placeholder": "Write a comment...",
692
+ "reply-placeholder": "Write a reply..."
688
693
  },
689
694
  "components": {
690
695
  "comment": {
@@ -684,7 +684,12 @@
684
684
  "title": "انصراف"
685
685
  },
686
686
  "reply-to": "پاسخ به",
687
- "edit-message": "ویرایش پیام"
687
+ "edit-message": "ویرایش پیام",
688
+ "more": "بیشتر"
689
+ },
690
+ "composer": {
691
+ "placeholder": "نظر خود را بنویسید...",
692
+ "reply-placeholder": "پاسخ خود را بنویسید..."
688
693
  },
689
694
  "components": {
690
695
  "comment": {
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@acorex-platform/module-conversation-client",
3
- "version": "0.0.59",
3
+ "version": "0.0.60",
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.59",
10
+ "@acorex-platform/extension-rtc-core-gateway": "0.0.60",
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "module": "fesm2022/acorex-platform-module-conversation-client.mjs",
@@ -8,7 +8,7 @@ import { AXPExecuteCommand, AXPFilterDefinition, AXPFilterQuery, AXPActionMenuIt
8
8
  import { AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';
9
9
  import { AXMChannelFeedItem, AXMConversationRoom, AXMConversationMessage, AXMCommentEntityData as AXMCommentEntityData$1, AXReaction, AXMessagePayload, AXMReactionType } from '@acorex-platform/module-conversation-client/contracts';
10
10
  import { Routes } from '@angular/router';
11
- import { AXClickEvent, AXPlacement, AXStyleLookType } from '@acorex/cdk/common';
11
+ import { AXClickEvent, AXPlacement } from '@acorex/cdk/common';
12
12
  import { AXPDeviceService } from '@acorex-platform/framework-client/core';
13
13
  import * as _acorex_components_conversation from '@acorex/components/conversation';
14
14
  import { AXConversationApi, AXConversation, AXConversationMessageApi, AXConversationMessage, AXConversationRealtimeApi, AXConversationUserApi, AXConversationPagination, AXConversationPaginatedResult, AXConversationCreateData, AXConversationFilters, AXConversationUpdateData, AXConversationParticipant, AXConversationParticipantUpdate, AXConversationSendMessageCommand, AXConversationMessagePayload, AXConversationMessageSearchFilters, AXConversationReadReceipt, AXConversationMessageForwardData, AXConversationPinnedMessage, AXConversationTypingIndicator, AXConversationUser, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationPresenceUpdate, AXConversationPresenceStatus, AXConversationBlockReportReason, AXConversationRoomPreferencesMap, AXConversationRoomPreferences, AXConversationTab, AXConversationConnectionStatus, AXConversationService } from '@acorex/components/conversation';
@@ -18,7 +18,7 @@ import { Observable } from 'rxjs';
18
18
  import { AXPEntityDefinitionRegistryService, AXPEntityActionPlugin } from '@acorex-platform/framework-client/layout/entity';
19
19
  import { AXPopupRef, AXPopupComponentBase } from '@acorex/components/popup';
20
20
  import { AXPAiChatResponse, AXPAiChatMessage, AXPAiChatFollowUpItem } from '@acorex-platform/module-ai-management-client';
21
- import * as _angular_platform_browser from '@angular/platform-browser';
21
+ import { AXCommentItem, AXCommentViewComponent, AXCommentContainerComponent, AXCommentReplyEvent, AXCommentLikeChangeEvent, AXCommentRepliesToggleEvent, AXCommentActionEvent } from '@acorex/components/comment';
22
22
  import { AXTextEditorComponent } from '@acorex/components/text-editor';
23
23
  import { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';
24
24
  import { AXBasePageComponent } from '@acorex/components/page';
@@ -1571,75 +1571,69 @@ declare class AXMCommentComponent implements OnInit {
1571
1571
  moduleName: _angular_core.WritableSignal<string | undefined>;
1572
1572
  entityName: _angular_core.WritableSignal<string | undefined>;
1573
1573
  protected hasCooldown: _angular_core.WritableSignal<boolean>;
1574
- protected commentContent: _angular_core.WritableSignal<string>;
1574
+ protected draft: _angular_core.WritableSignal<string>;
1575
1575
  protected isSubmitting: _angular_core.WritableSignal<boolean>;
1576
- protected isReplyingMode: _angular_core.WritableSignal<boolean>;
1577
- protected isEditingMode: _angular_core.WritableSignal<boolean>;
1578
1576
  protected isLoading: _angular_core.WritableSignal<boolean>;
1579
- protected activeReplyComment: _angular_core.WritableSignal<(AXMComment & {
1580
- userName: string;
1581
- }) | undefined>;
1582
- protected activeEditComment: _angular_core.WritableSignal<(AXMComment & {
1583
- userName: string;
1584
- }) | undefined>;
1585
- protected highlightedCommentId: _angular_core.WritableSignal<string | null>;
1577
+ protected replyingTo: _angular_core.WritableSignal<AXCommentItem | null>;
1578
+ protected editing: _angular_core.WritableSignal<AXCommentItem | null>;
1586
1579
  protected expandedCommentIds: _angular_core.WritableSignal<Set<string>>;
1587
1580
  protected comments: _angular_core.WritableSignal<AXMComment[]>;
1581
+ protected commentItems: _angular_core.WritableSignal<AXCommentItem[]>;
1588
1582
  protected thread: _angular_core.WritableSignal<AXMCommentThread | undefined>;
1589
- protected editorOptions: _angular_core.WritableSignal<{
1590
- look: AXStyleLookType;
1591
- }>;
1592
- protected editorRef: _angular_core.Signal<AXTextEditorComponent>;
1583
+ private readonly commentActions;
1584
+ private refreshGeneration;
1585
+ protected readonly commentsView: _angular_core.Signal<AXCommentViewComponent | undefined>;
1586
+ protected readonly commentContainer: _angular_core.Signal<AXCommentContainerComponent | undefined>;
1587
+ protected readonly editor: _angular_core.Signal<AXTextEditorComponent | undefined>;
1593
1588
  private readonly commentService;
1594
1589
  private readonly realtimeService;
1595
1590
  private readonly sessionService;
1596
1591
  private readonly toastService;
1597
1592
  private readonly dialogService;
1598
1593
  private readonly inAppNotificationService;
1599
- private readonly router;
1600
1594
  private readonly activatedRoute;
1601
- private readonly sanitizer;
1602
1595
  private readonly translationService;
1603
1596
  private readonly destroyRef;
1604
- private readonly elementRef;
1597
+ private readonly userAvatarService;
1598
+ private readonly fileStorage;
1599
+ private readonly formatService;
1600
+ private readonly profileCache;
1605
1601
  ngOnInit(): void;
1602
+ private initialize;
1606
1603
  loadComments(): Promise<void>;
1607
- /** Opens edit mode for the target comment (or its reply). */
1608
- protected editMessage(comment: AXMComment, reply?: AXMComment, userName?: string): void;
1609
- /** Opens reply mode, optionally mentioning a specific reply author. */
1610
- protected replyMessage(comment: AXMComment, reply?: AXMComment, userName?: string): void;
1611
- protected deleteComment(commentId: string): Promise<void>;
1612
- protected resetReplyEditState(): void;
1604
+ protected onReply(event: AXCommentReplyEvent): void;
1605
+ protected cancelReply(): void;
1606
+ protected cancelEdit(): void;
1607
+ protected onLikeChange(event: AXCommentLikeChangeEvent): void;
1608
+ protected onRepliesToggle(event: AXCommentRepliesToggleEvent): void;
1609
+ protected onAction(event: AXCommentActionEvent): void;
1610
+ protected commentSenderId(item: AXCommentItem): string;
1611
+ protected onOverflowAction(item: AXCommentItem, name: string): void;
1612
+ protected scrollToCommentContext(item: AXCommentItem): void;
1613
+ protected commentContextPreview(content: string | undefined): string;
1613
1614
  protected submitComment(): Promise<void>;
1614
- protected toggleLike(comment: AXMComment): Promise<void>;
1615
+ protected isCommentDraftEmpty(): boolean;
1616
+ protected edit(item: AXCommentItem): void;
1617
+ protected remove(item: AXCommentItem): Promise<void>;
1618
+ private persistLikeChange;
1615
1619
  protected isLikedByUser(comment: AXMComment): boolean;
1616
1620
  protected getReactionsCount(comment: AXMComment): number;
1617
- protected isRepliesExpanded(commentId: string): boolean;
1618
- protected onRepliesExpandedChange(commentId: string, expanded: boolean): void;
1621
+ private onRepliesExpandedChange;
1619
1622
  private expandReplies;
1620
- /**
1621
- * Scrolls to the referenced comment and triggers a highlight pulse animation.
1622
- * Expands parent replies if needed to ensure the target is in the DOM.
1623
- */
1624
- protected scrollMain(): void;
1625
- /**
1626
- * Scrolls to a comment element and applies a highlight pulse animation.
1627
- * Uses setTimeout to wait for Angular to render after signal updates.
1628
- */
1629
- private scrollToAndHighlight;
1630
- protected sanitizeHtml(htmlContent: string | undefined): _angular_platform_browser.SafeHtml;
1631
1623
  private handleAddComment;
1632
1624
  private handleUpdateComment;
1633
1625
  private getCurrentUser;
1634
- private updateLikeStatus;
1635
1626
  private removeMessageById;
1636
- private clearEditorContent;
1637
- private setEditorContent;
1638
- /** Shorthand translator scoped to the comments feature */
1627
+ private readEditorHtml;
1628
+ private loadActionItems;
1629
+ private refreshItems;
1630
+ private mapComment;
1631
+ private resolveProfile;
1632
+ private resolveAvatarUrl;
1633
+ private formatCommentDate;
1639
1634
  private t;
1640
1635
  private showToast;
1641
1636
  private showTranslatedToast;
1642
- protected getCommentText(comment: AXMComment): string;
1643
1637
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMCommentComponent, never>;
1644
1638
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMCommentComponent, "axm-comment", never, { "refrenceType": { "alias": "refrenceType"; "required": true; "isSignal": true; }; "refrenceId": { "alias": "refrenceId"; "required": true; "isSignal": true; }; "subject": { "alias": "subject"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1645
1639
  }
@@ -1660,6 +1654,9 @@ declare abstract class AXMCommentService {
1660
1654
  abstract addComment(threadId: string, content: string, parentCommentId?: string, contentType?: string, userId?: string): Promise<AXMComment>;
1661
1655
  abstract getComments(threadId: string, nested: boolean): Promise<AXMComment[]>;
1662
1656
  abstract getComment(commentId: string): Promise<AXMComment>;
1657
+ /**
1658
+ * Updates comment body and sets {@link AXMConversationMessage.editedAt} on the stored message.
1659
+ */
1663
1660
  abstract editComment(commentId: string, content: string, contentType?: string): Promise<AXMComment>;
1664
1661
  abstract deleteComment(commentId: string): Promise<boolean>;
1665
1662
  abstract addReaction(commentId: string, emoji: string): Promise<AXMComment>;