@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.
- 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
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CAPi0yn4.mjs.map +1 -0
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-CnMc1kr_.mjs.map +1 -0
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-conversation-client-chat-call-start-popup.component-D8VXSxog.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-CGE66IMI.mjs → acorex-platform-module-conversation-client-comments-page.component-C7zC8Cqu.mjs} +2 -2
- 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
- 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
- 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
- package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BRUNyQ5f.mjs → acorex-platform-module-conversation-client-open-chat.command-CfzIRObR.mjs} +2 -2
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-module-conversation-client.d.ts +7 -5
- package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-MEun4ht1.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-34LF22kR.mjs.map +0 -1
- 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/
|
|
50
|
-
import {
|
|
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
|
-
|
|
7603
|
-
|
|
7604
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
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.
|
|
8484
|
-
|
|
8485
|
-
|
|
8486
|
-
|
|
8487
|
-
|
|
8488
|
-
|
|
8489
|
-
|
|
8490
|
-
|
|
8491
|
-
|
|
8492
|
-
|
|
8493
|
-
|
|
8494
|
-
|
|
8495
|
-
|
|
8496
|
-
|
|
8497
|
-
|
|
8498
|
-
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8507
|
-
|
|
8508
|
-
|
|
8509
|
-
|
|
8510
|
-
|
|
8511
|
-
|
|
8512
|
-
|
|
8513
|
-
|
|
8514
|
-
|
|
8515
|
-
|
|
8516
|
-
|
|
8517
|
-
|
|
8518
|
-
|
|
8519
|
-
|
|
8520
|
-
|
|
8521
|
-
|
|
8522
|
-
|
|
8523
|
-
|
|
8524
|
-
|
|
8525
|
-
|
|
8526
|
-
|
|
8527
|
-
|
|
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
|
-
|
|
8530
|
-
|
|
8531
|
-
|
|
8532
|
-
|
|
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
|
-
|
|
8572
|
-
|
|
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
|
-
|
|
9008
|
-
const result = await this.
|
|
9009
|
-
|
|
9010
|
-
|
|
9011
|
-
|
|
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.
|
|
12437
|
+
this.editorOptions = signal({
|
|
12413
12438
|
look: 'solid',
|
|
12414
12439
|
}, /* @ts-ignore */
|
|
12415
|
-
...(ngDevMode ? [{ debugName: "
|
|
12440
|
+
...(ngDevMode ? [{ debugName: "editorOptions" }] : /* istanbul ignore next */ []));
|
|
12416
12441
|
//#endregion
|
|
12417
12442
|
//#region ---- View Children ----
|
|
12418
|
-
this.
|
|
12419
|
-
...(ngDevMode ? [{ debugName: "
|
|
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.
|
|
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.
|
|
12537
|
+
this.editorRef()?.focus();
|
|
12513
12538
|
}
|
|
12514
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 }] }],
|
|
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
|
-
|
|
13031
|
-
await this.
|
|
13032
|
-
|
|
13033
|
-
|
|
13034
|
-
|
|
13035
|
-
|
|
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
|
|
14315
|
+
const dialogOpener = options.dialogOpener ?? inject(AXPDialogOpener);
|
|
14289
14316
|
const data = { conversation };
|
|
14290
|
-
await
|
|
14291
|
-
|
|
14292
|
-
|
|
14293
|
-
|
|
14294
|
-
|
|
14295
|
-
|
|
14296
|
-
|
|
14297
|
-
|
|
14298
|
-
|
|
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-
|
|
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
|
|
14707
|
-
|
|
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
|
|
14718
|
-
|
|
14719
|
-
|
|
14720
|
-
|
|
14721
|
-
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
17373
|
+
//# sourceMappingURL=acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-CAPi0yn4.mjs.map
|