@acorex-platform/module-conversation-client 0.0.56 → 0.0.58

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 (28) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-MEun4ht1.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CAPi0yn4.mjs} +240 -185
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CAPi0yn4.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-B5YwswY2.mjs → acorex-platform-module-conversation-client-after-message-sent.command-Bp_2U5HU.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-B5YwswY2.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-Bp_2U5HU.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-C-odYA3Y.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Duw4WB9K.mjs} +3 -3
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-C-odYA3Y.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-Duw4WB9K.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-conversation-client-assist-message-renderer.component-34LF22kR.mjs → acorex-platform-module-conversation-client-assist-message-renderer.component-CnMc1kr_.mjs} +40 -27
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-CnMc1kr_.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-DyepmPqJ.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-BCO-UEk3.mjs} +2 -2
  10. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-DyepmPqJ.mjs.map → acorex-platform-module-conversation-client-chat-call-session-page.component-BCO-UEk3.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-BAU1EMTz.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-D8VXSxog.mjs} +6 -2
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-D8VXSxog.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-CGE66IMI.mjs → acorex-platform-module-conversation-client-comments-page.component-C7zC8Cqu.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-CGE66IMI.mjs.map → acorex-platform-module-conversation-client-comments-page.component-C7zC8Cqu.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-CQOaoc8h.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-kvOvYsa3.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-CQOaoc8h.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-kvOvYsa3.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BRUNyQ5f.mjs → acorex-platform-module-conversation-client-open-chat.command-CfzIRObR.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BRUNyQ5f.mjs.map → acorex-platform-module-conversation-client-open-chat.command-CfzIRObR.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-B183eYcd.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BKphfk-P.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-B183eYcd.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BKphfk-P.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-DMi5eCDq.mjs → acorex-platform-module-conversation-client-sync-read-state.command-GdaU3JZP.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-DMi5eCDq.mjs.map → acorex-platform-module-conversation-client-sync-read-state.command-GdaU3JZP.mjs.map} +1 -1
  23. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  24. package/package.json +2 -2
  25. package/types/acorex-platform-module-conversation-client.d.ts +7 -5
  26. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-MEun4ht1.mjs.map +0 -1
  27. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-34LF22kR.mjs.map +0 -1
  28. package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-BAU1EMTz.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
2
2
  import { AXPFilterOperatorMiddlewareService, AXPSearchCommandProvider, createEntityCommandOptions, AXP_PROTECTED_ROUTE_GUARDS, AXPBackgroundOperationHandler, AXP_BACKGROUND_OPERATION_HANDLERS, AXPSettingsService, AXPCommonSettings, AXP_IN_APP_NOTIFICATION_SERVICE, AXPFileStorageService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';
3
- import { AXPEntityBroadcastService, AXPTagService, AXPPageContextRegistry, AXPDeviceService, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';
3
+ import { AXPEntityBroadcastService, AXPTagService, AXPPageContextRegistry, AXPDialogOpener, AXPDeviceService, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';
4
4
  import { USER_CARD_ITEMS_HOOK, AXPTaskBadgeProvider, AXPFileViewerService, AXPUserAvatarService, AXPUserAvatarComponent, AXPUserCardDirective, mergeInfiniteScrollPage, AXPThemeLayoutBlockComponent, AXPInfiniteScrollDirective, AXPStateMessageComponent, AXPAvatarComponent, AXPMarkdownViewerComponent, AXPTaskBadgeService, AXPThemeLayoutStartSideComponent, AXP_PAGE_COMPONENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';
5
5
  import { AXPEntityService, AXPFileListComponent, AXPEntityDefinitionRegistryService, cloneLayoutArrays, ensureLayoutSection, ensureLayoutPropertyView, resolveEntityPluginDetailPageOrder, ensureListActions, actionExists, AXP_ENTITY_ACTION_PLUGIN } from '@acorex-platform/framework-client/layout/entity';
6
6
  import { AXPQueryService, AXPCommandEventsService, AXPCommandService, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
@@ -46,8 +46,8 @@ import { AXPlatform } from '@acorex/core/platform';
46
46
  import { AXFabComponent, AXFabItemComponent } from '@acorex/components/fab';
47
47
  import { AXPInAppInboxConnectorService, isInAppInboxUnread, AXPCommunicationManagementClient, AXPInAppInboxRealtimeService } from '@acorex-platform/module-communication-management-client';
48
48
  import { axpAiChatMessageIsDelegatedReflectionExcluded, axpAiExtractChatWidgetNodeFromUnknown, axpAiDelegatedAgentResultSegments, AXPAiManagerService, AXPAiChatToolRunContextService, AXPAiPlatformRuntimeContextBuilder, AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, axpAiChatTextMessage, persistAiChatAttachmentImage, AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY, AXPAiAssistChatModelCatalogService } from '@acorex-platform/module-ai-management-client';
49
- import * as i1$3 from '@acorex/components/wysiwyg';
50
- import { AXWysiwygModule } from '@acorex/components/wysiwyg';
49
+ import * as i1$3 from '@acorex/components/text-editor';
50
+ import { AXTextEditorModule } from '@acorex/components/text-editor';
51
51
  import { trigger, transition, style, animate } from '@angular/animations';
52
52
  import { DomSanitizer } from '@angular/platform-browser';
53
53
  import { AXAvatarModule } from '@acorex/components/avatar';
@@ -7598,16 +7598,20 @@ async function axmOpenChatConversationInfoPanelDialog(options) {
7598
7598
  return;
7599
7599
  }
7600
7600
  const popupService = options.popupService ?? inject(AXPopupService);
7601
+ const dialogOpener = options.dialogOpener ?? inject(AXPDialogOpener);
7601
7602
  const conversationService = options.conversationService ?? inject(AXConversationService);
7602
- const comp = (await import('./acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs')).AXMChatConversationInfoPanelComponent;
7603
- await popupService.open(comp, {
7604
- title: conversation.title,
7605
- closeButton: true,
7606
- size: 'sm',
7607
- data: {
7608
- conversation,
7609
- conversationService,
7610
- },
7603
+ await dialogOpener.openPopup({
7604
+ load: () => import('./acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs').then((module) => module.AXMChatConversationInfoPanelComponent),
7605
+ data: { conversationId: conversation.id },
7606
+ show: (component) => popupService.open(component, {
7607
+ title: conversation.title,
7608
+ closeButton: true,
7609
+ size: 'sm',
7610
+ data: {
7611
+ conversation,
7612
+ conversationService,
7613
+ },
7614
+ }),
7611
7615
  });
7612
7616
  }
7613
7617
  //#endregion
@@ -7731,6 +7735,7 @@ class AXMMiniChatComponent {
7731
7735
  //#region ---- Services & Dependencies ----
7732
7736
  this.conversationService = inject(AXConversationService);
7733
7737
  this.popupService = inject(AXPopupService);
7738
+ this.dialogOpener = inject(AXPDialogOpener);
7734
7739
  this.conversationApi = inject(AXMChatConversationApi);
7735
7740
  this.assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });
7736
7741
  this.destroyRef = inject(DestroyRef);
@@ -7814,6 +7819,7 @@ class AXMMiniChatComponent {
7814
7819
  void axmOpenChatConversationInfoPanelDialog({
7815
7820
  conversation,
7816
7821
  popupService: this.popupService,
7822
+ dialogOpener: this.dialogOpener,
7817
7823
  conversationService: this.conversationService,
7818
7824
  });
7819
7825
  }
@@ -8395,6 +8401,7 @@ class AXMMiniChatPanelService {
8395
8401
  constructor() {
8396
8402
  //#region ---- Services & Dependencies ----
8397
8403
  this.popupService = inject(AXPopupService);
8404
+ this.dialogOpener = inject(AXPDialogOpener);
8398
8405
  this.settingsService = inject(AXPSettingsService);
8399
8406
  this.document = inject(DOCUMENT);
8400
8407
  this.translation = inject(AXTranslationService);
@@ -8480,104 +8487,113 @@ class AXMMiniChatPanelService {
8480
8487
  this.windowApi.show();
8481
8488
  return;
8482
8489
  }
8483
- await this.ensurePopupFrameLoaded();
8484
- this.abandonOpenWindow();
8485
- this.activeOpenOptions = options;
8486
- this.boundRouteKey = axmMiniChatPathKey(this.router.url);
8487
- this.activePageKey = this.currentPageChatKey();
8488
- const generation = this.windowGeneration;
8489
- const retainOnClose = options.retainOnClose === true;
8490
- this.retainOnClose = retainOnClose;
8491
- this.retainedHidden = false;
8492
- this.retainedSessionKey = retainOnClose ? entityKey : null;
8493
- this.captureFocusedConversation();
8494
- this.captureActiveConversation();
8495
- const session = this.sessions.get(entityKey);
8496
- const samePage = session?.pageKey === this.activePageKey;
8497
- const restoreSession = Boolean(session?.hasOpened) && !options.forceNewChat && samePage;
8498
- const startWithNewChat = !restoreSession;
8499
- const initialView = restoreSession ? session.view : 'thread';
8500
- const initialConversationId = restoreSession ? session.selectedChatId : undefined;
8501
- const onSessionChange = (state) => {
8502
- this.sessions.set(entityKey, {
8503
- view: state.view,
8504
- selectedChatId: state.selectedChatId,
8505
- hasOpened: true,
8506
- pageKey: this.activePageKey,
8507
- });
8508
- };
8509
- const data = {
8510
- scope,
8511
- entityId: options.entityId,
8512
- entityType: options.entityType,
8513
- assistId: options.assistId,
8514
- assistSelection: options.assistSelection ?? 'optional',
8515
- panelTitle: options.title,
8516
- showInfoBar: options.showInfoBar ?? false,
8517
- showComposer: options.showComposer ?? true,
8518
- initialView,
8519
- initialConversationId,
8520
- startWithNewChat,
8521
- launchContext: options.launchContext ? axmSanitizeContextualAssistContext(options.launchContext) : undefined,
8522
- minimizable: options.minimizable !== false,
8523
- retainOnClose,
8524
- onSessionChange,
8525
- onVisibilityChange: (visible) => {
8526
- if (!this.retainOnClose || generation !== this.windowGeneration) {
8527
- return;
8490
+ await this.dialogOpener.run({
8491
+ load: () => Promise.resolve(AXMMiniChatPopupWindowComponent),
8492
+ data: { window: 'mini-chat', entityKey },
8493
+ present: async (notifyShown, component) => {
8494
+ await this.ensurePopupFrameLoaded();
8495
+ this.abandonOpenWindow();
8496
+ this.activeOpenOptions = options;
8497
+ this.boundRouteKey = axmMiniChatPathKey(this.router.url);
8498
+ this.activePageKey = this.currentPageChatKey();
8499
+ try {
8500
+ const generation = this.windowGeneration;
8501
+ const retainOnClose = options.retainOnClose === true;
8502
+ this.retainOnClose = retainOnClose;
8503
+ this.retainedHidden = false;
8504
+ this.retainedSessionKey = retainOnClose ? entityKey : null;
8505
+ this.captureFocusedConversation();
8506
+ this.captureActiveConversation();
8507
+ const session = this.sessions.get(entityKey);
8508
+ const samePage = session?.pageKey === this.activePageKey;
8509
+ const restoreSession = Boolean(session?.hasOpened) && !options.forceNewChat && samePage;
8510
+ const startWithNewChat = !restoreSession;
8511
+ const initialView = restoreSession ? session.view : 'thread';
8512
+ const initialConversationId = restoreSession ? session.selectedChatId : undefined;
8513
+ const onSessionChange = (state) => {
8514
+ this.sessions.set(entityKey, {
8515
+ view: state.view,
8516
+ selectedChatId: state.selectedChatId,
8517
+ hasOpened: true,
8518
+ pageKey: this.activePageKey,
8519
+ });
8520
+ };
8521
+ const data = {
8522
+ scope,
8523
+ entityId: options.entityId,
8524
+ entityType: options.entityType,
8525
+ assistId: options.assistId,
8526
+ assistSelection: options.assistSelection ?? 'optional',
8527
+ panelTitle: options.title,
8528
+ showInfoBar: options.showInfoBar ?? false,
8529
+ showComposer: options.showComposer ?? true,
8530
+ initialView,
8531
+ initialConversationId,
8532
+ startWithNewChat,
8533
+ launchContext: options.launchContext ? axmSanitizeContextualAssistContext(options.launchContext) : undefined,
8534
+ minimizable: options.minimizable !== false,
8535
+ retainOnClose,
8536
+ onSessionChange,
8537
+ onVisibilityChange: (visible) => {
8538
+ if (!this.retainOnClose || generation !== this.windowGeneration) {
8539
+ return;
8540
+ }
8541
+ this.retainedHidden = !visible;
8542
+ },
8543
+ registerWindow: (api) => {
8544
+ this.windowApi = api;
8545
+ },
8546
+ };
8547
+ const title = await this.resolveWindowTitle(options.title);
8548
+ const closed = this.popupService.open(component, {
8549
+ header: false,
8550
+ footer: false,
8551
+ draggable: true,
8552
+ hasBackdrop: false,
8553
+ closeButton: false,
8554
+ closeOnBackdropClick: false,
8555
+ closeOnEscape: true,
8556
+ size: 'sm',
8557
+ title,
8558
+ panelClass: ['axm-mini-chat-popup'],
8559
+ resizable: {
8560
+ handles: ['top-end', 'bottom-end', 'top-start', 'bottom-start'],
8561
+ minWidth: 320,
8562
+ minHeight: 280,
8563
+ },
8564
+ buttons: {
8565
+ close: false,
8566
+ maximize: true,
8567
+ minimize: {
8568
+ enable: options.minimizable !== false,
8569
+ position: 'bottom-right',
8570
+ dock: AXM_MINI_CHAT_POPUP_DOCK,
8571
+ },
8572
+ },
8573
+ data,
8574
+ });
8575
+ notifyShown();
8576
+ this.closePromise = closed;
8577
+ this.panelOpen.set(true);
8578
+ this.watchAnchorPlacement(options, generation);
8579
+ void closed.finally(() => {
8580
+ if (generation !== this.windowGeneration) {
8581
+ return;
8582
+ }
8583
+ this.closePromise = null;
8584
+ this.windowApi = null;
8585
+ this.finishWindowClose();
8586
+ });
8587
+ return closed;
8528
8588
  }
8529
- this.retainedHidden = !visible;
8530
- },
8531
- registerWindow: (api) => {
8532
- this.windowApi = api;
8533
- },
8534
- };
8535
- const title = await this.resolveWindowTitle(options.title);
8536
- try {
8537
- const closed = this.popupService.open(AXMMiniChatPopupWindowComponent, {
8538
- header: false,
8539
- footer: false,
8540
- draggable: true,
8541
- hasBackdrop: false,
8542
- closeButton: false,
8543
- closeOnBackdropClick: false,
8544
- closeOnEscape: true,
8545
- size: 'sm',
8546
- title,
8547
- panelClass: ['axm-mini-chat-popup'],
8548
- resizable: {
8549
- handles: ['top-end', 'bottom-end', 'top-start', 'bottom-start'],
8550
- minWidth: 320,
8551
- minHeight: 280,
8552
- },
8553
- buttons: {
8554
- close: false,
8555
- maximize: true,
8556
- minimize: {
8557
- enable: options.minimizable !== false,
8558
- position: 'bottom-right',
8559
- dock: AXM_MINI_CHAT_POPUP_DOCK,
8560
- },
8561
- },
8562
- data,
8563
- });
8564
- this.closePromise = closed;
8565
- this.panelOpen.set(true);
8566
- this.watchAnchorPlacement(options, generation);
8567
- void closed.finally(() => {
8568
- if (generation !== this.windowGeneration) {
8569
- return;
8589
+ catch (error) {
8590
+ this.windowApi = null;
8591
+ this.closePromise = null;
8592
+ this.finishWindowClose();
8593
+ throw error;
8570
8594
  }
8571
- this.closePromise = null;
8572
- this.windowApi = null;
8573
- this.finishWindowClose();
8574
- });
8575
- }
8576
- catch {
8577
- this.windowApi = null;
8578
- this.closePromise = null;
8579
- this.finishWindowClose();
8580
- }
8595
+ },
8596
+ });
8581
8597
  }
8582
8598
  //#endregion
8583
8599
  //#region ---- Utility Methods ----
@@ -8968,6 +8984,7 @@ const AXM_CHAT_SIDEBAR_ACTION_PROVIDER = new InjectionToken('AXM_CHAT_SIDEBAR_AC
8968
8984
  class AXMChatSidebarNewActionsComponent {
8969
8985
  constructor() {
8970
8986
  this.popupService = inject(AXPopupService);
8987
+ this.dialogOpener = inject(AXPDialogOpener);
8971
8988
  this.conversationService = inject(AXConversationService);
8972
8989
  this.translationService = inject(AXTranslationService);
8973
8990
  this.contributedActions = inject(AXM_CHAT_SIDEBAR_ACTION_PROVIDER, { optional: true }) ?? [];
@@ -9004,14 +9021,20 @@ class AXMChatSidebarNewActionsComponent {
9004
9021
  }
9005
9022
  async openNewConversation(event) {
9006
9023
  event?.nativeEvent?.stopPropagation();
9007
- const title = await this.translationService.translateAsync('@conversation:new-conversation.header');
9008
- const result = await this.popupService.open(AXConversationNewDialogComponent, {
9009
- title,
9010
- size: 'sm',
9011
- closeButton: true,
9012
- data: {
9013
- conversationService: this.conversationService,
9024
+ let title = '';
9025
+ const result = await this.dialogOpener.openPopup({
9026
+ load: () => Promise.resolve(AXConversationNewDialogComponent),
9027
+ prepare: async () => {
9028
+ title = await this.translationService.translateAsync('@conversation:new-conversation.header');
9014
9029
  },
9030
+ show: (component) => this.popupService.open(component, {
9031
+ title,
9032
+ size: 'sm',
9033
+ closeButton: true,
9034
+ data: {
9035
+ conversationService: this.conversationService,
9036
+ },
9037
+ }),
9015
9038
  });
9016
9039
  if (result?.data) {
9017
9040
  return result.data;
@@ -9102,6 +9125,7 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
9102
9125
  //#region ---- Services & Dependencies ----
9103
9126
  this.conversationService = inject(AXConversationService);
9104
9127
  this.popupService = inject(AXPopupService);
9128
+ this.dialogOpener = inject(AXPDialogOpener);
9105
9129
  this.chatConversationApi = inject(AXMChatConversationApi);
9106
9130
  this.assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });
9107
9131
  this.miniChatPanelService = inject(AXMMiniChatPanelService);
@@ -9256,6 +9280,7 @@ class AXMChatComponent extends AXPPageLayoutBaseComponent {
9256
9280
  void axmOpenChatConversationInfoPanelDialog({
9257
9281
  conversation,
9258
9282
  popupService: this.popupService,
9283
+ dialogOpener: this.dialogOpener,
9259
9284
  conversationService: this.conversationService,
9260
9285
  });
9261
9286
  }
@@ -12409,14 +12434,14 @@ class AXMCommentComponent {
12409
12434
  ...(ngDevMode ? [{ debugName: "comments" }] : /* istanbul ignore next */ []));
12410
12435
  this.thread = signal(undefined, /* @ts-ignore */
12411
12436
  ...(ngDevMode ? [{ debugName: "thread" }] : /* istanbul ignore next */ []));
12412
- this.wysiwygOptions = signal({
12437
+ this.editorOptions = signal({
12413
12438
  look: 'solid',
12414
12439
  }, /* @ts-ignore */
12415
- ...(ngDevMode ? [{ debugName: "wysiwygOptions" }] : /* istanbul ignore next */ []));
12440
+ ...(ngDevMode ? [{ debugName: "editorOptions" }] : /* istanbul ignore next */ []));
12416
12441
  //#endregion
12417
12442
  //#region ---- View Children ----
12418
- this.wysiwygEditor = viewChild.required('w', /* @ts-ignore */
12419
- ...(ngDevMode ? [{ debugName: "wysiwygEditor" }] : /* istanbul ignore next */ []));
12443
+ this.editorRef = viewChild.required('editorRef', /* @ts-ignore */
12444
+ ...(ngDevMode ? [{ debugName: "editorRef" }] : /* istanbul ignore next */ []));
12420
12445
  //#endregion
12421
12446
  //#region ---- Services & Dependencies ----
12422
12447
  this.commentService = inject(AXMCommentManagementService);
@@ -12495,7 +12520,7 @@ class AXMCommentComponent {
12495
12520
  this.isEditingMode.set(true);
12496
12521
  this.activeEditComment.set({ ...target, userName: userName || '' });
12497
12522
  this.commentContent.set(axmExtractTextFromPayload(target.payload));
12498
- this.wysiwygEditor()
12523
+ this.editorRef()
12499
12524
  .getHostElement()
12500
12525
  .scrollIntoView({ behavior: 'smooth', block: 'start' });
12501
12526
  }
@@ -12509,9 +12534,9 @@ class AXMCommentComponent {
12509
12534
  const mention = `<strong><a data-id="${reply.senderId}">@${userName || reply.senderId}</a></strong> `;
12510
12535
  this.commentContent.set(mention);
12511
12536
  this.setEditorContent(mention);
12512
- this.wysiwygEditor()?.focus();
12537
+ this.editorRef()?.focus();
12513
12538
  }
12514
- this.wysiwygEditor()
12539
+ this.editorRef()
12515
12540
  .getHostElement()
12516
12541
  .scrollIntoView({ behavior: 'smooth', block: 'start' });
12517
12542
  }
@@ -12789,17 +12814,11 @@ class AXMCommentComponent {
12789
12814
  });
12790
12815
  this.comments.update((comments) => filterOut(comments));
12791
12816
  }
12792
- /** Workaround: Quill editor may not sync immediately with ngModel on clear */
12793
12817
  clearEditorContent() {
12794
- const editor = this.elementRef.nativeElement.querySelector('.ql-editor');
12795
- if (editor)
12796
- editor.innerHTML = '';
12818
+ this.editorRef()?.getEditorService().clearContent();
12797
12819
  }
12798
- /** Workaround: Quill editor may not sync immediately with ngModel on set */
12799
12820
  setEditorContent(html) {
12800
- const editor = this.elementRef.nativeElement.querySelector('.ql-editor');
12801
- if (editor)
12802
- editor.innerHTML = html;
12821
+ this.editorRef()?.getEditorService().setContent(html || '', false);
12803
12822
  }
12804
12823
  /** Shorthand translator scoped to the comments feature */
12805
12824
  t(key) {
@@ -12823,7 +12842,7 @@ class AXMCommentComponent {
12823
12842
  return axmExtractTextFromPayload(comment.payload);
12824
12843
  }
12825
12844
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12826
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMCommentComponent, isStandalone: true, selector: "axm-comment", inputs: { refrenceType: { classPropertyName: "refrenceType", publicName: "refrenceType", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: "refrenceId", publicName: "refrenceId", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: "subject", publicName: "subject", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "wysiwygEditor", first: true, predicate: ["w"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axm-comment size-full flex flex-col overflow-hidden\">\n <div class=\"axm-comment__list flex-1 min-h-0 overflow-y-auto\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"axm-comment__skeleton\">\n <ax-skeleton class=\"size-10 shrink-0 rounded-full\"></ax-skeleton>\n <div class=\"axm-comment__skeleton-body\">\n <ax-skeleton class=\"h-4 w-32 rounded\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-full rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-11/12 rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-4/5 rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"axm-comment__view\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"\n onRepliesExpandedChange(comment.id!, $event)\n \"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #user\n [size]=\"36\"\n [userId]=\"comment.senderId\"\n [axpUserCard]=\"comment.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"comment.senderId\">{{\n user.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ comment.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.title())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(comment))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(comment)\"\n [like]=\"isLikedByUser(comment)\"\n >\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.title())\"\n ></ax-comment-reply-text>\n\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item\n [id]=\"reply.id\"\n [class.highlighted]=\"highlightedCommentId() === reply.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #replyUser\n [size]=\"36\"\n [userId]=\"reply.senderId\"\n [axpUserCard]=\"reply.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"reply.senderId\">{{\n replyUser.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ reply.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"\n editMessage(comment, reply, replyUser.title())\n \"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(reply))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(reply)\"\n [like]=\"isLikedByUser(reply)\"\n >\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, replyUser.title())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n }\n <!-- ----- Empty state when no comments exist ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-comments\"\n [title]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.title'\n \"\n [description]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.description'\n \"\n >\n </axp-state-message>\n }\n </ax-comment-container>\n </div>\n\n <div class=\"axm-comment__composer\">\n @if (isReplyingMode() || isEditingMode()) {\n <div class=\"axm-comment__context\">\n <button\n type=\"button\"\n class=\"axm-comment__context-main\"\n (click)=\"scrollMain()\"\n >\n <i\n class=\"fa-light axm-comment__context-icon\"\n [class.fa-reply]=\"isReplyingMode()\"\n [class.fa-pen]=\"isEditingMode()\"\n ></i>\n <div class=\"axm-comment__context-copy\">\n <p class=\"axm-comment__context-label\">\n @if (isReplyingMode()) {\n {{\n '@conversation:comments.actions.reply-to' | translate | async\n }}\n <span>{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{\n '@conversation:comments.actions.edit-message'\n | translate\n | async\n }}\n }\n </p>\n <div\n class=\"axm-comment__context-preview\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(getCommentText(activeReplyComment()!))\n : sanitizeHtml(getCommentText(activeEditComment()!))\n \"\n ></div>\n </div>\n </button>\n <button\n type=\"button\"\n class=\"axm-comment__context-close\"\n (click)=\"resetReplyEditState()\"\n [attr.aria-label]=\"\n ('@conversation:comments.actions.cancel.title'\n | translate\n | async) ?? 'Cancel'\n \"\n >\n <i class=\"fa-light fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"axm-comment__editor\">\n <ax-wysiwyg-container\n #w\n [look]=\"wysiwygOptions().look\"\n [(ngModel)]=\"commentContent\"\n >\n <ax-wysiwyg-view class=\"min-h-24\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-prefix>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n class=\"ax-sm\"\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"\n '@conversation:comments.actions.send.title' | translate | async\n \"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;height:100%;min-height:0px;width:100%}.axm-comment{min-height:0px;height:calc(100vh - 210px);background-color:rgb(var(--ax-sys-color-lightest-surface))}.axm-comment .axm-comment__list{min-height:0px}.axm-comment .axm-comment__skeleton{display:flex;align-items:flex-start;gap:.875rem;padding:1.25rem 1.25rem 1.5rem}.axm-comment .axm-comment__skeleton-body{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-comment .axm-comment__composer{flex-shrink:0;background-color:rgb(var(--ax-sys-color-surface-surface))}.axm-comment .axm-comment__context{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.625rem .75rem;border:1px solid rgb(var(--ax-sys-color-border-light-surface));border-bottom:none;border-inline-start:3px solid rgb(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.35);font-size:.8125rem;line-height:1.4}.axm-comment .axm-comment__context-main{display:flex;min-width:0px;flex:1;cursor:pointer;align-items:center;gap:.625rem}.axm-comment .axm-comment__context-icon{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-copy{display:flex;min-width:0px;flex-direction:column;gap:.125rem}.axm-comment .axm-comment__context-label{margin:0;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;color:rgb(var(--ax-sys-color-neutral-600-surface, 107 114 128))}.axm-comment .axm-comment__context-close{flex-shrink:0;cursor:pointer;border-radius:var(--radius-md, .375rem);--tw-border-style: none;border-style:none;padding:.25rem;background:transparent;color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128));font-size:1rem;line-height:1}.axm-comment .axm-comment__context-close:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.8)}.axm-comment .axm-comment__editor{overflow:hidden;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 1px 2px #0f172a0a}.axm-comment .axm-comment__author{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-comment .axm-comment__date{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128))}.axm-comment .axm-comment__menu-btn{opacity:0;transition:opacity .15s ease}ax-comment-item{border-radius:.75rem;transition:background-color .2s ease}ax-comment-item:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.45)}ax-comment-item:hover .axm-comment__menu-btn{opacity:1}ax-comment-item.highlighted{animation:axm-comment-highlight 2.5s cubic-bezier(.4,0,.2,1) forwards}ax-wysiwyg-container{flex-shrink:0}ax-wysiwyg-container .ax-editor-container{border:none!important;border-radius:0!important;box-shadow:none!important}ax-wysiwyg-container .ax-error-message{padding-inline-start:.75rem}@keyframes axm-comment-highlight{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i1$3.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "readonly", "disabled", "value", "placeHolder", "initialLine", "mode"], outputs: ["onValueChanged"] }, { kind: "component", type: i1$3.AXWysiwygViewComponent, selector: "ax-wysiwyg-view" }, { kind: "component", type: i1$3.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment", inputs: ["buttons"] }, { kind: "component", type: i1$3.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors", inputs: ["buttons"] }, { kind: "component", type: i1$3.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style", inputs: ["headingLevels", "buttons", "menuItems"] }, { kind: "component", type: i1$3.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history", inputs: ["buttons"] }, { kind: "component", type: i1$3.AXWysiwygListComponent, selector: "ax-wysiwyg-list", inputs: ["buttons"] }, { kind: "component", type: i1$3.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { 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: AXCommentModule }, { kind: "component", type: i4.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i4.AXCommentContainerComponent, selector: "ax-comment-container" }, { kind: "component", type: i4.AXCommentItemComponent, selector: "ax-comment-item", inputs: ["replyCount", "repliesExpanded"], outputs: ["repliesExpandedChange"] }, { kind: "component", type: i4.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["like"], outputs: ["likeChange"] }, { kind: "component", type: i4.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i4.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "component", type: i4.AXCommentDateComponent, selector: "ax-comment-date" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i7.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "directive", type: AXPUserCardDirective, selector: "[axpUserCard]", inputs: ["axpUserCard", "axpUserCardDisabled", "axpUserCardTrigger"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i5.AXFormatPipe, name: "format" }, { kind: "pipe", type: i1$2.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
12845
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMCommentComponent, isStandalone: true, selector: "axm-comment", inputs: { refrenceType: { classPropertyName: "refrenceType", publicName: "refrenceType", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: "refrenceId", publicName: "refrenceId", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: "subject", publicName: "subject", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editorRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"axm-comment size-full flex flex-col overflow-hidden\">\n <div class=\"axm-comment__list flex-1 min-h-0 overflow-y-auto\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"axm-comment__skeleton\">\n <ax-skeleton class=\"size-10 shrink-0 rounded-full\"></ax-skeleton>\n <div class=\"axm-comment__skeleton-body\">\n <ax-skeleton class=\"h-4 w-32 rounded\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-full rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-11/12 rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-4/5 rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"axm-comment__view\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"\n onRepliesExpandedChange(comment.id!, $event)\n \"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #user\n [size]=\"36\"\n [userId]=\"comment.senderId\"\n [axpUserCard]=\"comment.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"comment.senderId\">{{\n user.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ comment.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.title())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(comment))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(comment)\"\n [like]=\"isLikedByUser(comment)\"\n >\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.title())\"\n ></ax-comment-reply-text>\n\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item\n [id]=\"reply.id\"\n [class.highlighted]=\"highlightedCommentId() === reply.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #replyUser\n [size]=\"36\"\n [userId]=\"reply.senderId\"\n [axpUserCard]=\"reply.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"reply.senderId\">{{\n replyUser.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ reply.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"\n editMessage(comment, reply, replyUser.title())\n \"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(reply))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(reply)\"\n [like]=\"isLikedByUser(reply)\"\n >\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, replyUser.title())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n }\n <!-- ----- Empty state when no comments exist ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-comments\"\n [title]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.title'\n \"\n [description]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.description'\n \"\n >\n </axp-state-message>\n }\n </ax-comment-container>\n </div>\n\n <div class=\"axm-comment__composer\">\n @if (isReplyingMode() || isEditingMode()) {\n <div class=\"axm-comment__context\">\n <button\n type=\"button\"\n class=\"axm-comment__context-main\"\n (click)=\"scrollMain()\"\n >\n <i\n class=\"fa-light axm-comment__context-icon\"\n [class.fa-reply]=\"isReplyingMode()\"\n [class.fa-pen]=\"isEditingMode()\"\n ></i>\n <div class=\"axm-comment__context-copy\">\n <p class=\"axm-comment__context-label\">\n @if (isReplyingMode()) {\n {{\n '@conversation:comments.actions.reply-to' | translate | async\n }}\n <span>{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{\n '@conversation:comments.actions.edit-message'\n | translate\n | async\n }}\n }\n </p>\n <div\n class=\"axm-comment__context-preview\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(getCommentText(activeReplyComment()!))\n : sanitizeHtml(getCommentText(activeEditComment()!))\n \"\n ></div>\n </div>\n </button>\n <button\n type=\"button\"\n class=\"axm-comment__context-close\"\n (click)=\"resetReplyEditState()\"\n [attr.aria-label]=\"\n ('@conversation:comments.actions.cancel.title'\n | translate\n | async) ?? 'Cancel'\n \"\n >\n <i class=\"fa-light fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"axm-comment__editor\">\n <ax-text-editor\n #editorRef\n outputFormat=\"html\"\n [look]=\"editorOptions().look\"\n [(ngModel)]=\"commentContent\"\n >\n <ax-text-editor-content class=\"min-h-24\"></ax-text-editor-content>\n <ax-text-editor-toolbar>\n <ax-prefix>\n <ax-text-editor-history></ax-text-editor-history>\n <ax-text-editor-font-style></ax-text-editor-font-style>\n <ax-text-editor-colors></ax-text-editor-colors>\n <ax-text-editor-list></ax-text-editor-list>\n <ax-text-editor-alignment></ax-text-editor-alignment>\n </ax-prefix>\n </ax-text-editor-toolbar>\n </ax-text-editor>\n <!-- ----- Send sits under the editor, aligned to the inline end ----- -->\n <div class=\"axm-comment__editor-actions\">\n <ax-button\n look=\"solid\"\n color=\"primary\"\n class=\"ax-sm\"\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"\n '@conversation:comments.actions.send.title' | translate | async\n \"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;height:100%;min-height:0px;width:100%}.axm-comment{min-height:0px;height:calc(100vh - 210px);background-color:rgb(var(--ax-sys-color-lightest-surface))}.axm-comment .axm-comment__list{min-height:0px}.axm-comment .axm-comment__skeleton{display:flex;align-items:flex-start;gap:.875rem;padding:1.25rem 1.25rem 1.5rem}.axm-comment .axm-comment__skeleton-body{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-comment .axm-comment__composer{flex-shrink:0;background-color:rgb(var(--ax-sys-color-surface-surface))}.axm-comment .axm-comment__context{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.625rem .75rem;border:1px solid rgb(var(--ax-sys-color-border-light-surface));border-bottom:none;border-inline-start:3px solid rgb(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.35);font-size:.8125rem;line-height:1.4}.axm-comment .axm-comment__context-main{display:flex;min-width:0px;flex:1;cursor:pointer;align-items:center;gap:.625rem}.axm-comment .axm-comment__context-icon{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-copy{display:flex;min-width:0px;flex-direction:column;gap:.125rem}.axm-comment .axm-comment__context-label{margin:0;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;color:rgb(var(--ax-sys-color-neutral-600-surface, 107 114 128))}.axm-comment .axm-comment__context-close{flex-shrink:0;cursor:pointer;border-radius:var(--radius-md, .375rem);--tw-border-style: none;border-style:none;padding:.25rem;background:transparent;color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128));font-size:1rem;line-height:1}.axm-comment .axm-comment__context-close:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.8)}.axm-comment .axm-comment__editor{overflow:hidden;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 1px 2px #0f172a0a}.axm-comment .axm-comment__editor-actions{display:flex;justify-content:flex-end;padding:.5rem .75rem;border-top:1px solid rgb(var(--ax-sys-color-border-light-surface))}.axm-comment .axm-comment__author{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-comment .axm-comment__date{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128))}.axm-comment .axm-comment__menu-btn{opacity:0;transition:opacity .15s ease}ax-comment-item{border-radius:.75rem;transition:background-color .2s ease}ax-comment-item:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.45)}ax-comment-item:hover .axm-comment__menu-btn{opacity:1}ax-comment-item.highlighted{animation:axm-comment-highlight 2.5s cubic-bezier(.4,0,.2,1) forwards}ax-text-editor{flex-shrink:0}ax-text-editor .ax-editor-container{border:none!important;border-radius:0!important;box-shadow:none!important}ax-text-editor .ax-error-message{padding-inline-start:.75rem}@keyframes axm-comment-highlight{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXTextEditorModule }, { kind: "component", type: i1$3.AXTextEditorComponent, selector: "ax-text-editor", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "look", "placeHolder", "outputFormat", "initialLine"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type: i1$3.AXTextEditorToolbarComponent, selector: "ax-text-editor-toolbar", inputs: ["orientation"] }, { kind: "component", type: i1$3.AXTextEditorContentComponent, selector: "ax-text-editor-content" }, { kind: "component", type: i1$3.AXTextEditorHistoryComponent, selector: "ax-text-editor-history" }, { kind: "component", type: i1$3.AXTextEditorFontStyleComponent, selector: "ax-text-editor-font-style" }, { kind: "component", type: i1$3.AXTextEditorAlignmentComponent, selector: "ax-text-editor-alignment" }, { kind: "component", type: i1$3.AXTextEditorColorsComponent, selector: "ax-text-editor-colors" }, { kind: "component", type: i1$3.AXTextEditorListComponent, selector: "ax-text-editor-list" }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i2$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { 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: AXCommentModule }, { kind: "component", type: i4.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i4.AXCommentContainerComponent, selector: "ax-comment-container" }, { kind: "component", type: i4.AXCommentItemComponent, selector: "ax-comment-item", inputs: ["replyCount", "repliesExpanded"], outputs: ["repliesExpandedChange"] }, { kind: "component", type: i4.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["like"], outputs: ["likeChange"] }, { kind: "component", type: i4.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i4.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "component", type: i4.AXCommentDateComponent, selector: "ax-comment-date" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "ngmodule", type: AXImageModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i6.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i7.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: AXPUserAvatarComponent, selector: "axp-user-avatar", inputs: ["size", "userId", "showPresence", "displayName", "displayAvatar"] }, { kind: "directive", type: AXPUserCardDirective, selector: "[axpUserCard]", inputs: ["axpUserCard", "axpUserCardDisabled", "axpUserCardTrigger"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i5.AXFormatPipe, name: "format" }, { kind: "pipe", type: i1$2.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [
12827
12846
  trigger('fadeIn', [
12828
12847
  transition(':enter', [
12829
12848
  style({ opacity: 0, transform: 'translateY(10px)' }),
@@ -12842,7 +12861,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
12842
12861
  ]),
12843
12862
  ]),
12844
12863
  ], imports: [
12845
- AXWysiwygModule,
12864
+ AXTextEditorModule,
12846
12865
  AXSkeletonModule,
12847
12866
  AXDecoratorModule,
12848
12867
  AXCommentModule,
@@ -12861,8 +12880,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
12861
12880
  AXPUserAvatarComponent,
12862
12881
  AXPUserCardDirective,
12863
12882
  AXPStateMessageComponent,
12864
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axm-comment size-full flex flex-col overflow-hidden\">\n <div class=\"axm-comment__list flex-1 min-h-0 overflow-y-auto\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"axm-comment__skeleton\">\n <ax-skeleton class=\"size-10 shrink-0 rounded-full\"></ax-skeleton>\n <div class=\"axm-comment__skeleton-body\">\n <ax-skeleton class=\"h-4 w-32 rounded\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-full rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-11/12 rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-4/5 rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"axm-comment__view\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"\n onRepliesExpandedChange(comment.id!, $event)\n \"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #user\n [size]=\"36\"\n [userId]=\"comment.senderId\"\n [axpUserCard]=\"comment.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"comment.senderId\">{{\n user.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ comment.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.title())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(comment))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(comment)\"\n [like]=\"isLikedByUser(comment)\"\n >\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.title())\"\n ></ax-comment-reply-text>\n\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item\n [id]=\"reply.id\"\n [class.highlighted]=\"highlightedCommentId() === reply.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #replyUser\n [size]=\"36\"\n [userId]=\"reply.senderId\"\n [axpUserCard]=\"reply.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"reply.senderId\">{{\n replyUser.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ reply.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"\n editMessage(comment, reply, replyUser.title())\n \"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(reply))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(reply)\"\n [like]=\"isLikedByUser(reply)\"\n >\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, replyUser.title())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n }\n <!-- ----- Empty state when no comments exist ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-comments\"\n [title]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.title'\n \"\n [description]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.description'\n \"\n >\n </axp-state-message>\n }\n </ax-comment-container>\n </div>\n\n <div class=\"axm-comment__composer\">\n @if (isReplyingMode() || isEditingMode()) {\n <div class=\"axm-comment__context\">\n <button\n type=\"button\"\n class=\"axm-comment__context-main\"\n (click)=\"scrollMain()\"\n >\n <i\n class=\"fa-light axm-comment__context-icon\"\n [class.fa-reply]=\"isReplyingMode()\"\n [class.fa-pen]=\"isEditingMode()\"\n ></i>\n <div class=\"axm-comment__context-copy\">\n <p class=\"axm-comment__context-label\">\n @if (isReplyingMode()) {\n {{\n '@conversation:comments.actions.reply-to' | translate | async\n }}\n <span>{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{\n '@conversation:comments.actions.edit-message'\n | translate\n | async\n }}\n }\n </p>\n <div\n class=\"axm-comment__context-preview\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(getCommentText(activeReplyComment()!))\n : sanitizeHtml(getCommentText(activeEditComment()!))\n \"\n ></div>\n </div>\n </button>\n <button\n type=\"button\"\n class=\"axm-comment__context-close\"\n (click)=\"resetReplyEditState()\"\n [attr.aria-label]=\"\n ('@conversation:comments.actions.cancel.title'\n | translate\n | async) ?? 'Cancel'\n \"\n >\n <i class=\"fa-light fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"axm-comment__editor\">\n <ax-wysiwyg-container\n #w\n [look]=\"wysiwygOptions().look\"\n [(ngModel)]=\"commentContent\"\n >\n <ax-wysiwyg-view class=\"min-h-24\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-prefix>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n </ax-prefix>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n class=\"ax-sm\"\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"\n '@conversation:comments.actions.send.title' | translate | async\n \"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n </ax-wysiwyg-container>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;height:100%;min-height:0px;width:100%}.axm-comment{min-height:0px;height:calc(100vh - 210px);background-color:rgb(var(--ax-sys-color-lightest-surface))}.axm-comment .axm-comment__list{min-height:0px}.axm-comment .axm-comment__skeleton{display:flex;align-items:flex-start;gap:.875rem;padding:1.25rem 1.25rem 1.5rem}.axm-comment .axm-comment__skeleton-body{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-comment .axm-comment__composer{flex-shrink:0;background-color:rgb(var(--ax-sys-color-surface-surface))}.axm-comment .axm-comment__context{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.625rem .75rem;border:1px solid rgb(var(--ax-sys-color-border-light-surface));border-bottom:none;border-inline-start:3px solid rgb(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.35);font-size:.8125rem;line-height:1.4}.axm-comment .axm-comment__context-main{display:flex;min-width:0px;flex:1;cursor:pointer;align-items:center;gap:.625rem}.axm-comment .axm-comment__context-icon{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-copy{display:flex;min-width:0px;flex-direction:column;gap:.125rem}.axm-comment .axm-comment__context-label{margin:0;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;color:rgb(var(--ax-sys-color-neutral-600-surface, 107 114 128))}.axm-comment .axm-comment__context-close{flex-shrink:0;cursor:pointer;border-radius:var(--radius-md, .375rem);--tw-border-style: none;border-style:none;padding:.25rem;background:transparent;color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128));font-size:1rem;line-height:1}.axm-comment .axm-comment__context-close:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.8)}.axm-comment .axm-comment__editor{overflow:hidden;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 1px 2px #0f172a0a}.axm-comment .axm-comment__author{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-comment .axm-comment__date{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128))}.axm-comment .axm-comment__menu-btn{opacity:0;transition:opacity .15s ease}ax-comment-item{border-radius:.75rem;transition:background-color .2s ease}ax-comment-item:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.45)}ax-comment-item:hover .axm-comment__menu-btn{opacity:1}ax-comment-item.highlighted{animation:axm-comment-highlight 2.5s cubic-bezier(.4,0,.2,1) forwards}ax-wysiwyg-container{flex-shrink:0}ax-wysiwyg-container .ax-editor-container{border:none!important;border-radius:0!important;box-shadow:none!important}ax-wysiwyg-container .ax-error-message{padding-inline-start:.75rem}@keyframes axm-comment-highlight{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
12865
- }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: "refrenceType", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "refrenceId", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: "subject", required: true }] }], wysiwygEditor: [{ type: i0.ViewChild, args: ['w', { isSignal: true }] }] } });
12883
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"axm-comment size-full flex flex-col overflow-hidden\">\n <div class=\"axm-comment__list flex-1 min-h-0 overflow-y-auto\">\n <ax-comment-container>\n @if (isLoading()) {\n <div class=\"axm-comment__skeleton\">\n <ax-skeleton class=\"size-10 shrink-0 rounded-full\"></ax-skeleton>\n <div class=\"axm-comment__skeleton-body\">\n <ax-skeleton class=\"h-4 w-32 rounded\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-full rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-11/12 rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"h-3 w-4/5 rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if (comments().length > 0) {\n <ax-comment-view class=\"axm-comment__view\">\n @for (comment of comments(); track comment.id) {\n <ax-comment-item\n [id]=\"comment.id!\"\n [replyCount]=\"comment.replyCount\"\n [repliesExpanded]=\"isRepliesExpanded(comment.id!)\"\n (repliesExpandedChange)=\"\n onRepliesExpandedChange(comment.id!, $event)\n \"\n [class.highlighted]=\"highlightedCommentId() === comment.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #user\n [size]=\"36\"\n [userId]=\"comment.senderId\"\n [axpUserCard]=\"comment.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"comment.senderId\">{{\n user.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ comment.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"editMessage(comment, undefined, user.title())\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(comment.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(comment))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(comment)\"\n [like]=\"isLikedByUser(comment)\"\n >\n {{ getReactionsCount(comment) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, undefined, user.title())\"\n ></ax-comment-reply-text>\n\n @for (reply of comment.replies; track reply.id) {\n <ax-comment-item\n [id]=\"reply.id\"\n [class.highlighted]=\"highlightedCommentId() === reply.id\"\n [@fadeIn]\n >\n <axp-user-avatar\n #replyUser\n [size]=\"36\"\n [userId]=\"reply.senderId\"\n [axpUserCard]=\"reply.senderId\"\n ngProjectAs=\"'ax-avatar'\"\n ></axp-user-avatar>\n <ax-title class=\"axm-comment__author\" [axpUserCard]=\"reply.senderId\">{{\n replyUser.title()\n }}</ax-title>\n <ax-comment-date class=\"axm-comment__date\">\n {{ reply.timestamp | format: 'timeleft' | async }}\n </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button\n class=\"axm-comment__menu-btn ax-sm\"\n look=\"blank\"\n color=\"neutral\"\n >\n <ax-icon icon=\"fa-regular fa-ellipsis\"></ax-icon>\n </ax-button>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.edit.title'\n | translate\n | async) ?? ''\n \"\n color=\"neutral\"\n (click)=\"\n editMessage(comment, reply, replyUser.title())\n \"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"\n ('@conversation:comments.actions.delete.title'\n | translate\n | async) ?? ''\n \"\n color=\"danger\"\n (click)=\"deleteComment(reply.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content\n [innerHTML]=\"sanitizeHtml(getCommentText(reply))\"\n ></ax-content>\n <ax-comment-like\n (click)=\"toggleLike(reply)\"\n [like]=\"isLikedByUser(reply)\"\n >\n {{ getReactionsCount(reply) }}\n </ax-comment-like>\n <ax-comment-reply-text\n (click)=\"replyMessage(comment, reply, replyUser.title())\"\n ></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n }\n </ax-comment-view>\n }\n <!-- ----- Empty state when no comments exist ----- -->\n @else {\n <axp-state-message\n icon=\"fa-light fa-comments\"\n [title]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.title'\n \"\n [description]=\"\n '@conversation:comments.components.comment.empty-states.no-comments.description'\n \"\n >\n </axp-state-message>\n }\n </ax-comment-container>\n </div>\n\n <div class=\"axm-comment__composer\">\n @if (isReplyingMode() || isEditingMode()) {\n <div class=\"axm-comment__context\">\n <button\n type=\"button\"\n class=\"axm-comment__context-main\"\n (click)=\"scrollMain()\"\n >\n <i\n class=\"fa-light axm-comment__context-icon\"\n [class.fa-reply]=\"isReplyingMode()\"\n [class.fa-pen]=\"isEditingMode()\"\n ></i>\n <div class=\"axm-comment__context-copy\">\n <p class=\"axm-comment__context-label\">\n @if (isReplyingMode()) {\n {{\n '@conversation:comments.actions.reply-to' | translate | async\n }}\n <span>{{ activeReplyComment()?.userName }}</span>\n } @else {\n {{\n '@conversation:comments.actions.edit-message'\n | translate\n | async\n }}\n }\n </p>\n <div\n class=\"axm-comment__context-preview\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(getCommentText(activeReplyComment()!))\n : sanitizeHtml(getCommentText(activeEditComment()!))\n \"\n ></div>\n </div>\n </button>\n <button\n type=\"button\"\n class=\"axm-comment__context-close\"\n (click)=\"resetReplyEditState()\"\n [attr.aria-label]=\"\n ('@conversation:comments.actions.cancel.title'\n | translate\n | async) ?? 'Cancel'\n \"\n >\n <i class=\"fa-light fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"axm-comment__editor\">\n <ax-text-editor\n #editorRef\n outputFormat=\"html\"\n [look]=\"editorOptions().look\"\n [(ngModel)]=\"commentContent\"\n >\n <ax-text-editor-content class=\"min-h-24\"></ax-text-editor-content>\n <ax-text-editor-toolbar>\n <ax-prefix>\n <ax-text-editor-history></ax-text-editor-history>\n <ax-text-editor-font-style></ax-text-editor-font-style>\n <ax-text-editor-colors></ax-text-editor-colors>\n <ax-text-editor-list></ax-text-editor-list>\n <ax-text-editor-alignment></ax-text-editor-alignment>\n </ax-prefix>\n </ax-text-editor-toolbar>\n </ax-text-editor>\n <!-- ----- Send sits under the editor, aligned to the inline end ----- -->\n <div class=\"axm-comment__editor-actions\">\n <ax-button\n look=\"solid\"\n color=\"primary\"\n class=\"ax-sm\"\n [disabled]=\"hasCooldown() || !commentContent()\"\n (click)=\"submitComment()\"\n [text]=\"\n '@conversation:comments.actions.send.title' | translate | async\n \"\n >\n @if (isSubmitting()) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;height:100%;min-height:0px;width:100%}.axm-comment{min-height:0px;height:calc(100vh - 210px);background-color:rgb(var(--ax-sys-color-lightest-surface))}.axm-comment .axm-comment__list{min-height:0px}.axm-comment .axm-comment__skeleton{display:flex;align-items:flex-start;gap:.875rem;padding:1.25rem 1.25rem 1.5rem}.axm-comment .axm-comment__skeleton-body{display:flex;min-width:0px;flex:1;flex-direction:column;gap:calc(var(--spacing, .25rem) * 2)}.axm-comment .axm-comment__composer{flex-shrink:0;background-color:rgb(var(--ax-sys-color-surface-surface))}.axm-comment .axm-comment__context{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding:.625rem .75rem;border:1px solid rgb(var(--ax-sys-color-border-light-surface));border-bottom:none;border-inline-start:3px solid rgb(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.35);font-size:.8125rem;line-height:1.4}.axm-comment .axm-comment__context-main{display:flex;min-width:0px;flex:1;cursor:pointer;align-items:center;gap:.625rem}.axm-comment .axm-comment__context-icon{flex-shrink:0;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-copy{display:flex;min-width:0px;flex-direction:column;gap:.125rem}.axm-comment .axm-comment__context-label{margin:0;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:rgb(var(--ax-sys-color-primary-surface))}.axm-comment .axm-comment__context-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;color:rgb(var(--ax-sys-color-neutral-600-surface, 107 114 128))}.axm-comment .axm-comment__context-close{flex-shrink:0;cursor:pointer;border-radius:var(--radius-md, .375rem);--tw-border-style: none;border-style:none;padding:.25rem;background:transparent;color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128));font-size:1rem;line-height:1}.axm-comment .axm-comment__context-close:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.8)}.axm-comment .axm-comment__editor{overflow:hidden;border:1px solid rgb(var(--ax-sys-color-border-light-surface));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 1px 2px #0f172a0a}.axm-comment .axm-comment__editor-actions{display:flex;justify-content:flex-end;padding:.5rem .75rem;border-top:1px solid rgb(var(--ax-sys-color-border-light-surface))}.axm-comment .axm-comment__author{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600)}.axm-comment .axm-comment__date{font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:rgb(var(--ax-sys-color-neutral-500-surface, 107 114 128))}.axm-comment .axm-comment__menu-btn{opacity:0;transition:opacity .15s ease}ax-comment-item{border-radius:.75rem;transition:background-color .2s ease}ax-comment-item:hover{background-color:rgba(var(--ax-sys-color-neutral-100-surface, 243 244 246),.45)}ax-comment-item:hover .axm-comment__menu-btn{opacity:1}ax-comment-item.highlighted{animation:axm-comment-highlight 2.5s cubic-bezier(.4,0,.2,1) forwards}ax-text-editor{flex-shrink:0}ax-text-editor .ax-editor-container{border:none!important;border-radius:0!important;box-shadow:none!important}ax-text-editor .ax-error-message{padding-inline-start:.75rem}@keyframes axm-comment-highlight{0%{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}10%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.5);box-shadow:inset 3px 0 rgb(var(--ax-sys-color-primary-surface))}35%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.3);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lighter-surface),.8)}60%{background-color:rgba(var(--ax-sys-color-primary-lightest-surface),.4);box-shadow:inset 3px 0 rgba(var(--ax-sys-color-primary-lightest-surface),.6)}to{background-color:transparent;box-shadow:inset 3px 0 0 0 transparent}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
12884
+ }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: "refrenceType", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "refrenceId", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: "subject", required: true }] }], editorRef: [{ type: i0.ViewChild, args: ['editorRef', { isSignal: true }] }] } });
12866
12885
 
12867
12886
  var comment_component = /*#__PURE__*/Object.freeze({
12868
12887
  __proto__: null,
@@ -13017,6 +13036,7 @@ function resolveCommentPopupOptions(input = {}) {
13017
13036
  class AXMShowCommentPopupCommand {
13018
13037
  constructor() {
13019
13038
  this.popupService = inject(AXPopupService);
13039
+ this.dialogOpener = inject(AXPDialogOpener);
13020
13040
  this.translate = inject(AXTranslationService);
13021
13041
  }
13022
13042
  async execute(input = {}) {
@@ -13027,15 +13047,22 @@ class AXMShowCommentPopupCommand {
13027
13047
  message: { text: 'Comment popup requires refType and refId.' },
13028
13048
  };
13029
13049
  }
13030
- const comp = (await Promise.resolve().then(function () { return commentPopup_component; })).AXMCommentPopupComponent;
13031
- await this.popupService.open(comp, {
13032
- title: await this.translate.translateAsync('@conversation:comments.feature.title'),
13033
- size: 'lg',
13034
- data: {
13035
- refrenceType: signal(refType),
13036
- refrenceId: signal(refId),
13037
- subject: signal(subject),
13050
+ let title = '';
13051
+ await this.dialogOpener.openPopup({
13052
+ load: () => Promise.resolve().then(function () { return commentPopup_component; }).then((module) => module.AXMCommentPopupComponent),
13053
+ data: { refType, refId },
13054
+ prepare: async () => {
13055
+ title = await this.translate.translateAsync('@conversation:comments.feature.title');
13038
13056
  },
13057
+ show: (component) => this.popupService.open(component, {
13058
+ title,
13059
+ size: 'lg',
13060
+ data: {
13061
+ refrenceType: signal(refType),
13062
+ refrenceId: signal(refId),
13063
+ subject: signal(subject),
13064
+ },
13065
+ }),
13039
13066
  });
13040
13067
  return {
13041
13068
  success: true,
@@ -14285,17 +14312,21 @@ async function axmOpenChatCallStartDialog(options) {
14285
14312
  }
14286
14313
  // Capture DI before any await (dynamic import below).
14287
14314
  const popupService = options.popupService ?? inject(AXPopupService);
14288
- const comp = (await import('./acorex-platform-module-conversation-client-chat-call-start-popup.component-BAU1EMTz.mjs')).AXMChatCallStartPopupComponent;
14315
+ const dialogOpener = options.dialogOpener ?? inject(AXPDialogOpener);
14289
14316
  const data = { conversation };
14290
- await popupService.open(comp, {
14291
- header: false,
14292
- closeButton: false,
14293
- footer: false,
14294
- size: 'sm',
14295
- closeOnBackdropClick: true,
14296
- panelClass: ['animate-fadeIn', 'animate-fast', 'axm-chat-call-start-overlay'],
14297
- contextElement: axmChatCallDarkThemeContextElement(),
14298
- data,
14317
+ await dialogOpener.openPopup({
14318
+ load: () => import('./acorex-platform-module-conversation-client-chat-call-start-popup.component-D8VXSxog.mjs').then((module) => module.AXMChatCallStartPopupComponent),
14319
+ data: { conversationId: conversation.id },
14320
+ show: (component) => popupService.open(component, {
14321
+ header: false,
14322
+ closeButton: false,
14323
+ footer: false,
14324
+ size: 'sm',
14325
+ closeOnBackdropClick: true,
14326
+ panelClass: ['animate-fadeIn', 'animate-fast', 'axm-chat-call-start-overlay'],
14327
+ contextElement: axmChatCallDarkThemeContextElement(),
14328
+ data,
14329
+ }),
14299
14330
  });
14300
14331
  }
14301
14332
  //#endregion
@@ -14534,6 +14565,7 @@ const AXM_CHAT_INFO_BAR_CALL_ACTION = {
14534
14565
  // Resolve DI synchronously — info-bar runs the handler in runInInjectionContext,
14535
14566
  // but that context is lost after the first await.
14536
14567
  const popupService = inject(AXPopupService);
14568
+ const dialogOpener = inject(AXPDialogOpener);
14537
14569
  const rtc = inject(AXPRtcApiAbstract, { optional: true });
14538
14570
  const translation = inject(AXTranslationService);
14539
14571
  const toast = inject(AXToastService);
@@ -14546,6 +14578,7 @@ const AXM_CHAT_INFO_BAR_CALL_ACTION = {
14546
14578
  await axmOpenChatCallStartDialog({
14547
14579
  conversation: context.conversation,
14548
14580
  popupService,
14581
+ dialogOpener,
14549
14582
  });
14550
14583
  },
14551
14584
  };
@@ -14564,7 +14597,7 @@ const AXM_CHAT_INFO_BAR_CALL_ACTION = {
14564
14597
  */
14565
14598
  const AXM_CONVERSATION_BOT_RENDERER = {
14566
14599
  type: 'assist-response',
14567
- componentLoader: () => import('./acorex-platform-module-conversation-client-assist-message-renderer.component-34LF22kR.mjs').then(function (n) { return n.b; }).then((m) => m.AXMAssistMessageRendererComponent),
14600
+ componentLoader: () => import('./acorex-platform-module-conversation-client-assist-message-renderer.component-CnMc1kr_.mjs').then(function (n) { return n.b; }).then((m) => m.AXMAssistMessageRendererComponent),
14568
14601
  canHandle: (message) => message.type === 'assist-response' || !!message.metadata?.['isAssistResponse'],
14569
14602
  capabilities: {
14570
14603
  supportsReactions: false,
@@ -14702,31 +14735,49 @@ async function axmOpenChatCallSessionDialog(options) {
14702
14735
  return;
14703
14736
  }
14704
14737
  const popupService = options.popupService ?? inject(AXPopupService);
14738
+ const dialogOpener = options.dialogOpener ?? inject(AXPDialogOpener);
14705
14739
  const activeCallSessions = options.activeCallSessions ?? inject(AXMChatCallActiveSessionService);
14706
- const comp = (await import('./acorex-platform-module-conversation-client-chat-call-session-page.component-DyepmPqJ.mjs')).AXMChatCallSessionPageComponent;
14707
- const scopedCallId = options.callId?.trim() || createRandomUuid();
14708
- activeCallSessions.engage(scopedCallId);
14709
- const data = {
14710
- sessionConversation: conversation,
14711
- sessionMedia: options.media === 'video' ? 'video' : 'voice',
14712
- sessionPhase: options.phase ?? 'outgoing-waiting',
14713
- sessionCallId: scopedCallId,
14714
- sessionInitiatorUserId: options.initiatorUserId?.trim() || undefined,
14715
- };
14740
+ const sessionMedia = options.media === 'video' ? 'video' : 'voice';
14741
+ let scopedCallId = options.callId?.trim() || '';
14716
14742
  try {
14717
- await popupService.open(comp, {
14718
- header: false,
14719
- closeButton: false,
14720
- footer: false,
14721
- size: 'full',
14722
- closeOnBackdropClick: false,
14723
- panelClass: ['animate-fadeIn', 'animate-fast'],
14724
- contextElement: axmChatCallDarkThemeContextElement(),
14725
- data,
14743
+ const opened = await dialogOpener.openPopup({
14744
+ load: () => import('./acorex-platform-module-conversation-client-chat-call-session-page.component-BCO-UEk3.mjs').then((module) => module.AXMChatCallSessionPageComponent),
14745
+ data: {
14746
+ conversationId: conversation.id,
14747
+ callId: scopedCallId,
14748
+ media: sessionMedia,
14749
+ phase: options.phase ?? 'outgoing-waiting',
14750
+ },
14751
+ show: (component) => {
14752
+ scopedCallId = scopedCallId || createRandomUuid();
14753
+ activeCallSessions.engage(scopedCallId);
14754
+ const data = {
14755
+ sessionConversation: conversation,
14756
+ sessionMedia,
14757
+ sessionPhase: options.phase ?? 'outgoing-waiting',
14758
+ sessionCallId: scopedCallId,
14759
+ sessionInitiatorUserId: options.initiatorUserId?.trim() || undefined,
14760
+ };
14761
+ return popupService.open(component, {
14762
+ header: false,
14763
+ closeButton: false,
14764
+ footer: false,
14765
+ size: 'full',
14766
+ closeOnBackdropClick: false,
14767
+ panelClass: ['animate-fadeIn', 'animate-fast'],
14768
+ contextElement: axmChatCallDarkThemeContextElement(),
14769
+ data,
14770
+ });
14771
+ },
14726
14772
  });
14773
+ if (opened === undefined) {
14774
+ return;
14775
+ }
14727
14776
  }
14728
14777
  catch (error) {
14729
- activeCallSessions.release(scopedCallId);
14778
+ if (scopedCallId) {
14779
+ activeCallSessions.release(scopedCallId);
14780
+ }
14730
14781
  throw error;
14731
14782
  }
14732
14783
  }
@@ -14747,6 +14798,7 @@ class AXMChatCallLogMessageRendererComponent {
14747
14798
  this.settings = inject(AXPSettingsService);
14748
14799
  this.conversationService = inject(AXConversationService);
14749
14800
  this.popupService = inject(AXPopupService);
14801
+ this.dialogOpener = inject(AXPDialogOpener);
14750
14802
  this.activeCallSessions = inject(AXMChatCallActiveSessionService);
14751
14803
  this.toastService = inject(AXToastService);
14752
14804
  this.rtcApi = inject(AXPRtcApiAbstract, { optional: true });
@@ -14886,6 +14938,7 @@ class AXMChatCallLogMessageRendererComponent {
14886
14938
  conversation,
14887
14939
  media: this.log()?.media === 'video' ? 'video' : 'voice',
14888
14940
  popupService: this.popupService,
14941
+ dialogOpener: this.dialogOpener,
14889
14942
  activeCallSessions: this.activeCallSessions,
14890
14943
  });
14891
14944
  }
@@ -16391,6 +16444,7 @@ class AXMChatCallRtcSignalInboxService {
16391
16444
  this.session = inject(AXPSessionService);
16392
16445
  this.store = inject(AXMConversationEntityStoreService);
16393
16446
  this.popupService = inject(AXPopupService);
16447
+ this.dialogOpener = inject(AXPDialogOpener);
16394
16448
  this.translation = inject(AXTranslationService);
16395
16449
  this.toast = inject(AXToastService);
16396
16450
  this.activeSessions = inject(AXMChatCallActiveSessionService);
@@ -16597,6 +16651,7 @@ class AXMChatCallRtcSignalInboxService {
16597
16651
  callId: ring.callId,
16598
16652
  initiatorUserId: ring.fromUserId,
16599
16653
  popupService: this.popupService,
16654
+ dialogOpener: this.dialogOpener,
16600
16655
  activeCallSessions: this.activeSessions,
16601
16656
  });
16602
16657
  }
@@ -16806,7 +16861,7 @@ class AXMCommentsPageComponentProvider {
16806
16861
  return [
16807
16862
  {
16808
16863
  key: COMMENTS_PAGE_COMPONENT_KEY,
16809
- loader: () => import('./acorex-platform-module-conversation-client-comments-page.component-CGE66IMI.mjs').then((m) => m.AXMCommentsPageComponent),
16864
+ loader: () => import('./acorex-platform-module-conversation-client-comments-page.component-C7zC8Cqu.mjs').then((m) => m.AXMCommentsPageComponent),
16810
16865
  },
16811
16866
  ];
16812
16867
  }
@@ -17112,19 +17167,19 @@ class AXMConversationModule {
17112
17167
  provideCommandSetups([
17113
17168
  {
17114
17169
  key: CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,
17115
- command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-B5YwswY2.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
17170
+ command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-Bp_2U5HU.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
17116
17171
  },
17117
17172
  {
17118
17173
  key: CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,
17119
- command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-B183eYcd.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
17174
+ command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-BKphfk-P.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
17120
17175
  },
17121
17176
  {
17122
17177
  key: CONVERSATION_SYNC_READ_STATE_COMMAND,
17123
- command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-DMi5eCDq.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
17178
+ command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-GdaU3JZP.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
17124
17179
  },
17125
17180
  {
17126
17181
  key: CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,
17127
- command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-CQOaoc8h.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
17182
+ command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-kvOvYsa3.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
17128
17183
  },
17129
17184
  {
17130
17185
  key: CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,
@@ -17136,7 +17191,7 @@ class AXMConversationModule {
17136
17191
  },
17137
17192
  {
17138
17193
  key: CONVERSATION_OPEN_CHAT_COMMAND,
17139
- command: () => import('./acorex-platform-module-conversation-client-open-chat.command-BRUNyQ5f.mjs').then((m) => m.AXMConversationOpenChatCommand),
17194
+ command: () => import('./acorex-platform-module-conversation-client-open-chat.command-CfzIRObR.mjs').then((m) => m.AXMConversationOpenChatCommand),
17140
17195
  },
17141
17196
  {
17142
17197
  key: 'show-comment-popup',
@@ -17255,19 +17310,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17255
17310
  provideCommandSetups([
17256
17311
  {
17257
17312
  key: CONVERSATION_AFTER_MESSAGE_SENT_COMMAND,
17258
- command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-B5YwswY2.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
17313
+ command: () => import('./acorex-platform-module-conversation-client-after-message-sent.command-Bp_2U5HU.mjs').then((m) => m.AXMConversationAfterMessageSentCommand),
17259
17314
  },
17260
17315
  {
17261
17316
  key: CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND,
17262
- command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-B183eYcd.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
17317
+ command: () => import('./acorex-platform-module-conversation-client-retry-assist-response.command-BKphfk-P.mjs').then((m) => m.AXMConversationRetryAssistResponseCommand),
17263
17318
  },
17264
17319
  {
17265
17320
  key: CONVERSATION_SYNC_READ_STATE_COMMAND,
17266
- command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-DMi5eCDq.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
17321
+ command: () => import('./acorex-platform-module-conversation-client-sync-read-state.command-GdaU3JZP.mjs').then((m) => m.AXMConversationSyncReadStateCommand),
17267
17322
  },
17268
17323
  {
17269
17324
  key: CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND,
17270
- command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-CQOaoc8h.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
17325
+ command: () => import('./acorex-platform-module-conversation-client-mark-conversation-unread.command-kvOvYsa3.mjs').then((m) => m.AXMConversationMarkConversationUnreadCommand),
17271
17326
  },
17272
17327
  {
17273
17328
  key: CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND,
@@ -17279,7 +17334,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17279
17334
  },
17280
17335
  {
17281
17336
  key: CONVERSATION_OPEN_CHAT_COMMAND,
17282
- command: () => import('./acorex-platform-module-conversation-client-open-chat.command-BRUNyQ5f.mjs').then((m) => m.AXMConversationOpenChatCommand),
17337
+ command: () => import('./acorex-platform-module-conversation-client-open-chat.command-CfzIRObR.mjs').then((m) => m.AXMConversationOpenChatCommand),
17283
17338
  },
17284
17339
  {
17285
17340
  key: 'show-comment-popup',
@@ -17315,4 +17370,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17315
17370
  */
17316
17371
 
17317
17372
  export { axmShouldForkPrivateToGroup as $, AXMConversationEntityStoreService as A, axmSanitizeAssistUserAnswerText as B, axmAssistUserVisibleItemsForLine as C, axmReadAssistFollowUpStatus as D, axmReadPlainTextMessagePayload as E, AXMNodeMessageRendererComponent as F, AXMAssistSuggestionChipsComponent as G, AXMChatCallActiveSessionService as H, axmResolveConversationListAvatar as I, axmEnsureChatCallRtcReady as J, axmOpenChatCallSessionDialog as K, axmChatCallMediaRoomName as L, axmResolveChatCallLiveKitServerUrl as M, axmChatCallRoomConnectOptions as N, loadLiveKitClient as O, AXM_CHAT_CALL_RTC_API_PROVIDERS as P, AXMConversationAppearanceSyncService as Q, axmCancelAssistComposerGeneration as R, AXMChatEmptyStateHostComponent as S, AXMChatComposerEnsureAssistConversationDirective as T, AXMChatUserApi as U, AXMChatEntityConversationApi as V, AXMChatConversationApi as W, AXMChatCallRtcSignalInboxService as X, AXMChatCallEventsService as Y, AXMConversationRealtimeBus as Z, axmReadChatCallLog as _, AXM_CONVERSATION_ASSIST_RESPONSE_PORT as a, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND as a$, axmIsConversationParticipant as a0, axmBuildChatCallLogMessage as a1, axmMatchesForkedGroupForCall as a2, axmAssistWidgetNodeFromUnknown as a3, AXMAddReactionCommand as a4, AXMChannelFeedItemComponent as a5, AXMChannelFeedPage as a6, AXMChatAnnouncementChannelService as a7, AXMChatComponent as a8, AXMChatComposerAssistPickerComponent as a9, AXMMiniChatPanelService as aA, AXMMiniChatPopupWindowComponent as aB, AXMShowCommentPopupCommand as aC, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME as aD, AXM_ASSIST_DEFAULT_RESOLVER_PORT as aE, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE as aF, AXM_CHAT_ASSIST_CATALOG_PORT as aG, AXM_CHAT_EMPTY_STATE_COMPONENT as aH, AXM_CHAT_SIDEBAR_ACTION_PROVIDER as aI, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS as aJ, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY as aK, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY as aL, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE as aM, AXM_CONVERSATION_TAB_BOT as aN, AXM_ENTITY_LIST_CHAT_ID as aO, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER as aP, AXM_MINI_CHAT_INBOX_SESSION_KEY as aQ, AXM_MINI_CHAT_POPUP_DOCK as aR, AXM_MINI_CHAT_SCOPE_ENTITY as aS, AXM_MINI_CHAT_SCOPE_METADATA_KEY as aT, AXPCommentWidget as aU, COMMENTS_PAGE_COMPONENT_KEY as aV, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND as aW, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND as aX, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND as aY, CONVERSATION_OPEN_CHAT_COMMAND as aZ, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND as a_, AXMChatEmptyAssistSessionService as aa, AXMChatEntityConversationFocusHandler as ab, AXMChatEntityConversationRoomQueryService as ac, AXMChatEntityMessageApi as ad, AXMChatEntityRealtimeApi as ae, AXMChatEntityUserApi as af, AXMChatRealtimeApi as ag, AXMCommentManagementService as ah, AXMCommentPopupComponent as ai, AXMCommentRealtimeService as aj, AXMCommentRealtimeServiceImpl as ak, AXMCommentService as al, AXMCommentServiceImpl as am, AXMCommentWidgetViewComponent as an, AXMConversationAssistBackgroundOperationHandler as ao, AXMConversationModule as ap, AXMEntityChatService as aq, AXMMiniChatComponent as ar, AXMMiniChatFileDropService as as, AXMMiniChatFooterDockComponent as at, AXMMiniChatHeaderSlotComponent as au, AXMMiniChatHistoryComponent as av, AXMMiniChatInboxHistoryComponent as aw, AXMMiniChatLauncherComponent as ax, AXMMiniChatPageActionComponent as ay, AXMMiniChatPanelComponent as az, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT as b, axmResolveChatAiTargetText as b$, CONVERSATION_START_ASSIST_CHAT_COMMAND as b0, CONVERSATION_START_DIRECT_CHAT_COMMAND as b1, CONVERSATION_SYNC_READ_STATE_COMMAND as b2, axmApplyAnswerTextToAssistPayloadLine as b3, axmAssistFollowUpItemsFromUnknown as b4, axmAssistLastTranscriptLine as b5, axmAssistNormalizeFollowUpItemForConversation as b6, axmAssistNormalizeFollowUpItemsForConversation as b7, axmAssistPersistedMessageLooksComplete as b8, axmAssistResolveFollowUpCommandName as b9, axmExtractAssistSnapshotFromMetadata as bA, axmExtractDirectAgentIdFromMetadata as bB, axmExtractEntityRefFromMetadata as bC, axmExtractModelEntityIdFromMetadata as bD, axmExtractTextFromPayload as bE, axmFilterChatAiTargets as bF, axmFlattenConversationCreateMetadata as bG, axmHydrateRealtimeConversationMessage as bH, axmInboxConversationTab as bI, axmIsAssistBotConversation as bJ, axmIsAssistPeerParticipant as bK, axmIsAssistResponseMessage as bL, axmIsAssistStreamingMessage as bM, axmIsAssistTerminalStatus as bN, axmIsUnsupportedLegacyAgentAssistConversation as bO, axmLoadChatAiTargets as bP, axmMessageEntityToMessage as bQ, axmMiniChatHistoryScopeFromDraft as bR, axmMiniChatHistoryScopeFromOpen as bS, axmMiniChatHistoryScopeKey as bT, axmMiniChatWindowOwnsRoute as bU, axmNormalizeAssistTranscriptForChatUi as bV, axmNormalizeAssistTranscriptLineResponses as bW, axmPreferLocalUnreadCount as bX, axmReadReplyToUserMessageId as bY, axmRemoveMiniChatHistoryItem as bZ, axmResolveAssistFinalAnswerText as b_, axmAssistStarterPromptChipItems as ba, axmAssistSuggestionIconForLabel as bb, axmAssistWidgetNodeDedupeKey as bc, axmBuildAiChatConversationMetadata as bd, axmBuildAssistPeerParticipantFromCreateData as be, axmBuildAssistPeerParticipantFromId as bf, axmBuildAssistTranscriptLinePayload as bg, axmBuildAutoTitleFromUserText as bh, axmBuildEntityChatConversationMetadata as bi, axmBuildEntityChatRoomEntityRef as bj, axmChatAiPeerParticipantId as bk, axmChatAiTargetAvatarUrl as bl, axmChatAiTargetDisplayDescription as bm, axmChatAiTargetDisplayName as bn, axmChatAiTargetShortcutDescriptionKey as bo, axmCoerceDate as bp, axmCoerceTimestampMs as bq, axmComputeConversationUnreadCount as br, axmConversationIsEntityChat as bs, axmConversationIsGlobalChat as bt, axmConversationMatchesEntity as bu, axmConversationMatchesHistoryScope as bv, axmEntityRefForMiniChatPageContext as bw, axmEntityRefFromLaunchContext as bx, axmExcludeEntityChatConversations as by, axmExtractAssistIdFromMetadata as bz, axmConversationHasAiChat$1 as c, axmRoomEntityToConversation as c0, axmRoomIsEntityChat as c1, axmRoomLaunchContext as c2, axmRoomMatchesEntity as c3, axmRoomWithAssistPeerDisplayName as c4, axmShouldPreferPersistedAssistOverLiveCache as c5, axmSortMessagesNewestFirst as c6, axmSyncAssistPeerDisplayName as c7, axmUpsertMiniChatHistoryItem as c8, axmUserRowToParticipant as c9, axpShowCommentPopupCommandDefinition as ca, channelFeedPageRoutes as cb, commentsPlugin as cc, createConversationServiceSessionAdapter as cd, persistChatAttachment as ce, AXMConversationFocusService as d, AXMConversationInAppNotificationSyncService as e, axmMessageCountsTowardUnread as f, buildConversationChatInAppCorrelationPrefix as g, AXMCommentComponent as h, axmResolveI18nLabel as i, axmSyntheticEmbedMessage as j, axmChatRenderableAssistWidgetNode as k, axmPartitionAssistAnswerText as l, axmParseAssistTranscriptTextEnvelope as m, AXMAssistChatDebugModeService as n, AXMChatMessageApi as o, AXM_AI_MANAGEMENT_MODULE_NAME as p, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME as q, axmReadAssistResponseStatus as r, axmIsAssistRetryableStatus as s, axmReadAssistResponseError as t, axmReadAssistAiTranscript as u, axmParseAssistTranscriptLinePayload as v, axmReadAssistAiTranscriptRaw as w, axmAssistUserFacingPayloadLine as x, axmIsAssistStreamingStatus as y, axmAssistHasFinalizeMetadata as z };
17318
- //# sourceMappingURL=acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-MEun4ht1.mjs.map
17373
+ //# sourceMappingURL=acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CAPi0yn4.mjs.map