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

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 (46) 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-CDlDFzbl.mjs} +231 -80
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CDlDFzbl.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-yzW01skh.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-yzW01skh.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-DhRvuCex.mjs} +2 -2
  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-DhRvuCex.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-C47tt1me.mjs} +13 -6
  8. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-C47tt1me.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-EZjVSlhm.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs.map → acorex-platform-module-conversation-client-chat-call-start-popup.component-EZjVSlhm.mjs.map} +1 -1
  11. 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
  12. 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
  13. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs → acorex-platform-module-conversation-client-chat-conversation-info-panel.component-BBL8iEqc.mjs} +3 -3
  14. 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-BBL8iEqc.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs → acorex-platform-module-conversation-client-comments-page.component-Djn8EikR.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs.map → acorex-platform-module-conversation-client-comments-page.component-Djn8EikR.mjs.map} +1 -1
  17. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +274 -0
  18. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +295 -0
  20. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +52 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs +242 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +263 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +2 -0
  28. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +30 -0
  30. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs} +2 -2
  32. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs → acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs} +2 -2
  34. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs.map → acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs → acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs} +2 -2
  38. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs.map → acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs.map} +1 -1
  39. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  40. package/package.json +18 -2
  41. package/types/acorex-platform-module-conversation-client-contracts-entities-message.d.ts +5 -0
  42. package/types/acorex-platform-module-conversation-client-contracts-entities-room.d.ts +5 -0
  43. package/types/acorex-platform-module-conversation-client-contracts-entity-catalog.d.ts +10 -0
  44. package/types/acorex-platform-module-conversation-client-local-entities.d.ts +12 -0
  45. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs.map +0 -1
  46. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs.map +0 -1
@@ -52,6 +52,7 @@ import * as i5 from '@acorex/components/code-editor';
52
52
  import { AXCodeEditorModule } from '@acorex/components/code-editor';
53
53
  import { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';
54
54
  import { AXPLayoutRendererComponent } from '@acorex-platform/framework-client/layout/builder';
55
+ import { AXLocaleService } from '@acorex/core/locale';
55
56
  import { AXPInAppInboxConnectorService, AXPCommunicationManagementClient, AXPInAppInboxRealtimeService } from '@acorex-platform/module-communication-management-client';
56
57
  import { AXFabComponent, AXFabItemComponent } from '@acorex/components/fab';
57
58
  import * as i1$5 from '@acorex/components/wysiwyg';
@@ -717,37 +718,95 @@ function axmResolveCallDurationTranslation(durationSec) {
717
718
  },
718
719
  };
719
720
  }
720
- function axmChatCallLogTitleKey(info, viewerUserId) {
721
- const mediaSuffix = info.media === 'video' ? '-video' : '';
721
+ /** Resolves viewer-relative call-log perspective used by subject/action copy keys. */
722
+ function axmChatCallLogPerspective(info, viewerUserId) {
722
723
  const viewer = viewerUserId?.trim() ?? '';
723
724
  const actor = info.actorUserId?.trim() ?? '';
724
725
  const initiator = info.initiatorUserId?.trim() ?? '';
725
- if (info.isGroup) {
726
- return `@conversation:chat.call.log.group-${info.outcome}${mediaSuffix}`;
727
- }
728
726
  const isViewerActor = Boolean(viewer && actor && viewer === actor);
729
727
  const isViewerInitiator = Boolean(viewer && initiator && viewer === initiator);
728
+ if (info.isGroup) {
729
+ switch (info.outcome) {
730
+ case 'completed':
731
+ return 'group-completed';
732
+ case 'declined':
733
+ return 'group-declined';
734
+ case 'cancelled':
735
+ return 'group-cancelled';
736
+ case 'missed':
737
+ default:
738
+ return 'group-missed';
739
+ }
740
+ }
730
741
  switch (info.outcome) {
731
742
  case 'completed':
732
- return isViewerInitiator
733
- ? `@conversation:chat.call.log.outgoing-completed${mediaSuffix}`
734
- : `@conversation:chat.call.log.incoming-completed${mediaSuffix}`;
743
+ return isViewerInitiator ? 'outgoing-completed' : 'incoming-completed';
735
744
  case 'declined':
736
- return isViewerActor
737
- ? `@conversation:chat.call.log.incoming-declined${mediaSuffix}`
738
- : `@conversation:chat.call.log.outgoing-declined${mediaSuffix}`;
745
+ return isViewerActor ? 'incoming-declined' : 'outgoing-declined';
739
746
  case 'cancelled':
740
- return isViewerActor
741
- ? `@conversation:chat.call.log.outgoing-cancelled${mediaSuffix}`
742
- : `@conversation:chat.call.log.incoming-cancelled${mediaSuffix}`;
747
+ return isViewerActor ? 'outgoing-cancelled' : 'incoming-cancelled';
743
748
  case 'missed':
744
- return isViewerInitiator
745
- ? `@conversation:chat.call.log.outgoing-missed${mediaSuffix}`
746
- : `@conversation:chat.call.log.incoming-missed${mediaSuffix}`;
749
+ return isViewerInitiator ? 'outgoing-missed' : 'incoming-missed';
747
750
  default:
748
- return `@conversation:chat.call.log.${info.outcome}${mediaSuffix}`;
751
+ return 'incoming-missed';
749
752
  }
750
753
  }
754
+ /** Telegram-style bold headline (Missed Call / Incoming Call / …). */
755
+ function axmChatCallLogHeadlineKey(info, viewerUserId) {
756
+ const mediaSuffix = info.media === 'video' ? '-video' : '';
757
+ const perspective = axmChatCallLogPerspective(info, viewerUserId);
758
+ if (perspective.startsWith('group-')) {
759
+ return `@conversation:chat.call.log.headline.${perspective}${mediaSuffix}`;
760
+ }
761
+ if (perspective.endsWith('-missed')) {
762
+ return `@conversation:chat.call.log.headline.missed${mediaSuffix}`;
763
+ }
764
+ if (perspective.endsWith('-declined')) {
765
+ return `@conversation:chat.call.log.headline.declined${mediaSuffix}`;
766
+ }
767
+ if (perspective.endsWith('-cancelled')) {
768
+ return `@conversation:chat.call.log.headline.cancelled${mediaSuffix}`;
769
+ }
770
+ if (perspective === 'outgoing-completed') {
771
+ return `@conversation:chat.call.log.headline.outgoing${mediaSuffix}`;
772
+ }
773
+ return `@conversation:chat.call.log.headline.incoming${mediaSuffix}`;
774
+ }
775
+ /** Top line: peer / self / group subject. */
776
+ function axmChatCallLogSubjectKey(info, viewerUserId) {
777
+ const perspective = axmChatCallLogPerspective(info, viewerUserId);
778
+ switch (perspective) {
779
+ case 'outgoing-completed':
780
+ case 'outgoing-missed':
781
+ return '@conversation:chat.call.log.subject.with-name';
782
+ case 'incoming-declined':
783
+ case 'outgoing-cancelled':
784
+ return '@conversation:chat.call.log.subject.you';
785
+ case 'group-completed':
786
+ case 'group-declined':
787
+ case 'group-missed':
788
+ case 'group-cancelled':
789
+ return '@conversation:chat.call.log.subject.group';
790
+ case 'incoming-completed':
791
+ case 'outgoing-declined':
792
+ case 'incoming-cancelled':
793
+ case 'incoming-missed':
794
+ default:
795
+ return '@conversation:chat.call.log.subject.name';
796
+ }
797
+ }
798
+ /** Second line: call operation / outcome copy. */
799
+ function axmChatCallLogActionKey(info, viewerUserId) {
800
+ const mediaSuffix = info.media === 'video' ? '-video' : '';
801
+ const perspective = axmChatCallLogPerspective(info, viewerUserId);
802
+ return `@conversation:chat.call.log.action.${perspective}${mediaSuffix}`;
803
+ }
804
+ /** @deprecated Prefer subject + action keys for Telegram-style two-line copy. */
805
+ function axmChatCallLogTitleKey(info, viewerUserId) {
806
+ const mediaSuffix = info.media === 'video' ? '-video' : '';
807
+ const perspective = axmChatCallLogPerspective(info, viewerUserId);
808
+ return `@conversation:chat.call.log.${perspective}${mediaSuffix}`;
809
+ }
751
810
  function axmChatCallLogTranslateParams(info) {
752
811
  const params = {};
753
812
  if (info.peerUserName?.trim()) {
@@ -3315,7 +3374,7 @@ async function axmOpenChatCallStartDialog(options) {
3315
3374
  }
3316
3375
  // Capture DI before any await (dynamic import below).
3317
3376
  const popupService = options.popupService ?? inject(AXPopupService);
3318
- const comp = (await import('./acorex-platform-module-conversation-client-chat-call-start-popup.component-eKYhjy91.mjs')).AXMChatCallStartPopupComponent;
3377
+ const comp = (await import('./acorex-platform-module-conversation-client-chat-call-start-popup.component-EZjVSlhm.mjs')).AXMChatCallStartPopupComponent;
3319
3378
  const data = { conversation };
3320
3379
  await popupService.open(comp, {
3321
3380
  header: false,
@@ -4898,7 +4957,7 @@ async function axmOpenAssistDelegatedAgentDetailDialog(options) {
4898
4957
  options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.dialog-title-suffix'),
4899
4958
  options.translationService.translateAsync('@conversation:chat.assist-renderer.delegated-agent.transcript-missing'),
4900
4959
  ]);
4901
- const comp = (await import('./acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Dgs6fpN3.mjs'))
4960
+ const comp = (await import('./acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DhRvuCex.mjs'))
4902
4961
  .AXMAssistDelegatedAgentDetailPopupComponent;
4903
4962
  const data = {
4904
4963
  delegationCallId: callId,
@@ -6389,6 +6448,40 @@ const AXM_CONVERSATION_BOT_RENDERER = {
6389
6448
  icon: 'fa-light fa-sparkles',
6390
6449
  };
6391
6450
 
6451
+ //#region ----- Imports -----
6452
+ //#endregion
6453
+ //#region ----- Dialog -----
6454
+ /**
6455
+ * Opens the LiveKit-backed call session as an in-app popup.
6456
+ * Must be called from an injection context when `popupService` is omitted.
6457
+ */
6458
+ async function axmOpenChatCallSessionDialog(options) {
6459
+ const conversation = options.conversation;
6460
+ if (!conversation?.id?.trim()) {
6461
+ return;
6462
+ }
6463
+ const popupService = options.popupService ?? inject(AXPopupService);
6464
+ const comp = (await import('./acorex-platform-module-conversation-client-chat-call-session-page.component-C47tt1me.mjs')).AXMChatCallSessionPageComponent;
6465
+ const data = {
6466
+ sessionConversation: conversation,
6467
+ sessionMedia: options.media === 'video' ? 'video' : 'voice',
6468
+ sessionPhase: options.phase ?? 'outgoing-waiting',
6469
+ sessionCallId: options.callId?.trim() || undefined,
6470
+ sessionInitiatorUserId: options.initiatorUserId?.trim() || undefined,
6471
+ };
6472
+ await popupService.open(comp, {
6473
+ header: false,
6474
+ closeButton: false,
6475
+ footer: false,
6476
+ size: 'full',
6477
+ closeOnBackdropClick: false,
6478
+ panelClass: ['animate-fadeIn', 'animate-fast'],
6479
+ contextElement: axmChatCallDarkThemeContextElement(),
6480
+ data,
6481
+ });
6482
+ }
6483
+ //#endregion
6484
+
6392
6485
  //#endregion
6393
6486
  //#region ----- Component -----
6394
6487
  class AXMChatCallLogMessageRendererComponent {
@@ -6400,7 +6493,12 @@ class AXMChatCallLogMessageRendererComponent {
6400
6493
  //#region ----- Services & Dependencies -----
6401
6494
  this.session = inject(AXPSessionService);
6402
6495
  this.translation = inject(AXTranslationService);
6496
+ this.localeService = inject(AXLocaleService);
6403
6497
  this.settings = inject(AXPSettingsService);
6498
+ this.conversationService = inject(AXConversationService);
6499
+ this.popupService = inject(AXPopupService);
6500
+ this.toastService = inject(AXToastService);
6501
+ this.rtcApi = inject(AXPRtcApiAbstract, { optional: true });
6404
6502
  this.destroyRef = inject(DestroyRef);
6405
6503
  //#endregion
6406
6504
  //#region ----- State Signals -----
@@ -6408,6 +6506,8 @@ class AXMChatCallLogMessageRendererComponent {
6408
6506
  ...(ngDevMode ? [{ debugName: "contentState" }] : /* istanbul ignore next */ []));
6409
6507
  this.translateParams = signal({}, /* @ts-ignore */
6410
6508
  ...(ngDevMode ? [{ debugName: "translateParams" }] : /* istanbul ignore next */ []));
6509
+ this.callbackBusy = signal(false, /* @ts-ignore */
6510
+ ...(ngDevMode ? [{ debugName: "callbackBusy" }] : /* istanbul ignore next */ []));
6411
6511
  //#endregion
6412
6512
  //#region ----- Computed Properties -----
6413
6513
  this.rendererState = computed(() => ({
@@ -6419,14 +6519,23 @@ class AXMChatCallLogMessageRendererComponent {
6419
6519
  ...(ngDevMode ? [{ debugName: "log" }] : /* istanbul ignore next */ []));
6420
6520
  this.isVideo = computed(() => this.log()?.media === 'video', /* @ts-ignore */
6421
6521
  ...(ngDevMode ? [{ debugName: "isVideo" }] : /* istanbul ignore next */ []));
6422
- this.titleKey = computed(() => {
6522
+ /** Own bubble (primary/blue) — icons must use on-primary, not status red/green. */
6523
+ this.isOwnBubble = computed(() => {
6524
+ const viewerId = this.session.user?.id?.trim() ?? '';
6525
+ const senderId = this.message().senderId?.trim() ?? '';
6526
+ return Boolean(viewerId && senderId && viewerId === senderId);
6527
+ }, /* @ts-ignore */
6528
+ ...(ngDevMode ? [{ debugName: "isOwnBubble" }] : /* istanbul ignore next */ []));
6529
+ this.isRtlLayout = computed(() => this.localeService.activeProfile()?.i18nMeta?.rtl === true, /* @ts-ignore */
6530
+ ...(ngDevMode ? [{ debugName: "isRtlLayout" }] : /* istanbul ignore next */ []));
6531
+ this.headlineKey = computed(() => {
6423
6532
  const info = this.log();
6424
6533
  if (!info) {
6425
- return '@conversation:chat.call.log.missed';
6534
+ return '@conversation:chat.call.log.headline.missed';
6426
6535
  }
6427
- return axmChatCallLogTitleKey(info, this.session.user?.id ?? null);
6536
+ return axmChatCallLogHeadlineKey(info, this.session.user?.id ?? null);
6428
6537
  }, /* @ts-ignore */
6429
- ...(ngDevMode ? [{ debugName: "titleKey" }] : /* istanbul ignore next */ []));
6538
+ ...(ngDevMode ? [{ debugName: "headlineKey" }] : /* istanbul ignore next */ []));
6430
6539
  this.showGroupAttendance = computed(() => {
6431
6540
  const info = this.log();
6432
6541
  return Boolean(info?.isGroup &&
@@ -6434,16 +6543,44 @@ class AXMChatCallLogMessageRendererComponent {
6434
6543
  (info.joinedUserNames?.length || info.absentUserNames?.length));
6435
6544
  }, /* @ts-ignore */
6436
6545
  ...(ngDevMode ? [{ debugName: "showGroupAttendance" }] : /* istanbul ignore next */ []));
6437
- this.mediaIconClass = computed(() => {
6546
+ /**
6547
+ * Call direction relative to the viewer (drives arrow ↙ / ↗).
6548
+ * Based on who initiated the call — not who last acted (decline/cancel).
6549
+ */
6550
+ this.callDirection = computed(() => {
6438
6551
  const info = this.log();
6439
6552
  if (!info) {
6440
- return 'fa-phone';
6553
+ return 'incoming';
6441
6554
  }
6442
- return this.isVideo() ? 'fa-video' : 'fa-phone';
6555
+ return this.isViewerInitiator(info) ? 'outgoing' : 'incoming';
6556
+ }, /* @ts-ignore */
6557
+ ...(ngDevMode ? [{ debugName: "callDirection" }] : /* istanbul ignore next */ []));
6558
+ /**
6559
+ * Status color (Telegram-style):
6560
+ * - completed (answered) → green
6561
+ * - missed / declined / cancelled → red
6562
+ */
6563
+ this.iconTone = computed(() => {
6564
+ const outcome = this.log()?.outcome;
6565
+ return outcome === 'completed' ? 'success' : 'danger';
6566
+ }, /* @ts-ignore */
6567
+ ...(ngDevMode ? [{ debugName: "iconTone" }] : /* istanbul ignore next */ []));
6568
+ /** Status glyph: cancelled → ban; otherwise diagonal arrow by direction. */
6569
+ this.statusIconClass = computed(() => {
6570
+ if (this.log()?.outcome === 'cancelled') {
6571
+ return 'fa-ban';
6572
+ }
6573
+ return this.callDirection() === 'outgoing'
6574
+ ? 'fa-arrow-up axm-chat-call-log__arrow axm-chat-call-log__arrow--out'
6575
+ : 'fa-arrow-down axm-chat-call-log__arrow axm-chat-call-log__arrow--in';
6443
6576
  }, /* @ts-ignore */
6444
- ...(ngDevMode ? [{ debugName: "mediaIconClass" }] : /* istanbul ignore next */ []));
6577
+ ...(ngDevMode ? [{ debugName: "statusIconClass" }] : /* istanbul ignore next */ []));
6578
+ /** Large trailing call-back glyph (phone / video). */
6579
+ this.callbackIconClass = computed(() => (this.isVideo() ? 'fa-video' : 'fa-phone'), /* @ts-ignore */
6580
+ ...(ngDevMode ? [{ debugName: "callbackIconClass" }] : /* istanbul ignore next */ []));
6445
6581
  effect(() => {
6446
6582
  const info = this.log();
6583
+ void this.message();
6447
6584
  void this.refreshTranslateParams(info);
6448
6585
  });
6449
6586
  this.settings.onChanged
@@ -6459,14 +6596,62 @@ class AXMChatCallLogMessageRendererComponent {
6459
6596
  event.preventDefault();
6460
6597
  event.stopPropagation();
6461
6598
  }
6599
+ /** Quick re-call with the same media type as this log entry. */
6600
+ async onCallbackClick(event) {
6601
+ event.preventDefault();
6602
+ event.stopPropagation();
6603
+ if (this.callbackBusy()) {
6604
+ return;
6605
+ }
6606
+ const conversationId = this.message().conversationId?.trim() ?? '';
6607
+ if (!conversationId) {
6608
+ return;
6609
+ }
6610
+ const active = this.conversationService.activeConversation();
6611
+ const conversation = active?.id === conversationId
6612
+ ? active
6613
+ : this.conversationService.conversations().find((item) => item.id === conversationId);
6614
+ if (!conversation?.id?.trim()) {
6615
+ return;
6616
+ }
6617
+ this.callbackBusy.set(true);
6618
+ try {
6619
+ if (!(await axmEnsureChatCallRtcReady({
6620
+ rtc: this.rtcApi,
6621
+ translation: this.translation,
6622
+ toast: this.toastService,
6623
+ }))) {
6624
+ return;
6625
+ }
6626
+ await axmOpenChatCallSessionDialog({
6627
+ conversation,
6628
+ media: this.log()?.media === 'video' ? 'video' : 'voice',
6629
+ popupService: this.popupService,
6630
+ });
6631
+ }
6632
+ finally {
6633
+ this.callbackBusy.set(false);
6634
+ }
6635
+ }
6462
6636
  //#endregion
6463
- //#region ----- Translate params -----
6637
+ //#region ----- Icon helpers -----
6638
+ /** True when the current user started the call (outgoing direction). */
6639
+ isViewerInitiator(info) {
6640
+ const viewer = this.session.user?.id?.trim() ?? '';
6641
+ const initiator = info.initiatorUserId?.trim() ?? '';
6642
+ return Boolean(viewer && initiator && viewer === initiator);
6643
+ }
6644
+ //#endregion
6645
+ //#region ----- Display formatting -----
6464
6646
  async refreshTranslateParams(info) {
6465
6647
  if (!info) {
6466
6648
  this.translateParams.set({});
6467
6649
  return;
6468
6650
  }
6469
6651
  const params = axmChatCallLogTranslateParams(info);
6652
+ if (!params['name']?.trim()) {
6653
+ params['name'] = await this.translation.translateAsync('@conversation:chat.call.log.subject.unknown');
6654
+ }
6470
6655
  if (info.durationSec != null) {
6471
6656
  const durationTranslation = axmResolveCallDurationTranslation(info.durationSec);
6472
6657
  params['duration'] = await this.translation.translateAsync(durationTranslation.key, {
@@ -6476,13 +6661,13 @@ class AXMChatCallLogMessageRendererComponent {
6476
6661
  this.translateParams.set(params);
6477
6662
  }
6478
6663
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallLogMessageRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6479
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatCallLogMessageRendererComponent, isStandalone: true, selector: "axm-chat-call-log-message-renderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "contextmenu": "onContextMenu($event)" } }, ngImport: i0, template: "@if (log(); as info) {\n <div class=\"axm-chat-call-log\" [class.axm-chat-call-log--video]=\"isVideo()\">\n <div class=\"axm-chat-call-log__body\">\n <span class=\"axm-chat-call-log__title\">{{\n titleKey() | translate: { params: translateParams() } | async\n }}</span>\n @if (showGroupAttendance()) {\n <span class=\"axm-chat-call-log__detail\">{{\n '@conversation:chat.call.log.group-attendance'\n | translate: { params: translateParams() }\n | async\n }}</span>\n }\n </div>\n <!-- ----- Call media icon (voice / video) ----- -->\n <span class=\"axm-chat-call-log__media-icon\" aria-hidden=\"true\">\n <i [class]=\"'fa-solid ' + mediaIconClass()\"></i>\n </span>\n </div>\n}\n", styles: [":host{display:block;min-width:0;max-width:100%}.axm-chat-call-log{display:flex;align-items:flex-start;gap:.625rem;min-width:0}.axm-chat-call-log__body{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.axm-chat-call-log__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));letter-spacing:var(--tracking-wide, .025em);font-weight:inherit}.axm-chat-call-log__detail{font-size:.75rem;opacity:.85;line-height:1.35}.axm-chat-call-log__media-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:var(--text-sm, .875rem);line-height:1;color:color-mix(in srgb,var(--ax-sys-color-primary) 82%,var(--ax-sys-color-on-surface))}.axm-chat-call-log--video .axm-chat-call-log__media-icon{color:color-mix(in srgb,var(--ax-sys-color-success) 78%,var(--ax-sys-color-on-surface))}\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6664
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatCallLogMessageRendererComponent, isStandalone: true, selector: "axm-chat-call-log-message-renderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "contextmenu": "onContextMenu($event)" } }, ngImport: i0, template: "@if (log(); as info) {\n <div\n class=\"axm-chat-call-log\"\n [attr.dir]=\"isRtlLayout() ? 'rtl' : 'ltr'\"\n [class.axm-chat-call-log--video]=\"isVideo()\"\n [class.axm-chat-call-log--success]=\"iconTone() === 'success'\"\n [class.axm-chat-call-log--danger]=\"iconTone() === 'danger'\"\n [class.axm-chat-call-log--own]=\"isOwnBubble()\"\n [class.axm-chat-call-log--outgoing]=\"callDirection() === 'outgoing'\"\n [class.axm-chat-call-log--incoming]=\"callDirection() === 'incoming'\"\n >\n <!-- ----- Call-back action (Telegram phone button) ----- -->\n <button\n type=\"button\"\n class=\"axm-chat-call-log__callback\"\n [disabled]=\"callbackBusy()\"\n [attr.aria-label]=\"'@conversation:chat.call.log.callback' | translate | async\"\n (click)=\"onCallbackClick($event)\"\n >\n <i [class]=\"'fa-solid ' + callbackIconClass()\" aria-hidden=\"true\"></i>\n </button>\n\n <div class=\"axm-chat-call-log__body\">\n <!-- ----- Telegram-style status headline ----- -->\n <span class=\"axm-chat-call-log__title\">{{\n headlineKey() | translate: { params: translateParams() } | async\n }}</span>\n\n <div class=\"axm-chat-call-log__meta\">\n <!-- ----- Status marker + call/ring duration (bubble already shows message time) ----- -->\n <span class=\"axm-chat-call-log__status\" aria-hidden=\"true\">\n <i [class]=\"'fa-solid ' + statusIconClass()\"></i>\n </span>\n @if (translateParams()['duration']; as duration) {\n <span class=\"axm-chat-call-log__meta-text\">{{ duration }}</span>\n }\n </div>\n\n @if (showGroupAttendance()) {\n <!-- ----- Group attendance summary when the call completed ----- -->\n <span class=\"axm-chat-call-log__detail\">{{\n '@conversation:chat.call.log.group-attendance'\n | translate: { params: translateParams() }\n | async\n }}</span>\n }\n </div>\n </div>\n}\n", styles: [":host{display:block;width:100%;min-width:12.5rem;max-width:100%;color:inherit}.axm-chat-call-log{--axm-call-log-status: rgb(var(--ax-sys-color-success-500));--axm-call-log-callback-ring: rgb(var(--ax-sys-color-primary-500));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-on-primary-surface));box-sizing:border-box;width:100%;min-width:12.5rem;color:inherit;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:.875rem}.axm-chat-call-log[dir=ltr]{flex-direction:row-reverse;justify-content:space-between}.axm-chat-call-log__body{display:flex;flex-direction:column;align-items:flex-start;gap:.2rem;min-width:0;text-align:start}.axm-chat-call-log[dir=ltr] .axm-chat-call-log__body{flex:1 1 auto;align-items:flex-start}.axm-chat-call-log[dir=ltr] .axm-chat-call-log__meta{align-self:stretch;justify-content:flex-start}.axm-chat-call-log[dir=rtl] .axm-chat-call-log__body{align-items:flex-start}.axm-chat-call-log[dir=rtl] .axm-chat-call-log__meta{align-self:stretch;justify-content:flex-start}.axm-chat-call-log--danger{--axm-call-log-status: rgb(var(--ax-sys-color-danger-500))}.axm-chat-call-log--success{--axm-call-log-status: rgb(var(--ax-sys-color-success-500))}.axm-chat-call-log--own{--axm-call-log-status: rgb(var(--ax-sys-color-on-primary-surface));--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-primary-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-primary-surface))}.axm-chat-call-log:not(.axm-chat-call-log--own){--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-lightest-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-call-log__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-call-log__meta{display:inline-flex;align-items:center;gap:.35rem;min-width:0;color:inherit;opacity:.7;font-size:.75rem;line-height:1.35}.axm-chat-call-log__status{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--axm-call-log-status);font-size:.7rem;line-height:1}.axm-chat-call-log__arrow{display:inline-block;transform-origin:center}.axm-chat-call-log__arrow--in{transform:rotate(-45deg)}.axm-chat-call-log__arrow--out{transform:rotate(45deg)}.axm-chat-call-log__meta-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-call-log__detail{font-size:.75rem;color:inherit;opacity:.85;line-height:1.35}.axm-chat-call-log__callback{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:9999px;background:var(--axm-call-log-callback-ring);color:var(--axm-call-log-callback-surface);font-size:1.1rem;line-height:1;cursor:pointer}.axm-chat-call-log__callback:hover:not(:disabled){filter:brightness(.94)}.axm-chat-call-log__callback:active:not(:disabled){filter:brightness(.88)}.axm-chat-call-log__callback:disabled{opacity:.55;cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6480
6665
  }
6481
6666
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatCallLogMessageRendererComponent, decorators: [{
6482
6667
  type: Component,
6483
6668
  args: [{ selector: 'axm-chat-call-log-message-renderer', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXTranslationModule, AsyncPipe], host: {
6484
6669
  '(contextmenu)': 'onContextMenu($event)',
6485
- }, template: "@if (log(); as info) {\n <div class=\"axm-chat-call-log\" [class.axm-chat-call-log--video]=\"isVideo()\">\n <div class=\"axm-chat-call-log__body\">\n <span class=\"axm-chat-call-log__title\">{{\n titleKey() | translate: { params: translateParams() } | async\n }}</span>\n @if (showGroupAttendance()) {\n <span class=\"axm-chat-call-log__detail\">{{\n '@conversation:chat.call.log.group-attendance'\n | translate: { params: translateParams() }\n | async\n }}</span>\n }\n </div>\n <!-- ----- Call media icon (voice / video) ----- -->\n <span class=\"axm-chat-call-log__media-icon\" aria-hidden=\"true\">\n <i [class]=\"'fa-solid ' + mediaIconClass()\"></i>\n </span>\n </div>\n}\n", styles: [":host{display:block;min-width:0;max-width:100%}.axm-chat-call-log{display:flex;align-items:flex-start;gap:.625rem;min-width:0}.axm-chat-call-log__body{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.axm-chat-call-log__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));letter-spacing:var(--tracking-wide, .025em);font-weight:inherit}.axm-chat-call-log__detail{font-size:.75rem;opacity:.85;line-height:1.35}.axm-chat-call-log__media-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:var(--text-sm, .875rem);line-height:1;color:color-mix(in srgb,var(--ax-sys-color-primary) 82%,var(--ax-sys-color-on-surface))}.axm-chat-call-log--video .axm-chat-call-log__media-icon{color:color-mix(in srgb,var(--ax-sys-color-success) 78%,var(--ax-sys-color-on-surface))}\n"] }]
6670
+ }, template: "@if (log(); as info) {\n <div\n class=\"axm-chat-call-log\"\n [attr.dir]=\"isRtlLayout() ? 'rtl' : 'ltr'\"\n [class.axm-chat-call-log--video]=\"isVideo()\"\n [class.axm-chat-call-log--success]=\"iconTone() === 'success'\"\n [class.axm-chat-call-log--danger]=\"iconTone() === 'danger'\"\n [class.axm-chat-call-log--own]=\"isOwnBubble()\"\n [class.axm-chat-call-log--outgoing]=\"callDirection() === 'outgoing'\"\n [class.axm-chat-call-log--incoming]=\"callDirection() === 'incoming'\"\n >\n <!-- ----- Call-back action (Telegram phone button) ----- -->\n <button\n type=\"button\"\n class=\"axm-chat-call-log__callback\"\n [disabled]=\"callbackBusy()\"\n [attr.aria-label]=\"'@conversation:chat.call.log.callback' | translate | async\"\n (click)=\"onCallbackClick($event)\"\n >\n <i [class]=\"'fa-solid ' + callbackIconClass()\" aria-hidden=\"true\"></i>\n </button>\n\n <div class=\"axm-chat-call-log__body\">\n <!-- ----- Telegram-style status headline ----- -->\n <span class=\"axm-chat-call-log__title\">{{\n headlineKey() | translate: { params: translateParams() } | async\n }}</span>\n\n <div class=\"axm-chat-call-log__meta\">\n <!-- ----- Status marker + call/ring duration (bubble already shows message time) ----- -->\n <span class=\"axm-chat-call-log__status\" aria-hidden=\"true\">\n <i [class]=\"'fa-solid ' + statusIconClass()\"></i>\n </span>\n @if (translateParams()['duration']; as duration) {\n <span class=\"axm-chat-call-log__meta-text\">{{ duration }}</span>\n }\n </div>\n\n @if (showGroupAttendance()) {\n <!-- ----- Group attendance summary when the call completed ----- -->\n <span class=\"axm-chat-call-log__detail\">{{\n '@conversation:chat.call.log.group-attendance'\n | translate: { params: translateParams() }\n | async\n }}</span>\n }\n </div>\n </div>\n}\n", styles: [":host{display:block;width:100%;min-width:12.5rem;max-width:100%;color:inherit}.axm-chat-call-log{--axm-call-log-status: rgb(var(--ax-sys-color-success-500));--axm-call-log-callback-ring: rgb(var(--ax-sys-color-primary-500));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-on-primary-surface));box-sizing:border-box;width:100%;min-width:12.5rem;color:inherit;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:.875rem}.axm-chat-call-log[dir=ltr]{flex-direction:row-reverse;justify-content:space-between}.axm-chat-call-log__body{display:flex;flex-direction:column;align-items:flex-start;gap:.2rem;min-width:0;text-align:start}.axm-chat-call-log[dir=ltr] .axm-chat-call-log__body{flex:1 1 auto;align-items:flex-start}.axm-chat-call-log[dir=ltr] .axm-chat-call-log__meta{align-self:stretch;justify-content:flex-start}.axm-chat-call-log[dir=rtl] .axm-chat-call-log__body{align-items:flex-start}.axm-chat-call-log[dir=rtl] .axm-chat-call-log__meta{align-self:stretch;justify-content:flex-start}.axm-chat-call-log--danger{--axm-call-log-status: rgb(var(--ax-sys-color-danger-500))}.axm-chat-call-log--success{--axm-call-log-status: rgb(var(--ax-sys-color-success-500))}.axm-chat-call-log--own{--axm-call-log-status: rgb(var(--ax-sys-color-on-primary-surface));--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-primary-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-primary-surface))}.axm-chat-call-log:not(.axm-chat-call-log--own){--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-lightest-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-lightest-surface))}.axm-chat-call-log__title{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-call-log__meta{display:inline-flex;align-items:center;gap:.35rem;min-width:0;color:inherit;opacity:.7;font-size:.75rem;line-height:1.35}.axm-chat-call-log__status{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;color:var(--axm-call-log-status);font-size:.7rem;line-height:1}.axm-chat-call-log__arrow{display:inline-block;transform-origin:center}.axm-chat-call-log__arrow--in{transform:rotate(-45deg)}.axm-chat-call-log__arrow--out{transform:rotate(45deg)}.axm-chat-call-log__meta-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.axm-chat-call-log__detail{font-size:.75rem;color:inherit;opacity:.85;line-height:1.35}.axm-chat-call-log__callback{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:9999px;background:var(--axm-call-log-callback-ring);color:var(--axm-call-log-callback-surface);font-size:1.1rem;line-height:1;cursor:pointer}.axm-chat-call-log__callback:hover:not(:disabled){filter:brightness(.94)}.axm-chat-call-log__callback:active:not(:disabled){filter:brightness(.88)}.axm-chat-call-log__callback:disabled{opacity:.55;cursor:default}\n"] }]
6486
6671
  }], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] } });
6487
6672
 
6488
6673
  const AXM_CONVERSATION_CALL_LOG_RENDERER = {
@@ -9874,7 +10059,7 @@ async function axmOpenChatConversationInfoPanelDialog(options) {
9874
10059
  }
9875
10060
  const popupService = options.popupService ?? inject(AXPopupService);
9876
10061
  const conversationService = options.conversationService ?? inject(AXConversationService);
9877
- const comp = (await import('./acorex-platform-module-conversation-client-chat-conversation-info-panel.component-CE40xbl9.mjs')).AXMChatConversationInfoPanelComponent;
10062
+ const comp = (await import('./acorex-platform-module-conversation-client-chat-conversation-info-panel.component-BBL8iEqc.mjs')).AXMChatConversationInfoPanelComponent;
9878
10063
  await popupService.open(comp, {
9879
10064
  title: conversation.title,
9880
10065
  closeButton: true,
@@ -10212,7 +10397,7 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
10212
10397
  return axmIsConversationChatUrl(this.routerUrl());
10213
10398
  }
10214
10399
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
10215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatComponent, isStandalone: true, selector: "axm-chat", host: { listeners: { "keydown.escape": "onContainerEscape()" }, properties: { "tabindex": "\"-1\"" } }, usesInheritance: true, ngImport: i0, template: "<axp-page-layout #container axConversationContainer>\n <!-- ----- Desktop sidebar only; mobile uses full-screen list + back navigation ----- -->\n @if (!deviceService.isMobileDevice()) {\n <axp-layout-start-side class=\"border-e h-full\">\n <axp-layout-content class=\"flex flex-col min-h-0 max-w-80\">\n <div class=\"h-full flex flex-col shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <!-- ----- Chat content: list on mobile when idle; conversation + back when selected ----- -->\n\n <axp-page-content class=\"h-full overflow-hidden p-0! flex min-h-0 flex-col\">\n @if (showChatList()) {\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n } @else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col\">\n <ax-conversation-info-bar class=\"shadow-md\">\n <ax-prefix>\n <!-- ----- Back to conversation list on mobile ----- -->\n @if (deviceService.isMobileDevice()) {\n <ax-button look=\"blank\" class=\"axm-chat__back\" [attr.aria-label]=\"('@conversation:chat.actions.back-to-chats' | translate | async) ?? ''\" (onClick)=\"openChatList()\">\n <ax-prefix>\n <ax-icon class=\"axm-chat__back-icon\" icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-prefix>\n <!--->\n <!-- ----- Unread count from other chats ----- -->\n @if (backBadgeCount() > 0) {\n <ax-badge size=\"sm\" look=\"solid\" color=\"primary\" [text]=\"'' + backBadgeCount()\"></ax-badge>\n }\n </ax-button>\n }\n <!-- ----- Close chat on desktop ----- -->\n @else {\n <ax-button class=\"rounded-full\" look=\"blank\" (onClick)=\"onContainerEscape()\" aria-label=\"Close Chat\">\n <ax-icon icon=\"fa-light fa-xmark text-xl\"></ax-icon>\n </ax-button>\n }\n </ax-prefix>\n </ax-conversation-info-bar>\n <ax-conversation-message-list class=\"min-h-0 flex-1 overflow-hidden\" style=\"direction: ltr\">\n <div ax-conversation-message-list-no-active class=\"block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-state-host (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n <axm-chat-assist-composer-starter-prompts ax-conversation-message-list-empty />\n </ax-conversation-message-list>\n </div>\n }\n </axp-page-content>\n\n <axp-page-footer class=\"block\">\n <ax-conversation-composer />\n </axp-page-footer>\n</axp-page-layout>\n", styles: ["ax-conversation-avatar .ax-conversation-avatar-status{display:none}axm-chat #axp-page-header{display:none}axm-chat #axp-page-footer-container{padding:0}axm-chat .date-separator{z-index:50!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}axm-chat .message-own .message-bubble .axm-chat-call-log__media-icon{color:var(--ax-sys-color-on-primary-surface)}@supports (color: color-mix(in lab,red,red)){axm-chat .message-own .message-bubble .axm-chat-call-log__media-icon{color:color-mix(in srgb,var(--ax-sys-color-on-primary-surface) 88%,transparent)}}axm-chat .axm-chat__back{display:inline-flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat .axm-chat__back-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXConversationContainerDirective, selector: "[axConversationContainer]" }, { kind: "component", type: AXConversationSidebarComponent, selector: "ax-conversation-sidebar", outputs: ["conversationSelected"] }, { kind: "component", type: AXConversationInfoBarComponent, selector: "ax-conversation-info-bar", outputs: ["infoClick", "searchClick", "searchQuery", "menuItemAction"] }, { kind: "component", type: AXConversationMessageListComponent, selector: "ax-conversation-message-list", outputs: ["messageAction"] }, { kind: "component", type: AXConversationComposerComponent, selector: "ax-conversation-composer", outputs: ["messageSent", "generationCancelled", "emojiClick", "attachClick", "voiceClick"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXMChatSidebarNewActionsComponent, selector: "axm-chat-sidebar-new-actions", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatEmptyStateHostComponent, selector: "axm-chat-empty-state-host", inputs: ["compact", "initialAssistId", "entityId", "entityType", "sendStarterPromptsInPlace"], outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatAssistComposerStarterPromptsComponent, selector: "axm-chat-assist-composer-starter-prompts", inputs: ["sendStarterPromptsInPlace", "compact"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10400
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMChatComponent, isStandalone: true, selector: "axm-chat", host: { listeners: { "keydown.escape": "onContainerEscape()" }, properties: { "tabindex": "\"-1\"" } }, usesInheritance: true, ngImport: i0, template: "<axp-page-layout #container axConversationContainer>\n <!-- ----- Desktop sidebar only; mobile uses full-screen list + back navigation ----- -->\n @if (!deviceService.isMobileDevice()) {\n <axp-layout-start-side class=\"border-e h-full\">\n <axp-layout-content class=\"flex flex-col min-h-0 max-w-80\">\n <div class=\"h-full flex flex-col shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <!-- ----- Chat content: list on mobile when idle; conversation + back when selected ----- -->\n\n <axp-page-content class=\"h-full overflow-hidden p-0! flex min-h-0 flex-col\">\n @if (showChatList()) {\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n } @else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col\">\n <ax-conversation-info-bar class=\"shadow-md\">\n <ax-prefix>\n <!-- ----- Back to conversation list on mobile ----- -->\n @if (deviceService.isMobileDevice()) {\n <ax-button look=\"blank\" class=\"axm-chat__back\" [attr.aria-label]=\"('@conversation:chat.actions.back-to-chats' | translate | async) ?? ''\" (onClick)=\"openChatList()\">\n <ax-prefix>\n <ax-icon class=\"axm-chat__back-icon\" icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-prefix>\n <!--->\n <!-- ----- Unread count from other chats ----- -->\n @if (backBadgeCount() > 0) {\n <ax-badge size=\"sm\" look=\"solid\" color=\"primary\" [text]=\"'' + backBadgeCount()\"></ax-badge>\n }\n </ax-button>\n }\n <!-- ----- Close chat on desktop ----- -->\n @else {\n <ax-button class=\"rounded-full\" look=\"blank\" (onClick)=\"onContainerEscape()\" aria-label=\"Close Chat\">\n <ax-icon icon=\"fa-light fa-xmark text-xl\"></ax-icon>\n </ax-button>\n }\n </ax-prefix>\n </ax-conversation-info-bar>\n <ax-conversation-message-list class=\"min-h-0 flex-1 overflow-hidden\">\n <div ax-conversation-message-list-no-active class=\"block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-state-host (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n <axm-chat-assist-composer-starter-prompts ax-conversation-message-list-empty />\n </ax-conversation-message-list>\n </div>\n }\n </axp-page-content>\n\n <axp-page-footer class=\"block\">\n <ax-conversation-composer />\n </axp-page-footer>\n</axp-page-layout>\n", styles: ["ax-conversation-avatar .ax-conversation-avatar-status{display:none}axm-chat #axp-page-header{display:none}axm-chat #axp-page-footer-container{padding:0}axm-chat .date-separator{z-index:50!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}axm-chat .message-bubble:has(.axm-chat-call-log){text-align:start}axm-chat .message-bubble .axm-chat-call-log,axm-chat .message-bubble axm-chat-call-log-message-renderer{width:100%;min-width:12.5rem}axm-chat .message-bubble-received .axm-chat-call-log:not(.axm-chat-call-log--own){--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-lightest-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-lightest-surface))}axm-chat .axm-chat__back{display:inline-flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat .axm-chat__back-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXConversationContainerDirective, selector: "[axConversationContainer]" }, { kind: "component", type: AXConversationSidebarComponent, selector: "ax-conversation-sidebar", outputs: ["conversationSelected"] }, { kind: "component", type: AXConversationInfoBarComponent, selector: "ax-conversation-info-bar", outputs: ["infoClick", "searchClick", "searchQuery", "menuItemAction"] }, { kind: "component", type: AXConversationMessageListComponent, selector: "ax-conversation-message-list", outputs: ["messageAction"] }, { kind: "component", type: AXConversationComposerComponent, selector: "ax-conversation-composer", outputs: ["messageSent", "generationCancelled", "emojiClick", "attachClick", "voiceClick"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$4.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXMChatSidebarNewActionsComponent, selector: "axm-chat-sidebar-new-actions", outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatEmptyStateHostComponent, selector: "axm-chat-empty-state-host", inputs: ["compact", "initialAssistId", "entityId", "entityType", "sendStarterPromptsInPlace"], outputs: ["conversationCreated"] }, { kind: "component", type: AXMChatAssistComposerStarterPromptsComponent, selector: "axm-chat-assist-composer-starter-prompts", inputs: ["sendStarterPromptsInPlace", "compact"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10216
10401
  }
10217
10402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMChatComponent, decorators: [{
10218
10403
  type: Component,
@@ -10236,7 +10421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
10236
10421
  ], host: {
10237
10422
  '(keydown.escape)': 'onContainerEscape()',
10238
10423
  '[tabindex]': '"-1"',
10239
- }, template: "<axp-page-layout #container axConversationContainer>\n <!-- ----- Desktop sidebar only; mobile uses full-screen list + back navigation ----- -->\n @if (!deviceService.isMobileDevice()) {\n <axp-layout-start-side class=\"border-e h-full\">\n <axp-layout-content class=\"flex flex-col min-h-0 max-w-80\">\n <div class=\"h-full flex flex-col shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <!-- ----- Chat content: list on mobile when idle; conversation + back when selected ----- -->\n\n <axp-page-content class=\"h-full overflow-hidden p-0! flex min-h-0 flex-col\">\n @if (showChatList()) {\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n } @else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col\">\n <ax-conversation-info-bar class=\"shadow-md\">\n <ax-prefix>\n <!-- ----- Back to conversation list on mobile ----- -->\n @if (deviceService.isMobileDevice()) {\n <ax-button look=\"blank\" class=\"axm-chat__back\" [attr.aria-label]=\"('@conversation:chat.actions.back-to-chats' | translate | async) ?? ''\" (onClick)=\"openChatList()\">\n <ax-prefix>\n <ax-icon class=\"axm-chat__back-icon\" icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-prefix>\n <!--->\n <!-- ----- Unread count from other chats ----- -->\n @if (backBadgeCount() > 0) {\n <ax-badge size=\"sm\" look=\"solid\" color=\"primary\" [text]=\"'' + backBadgeCount()\"></ax-badge>\n }\n </ax-button>\n }\n <!-- ----- Close chat on desktop ----- -->\n @else {\n <ax-button class=\"rounded-full\" look=\"blank\" (onClick)=\"onContainerEscape()\" aria-label=\"Close Chat\">\n <ax-icon icon=\"fa-light fa-xmark text-xl\"></ax-icon>\n </ax-button>\n }\n </ax-prefix>\n </ax-conversation-info-bar>\n <ax-conversation-message-list class=\"min-h-0 flex-1 overflow-hidden\" style=\"direction: ltr\">\n <div ax-conversation-message-list-no-active class=\"block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-state-host (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n <axm-chat-assist-composer-starter-prompts ax-conversation-message-list-empty />\n </ax-conversation-message-list>\n </div>\n }\n </axp-page-content>\n\n <axp-page-footer class=\"block\">\n <ax-conversation-composer />\n </axp-page-footer>\n</axp-page-layout>\n", styles: ["ax-conversation-avatar .ax-conversation-avatar-status{display:none}axm-chat #axp-page-header{display:none}axm-chat #axp-page-footer-container{padding:0}axm-chat .date-separator{z-index:50!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}axm-chat .message-own .message-bubble .axm-chat-call-log__media-icon{color:var(--ax-sys-color-on-primary-surface)}@supports (color: color-mix(in lab,red,red)){axm-chat .message-own .message-bubble .axm-chat-call-log__media-icon{color:color-mix(in srgb,var(--ax-sys-color-on-primary-surface) 88%,transparent)}}axm-chat .axm-chat__back{display:inline-flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat .axm-chat__back-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
10424
+ }, template: "<axp-page-layout #container axConversationContainer>\n <!-- ----- Desktop sidebar only; mobile uses full-screen list + back navigation ----- -->\n @if (!deviceService.isMobileDevice()) {\n <axp-layout-start-side class=\"border-e h-full\">\n <axp-layout-content class=\"flex flex-col min-h-0 max-w-80\">\n <div class=\"h-full flex flex-col shrink-0\">\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n </div>\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <!-- ----- Chat content: list on mobile when idle; conversation + back when selected ----- -->\n\n <axp-page-content class=\"h-full overflow-hidden p-0! flex min-h-0 flex-col\">\n @if (showChatList()) {\n <ax-conversation-sidebar (conversationSelected)=\"onConversationSelected($event.id)\" class=\"group\">\n <ax-suffix>\n <div class=\"flex h-14 shrink-0 items-center justify-end overflow-hidden\">\n <axm-chat-sidebar-new-actions (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n </ax-suffix>\n </ax-conversation-sidebar>\n } @else {\n <div class=\"flex h-full min-h-0 flex-1 flex-col\">\n <ax-conversation-info-bar class=\"shadow-md\">\n <ax-prefix>\n <!-- ----- Back to conversation list on mobile ----- -->\n @if (deviceService.isMobileDevice()) {\n <ax-button look=\"blank\" class=\"axm-chat__back\" [attr.aria-label]=\"('@conversation:chat.actions.back-to-chats' | translate | async) ?? ''\" (onClick)=\"openChatList()\">\n <ax-prefix>\n <ax-icon class=\"axm-chat__back-icon\" icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-prefix>\n <!--->\n <!-- ----- Unread count from other chats ----- -->\n @if (backBadgeCount() > 0) {\n <ax-badge size=\"sm\" look=\"solid\" color=\"primary\" [text]=\"'' + backBadgeCount()\"></ax-badge>\n }\n </ax-button>\n }\n <!-- ----- Close chat on desktop ----- -->\n @else {\n <ax-button class=\"rounded-full\" look=\"blank\" (onClick)=\"onContainerEscape()\" aria-label=\"Close Chat\">\n <ax-icon icon=\"fa-light fa-xmark text-xl\"></ax-icon>\n </ax-button>\n }\n </ax-prefix>\n </ax-conversation-info-bar>\n <ax-conversation-message-list class=\"min-h-0 flex-1 overflow-hidden\">\n <div ax-conversation-message-list-no-active class=\"block\" style=\"width: min(95%, 50rem)\">\n <axm-chat-empty-state-host (conversationCreated)=\"onConversationSelected($event)\" />\n </div>\n <axm-chat-assist-composer-starter-prompts ax-conversation-message-list-empty />\n </ax-conversation-message-list>\n </div>\n }\n </axp-page-content>\n\n <axp-page-footer class=\"block\">\n <ax-conversation-composer />\n </axp-page-footer>\n</axp-page-layout>\n", styles: ["ax-conversation-avatar .ax-conversation-avatar-status{display:none}axm-chat #axp-page-header{display:none}axm-chat #axp-page-footer-container{padding:0}axm-chat .date-separator{z-index:50!important}axm-chat .message-bubble{padding:.75rem .75rem .25rem!important}axm-chat .message-bubble:has(.axm-chat-call-log){text-align:start}axm-chat .message-bubble .axm-chat-call-log,axm-chat .message-bubble axm-chat-call-log-message-renderer{width:100%;min-width:12.5rem}axm-chat .message-bubble-received .axm-chat-call-log:not(.axm-chat-call-log--own){--axm-call-log-callback-ring: rgb(var(--ax-sys-color-on-lightest-surface));--axm-call-log-callback-surface: rgb(var(--ax-sys-color-lightest-surface))}axm-chat .axm-chat__back{display:inline-flex;align-items:center;gap:var(--spacing, .25rem)}axm-chat .axm-chat__back-icon:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
10240
10425
  }] });
10241
10426
 
10242
10427
  var chat_component = /*#__PURE__*/Object.freeze({
@@ -12928,40 +13113,6 @@ function axmParseChatCallRtcRingPayload(raw) {
12928
13113
  }
12929
13114
  //#endregion
12930
13115
 
12931
- //#region ----- Imports -----
12932
- //#endregion
12933
- //#region ----- Dialog -----
12934
- /**
12935
- * Opens the LiveKit-backed call session as an in-app popup.
12936
- * Must be called from an injection context when `popupService` is omitted.
12937
- */
12938
- async function axmOpenChatCallSessionDialog(options) {
12939
- const conversation = options.conversation;
12940
- if (!conversation?.id?.trim()) {
12941
- return;
12942
- }
12943
- const popupService = options.popupService ?? inject(AXPopupService);
12944
- const comp = (await import('./acorex-platform-module-conversation-client-chat-call-session-page.component-BStKnruT.mjs')).AXMChatCallSessionPageComponent;
12945
- const data = {
12946
- sessionConversation: conversation,
12947
- sessionMedia: options.media === 'video' ? 'video' : 'voice',
12948
- sessionPhase: options.phase ?? 'outgoing-waiting',
12949
- sessionCallId: options.callId?.trim() || undefined,
12950
- sessionInitiatorUserId: options.initiatorUserId?.trim() || undefined,
12951
- };
12952
- await popupService.open(comp, {
12953
- header: false,
12954
- closeButton: false,
12955
- footer: false,
12956
- size: 'full',
12957
- closeOnBackdropClick: false,
12958
- panelClass: ['animate-fadeIn', 'animate-fast'],
12959
- contextElement: axmChatCallDarkThemeContextElement(),
12960
- data,
12961
- });
12962
- }
12963
- //#endregion
12964
-
12965
13116
  //#region ----- Imports -----
12966
13117
  //#endregion
12967
13118
  //#region ----- Constants -----
@@ -13388,7 +13539,7 @@ class AXMCommentsPageComponentProvider {
13388
13539
  return [
13389
13540
  {
13390
13541
  key: COMMENTS_PAGE_COMPONENT_KEY,
13391
- loader: () => import('./acorex-platform-module-conversation-client-comments-page.component-VOuN3y_8.mjs').then((m) => m.AXMCommentsPageComponent),
13542
+ loader: () => import('./acorex-platform-module-conversation-client-comments-page.component-Djn8EikR.mjs').then((m) => m.AXMCommentsPageComponent),
13392
13543
  },
13393
13544
  ];
13394
13545
  }
@@ -13680,19 +13831,19 @@ class AXMConversationModule {
13680
13831
  provideCommandSetups([
13681
13832
  {
13682
13833
  key: CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,
13683
- command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
13834
+ command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-yzW01skh.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
13684
13835
  },
13685
13836
  {
13686
13837
  key: CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,
13687
- command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
13838
+ command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
13688
13839
  },
13689
13840
  {
13690
13841
  key: CONVERSATION_SYNC_READ_STATE_COMMAND,
13691
- command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
13842
+ command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
13692
13843
  },
13693
13844
  {
13694
13845
  key: CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,
13695
- command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
13846
+ command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
13696
13847
  },
13697
13848
  {
13698
13849
  key: CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,
@@ -13704,7 +13855,7 @@ class AXMConversationModule {
13704
13855
  },
13705
13856
  {
13706
13857
  key: CONVERSATION_OPEN_CHAT_COMMAND,
13707
- command: () => import('./acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs').then((m) => m.AXMConversationOpenChatCommand),
13858
+ command: () => import('./acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs').then((m) => m.AXMConversationOpenChatCommand),
13708
13859
  },
13709
13860
  {
13710
13861
  key: 'show-comment-popup',
@@ -13799,19 +13950,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
13799
13950
  provideCommandSetups([
13800
13951
  {
13801
13952
  key: CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,
13802
- command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-CpMGuSU1.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
13953
+ command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-yzW01skh.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
13803
13954
  },
13804
13955
  {
13805
13956
  key: CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,
13806
- command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-DvOeezMD.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
13957
+ command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-DYIpLKDB.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
13807
13958
  },
13808
13959
  {
13809
13960
  key: CONVERSATION_SYNC_READ_STATE_COMMAND,
13810
- command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-CmJAjrZb.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
13961
+ command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-D97E8VvL.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
13811
13962
  },
13812
13963
  {
13813
13964
  key: CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,
13814
- command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-9tbWXMsa.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
13965
+ command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-BoTNaBxS.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
13815
13966
  },
13816
13967
  {
13817
13968
  key: CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,
@@ -13823,7 +13974,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
13823
13974
  },
13824
13975
  {
13825
13976
  key: CONVERSATION_OPEN_CHAT_COMMAND,
13826
- command: () => import('./acorex-platform-module-conversation-client-open-chat.command-CdMsYHwG.mjs').then((m) => m.AXMConversationOpenChatCommand),
13977
+ command: () => import('./acorex-platform-module-conversation-client-open-chat.command-VgeGqj-z.mjs').then((m) => m.AXMConversationOpenChatCommand),
13827
13978
  },
13828
13979
  {
13829
13980
  key: 'show-comment-popup',
@@ -13849,4 +14000,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
13849
14000
  */
13850
14001
 
13851
14002
  export { AXMMiniChatHeaderSlotComponent as $, AXMConversationEntityStoreService as A, axmAssistWidgetNodeFromUnknown as B, axmPartitionAssistAnswerText as C, axmSyntheticEmbedMessage as D, AXMNodeMessageRendererComponent as E, AXMAssistBotFileLineComponent as F, AXMAssistSuggestionChipsComponent as G, AXMAddReactionCommand as H, AXMChatComponent as I, AXMChatEntityConversationFocusHandler as J, AXMChatEntityConversationRoomQueryService as K, AXMChatEntityMessageApi as L, AXMChatEntityRealtimeApi as M, AXMChatEntityUserApi as N, AXMChatMessageApi as O, AXMChatRealtimeApi as P, AXMCommentManagementService as Q, AXMCommentPopupComponent as R, AXMCommentRealtimeService as S, AXMCommentRealtimeServiceImpl as T, AXMCommentService as U, AXMCommentServiceImpl as V, AXMCommentWidgetViewComponent as W, AXMConversationAssistBackgroundOperationHandler as X, AXMConversationModule as Y, AXMEntityChatService as Z, AXMMiniChatComponent as _, AXM_CONVERSATION_ASSIST_RESPONSE_PORT as a, axmExtractDirectAgentIdFromMetadata as a$, AXMMiniChatHistoryComponent as a0, AXMMiniChatInboxHistoryComponent as a1, AXMMiniChatInboxPanelHostComponent as a2, AXMMiniChatLauncherComponent as a3, AXMMiniChatPanelComponent as a4, AXMMiniChatPanelService as a5, AXMShowCommentPopupCommand as a6, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME as a7, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME as a8, AXM_AI_MANAGEMENT_MODULE_NAME as a9, axmAssistLastTranscriptLine as aA, axmAssistNormalizeFollowUpItemForConversation as aB, axmAssistNormalizeFollowUpItemsForConversation as aC, axmAssistPersistedMessageLooksComplete as aD, axmAssistResolveFollowUpCommandName as aE, axmAssistStarterPromptChipItems as aF, axmAssistUserFacingPayloadLine as aG, axmAssistUserVisibleItemsForLine as aH, axmAssistWidgetNodeDedupeKey as aI, axmBuildAiChatConversationMetadata as aJ, axmBuildAssistPeerParticipantFromCreateData as aK, axmBuildAssistPeerParticipantFromId as aL, axmBuildAssistTranscriptLinePayload as aM, axmBuildAutoTitleFromUserText as aN, axmBuildEntityChatConversationMetadata as aO, axmChatAiPeerParticipantId as aP, axmChatAiTargetAvatarUrl as aQ, axmChatAiTargetDisplayDescription as aR, axmChatAiTargetDisplayName as aS, axmChatAiTargetShortcutDescriptionKey as aT, axmCoerceDate as aU, axmCoerceTimestampMs as aV, axmComputeConversationUnreadCount as aW, axmConversationIsEntityChat as aX, axmConversationMatchesEntity as aY, axmExtractAssistIdFromMetadata as aZ, axmExtractAssistSnapshotFromMetadata as a_, AXM_ASSIST_DEFAULT_RESOLVER_PORT as aa, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as ab, AXM_CHAT_ASSIST_CATALOG_PORT as ac, AXM_CHAT_EMPTY_STATE_COMPONENT as ad, AXM_CHAT_SIDEBAR_ACTION_PROVIDER as ae, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS as af, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY as ag, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY as ah, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE as ai, AXM_CONVERSATION_TAB_BOT as aj, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER as ak, AXM_MINI_CHAT_INBOX_SESSION_KEY as al, AXPCommentWidget as am, COMMENTS_PAGE_COMPONENT_KEY as an, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND as ao, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND as ap, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND as aq, CONVERSATION_OPEN_CHAT_COMMAND as ar, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND as as, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND as at, CONVERSATION_START_ASSIST_CHAT_COMMAND as au, CONVERSATION_START_DIRECT_CHAT_COMMAND as av, CONVERSATION_SYNC_READ_STATE_COMMAND as aw, axmApplyAnswerTextToAssistPayloadLine as ax, axmAssistFollowUpItemsFromUnknown as ay, axmAssistHasFinalizeMetadata as az, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT as b, axmExtractEntityRefFromMetadata as b0, axmExtractModelEntityIdFromMetadata as b1, axmExtractTextFromPayload as b2, axmFilterChatAiTargets as b3, axmHydrateRealtimeConversationMessage as b4, axmIsAssistBotConversation as b5, axmIsAssistPeerParticipant as b6, axmIsAssistRetryableStatus as b7, axmIsAssistStreamingMessage as b8, axmIsAssistStreamingStatus as b9, axmIsAssistTerminalStatus as ba, axmIsUnsupportedLegacyAgentAssistConversation as bb, axmLoadChatAiTargets as bc, axmMessageCountsTowardUnread as bd, axmMessageEntityToMessage as be, axmNormalizeAssistTranscriptForChatUi as bf, axmNormalizeAssistTranscriptLineResponses as bg, axmParseAssistTranscriptLinePayload as bh, axmReadAssistResponseError as bi, axmReadAssistResponseStatus as bj, axmReadPlainTextMessagePayload as bk, axmReadReplyToUserMessageId as bl, axmResolveAssistFinalAnswerText as bm, axmResolveChatAiTargetText as bn, axmRoomEntityToConversation as bo, axmRoomWithAssistPeerDisplayName as bp, axmSanitizeAssistUserAnswerText as bq, axmShouldPreferPersistedAssistOverLiveCache as br, axmShowCommentPopupCommandDefinition as bs, axmSortMessagesNewestFirst as bt, axmSyncAssistPeerDisplayName as bu, axmUserRowToParticipant as bv, commentsPlugin as bw, createConversationServiceSessionAdapter as bx, persistChatAttachment as by, axmConversationHasAiChat$1 as c, AXMConversationFocusService as d, AXMConversationInAppNotificationSyncService as e, buildConversationChatInAppCorrelationPrefix as f, AXMCommentComponent as g, axmResolveConversationListAvatar as h, axmEnsureChatCallRtcReady as i, axmOpenChatCallSessionDialog as j, AXMChatUserApi as k, AXMChatEntityConversationApi as l, AXMChatConversationApi as m, AXMChatCallRtcService as n, AXMChatCallRtcSignalInboxService as o, AXMChatCallActiveSessionService as p, AXMChatCallEventsService as q, AXMConversationRealtimeBus as r, axmReadChatCallLog as s, axmBuildChatCallLogMessage as t, axmReadChatCallMediaContextIssue as u, AXM_CHAT_CALL_RTC_PROVIDERS as v, axmReadAssistAiTranscript as w, axmReadAssistAiTranscriptRaw as x, axmAssistSegmentDirection as y, axmParseAssistTranscriptTextEnvelope as z };
13852
- //# sourceMappingURL=acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-BP8QEicz.mjs.map
14003
+ //# sourceMappingURL=acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CDlDFzbl.mjs.map