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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/fesm2022/{acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs} +10935 -9294
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-conversation-client-after-message-sent.command-hVFQo07j.mjs.map → acorex-platform-module-conversation-client-after-message-sent.command-qTWATpgC.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs} +8 -7
  6. package/fesm2022/{acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-D6XrMTQm.mjs.map → acorex-platform-module-conversation-client-assist-delegated-agent-detail-popup.component-DQWhOmBE.mjs.map} +1 -1
  7. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs +1756 -0
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-DyVepuaW.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs +120 -0
  10. package/fesm2022/{acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs.map → acorex-platform-module-conversation-client-assist-tool-detail-popup.component-D8na_1QJ.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs → acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs} +747 -25
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-BeS4Duip.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs} +4 -4
  14. package/fesm2022/{acorex-platform-module-conversation-client-chat-call-start-popup.component-BTOtRRPY.mjs.map → acorex-platform-module-conversation-client-chat-call-start-popup.component-BbEhkLLh.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs} +3 -3
  16. package/fesm2022/{acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-CppNPfqe.mjs.map → acorex-platform-module-conversation-client-chat-conversation-info-media-view.component-Bnbj0e6M.mjs.map} +1 -1
  17. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs +497 -0
  18. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-bwT1-lAn.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-BhSJiJY5.mjs.map → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs +277 -0
  22. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-audience.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs +530 -0
  24. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-post.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs +206 -0
  26. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs +65 -17
  28. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-message.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs +231 -59
  30. package/fesm2022/acorex-platform-module-conversation-client-contracts-entities-room.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs +87 -0
  32. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-CV_sCYGf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs +213 -0
  34. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-audience.entity-DyaUcESJ.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs +466 -0
  36. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-post.entity-CbBcChEt.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs +142 -0
  38. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-channel-receipt.entity-DtRFj8zV.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs → acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs} +35 -19
  40. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-CJk1wEvA.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs +403 -0
  42. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-Ctt7qzfF.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog.mjs +1 -1
  44. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs +846 -4
  45. package/fesm2022/acorex-platform-module-conversation-client-contracts.mjs.map +1 -1
  46. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs +3 -0
  47. package/fesm2022/acorex-platform-module-conversation-client-local-entities.mjs.map +1 -1
  48. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs} +2 -2
  49. package/fesm2022/{acorex-platform-module-conversation-client-mark-conversation-unread.command-D0rr0npJ.mjs.map → acorex-platform-module-conversation-client-mark-conversation-unread.command-juoWxu7I.mjs.map} +1 -1
  50. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs} +2 -2
  51. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-Bbgp4ZfT.mjs.map → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs.map} +1 -1
  52. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs} +2 -2
  53. package/fesm2022/{acorex-platform-module-conversation-client-retry-assist-response.command-BMZTab8j.mjs.map → acorex-platform-module-conversation-client-retry-assist-response.command-BsYxaH3g.mjs.map} +1 -1
  54. package/fesm2022/{acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs → acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs} +7 -2
  55. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DsCyIdEk.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-module-conversation-client.mjs +1 -1
  57. package/package.json +14 -2
  58. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-audience.d.ts +5 -0
  59. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-post.d.ts +5 -0
  60. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.d.ts +5 -0
  61. package/types/acorex-platform-module-conversation-client-contracts.d.ts +432 -2
  62. package/types/acorex-platform-module-conversation-client.d.ts +680 -161
  63. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-C8FR7Snp.mjs.map +0 -1
  64. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs +0 -120
  65. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-b84Na7R_.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs +0 -472
  67. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-C5xS98oE.mjs.map +0 -1
  68. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +0 -52
  69. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +0 -1
  70. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +0 -1
  71. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +0 -263
  72. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +0 -1
  73. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-9G3Knrre.mjs.map +0 -1
@@ -1,19 +1,22 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Provider, InjectionToken, Type, Signal, OnInit, ElementRef, OnDestroy } from '@angular/core';
2
+ import { Provider, InjectionToken, Type, Signal, OnInit, ElementRef, DestroyRef, OnDestroy } from '@angular/core';
3
3
  import * as i1 from '@acorex-platform/framework-client/layout/widget-core';
4
4
  import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
5
5
  import { AXPBackgroundOperationHandler, AXPBackgroundOperation, AXPFileStorageService } from '@acorex-platform/framework-client/common';
6
6
  import * as _acorex_platform_framework_shared_core from '@acorex-platform/framework-shared/core';
7
- import { AXPExecuteCommand, AXPMultiLanguageString, AXPWidgetNode, AXPUserReference, AXPEntityReference } from '@acorex-platform/framework-shared/core';
8
- import { AXPDeviceService } from '@acorex-platform/framework-client/core';
7
+ import { AXPExecuteCommand, AXPFilterDefinition, AXPFilterQuery, AXPActionMenuItem, AXPMultiLanguageString, AXPWidgetNode, AXPUserReference, AXPEntityReference } from '@acorex-platform/framework-shared/core';
9
8
  import { AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';
9
+ import { AXMChannelFeedItem, AXMConversationRoom, AXMConversationMessage, AXMCommentEntityData, AXReaction, AXMessagePayload, AXMReactionType } from '@acorex-platform/module-conversation-client/contracts';
10
+ import { Routes } from '@angular/router';
11
+ import { AXClickEvent, AXStyleLookType, AXPlacement } from '@acorex/cdk/common';
12
+ import { AXPDeviceService } from '@acorex-platform/framework-client/core';
10
13
  import * as _acorex_components_conversation from '@acorex/components/conversation';
11
- import { AXConversationApi, AXConversation, AXConversationMessageApi, AXConversationMessage, AXConversationRealtimeApi, AXConversationUserApi, AXConversationCreateData, AXConversationPagination, AXConversationFilters, AXConversationPaginatedResult, AXConversationUpdateData, AXConversationParticipant, AXConversationParticipantUpdate, AXConversationSendMessageCommand, AXConversationMessagePayload, AXConversationMessageSearchFilters, AXConversationReadReceipt, AXConversationMessageForwardData, AXConversationPinnedMessage, AXConversationTypingIndicator, AXConversationUser, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationPresenceUpdate, AXConversationPresenceStatus, AXConversationBlockReportReason, AXConversationRoomPreferencesMap, AXConversationRoomPreferences, AXConversationTab, AXConversationConnectionStatus, AXConversationService } from '@acorex/components/conversation';
12
- import { AXMConversationRoom, AXMConversationMessage, AXMCommentEntityData, AXReaction, AXMessagePayload, AXMReactionType } from '@acorex-platform/module-conversation-client/contracts';
14
+ import { AXConversationApi, AXConversation, AXConversationMessageApi, AXConversationMessage, AXConversationRealtimeApi, AXConversationUserApi, AXConversationPagination, AXConversationPaginatedResult, AXConversationCreateData, AXConversationFilters, AXConversationUpdateData, AXConversationParticipant, AXConversationParticipantUpdate, AXConversationSendMessageCommand, AXConversationMessagePayload, AXConversationMessageSearchFilters, AXConversationReadReceipt, AXConversationMessageForwardData, AXConversationPinnedMessage, AXConversationTypingIndicator, AXConversationUser, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationPresenceUpdate, AXConversationPresenceStatus, AXConversationBlockReportReason, AXConversationRoomPreferencesMap, AXConversationRoomPreferences, AXConversationTab, AXConversationConnectionStatus, AXConversationService } from '@acorex/components/conversation';
13
15
  import { Observable } from 'rxjs';
14
- import { AXClickEvent, AXStyleLookType, AXPlacement } from '@acorex/cdk/common';
15
- import { AXPAiChatResponse, AXPAiChatMessage, AXPAiChatFollowUpItem } from '@acorex-platform/module-ai-management-client';
16
+ import { AXMContextualAssistContext, AXMCommentEntityData as AXMCommentEntityData$1 } from '@acorex-platform/module-conversation-client/contracts';
16
17
  import { AXPEntityDefinitionRegistryService, AXPEntityActionPlugin } from '@acorex-platform/framework-client/layout/entity';
18
+ import { AXPopupRef, AXPopupComponentBase } from '@acorex/components/popup';
19
+ import { AXPAiChatResponse, AXPAiChatMessage, AXPAiChatFollowUpItem } from '@acorex-platform/module-ai-management-client';
17
20
  import * as _angular_platform_browser from '@angular/platform-browser';
18
21
  import { AXWysiwygContainerComponent } from '@acorex/components/wysiwyg';
19
22
  import { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';
@@ -42,10 +45,129 @@ declare class AXMConversationAssistBackgroundOperationHandler extends AXPBackgro
42
45
  }
43
46
  declare const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS: Provider[];
44
47
 
48
+ declare class AXMChannelFeedPage extends AXPPageLayoutBaseComponent {
49
+ private readonly queryService;
50
+ private readonly commandService;
51
+ private readonly tagService;
52
+ private readonly unreadBadge;
53
+ protected readonly loading: _angular_core.WritableSignal<boolean>;
54
+ protected readonly loadingMore: _angular_core.WritableSignal<boolean>;
55
+ protected readonly loadFailed: _angular_core.WritableSignal<boolean>;
56
+ protected readonly items: _angular_core.WritableSignal<readonly AXMChannelFeedItem[]>;
57
+ protected readonly hasMore: _angular_core.WritableSignal<boolean>;
58
+ protected readonly filterDefinitions: _angular_core.WritableSignal<AXPFilterDefinition[]>;
59
+ protected readonly panelInitialFilters: _angular_core.WritableSignal<AXPFilterQuery[]>;
60
+ protected readonly queryFiltersKey: _angular_core.WritableSignal<number>;
61
+ private readonly activeFilters;
62
+ private skip;
63
+ protected readonly skeletonPlaceholders: number[];
64
+ readonly hasActiveFilters: _angular_core.Signal<boolean>;
65
+ protected readonly visible: _angular_core.Signal<AXMChannelFeedItem[]>;
66
+ private readonly searchText;
67
+ private readonly isUnreadFilterActive;
68
+ private readonly isPinnedFilterActive;
69
+ private readonly tagFilter;
70
+ ngOnInit(): Promise<void>;
71
+ getPageTitle(): string;
72
+ getPageIcon(): string | null;
73
+ getPageDescription(): string;
74
+ getSecondaryMenuItems(): Promise<AXPActionMenuItem[]>;
75
+ execute(command: AXPExecuteCommand): Promise<void>;
76
+ protected handleFiltersChanged(filters: AXPFilterQuery[]): void;
77
+ protected clearFilters(): void;
78
+ protected onItemSeen(id: string): void;
79
+ protected retry(): void;
80
+ protected onInfiniteScrollReached(): void;
81
+ protected emptyTitle(): string;
82
+ protected emptyDescription(): string;
83
+ private loadMore;
84
+ private loadFeed;
85
+ private markRead;
86
+ private loadFilterDefinitions;
87
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChannelFeedPage, never>;
88
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMChannelFeedPage, "axm-channel-feed-page", never, {}, {}, never, never, true, never>;
89
+ }
90
+
91
+ declare const channelFeedPageRoutes: Routes;
92
+
93
+ type ChannelFeedItemChrome = 'card' | 'bubble';
94
+ type ChannelFeedTagView = {
95
+ title: AXPMultiLanguageString;
96
+ color: string;
97
+ trackKey: string;
98
+ };
99
+ declare class AXMChannelFeedItemComponent {
100
+ private readonly userAvatarService;
101
+ private readonly tagService;
102
+ private readonly commandService;
103
+ private readonly commentManagement;
104
+ private readonly translation;
105
+ private readonly host;
106
+ private readonly destroyRef;
107
+ private readonly injector;
108
+ item: _angular_core.InputSignal<AXMChannelFeedItem>;
109
+ /** `card` is the announcements page. `bubble` sits inside a conversation bubble. */
110
+ chrome: _angular_core.InputSignal<ChannelFeedItemChrome>;
111
+ itemSeen: _angular_core.OutputEmitterRef<string>;
112
+ private readonly bodyEl;
113
+ protected readonly expanded: _angular_core.WritableSignal<boolean>;
114
+ protected readonly authorName: _angular_core.WritableSignal<string>;
115
+ protected readonly canExpand: _angular_core.WritableSignal<boolean>;
116
+ protected readonly commentsBusy: _angular_core.WritableSignal<boolean>;
117
+ private readonly availableTags;
118
+ private readonly commentCountOverride;
119
+ private lastCommentPostId;
120
+ protected readonly isUnread: _angular_core.Signal<boolean>;
121
+ protected readonly gallery: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFileListItem[]>;
122
+ protected readonly attachments: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFileListItem[]>;
123
+ protected readonly publishedAt: _angular_core.Signal<Date | null>;
124
+ protected readonly eventStartsAt: _angular_core.Signal<Date | null>;
125
+ protected readonly hasEventLocation: _angular_core.Signal<boolean>;
126
+ protected readonly commentCount: _angular_core.Signal<number>;
127
+ protected readonly tags: _angular_core.Signal<ChannelFeedTagView[]>;
128
+ constructor();
129
+ protected toggleBody(event: Event): void;
130
+ protected openComments(event: AXClickEvent): void;
131
+ private showCommentsPopup;
132
+ private refreshCommentCount;
133
+ private updateCanExpand;
134
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChannelFeedItemComponent, never>;
135
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMChannelFeedItemComponent, "axm-channel-feed-item", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "chrome": { "alias": "chrome"; "required": false; "isSignal": true; }; }, { "itemSeen": "itemSeen"; }, never, never, true, never>;
136
+ }
137
+
138
+ /**
139
+ * Bridges platform theme/locale into `@acorex/components/conversation`.
140
+ *
141
+ * Showcase chat calls `AXPlatform.switchLightMode()` / `AXLocaleService.setProfile()` directly,
142
+ * so wallpaper and `translateSync` labels update immediately. The platform shell instead
143
+ * toggles `ax-dark` via {@link AXPLayoutThemeService} and keeps the chat page OnPush —
144
+ * conversation computeds that depend on `AXPlatform.themeMode()` never re-run, and
145
+ * `@acorex:chat` JSON for the new locale is not preloaded until a full refresh.
146
+ */
147
+ declare class AXMConversationAppearanceSyncService {
148
+ private readonly layoutTheme;
149
+ private readonly platform;
150
+ private readonly translation;
151
+ private readonly destroyRef;
152
+ private readonly revision;
153
+ /** Stable one-item list so `@for (key of viewKeys(); track key)` remounts conversation widgets. */
154
+ readonly viewKeys: _angular_core.Signal<number[]>;
155
+ constructor();
156
+ /** Ensures constructor effects are created at app start (called from the conversation startup task). */
157
+ start(): void;
158
+ private syncPlatformTheme;
159
+ private toAxThemeMode;
160
+ private preloadChatLocales;
161
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMConversationAppearanceSyncService, never>;
162
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMConversationAppearanceSyncService>;
163
+ }
164
+
45
165
  declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
46
166
  #private;
47
167
  private readonly conversationService;
168
+ private readonly popupService;
48
169
  private readonly chatConversationApi;
170
+ private readonly assistResponse;
49
171
  private readonly miniChatPanelService;
50
172
  private readonly activeCallSessions;
51
173
  private readonly composerService;
@@ -57,6 +179,7 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
57
179
  private readonly badgeService;
58
180
  protected readonly deviceService: AXPDeviceService;
59
181
  private readonly destroyRef;
182
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
60
183
  private readonly routeConversationId;
61
184
  private readonly routerUrl;
62
185
  ngOnInit(): Promise<void>;
@@ -64,7 +187,9 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
64
187
  * Computed signal to check if there is an active conversation selected.
65
188
  */
66
189
  readonly hasActiveConversation: _angular_core.Signal<boolean>;
190
+ readonly hidePageComposer: _angular_core.Signal<boolean>;
67
191
  readonly showChatList: _angular_core.Signal<boolean>;
192
+ readonly isAnnouncementChannelActive: _angular_core.Signal<boolean>;
68
193
  /**
69
194
  * Unread messages in other chats (excludes the open conversation), for the mobile back control.
70
195
  */
@@ -74,13 +199,16 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
74
199
  * Navigates to the selected conversation route.
75
200
  * @param conversationId - The ID of the selected conversation.
76
201
  */
77
- onConversationSelected(conversationId: string): void;
202
+ readonly onAssistConversationCreated: (conversationId: string) => Promise<void>;
203
+ onConversationSelected(conversationId: string): Promise<void>;
78
204
  /** Mobile back: return to the full-screen conversation list (no layout sidebar). */
79
205
  openChatList(): void;
80
206
  /**
81
207
  * Opens the platform conversation info panel when the info-bar title/avatar area is clicked.
82
208
  */
83
209
  onInfoBarClick(): void;
210
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
211
+ onComposerGenerationCancelled(): void;
84
212
  /**
85
213
  * Handles Escape key from chat container.
86
214
  * Replicates conversation source behavior by closing active conversation here.
@@ -135,6 +263,45 @@ declare abstract class AXMChatRealtimeApi extends AXConversationRealtimeApi {
135
263
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatRealtimeApi>;
136
264
  }
137
265
 
266
+ /**
267
+ * Ensures the tenant announcements channel exists and loads feed rows as chat messages.
268
+ */
269
+ declare class AXMChatAnnouncementChannelService {
270
+ private readonly entityService;
271
+ private readonly filterService;
272
+ private readonly queryService;
273
+ private readonly session;
274
+ private readonly translation;
275
+ private readonly locale;
276
+ private readonly userApi;
277
+ private subscriberCountCache;
278
+ private unreadByRoomCache;
279
+ private readonly roomData;
280
+ private readonly feedMessageCache;
281
+ canViewBulletins(): boolean;
282
+ isAnnouncementChannel(value: {
283
+ name?: string | null;
284
+ metadata?: Record<string, unknown> | null;
285
+ } | null | undefined): boolean;
286
+ isChannelRoom(value: {
287
+ kind?: string | null;
288
+ type?: string | null;
289
+ name?: string | null;
290
+ metadata?: Record<string, unknown> | null;
291
+ } | null | undefined): boolean;
292
+ ensureRoom(): Promise<AXMConversationRoom | null>;
293
+ findRoom(): Promise<AXMConversationRoom | null>;
294
+ decorateConversation(conversation: AXConversation): Promise<AXConversation>;
295
+ private resolveUnreadByRoom;
296
+ private resolveSubscriberCount;
297
+ getCachedFeedMessage(messageId: string): AXConversationMessage | null;
298
+ getFeedMessages(conversationId: string, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
299
+ searchFeedMessages(conversationId: string, query: string | undefined, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
300
+ private createRoom;
301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatAnnouncementChannelService, never>;
302
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatAnnouncementChannelService>;
303
+ }
304
+
138
305
  /**
139
306
  * Entity-backed implementation of {@link AXMChatConversationApi} using Conversation.room.
140
307
  */
@@ -147,6 +314,8 @@ declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
147
314
  private readonly realtimeBus;
148
315
  private readonly focusHandler;
149
316
  private readonly roomQuery;
317
+ private readonly announcements;
318
+ private readonly commandService;
150
319
  private readonly roomData;
151
320
  reportFocusedConversation(conversationId: string | null): void;
152
321
  private publishConversationPatch;
@@ -222,6 +391,7 @@ declare class AXMChatEntityConversationFocusHandler {
222
391
  declare class AXMChatEntityConversationRoomQueryService {
223
392
  private readonly entityService;
224
393
  private readonly filterService;
394
+ private readonly session;
225
395
  private readonly userApi;
226
396
  private readonly roomData;
227
397
  private readonly messageData;
@@ -269,7 +439,9 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
269
439
  private readonly userApi;
270
440
  private readonly commandService;
271
441
  private readonly assistResponse;
442
+ private readonly generationState;
272
443
  private readonly conversationStore;
444
+ private readonly announcements;
273
445
  private readonly realtime;
274
446
  private readonly typingStopTimers;
275
447
  private readonly typingEmitState;
@@ -277,6 +449,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
277
449
  private static readonly TYPING_STOP_IDLE_MS;
278
450
  private readonly messageData;
279
451
  private readonly roomData;
452
+ private readonly receiptData;
453
+ private readonly cancelAssistOnComposerStop;
280
454
  private requireConversationParticipant;
281
455
  private loadConversationMessages;
282
456
  private paginateMessages;
@@ -289,6 +463,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
289
463
  editMessage(messageId: string, payload: AXConversationMessagePayload): Promise<AXConversationMessage>;
290
464
  deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
291
465
  deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
466
+ private isAssistUserTextEdit;
467
+ private dropMessagesAfterAssistEdit;
292
468
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
293
469
  searchMessages(conversationId: string, filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
294
470
  searchAllMessages(filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
@@ -298,7 +474,7 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
298
474
  getAvailableReactions(): Promise<string[]>;
299
475
  markAsRead(conversationId: string, messageIds: string[]): Promise<void>;
300
476
  markAsUnread(conversationId: string): Promise<void>;
301
- getReadReceipts(_messageId: string): Promise<AXConversationReadReceipt[]>;
477
+ getReadReceipts(messageId: string): Promise<AXConversationReadReceipt[]>;
302
478
  markMessagesAsRead(messageIds: string[]): Promise<void>;
303
479
  forwardMessage(_data: AXConversationMessageForwardData): Promise<AXConversationMessage[]>;
304
480
  pinMessage(conversationId: string, messageId: string): Promise<void>;
@@ -312,13 +488,16 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
312
488
  updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
313
489
  getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
314
490
  updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
315
- getMessageDeliveryStatus(_messageId: string): Promise<{
491
+ getMessageDeliveryStatus(messageId: string): Promise<{
316
492
  delivered: number;
317
493
  read: number;
318
494
  total: number;
319
495
  }>;
320
496
  bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
321
497
  exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
498
+ private markChannelPostsRead;
499
+ private resolveChannelPostId;
500
+ private queryPostReceipts;
322
501
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatEntityMessageApi, never>;
323
502
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatEntityMessageApi>;
324
503
  }
@@ -368,6 +547,8 @@ declare class AXMChatEntityUserApi extends AXMChatUserApi {
368
547
  updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationUser>;
369
548
  uploadAvatar(_file: File): Promise<string>;
370
549
  getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
550
+ /** Tenant-scoped directory size (includes the current user). */
551
+ countDirectoryUsers(): Promise<number>;
371
552
  searchUsers(query: string): Promise<AXConversationParticipant[]>;
372
553
  getUserById(userId: string): Promise<AXConversationParticipant>;
373
554
  getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
@@ -403,6 +584,10 @@ declare const AXM_CHAT_SIDEBAR_ACTION_PROVIDER: InjectionToken<AXMChatSidebarAct
403
584
 
404
585
  /** True when the conversation is an assist / AI bot chat. */
405
586
  declare function axmIsAssistBotConversation(conversation: AXConversation): boolean;
587
+ /** Inbox (`/chat/`) must not list entity-record mini chats. */
588
+ declare function axmExcludeEntityChatConversations(conversations: AXConversation[]): AXConversation[];
589
+ /** Wraps a sidebar tab so entity-scoped chats stay off the main chat list. */
590
+ declare function axmInboxConversationTab(tab: AXConversationTab): AXConversationTab;
406
591
  /** Sidebar tab for AI assist conversations (`type: 'bot'` or assist metadata). */
407
592
  declare const AXM_CONVERSATION_TAB_BOT: AXConversationTab;
408
593
 
@@ -449,6 +634,119 @@ interface AXMAssistConversationSnapshotLite {
449
634
  modelId?: string | null;
450
635
  }
451
636
 
637
+ /** Row shown in Conversation “Chat with AI” pickers (catalog assist). */
638
+ interface AXMChatAiTargetRow {
639
+ id: string;
640
+ name: string;
641
+ title: AXPMultiLanguageString | string;
642
+ description?: AXPMultiLanguageString | string;
643
+ professionImageUrl?: string;
644
+ }
645
+ /** Synthetic bot participant id for assist chats. */
646
+ declare function axmChatAiPeerParticipantId(catalogId: string): string;
647
+ /** Conversation metadata for starting an AI chat from a picker row. */
648
+ declare function axmBuildAiChatConversationMetadata(row: AXMChatAiTargetRow, assistSnapshot?: AXMAssistConversationSnapshotLite): Record<string, unknown>;
649
+ /** Loads assist rows for Conversation AI chat pickers. */
650
+ declare function axmLoadChatAiTargets(entityRegistry: AXPEntityDefinitionRegistryService): Promise<AXMChatAiTargetRow[]>;
651
+ /** Resolves ML or plain string for search/display. */
652
+ declare function axmResolveChatAiTargetText(resolveMl: (value: AXPMultiLanguageString) => string | undefined, value: AXPMultiLanguageString | string | undefined): string;
653
+ declare function axmChatAiTargetDisplayName(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string;
654
+ declare function axmChatAiTargetDisplayDescription(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string | undefined;
655
+ declare function axmChatAiTargetAvatarUrl(row: AXMChatAiTargetRow): string | null;
656
+ /** Fallback i18n key for rows with no catalog description. */
657
+ declare function axmChatAiTargetShortcutDescriptionKey(): string;
658
+ /** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */
659
+ declare function axmFilterChatAiTargets(resolveMl: (value: AXPMultiLanguageString) => string | undefined, rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[];
660
+
661
+ type AXMChatEmptyAssistCreatedHandler = (conversationId: string) => void | Promise<void>;
662
+ type AXMChatEmptyAssistContinue = 'none' | 'send' | 'attach';
663
+ interface AXMChatEmptyAssistSessionBind {
664
+ selectedAssistId?: string;
665
+ rows?: readonly AXMChatAiTargetRow[];
666
+ entityId?: string;
667
+ entityType?: string;
668
+ launchContext?: AXMContextualAssistContext;
669
+ }
670
+ /**
671
+ * Shared new-chat assist selection for the empty-state welcome UI and the real
672
+ * {@link AXConversationComposerComponent}. Creates the assist room on first send/attach
673
+ * so the library composer can upload files.
674
+ */
675
+ declare class AXMChatEmptyAssistSessionService {
676
+ private readonly injector;
677
+ private readonly conversationService;
678
+ private readonly composerService;
679
+ private readonly entityChatService;
680
+ private readonly pageContextChips;
681
+ private readonly translationService;
682
+ private readonly toastService;
683
+ private get conversationApi();
684
+ private get assistCatalog();
685
+ readonly rows: _angular_core.WritableSignal<AXMChatAiTargetRow[]>;
686
+ readonly selectedAssistId: _angular_core.WritableSignal<string | undefined>;
687
+ readonly entityId: _angular_core.WritableSignal<string | undefined>;
688
+ readonly entityType: _angular_core.WritableSignal<string | undefined>;
689
+ readonly launchContext: _angular_core.WritableSignal<AXMContextualAssistContext | undefined>;
690
+ readonly assistPickerOpen: _angular_core.WritableSignal<boolean>;
691
+ private ensurePromise;
692
+ bind(input: AXMChatEmptyAssistSessionBind): void;
693
+ setSelectedAssistId(assistId: string | undefined): void;
694
+ openAssistPicker(): void;
695
+ closeAssistPicker(): void;
696
+ /**
697
+ * Creates the assist room only when the empty-state lookalike composer actually sends,
698
+ * then uploads any local files and delivers the first message.
699
+ */
700
+ sendWelcome(text: string, files: File[], onCreated?: AXMChatEmptyAssistCreatedHandler): Promise<string | null>;
701
+ /**
702
+ * Creates and selects an assist conversation when the composer has no active room,
703
+ * restoring any in-progress draft so send/attach can continue on the real composer.
704
+ */
705
+ ensureConversationPreservingDraft(onCreated?: AXMChatEmptyAssistCreatedHandler, continueWith?: AXMChatEmptyAssistContinue): Promise<string | null>;
706
+ private ensureConversationPreservingDraftCore;
707
+ private sendWelcomeCore;
708
+ private waitUntilAttachmentsSettled;
709
+ private sendRestoredDraft;
710
+ private createConversation;
711
+ private createAssistConversation;
712
+ private resolveEntityChatRef;
713
+ private launchMetadata;
714
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatEmptyAssistSessionService, never>;
715
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatEmptyAssistSessionService>;
716
+ }
717
+
718
+ /**
719
+ * Compact assist list opened from the composer sparkles action on a new chat.
720
+ */
721
+ declare class AXMChatComposerAssistPickerComponent {
722
+ readonly session: AXMChatEmptyAssistSessionService;
723
+ private readonly translationService;
724
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any> | undefined>;
725
+ assistLabel(title: AXPMultiLanguageString | string | undefined, fallback: string): string;
726
+ select(assistId: string): void;
727
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatComposerAssistPickerComponent, never>;
728
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMChatComposerAssistPickerComponent, "axm-chat-composer-assist-picker", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
729
+ }
730
+
731
+ /**
732
+ * Creates the assist conversation before the library composer sends or attaches files.
733
+ * {@link AXConversationComposerComponent} no-ops both paths when no room is selected.
734
+ */
735
+ declare class AXMChatComposerEnsureAssistConversationDirective {
736
+ private readonly hostRef;
737
+ private readonly conversationService;
738
+ private readonly composerService;
739
+ private readonly session;
740
+ private readonly destroyRef;
741
+ readonly conversationCreated: _angular_core.InputSignal<((conversationId: string) => void | Promise<void> | undefined) | undefined>;
742
+ constructor();
743
+ private onCaptureClick;
744
+ private onCaptureKeydown;
745
+ private shouldEnsureConversation;
746
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatComposerEnsureAssistConversationDirective, never>;
747
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXMChatComposerEnsureAssistConversationDirective, "ax-conversation-composer[axmEnsureAssistConversation]", never, { "conversationCreated": { "alias": "axmAssistConversationCreated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
748
+ }
749
+
452
750
  /**
453
751
  * Assist suggestion chips (starter prompts and engine {@code followUp} segments).
454
752
  * Each item runs its platform command via {@link AXPCommandService}.
@@ -457,24 +755,31 @@ declare class AXMAssistSuggestionChipsComponent {
457
755
  readonly items: _angular_core.InputSignal<AXPAiChatFollowUpItemLite[]>;
458
756
  /** Tighter chip layout for mini-chat and other narrow panels. */
459
757
  readonly compact: _angular_core.InputSignal<boolean>;
460
- /** When true, sends starter prompts via the local {@link AXConversationService} instead of routing to chat. */
758
+ /**
759
+ * When true, sends starter-prompt chips via the local {@link AXConversationService}
760
+ * instead of routing to the chat app. Follow-up chips also send in-place when this
761
+ * service already has an active conversation (header mini-chat overlay).
762
+ */
461
763
  readonly sendInPlace: _angular_core.InputSignal<boolean>;
462
764
  /** Disables all chips (e.g. parent composer is loading or sending). */
463
765
  readonly disabled: _angular_core.InputSignal<boolean>;
464
766
  /** Emits when an in-place send creates a new conversation (mini chat empty state). */
465
767
  readonly conversationCreated: _angular_core.OutputEmitterRef<string>;
466
768
  protected readonly normalizedItems: _angular_core.Signal<AXPAiChatFollowUpItemLite[]>;
769
+ protected readonly chipIcons: _angular_core.Signal<string[]>;
467
770
  private readonly busy;
468
771
  protected readonly isInteractionBlocked: _angular_core.Signal<boolean>;
469
772
  private readonly commandService;
470
773
  private readonly conversationService;
471
774
  private readonly conversationApi;
472
775
  private readonly entityChatService;
776
+ private readonly pageContextChips;
473
777
  private readonly assistCatalog;
474
778
  private readonly translationService;
475
779
  private readonly layoutTheme;
476
780
  protected onChipClick(item: AXPAiChatFollowUpItemLite): Promise<void>;
477
781
  protected resolveChipLabel(item: AXPAiChatFollowUpItemLite): string;
782
+ private shouldSendAssistMessageInPlace;
478
783
  private isSendAssistChatMessageCommand;
479
784
  private resolveItemText;
480
785
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMAssistSuggestionChipsComponent, never>;
@@ -494,7 +799,11 @@ interface AXMAssistStarterPromptChipOptions {
494
799
  /** Entity reference so a chip-created conversation stays bound to its entity (mini chat). */
495
800
  entityId?: string;
496
801
  entityType?: string;
802
+ /** Merged into room metadata when a chip creates a new conversation. */
803
+ launchContext?: AXMContextualAssistContext;
497
804
  }
805
+ /** Picks a chip icon from the prompt text; skips icons already used in the same list. */
806
+ declare function axmAssistSuggestionIconForLabel(label: string, index?: number, taken?: ReadonlySet<string>): string;
498
807
  /**
499
808
  * Resolves a follow-up chip command for Conversation assist.
500
809
  * AI follow-up output may use invalid `Registry:*` placeholders; those map to
@@ -525,6 +834,8 @@ interface AXMSendAssistChatMessageOptions {
525
834
  navigate?: boolean;
526
835
  entityId?: string;
527
836
  entityType?: string;
837
+ /** Merged into room metadata only when this send creates a new conversation. */
838
+ launchContext?: AXMContextualAssistContext;
528
839
  }
529
840
 
530
841
  /**
@@ -536,6 +847,8 @@ declare function axmReadAssistAiTranscript(metadata: unknown): AXPAiChatMessage[
536
847
  /** Raw engine transcript (chronological), without debug UI reordering. */
537
848
  declare function axmReadAssistAiTranscriptRaw(metadata: unknown): AXPAiChatMessage[];
538
849
  declare function axmAssistWidgetNodeFromUnknown(content: unknown, depth?: number): AXPWidgetNode | null;
850
+ /** Widget trees the chat layout renderer can host (not Form Template designer shells). */
851
+ declare function axmChatRenderableAssistWidgetNode(content: unknown): AXPWidgetNode | null;
539
852
  /** Stable identity for widget nodes so embedded JSON vs structured `node` segments dedupe despite key order. */
540
853
  declare function axmAssistWidgetNodeDedupeKey(content: unknown): string;
541
854
  declare function axmSyntheticEmbedMessage(parent: AXConversationMessage, suffix: string, partial: Pick<AXConversationMessage, 'type' | 'payload'>): AXConversationMessage;
@@ -591,7 +904,9 @@ type AxmAssistUserVisibleItem = {
591
904
  kind: 'followUp';
592
905
  items: AXPAiChatFollowUpItem[];
593
906
  };
594
- declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage): AxmAssistUserVisibleItem[];
907
+ declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage, options?: {
908
+ hideWidgetNodes?: boolean;
909
+ }): AxmAssistUserVisibleItem[];
595
910
  /** Parses a raw {@code followUp} segment for UI (normalizes chip commands). */
596
911
  declare function axmAssistFollowUpItemsFromUnknown(raw: unknown): AXPAiChatFollowUpItem[];
597
912
 
@@ -641,6 +956,8 @@ declare function axmReadReplyToUserMessageId(metadata: unknown): string | undefi
641
956
  declare function axmReadAssistResponseError(metadata: unknown): string | undefined;
642
957
  declare function axmIsAssistRetryableStatus(status: AxmAssistResponseStatus): boolean;
643
958
  declare function axmIsAssistStreamingStatus(status: AxmAssistResponseStatus): boolean;
959
+ type AxmAssistFollowUpStatus = 'preparing' | 'ready' | 'skipped';
960
+ declare function axmReadAssistFollowUpStatus(metadata: unknown): AxmAssistFollowUpStatus | undefined;
644
961
  declare function axmIsAssistTerminalStatus(status: AxmAssistResponseStatus): boolean;
645
962
  /** Finalize metadata persisted when a run completes (even if status lags). */
646
963
  declare function axmAssistHasFinalizeMetadata(metadata: unknown): boolean;
@@ -685,30 +1002,6 @@ declare function axmCoerceTimestampMs(value: unknown): number;
685
1002
  declare function axmCoerceDate(value: unknown): Date;
686
1003
  declare function axmSortMessagesNewestFirst(messages: AXConversationMessage[]): AXConversationMessage[];
687
1004
 
688
- /** Row shown in Conversation “Chat with AI” pickers (catalog assist). */
689
- interface AXMChatAiTargetRow {
690
- id: string;
691
- name: string;
692
- title: AXPMultiLanguageString | string;
693
- description?: AXPMultiLanguageString | string;
694
- professionImageUrl?: string;
695
- }
696
- /** Synthetic bot participant id for assist chats. */
697
- declare function axmChatAiPeerParticipantId(catalogId: string): string;
698
- /** Conversation metadata for starting an AI chat from a picker row. */
699
- declare function axmBuildAiChatConversationMetadata(row: AXMChatAiTargetRow, assistSnapshot?: AXMAssistConversationSnapshotLite): Record<string, unknown>;
700
- /** Loads assist rows for Conversation AI chat pickers. */
701
- declare function axmLoadChatAiTargets(entityRegistry: AXPEntityDefinitionRegistryService): Promise<AXMChatAiTargetRow[]>;
702
- /** Resolves ML or plain string for search/display. */
703
- declare function axmResolveChatAiTargetText(resolveMl: (value: AXPMultiLanguageString) => string | undefined, value: AXPMultiLanguageString | string | undefined): string;
704
- declare function axmChatAiTargetDisplayName(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string;
705
- declare function axmChatAiTargetDisplayDescription(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string | undefined;
706
- declare function axmChatAiTargetAvatarUrl(row: AXMChatAiTargetRow): string | null;
707
- /** Fallback i18n key for rows with no catalog description. */
708
- declare function axmChatAiTargetShortcutDescriptionKey(): string;
709
- /** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */
710
- declare function axmFilterChatAiTargets(resolveMl: (value: AXPMultiLanguageString) => string | undefined, rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[];
711
-
712
1005
  /** Builds a sidebar/header title from the first user message (heuristic fallback). */
713
1006
  declare function axmBuildAutoTitleFromUserText(raw: string): string | null;
714
1007
  /** Bot/assist list rows often show the assist peer `name` — keep it in sync with room title. */
@@ -716,7 +1009,9 @@ declare function axmSyncAssistPeerDisplayName<T extends Pick<AXConversation, 'ti
716
1009
  declare function axmRoomWithAssistPeerDisplayName(room: AXMConversationRoom): AXMConversationRoom;
717
1010
 
718
1011
  interface AXMConversationAssistResponsePort {
719
- handleAfterUserMessage(conversationId: string, userMessageId: string, command: AXConversationSendMessageCommand, currentUserId: string): Promise<void>;
1012
+ handleAfterUserMessage(conversationId: string, userMessageId: string, command: AXConversationSendMessageCommand, currentUserId: string, options?: {
1013
+ skipAssistSync?: boolean;
1014
+ }): Promise<void>;
720
1015
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
721
1016
  reconcileStaleAssistPlaceholders(conversationId?: string): Promise<void>;
722
1017
  /** True when the conversation has assist rows still marked streaming (cache or entity). */
@@ -725,6 +1020,8 @@ interface AXMConversationAssistResponsePort {
725
1020
  getLiveMessage(messageId: string): AXConversationMessage | null;
726
1021
  /** Merges assist in-memory cache over persisted messages (mock `conversationSharedStorage.messages` parity). */
727
1022
  mergeLiveConversationMessages(conversationId: string, persisted: AXConversationMessage[]): AXConversationMessage[];
1023
+ /** Drops in-memory assist rows (e.g. after the user edited an earlier turn). */
1024
+ forgetLiveMessages(messageIds: string[]): void;
728
1025
  /** Aligns composer Stop / spinner with assist streaming for the focused conversation. */
729
1026
  syncComposerGenerationForFocus(conversationId: string | null): Promise<void>;
730
1027
  /** Cancels in-flight assist generation (composer Stop). Aborts server AI + SSE stream updates. */
@@ -993,6 +1290,7 @@ declare class AXMCommentManagementService {
993
1290
  private formatThread;
994
1291
  createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread>;
995
1292
  getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null>;
1293
+ countCommentsForEntity(entityRef: AXMCommentEntityData): Promise<number>;
996
1294
  listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]>;
997
1295
  updateThread(entityRef: AXMCommentEntityData, topic: string, data: Partial<{
998
1296
  title: string;
@@ -1147,6 +1445,7 @@ declare class AXMCommentServiceImpl {
1147
1445
  private readonly translationService;
1148
1446
  createThread(creatorUser: AXPUserReference, entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMConversationRoom>;
1149
1447
  getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom | null>;
1448
+ listRoomsForEntity(entityRef: AXMCommentEntityData): Promise<AXMConversationRoom[]>;
1150
1449
  listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom[]>;
1151
1450
  updateThread(threadId: string, data: Partial<{
1152
1451
  title: string;
@@ -1267,6 +1566,19 @@ interface AXMEntityChatRef {
1267
1566
  entityId: string;
1268
1567
  entityType: string;
1269
1568
  }
1569
+ /** Room fields used to decide whether a chat belongs on the main inbox. */
1570
+ interface AXMEntityChatRoomRef {
1571
+ metadata?: Record<string, unknown>;
1572
+ entityRef?: Pick<AXMCommentEntityData$1, 'entityId' | 'entityTypeId'> | null;
1573
+ }
1574
+ /** Room metadata flag: entity mini-chats stay off `/chat/`; header inbox chats omit this. */
1575
+ declare const AXM_MINI_CHAT_SCOPE_METADATA_KEY = "miniChatScope";
1576
+ declare const AXM_MINI_CHAT_SCOPE_ENTITY = "entity";
1577
+ /**
1578
+ * Synthetic record id for Ask AI on an entity **list** (no row id).
1579
+ * Keeps list history on that page and out of the main chat sidebar.
1580
+ */
1581
+ declare const AXM_ENTITY_LIST_CHAT_ID = "__entity-list__";
1270
1582
  /**
1271
1583
  * Conversation metadata for an entity-scoped assist chat.
1272
1584
  * Keeps `assistId` so the existing assist reply pipeline still answers in entity chats.
@@ -1276,16 +1588,36 @@ declare function axmBuildEntityChatConversationMetadata(args: {
1276
1588
  entityType: string;
1277
1589
  assistId: string;
1278
1590
  }): Record<string, unknown>;
1591
+ /**
1592
+ * `AXConversationService.createConversation` stores the whole UI options object as
1593
+ * `room.metadata`, nesting real keys under `metadata.metadata`. Flatten so entity
1594
+ * flags sit at the top level for inbox filters and `entityRef`.
1595
+ */
1596
+ declare function axmFlattenConversationCreateMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
1279
1597
  /**
1280
1598
  * Resolves the entity reference from conversation metadata.
1281
1599
  * `AXConversationService.createConversation` may nest the UI object, so values
1282
1600
  * are also probed at `metadata.metadata.*`.
1283
1601
  */
1284
1602
  declare function axmExtractEntityRefFromMetadata(metadata: Record<string, unknown> | undefined): AXMEntityChatRef | undefined;
1285
- /** True when the conversation is bound to an entity (has both entity id and type). */
1603
+ /** Entity id/type from a contextual-assist launch payload (entity row / details). */
1604
+ declare function axmEntityRefFromLaunchContext(launch: AXMContextualAssistContext | undefined): AXMEntityChatRef | undefined;
1605
+ /** True when the conversation is bound to an entity page (not the site-header inbox). */
1286
1606
  declare function axmConversationIsEntityChat(metadata: Record<string, unknown> | undefined): boolean;
1287
1607
  /** True when conversation metadata targets the given entity reference. */
1288
1608
  declare function axmConversationMatchesEntity(metadata: Record<string, unknown> | undefined, ref: AXMEntityChatRef): boolean;
1609
+ /**
1610
+ * True when a persisted room is an entity-scoped chat (metadata and/or `entityRef`).
1611
+ * Header / inbox AI chats have neither; they belong on `/chat/`.
1612
+ */
1613
+ declare function axmRoomIsEntityChat(room: AXMEntityChatRoomRef | null | undefined): boolean;
1614
+ /** True when a room is bound to the given entity via metadata or `entityRef`. */
1615
+ declare function axmRoomMatchesEntity(room: AXMEntityChatRoomRef | null | undefined, ref: AXMEntityChatRef): boolean;
1616
+ /**
1617
+ * Persisted `entityRef` for an entity-scoped chat room so history can query by record
1618
+ * and the main inbox can exclude the room (comment threads use `kind: 'comment'`).
1619
+ */
1620
+ declare function axmBuildEntityChatRoomEntityRef(metadata: Record<string, unknown> | undefined): AXMCommentEntityData$1 | undefined;
1289
1621
 
1290
1622
  /** Arguments accepted by `AXConversationService.createConversation`, prebuilt for an entity chat. */
1291
1623
  interface AXMEntityChatCreateData {
@@ -1319,13 +1651,17 @@ declare class AXMEntityChatService {
1319
1651
  private get conversationApi();
1320
1652
  /** Returns every conversation bound to the given entity reference. */
1321
1653
  findEntityConversations(ref: AXMEntityChatRef): Promise<AXConversation[]>;
1322
- /** Creates a new entity-scoped assist conversation and selects it as the active conversation. */
1323
- createEntityChat(ref: AXMEntityChatRef, assistId?: string): Promise<AXConversation>;
1654
+ /**
1655
+ * Creates a new entity-scoped assist conversation and selects it.
1656
+ * Must go through {@link AXConversationService.createConversation} so the open mini-chat
1657
+ * instance owns the thread; the inbox tab filter hides entity rooms from `/chat/`.
1658
+ */
1659
+ createEntityChat(ref: AXMEntityChatRef, assistId?: string, extraMetadata?: Record<string, unknown>): Promise<AXConversation>;
1324
1660
  /**
1325
1661
  * Builds the `createConversation` payload for a new entity assist chat.
1326
1662
  * Uses `assistId` when provided, otherwise the tenant default assist.
1327
1663
  */
1328
- buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string): Promise<AXMEntityChatCreateData>;
1664
+ buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string, extraMetadata?: Record<string, unknown>): Promise<AXMEntityChatCreateData>;
1329
1665
  /** Resolves the assist catalog row to chat with (explicit id → tenant default → first row). */
1330
1666
  private resolveAssistRow;
1331
1667
  private resolveDefaultAssistId;
@@ -1340,10 +1676,10 @@ declare class AXMEntityChatService {
1340
1676
  declare class AXMMiniChatInboxHistoryComponent implements OnInit {
1341
1677
  private readonly conversationApi;
1342
1678
  private readonly conversationFilter;
1679
+ private readonly realtimeBus;
1680
+ private readonly destroyRef;
1343
1681
  /** Emits when the user picks a conversation from the list. */
1344
1682
  readonly conversationSelected: _angular_core.OutputEmitterRef<string>;
1345
- /** Emits when the user starts a new chat from the empty state. */
1346
- readonly newChatRequested: _angular_core.OutputEmitterRef<void>;
1347
1683
  /** Emits whether the loaded history contains at least one conversation. */
1348
1684
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1349
1685
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
@@ -1351,84 +1687,23 @@ declare class AXMMiniChatInboxHistoryComponent implements OnInit {
1351
1687
  ngOnInit(): void;
1352
1688
  /** Reloads AI-assist inbox conversations. */
1353
1689
  refresh(): Promise<void>;
1690
+ private bindRealtimeHistory;
1691
+ private matchesInbox;
1354
1692
  protected resolveListAvatar(conversation: AXConversation): {
1355
1693
  title: string;
1356
1694
  avatar?: string;
1357
1695
  icon?: string;
1358
1696
  };
1359
1697
  protected onSelect(conversationId: string): void;
1360
- protected onNewChat(): void;
1361
1698
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatInboxHistoryComponent, never>;
1362
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatInboxHistoryComponent, "axm-mini-chat-inbox-history", never, {}, { "conversationSelected": "conversationSelected"; "newChatRequested": "newChatRequested"; "hasConversationsChange": "hasConversationsChange"; }, never, never, true, never>;
1699
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatInboxHistoryComponent, "axm-mini-chat-inbox-history", never, {}, { "conversationSelected": "conversationSelected"; "hasConversationsChange": "hasConversationsChange"; }, never, never, true, never>;
1363
1700
  }
1364
1701
 
1365
1702
  type AXMMiniChatInboxConversationFilter = (conversation: AXConversation) => boolean;
1366
1703
  declare const AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER: InjectionToken<AXMMiniChatInboxConversationFilter>;
1367
1704
 
1368
- /** Anchor element for overlay positioning. */
1369
- type AXMMiniChatPanelAnchor = Element | ElementRef<HTMLElement>;
1370
1705
  /**
1371
- * Common placement aliases mapped to {@link AXPlacement}.
1372
- * Examples: `top-right` → `top-end`, `bottom-left` → `bottom-start`.
1373
- */
1374
- type AXMMiniChatPanelSide = AXPlacement | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right';
1375
- /** Fixed viewport coordinates (px). Ignored when `anchor` is set. */
1376
- interface AXMMiniChatPanelPosition {
1377
- x: number;
1378
- y: number;
1379
- }
1380
- /** Mini chat panel scope: entity-bound threads or main inbox (non-entity chats). */
1381
- type AXMMiniChatPanelScope = 'entity' | 'inbox';
1382
- /** Session key used for the global inbox mini chat (non-entity conversations). */
1383
- declare const AXM_MINI_CHAT_INBOX_SESSION_KEY = "__inbox__";
1384
- /** Persisted panel state for a mini chat session. */
1385
- interface AXMMiniChatPanelSessionState {
1386
- view: 'thread' | 'history';
1387
- selectedChatId?: string;
1388
- hasOpened: boolean;
1389
- }
1390
- /** Options passed to {@link AXMMiniChatPanelService.open}. */
1391
- interface AXMMiniChatPanelOpenOptions {
1392
- /** Default: `entity`. Use `inbox` for regular (non-entity) chats shown in the main chat sidebar. */
1393
- scope?: AXMMiniChatPanelScope;
1394
- entityId?: string;
1395
- entityType?: string;
1396
- assistId?: string;
1397
- title?: string;
1398
- showInfoBar?: boolean;
1399
- showComposer?: boolean;
1400
- /** Fixed viewport position (px). Ignored when `anchor` is set. */
1401
- position?: AXMMiniChatPanelPosition;
1402
- /** Anchor element for popover placement. */
1403
- anchor?: AXMMiniChatPanelAnchor;
1404
- /** Placement relative to anchor. Default: `top-end` when anchored. */
1405
- placement?: AXMMiniChatPanelSide;
1406
- offsetX?: number;
1407
- offsetY?: number;
1408
- autoFlip?: boolean;
1409
- /** When true, always opens a fresh conversation thread. */
1410
- forceNewChat?: boolean;
1411
- }
1412
-
1413
- /**
1414
- * Host for inbox mini chat with an isolated {@link AXConversationService} so the header
1415
- * slot does not change the main chat page selection while the user is on the chat route.
1416
- */
1417
- declare class AXMMiniChatInboxPanelHostComponent {
1418
- readonly title: _angular_core.InputSignal<string>;
1419
- readonly showInfoBar: _angular_core.InputSignal<boolean>;
1420
- readonly showComposer: _angular_core.InputSignal<boolean>;
1421
- readonly requestClose: _angular_core.InputSignal<() => void>;
1422
- readonly initialView: _angular_core.InputSignal<"thread" | "history">;
1423
- readonly initialConversationId: _angular_core.InputSignal<string | undefined>;
1424
- readonly startWithNewChat: _angular_core.InputSignal<boolean>;
1425
- readonly onSessionChange: _angular_core.InputSignal<((state: Pick<AXMMiniChatPanelSessionState, "view" | "selectedChatId">) => void) | undefined>;
1426
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatInboxPanelHostComponent, never>;
1427
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatInboxPanelHostComponent, "axm-mini-chat-inbox-panel-host", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "showInfoBar": { "alias": "showInfoBar"; "required": false; "isSignal": true; }; "showComposer": { "alias": "showComposer"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": true; "isSignal": true; }; "initialView": { "alias": "initialView"; "required": false; "isSignal": true; }; "initialConversationId": { "alias": "initialConversationId"; "required": false; "isSignal": true; }; "startWithNewChat": { "alias": "startWithNewChat"; "required": false; "isSignal": true; }; "onSessionChange": { "alias": "onSessionChange"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1428
- }
1429
-
1430
- /**
1431
- * Root header slot that toggles the inbox mini chat overlay (AI-assist conversations only).
1706
+ * Root header slot that toggles the shared inbox mini chat overlay (AI-assist conversations).
1432
1707
  */
1433
1708
  declare class AXMMiniChatHeaderSlotComponent {
1434
1709
  private readonly panelService;
@@ -1449,6 +1724,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1449
1724
  sideMenuWidth: _angular_core.Signal<number>;
1450
1725
  sideMenuCompactWidth: _angular_core.Signal<number>;
1451
1726
  menuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1727
+ menuToggleCyclesStyle: _angular_core.Signal<boolean>;
1452
1728
  menuOrientation: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuOrientation>;
1453
1729
  menuAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuAppearance>;
1454
1730
  headerAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPHeaderAppearance>;
@@ -1462,6 +1738,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1462
1738
  overlayTaskCount: _angular_core.Signal<number>;
1463
1739
  isNavigationLoading: _angular_core.Signal<boolean>;
1464
1740
  isMenuHorizontal: _angular_core.Signal<boolean>;
1741
+ menuToggleCyclesStyleEnabled: _angular_core.Signal<boolean>;
1465
1742
  effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1466
1743
  sideMenuDrawerWidth: _angular_core.Signal<number>;
1467
1744
  menuDarkEnabled: _angular_core.Signal<boolean>;
@@ -1476,6 +1753,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1476
1753
  setSideMenuWidth: (width: number) => void;
1477
1754
  setSideMenuCompactWidth: (width: number) => void;
1478
1755
  setSideMenuDrawerWidth: (width: number) => void;
1756
+ setMenuVerticalMode: (mode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode) => void;
1479
1757
  toggleSideMenu: () => void;
1480
1758
  setNavigationLoading: (value: boolean, delay?: number) => void;
1481
1759
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -1498,6 +1776,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1498
1776
  sideMenuWidth: number;
1499
1777
  sideMenuCompactWidth: number;
1500
1778
  menuVerticalMode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode;
1779
+ menuToggleCyclesStyle: boolean;
1501
1780
  menuOrientation: _acorex_platform_framework_client_themes_shared.AXPMenuOrientation;
1502
1781
  menuAppearance: _acorex_platform_framework_client_themes_shared.AXPMenuAppearance;
1503
1782
  headerAppearance: _acorex_platform_framework_client_themes_shared.AXPHeaderAppearance;
@@ -1510,18 +1789,39 @@ declare class AXMMiniChatHeaderSlotComponent {
1510
1789
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatHeaderSlotComponent, "axm-mini-chat-header-slot", never, {}, {}, never, never, true, never>;
1511
1790
  }
1512
1791
 
1792
+ /**
1793
+ * Page-header Ask AI control for entity list/detail pages.
1794
+ * Opens the same {@link AXMMiniChatPanelService} overlay as the root header slot.
1795
+ */
1796
+ declare class AXMMiniChatPageActionComponent {
1797
+ private readonly panelService;
1798
+ private readonly pageContext;
1799
+ private readonly route;
1800
+ private readonly router;
1801
+ protected readonly device: AXPDeviceService;
1802
+ private readonly url;
1803
+ private readonly buttonRef;
1804
+ protected readonly visible: _angular_core.Signal<boolean>;
1805
+ protected onToggleClick(): void;
1806
+ private resolveEntityChatRef;
1807
+ private readEntityRoute;
1808
+ private collectRouteParams;
1809
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPageActionComponent, never>;
1810
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPageActionComponent, "axm-mini-chat-page-action", never, {}, {}, never, never, true, never>;
1811
+ }
1812
+
1513
1813
  /**
1514
1814
  * Scrollable list of entity-scoped conversations for the mini chat panel.
1515
1815
  * Loads chats via {@link AXMEntityChatService.findEntityConversations}.
1516
1816
  */
1517
1817
  declare class AXMMiniChatHistoryComponent implements OnInit {
1518
1818
  private readonly entityChatService;
1819
+ private readonly realtimeBus;
1820
+ private readonly destroyRef;
1519
1821
  readonly entityId: _angular_core.InputSignal<string>;
1520
1822
  readonly entityType: _angular_core.InputSignal<string>;
1521
1823
  /** Emits when the user picks a conversation from the list. */
1522
1824
  readonly conversationSelected: _angular_core.OutputEmitterRef<string>;
1523
- /** Emits when the user starts a new chat from the empty state. */
1524
- readonly newChatRequested: _angular_core.OutputEmitterRef<void>;
1525
1825
  /** Emits whether the loaded history contains at least one conversation. */
1526
1826
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1527
1827
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
@@ -1529,64 +1829,154 @@ declare class AXMMiniChatHistoryComponent implements OnInit {
1529
1829
  ngOnInit(): void;
1530
1830
  /** Reloads the entity conversation list (call when the history panel becomes visible). */
1531
1831
  refresh(): Promise<void>;
1832
+ private bindRealtimeHistory;
1532
1833
  protected resolveListAvatar(conversation: AXConversation): {
1533
1834
  title: string;
1534
1835
  avatar?: string;
1535
1836
  icon?: string;
1536
1837
  };
1537
1838
  protected onSelect(conversationId: string): void;
1538
- protected onNewChat(): void;
1539
1839
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatHistoryComponent, never>;
1540
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatHistoryComponent, "axm-mini-chat-history", never, { "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": true; "isSignal": true; }; }, { "conversationSelected": "conversationSelected"; "newChatRequested": "newChatRequested"; "hasConversationsChange": "hasConversationsChange"; }, never, never, true, never>;
1840
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatHistoryComponent, "axm-mini-chat-history", never, { "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": true; "isSignal": true; }; }, { "conversationSelected": "conversationSelected"; "hasConversationsChange": "hasConversationsChange"; }, never, never, true, never>;
1841
+ }
1842
+
1843
+ /** Inserts or replaces a conversation in a mini-chat history list, then re-sorts. */
1844
+ declare function axmUpsertMiniChatHistoryItem(items: AXConversation[], next: AXConversation, matches: (conversation: AXConversation) => boolean): AXConversation[];
1845
+ /** Removes a conversation from a mini-chat history list. */
1846
+ declare function axmRemoveMiniChatHistoryItem(items: AXConversation[], conversationId: string): AXConversation[];
1847
+
1848
+ /** Anchor element for overlay positioning. */
1849
+ type AXMMiniChatPanelAnchor = Element | ElementRef<HTMLElement>;
1850
+ /**
1851
+ * Common placement aliases mapped to {@link AXPlacement}.
1852
+ * Examples: `top-right` → `top-end`, `bottom-left` → `bottom-start`.
1853
+ */
1854
+ type AXMMiniChatPanelSide = AXPlacement | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right';
1855
+ /** Fixed viewport coordinates (px). Ignored when `anchor` is set. */
1856
+ interface AXMMiniChatPanelPosition {
1857
+ x: number;
1858
+ y: number;
1859
+ }
1860
+ /** Mini chat panel scope: entity-bound threads or main inbox (non-entity chats). */
1861
+ type AXMMiniChatPanelScope = 'entity' | 'inbox';
1862
+ /**
1863
+ * How the shared panel is hosted.
1864
+ * `overlay` is the floating window (header / entity pages).
1865
+ * `embedded` fills the host (entity record details, later).
1866
+ */
1867
+ type AXMMiniChatPanelPresentation = 'overlay' | 'embedded';
1868
+ /** Session key used for the global inbox mini chat (non-entity conversations). */
1869
+ declare const AXM_MINI_CHAT_INBOX_SESSION_KEY = "__inbox__";
1870
+ /** Popup dock name for minimized mini-chat tabs in the root footer. */
1871
+ declare const AXM_MINI_CHAT_POPUP_DOCK = "mini-chat";
1872
+ /** Persisted panel state for a mini chat session. */
1873
+ interface AXMMiniChatPanelSessionState {
1874
+ view: 'thread' | 'history';
1875
+ selectedChatId?: string;
1876
+ hasOpened: boolean;
1877
+ }
1878
+ /** Options passed to {@link AXMMiniChatPanelService.open}. */
1879
+ interface AXMMiniChatPanelOpenOptions {
1880
+ /** Default: `entity`. Use `inbox` for regular (non-entity) chats shown in the main chat sidebar. */
1881
+ scope?: AXMMiniChatPanelScope;
1882
+ entityId?: string;
1883
+ entityType?: string;
1884
+ assistId?: string;
1885
+ title?: string;
1886
+ showInfoBar?: boolean;
1887
+ showComposer?: boolean;
1888
+ /** Default: `overlay`. Use `embedded` when the panel is inlined in a page. */
1889
+ presentation?: AXMMiniChatPanelPresentation;
1890
+ /** Fixed viewport position (px). Ignored when `anchor` is set. */
1891
+ position?: AXMMiniChatPanelPosition;
1892
+ /** Anchor element for popover placement. */
1893
+ anchor?: AXMMiniChatPanelAnchor;
1894
+ /** Placement relative to anchor. Default: `top-end` when anchored. */
1895
+ placement?: AXMMiniChatPanelSide;
1896
+ offsetX?: number;
1897
+ offsetY?: number;
1898
+ autoFlip?: boolean;
1899
+ /** When true, always opens a fresh conversation thread. */
1900
+ forceNewChat?: boolean;
1901
+ /**
1902
+ * Record/surface context for a new assist thread (entity-row assist).
1903
+ * Stored on the room and used to generate contextual starter chips.
1904
+ */
1905
+ launchContext?: AXMContextualAssistContext;
1906
+ }
1907
+ /** Window controls exposed by the mini-chat popup host to {@link AXMMiniChatPanelService}. */
1908
+ interface AXMMiniChatPopupWindowApi {
1909
+ close(): void;
1910
+ restore(): void;
1911
+ minimize(): void;
1912
+ maximize(): void;
1913
+ isMinimized(): boolean;
1914
+ isMaximized(): boolean;
1915
+ }
1916
+ /** Assigned onto {@link AXMMiniChatPopupWindowComponent} via popup `data`. */
1917
+ interface AXMMiniChatPopupWindowData {
1918
+ scope: AXMMiniChatPanelScope;
1919
+ entityId?: string;
1920
+ entityType?: string;
1921
+ assistId?: string;
1922
+ panelTitle?: string;
1923
+ showInfoBar: boolean;
1924
+ showComposer: boolean;
1925
+ initialView: 'thread' | 'history';
1926
+ initialConversationId?: string;
1927
+ startWithNewChat: boolean;
1928
+ launchContext?: AXMContextualAssistContext;
1929
+ onSessionChange?: (state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void;
1930
+ registerWindow?: (api: AXMMiniChatPopupWindowApi | null) => void;
1541
1931
  }
1542
1932
 
1543
1933
  /**
1544
- * Opens the entity mini chat panel via {@link AXOverlayService}.
1545
- * Restores the last conversation per entity on reopen; use {@link forceNewChat} for an explicit new thread.
1934
+ * Opens the shared mini chat window via {@link AXPopupService} (header inbox, entity FAB, contextual assist).
1935
+ * Uses the module {@link AXConversationService} so assist SSE patches stream live.
1936
+ * Stays mounted across route changes; minimize hides the overlay and docks a tab in the footer.
1937
+ * Restores the last conversation per session on reopen; use {@link forceNewChat} for an explicit new thread.
1546
1938
  */
1547
1939
  declare class AXMMiniChatPanelService {
1548
- private readonly overlayService;
1940
+ private readonly popupService;
1941
+ private readonly translation;
1549
1942
  private readonly conversationService;
1550
1943
  private readonly conversationApi;
1551
- private readonly document;
1552
- private readonly router;
1553
- private overlayRef;
1554
- private anchorElement;
1555
- private keydownHandler;
1556
- private outsideClickHandler;
1557
- private routerSubscription;
1558
- /** Active conversation before the panel took over selection (restored on close). */
1944
+ private readonly focusService;
1945
+ private windowApi;
1946
+ private closePromise;
1947
+ private windowGeneration;
1948
+ /** Active conversation before the panel took over selection (entity scope; restored on close). */
1559
1949
  private savedActiveConversationId;
1950
+ /** Root focus id before the panel opened (restored so assist/realtime keep the right thread). */
1951
+ private savedFocusedConversationId;
1560
1952
  /** Per-entity session (view, selected conversation) restored when the panel reopens. */
1561
1953
  private readonly sessions;
1562
- /** Reactive open state for launcher UI (FAB icon). */
1954
+ /** Reactive open state for launcher UI (true while the window exists, including minimized). */
1563
1955
  readonly panelOpen: _angular_core.WritableSignal<boolean>;
1564
- /** True while the mini chat overlay is mounted. */
1956
+ /** True while the mini chat window is mounted (visible or minimized). */
1565
1957
  isOpen(): boolean;
1566
- /** Closes the overlay when it is open. */
1958
+ /** Closes the window when it is open. */
1567
1959
  close(): void;
1568
- /** Toggles the inbox mini chat overlay (regular non-entity conversations). */
1960
+ /** Toggles the inbox mini chat window (regular non-entity conversations). */
1569
1961
  toggleInbox(options?: Omit<AXMMiniChatPanelOpenOptions, 'scope' | 'entityId' | 'entityType'>): void;
1570
- /** Toggles the overlay, restoring the last session when reopening. */
1962
+ /**
1963
+ * Toggles the window: restores when minimized, closes when visible, opens when closed.
1964
+ */
1571
1965
  toggle(options: AXMMiniChatPanelOpenOptions): void;
1572
1966
  /**
1573
- * Opens the mini chat panel overlay (replaces any existing overlay).
1967
+ * Opens the mini chat window (replaces any existing window).
1574
1968
  * Restores the last session for the entity unless {@link AXMMiniChatPanelOpenOptions.forceNewChat} is set.
1575
1969
  */
1576
1970
  open(options: AXMMiniChatPanelOpenOptions): Promise<void>;
1971
+ private resolveWindowTitle;
1972
+ private buildSessionKey;
1577
1973
  private buildEntityKey;
1578
- private disposeOverlayOnly;
1579
- private handleOverlayDisposed;
1580
- private finishOverlayClose;
1581
- private bindDismissHandlers;
1582
- /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
1583
- private isInsideInteractiveSurface;
1584
- private removeDismissHandlers;
1974
+ private abandonOpenWindow;
1975
+ private finishWindowClose;
1585
1976
  private captureActiveConversation;
1977
+ private captureFocusedConversation;
1978
+ private restoreFocusedConversation;
1586
1979
  private restoreActiveConversation;
1587
- private resolveAnchorElement;
1588
- private normalizePlacement;
1589
- private applyFixedPosition;
1590
1980
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPanelService, never>;
1591
1981
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatPanelService>;
1592
1982
  }
@@ -1603,7 +1993,7 @@ declare class AXMMiniChatLauncherComponent {
1603
1993
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1604
1994
  readonly title: _angular_core.InputSignal<string | undefined>;
1605
1995
  /** Placement relative to the FAB when no custom {@link position} is set. Default: `top-end`. */
1606
- readonly placement: _angular_core.InputSignal<"bottom-start" | "bottom-end" | "top-start" | "top-end" | "top" | "bottom">;
1996
+ readonly placement: _angular_core.InputSignal<"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end">;
1607
1997
  readonly offsetX: _angular_core.InputSignal<number>;
1608
1998
  readonly offsetY: _angular_core.InputSignal<number>;
1609
1999
  private readonly fabRef;
@@ -1612,63 +2002,185 @@ declare class AXMMiniChatLauncherComponent {
1612
2002
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatLauncherComponent, "axm-mini-chat-launcher", never, { "entityId": { "alias": "entityId"; "required": true; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": true; "isSignal": true; }; "assistId": { "alias": "assistId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "offsetX": { "alias": "offsetX"; "required": false; "isSignal": true; }; "offsetY": { "alias": "offsetY"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1613
2003
  }
1614
2004
 
2005
+ type AXMMiniChatContextChipKind = 'entity' | 'view' | 'record';
2006
+ interface AXMMiniChatContextChip {
2007
+ id: string;
2008
+ kind: AXMMiniChatContextChipKind;
2009
+ label: string;
2010
+ }
2011
+
2012
+ /**
2013
+ * Live entity/view/record chips for the header mini chat.
2014
+ * Chips stay editable until the first message pins them on the conversation.
2015
+ */
2016
+ declare class AXMMiniChatPageContextChipsService {
2017
+ private readonly pageContext;
2018
+ private readonly router;
2019
+ private readonly entityRegistry;
2020
+ private readonly entityService;
2021
+ private readonly translation;
2022
+ readonly chips: _angular_core.WritableSignal<AXMMiniChatContextChip[]>;
2023
+ readonly locked: _angular_core.WritableSignal<boolean>;
2024
+ private capturing;
2025
+ private pinnedId;
2026
+ private readonly dismissed;
2027
+ private entityKey;
2028
+ private viewKey;
2029
+ private selectionKey;
2030
+ private draft;
2031
+ private detailSeq;
2032
+ private loadedDetailKey;
2033
+ private detailPending;
2034
+ private watchStop;
2035
+ /** Follows the current page until the panel is destroyed. */
2036
+ start(destroyRef: DestroyRef): void;
2037
+ stop(): void;
2038
+ /** Editable chips from the page the user is on now. */
2039
+ beginDraft(): void;
2040
+ /** Stops live updates while a saved conversation is opening. */
2041
+ pinPending(conversationId: string): void;
2042
+ /** Shows the chips stored on a conversation and keeps them readonly. */
2043
+ pin(conversationId: string, metadata: Record<string, unknown> | undefined): void;
2044
+ dismiss(chipId: string): void;
2045
+ /**
2046
+ * Context for the conversation created by the first mini-chat message.
2047
+ * Empty when the user removed every chip or the page is not an entity page.
2048
+ */
2049
+ resolveDraftLaunchContext(): Promise<AXMContextualAssistContext | undefined>;
2050
+ private refreshLive;
2051
+ private draftFromList;
2052
+ private ensureDetailDraft;
2053
+ private fetchDetail;
2054
+ private applyDraft;
2055
+ private readDetailRoute;
2056
+ private readRecordTitle;
2057
+ private resolveText;
2058
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPageContextChipsService, never>;
2059
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatPageContextChipsService>;
2060
+ }
2061
+
1615
2062
  /**
1616
- * Mini chat panel overlay: header, thread view, and history (entity list or main inbox sidebar).
2063
+ * Mini chat panel: branded window chrome, context strip, thread, and history.
2064
+ * Hosted as a popup window (header / entity pages) or embedded in a page.
1617
2065
  */
1618
2066
  declare class AXMMiniChatPanelComponent implements OnInit, OnDestroy {
1619
2067
  private readonly conversationService;
1620
2068
  private readonly conversationApi;
1621
- private readonly realtimeBus;
2069
+ private readonly pageContext;
2070
+ private readonly localeService;
2071
+ private readonly device;
1622
2072
  private readonly destroyRef;
2073
+ protected readonly pageContextChips: AXMMiniChatPageContextChipsService;
2074
+ private readonly localeProfile;
1623
2075
  readonly scope: _angular_core.InputSignal<AXMMiniChatPanelScope>;
2076
+ readonly presentation: _angular_core.InputSignal<AXMMiniChatPanelPresentation>;
1624
2077
  readonly entityId: _angular_core.InputSignal<string | undefined>;
1625
2078
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1626
2079
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1627
- readonly title: _angular_core.InputSignal<string>;
2080
+ readonly title: _angular_core.InputSignal<string | undefined>;
1628
2081
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1629
2082
  readonly showComposer: _angular_core.InputSignal<boolean>;
1630
2083
  readonly requestClose: _angular_core.InputSignal<() => void>;
2084
+ readonly requestMinimize: _angular_core.InputSignal<(() => void) | undefined>;
2085
+ readonly requestMaximize: _angular_core.InputSignal<(() => void) | undefined>;
2086
+ readonly requestRestore: _angular_core.InputSignal<(() => void) | undefined>;
2087
+ readonly isMaximized: _angular_core.InputSignal<boolean>;
1631
2088
  readonly initialView: _angular_core.InputSignal<"thread" | "history">;
1632
2089
  readonly initialConversationId: _angular_core.InputSignal<string | undefined>;
1633
2090
  readonly startWithNewChat: _angular_core.InputSignal<boolean>;
2091
+ readonly launchContext: _angular_core.InputSignal<AXMContextualAssistContext | undefined>;
1634
2092
  readonly onSessionChange: _angular_core.InputSignal<((state: Pick<AXMMiniChatPanelSessionState, "view" | "selectedChatId">) => void) | undefined>;
1635
2093
  protected readonly view: _angular_core.WritableSignal<"thread" | "history">;
1636
2094
  protected readonly selectedChatId: _angular_core.WritableSignal<string | undefined>;
1637
- protected readonly historyHasItems: _angular_core.WritableSignal<boolean>;
1638
2095
  protected readonly isInboxScope: _angular_core.Signal<boolean>;
1639
- /** Bumps when shared conversation storage changes so the header title stays in sync. */
1640
- private readonly storageRevision;
1641
- /** Active conversation title for the thread header; null when none is selected yet. */
1642
- protected readonly headerTitle: _angular_core.Signal<string | null>;
1643
- private readonly cachedHeaderTitle;
1644
- constructor();
2096
+ protected readonly isEmbedded: _angular_core.Signal<boolean>;
2097
+ protected readonly isRtl: _angular_core.Signal<boolean>;
2098
+ protected readonly canDragWindow: _angular_core.Signal<boolean>;
2099
+ protected readonly canMinimize: _angular_core.Signal<boolean>;
2100
+ protected readonly canMaximize: _angular_core.Signal<boolean>;
2101
+ protected readonly canClose: _angular_core.Signal<boolean>;
2102
+ protected readonly isRecordAssist: _angular_core.Signal<boolean>;
2103
+ protected readonly workingInEntityTitle: _angular_core.Signal<string | null>;
2104
+ protected readonly workingInViewTitle: _angular_core.Signal<string | null>;
2105
+ protected readonly recordTitleLabel: _angular_core.Signal<string | null>;
2106
+ protected readonly recordEntityTitle: _angular_core.Signal<string | null>;
2107
+ protected readonly showContextBar: _angular_core.Signal<boolean>;
2108
+ protected readonly contextBarIcon: _angular_core.Signal<"fa-building" | "fa-table-list">;
1645
2109
  ngOnInit(): void;
1646
2110
  ngOnDestroy(): void;
1647
2111
  protected closePanel(): void;
2112
+ protected minimizePanel(): void;
2113
+ protected toggleMaximizePanel(): void;
2114
+ protected backToThread(): void;
1648
2115
  protected openHistory(): void;
1649
- protected onHistoryHasConversationsChange(hasItems: boolean): void;
1650
2116
  protected selectChat(conversationId: string): void;
1651
2117
  protected onConversationOpened(conversationId: string): void;
1652
2118
  protected startNewChat(): Promise<void>;
2119
+ protected chipIcon(kind: AXMMiniChatContextChipKind): string;
2120
+ protected dismissPageContextChip(chipId: string, event: Event): void;
2121
+ private bindPageContextChips;
2122
+ private pinPageContextConversation;
2123
+ private readRecordTitle;
1653
2124
  private syncSession;
1654
2125
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPanelComponent, never>;
1655
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPanelComponent, "axm-mini-chat-panel", never, { "scope": { "alias": "scope"; "required": false; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": false; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "assistId": { "alias": "assistId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showInfoBar": { "alias": "showInfoBar"; "required": false; "isSignal": true; }; "showComposer": { "alias": "showComposer"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": true; "isSignal": true; }; "initialView": { "alias": "initialView"; "required": false; "isSignal": true; }; "initialConversationId": { "alias": "initialConversationId"; "required": false; "isSignal": true; }; "startWithNewChat": { "alias": "startWithNewChat"; "required": false; "isSignal": true; }; "onSessionChange": { "alias": "onSessionChange"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2126
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPanelComponent, "axm-mini-chat-panel", never, { "scope": { "alias": "scope"; "required": false; "isSignal": true; }; "presentation": { "alias": "presentation"; "required": false; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": false; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "assistId": { "alias": "assistId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showInfoBar": { "alias": "showInfoBar"; "required": false; "isSignal": true; }; "showComposer": { "alias": "showComposer"; "required": false; "isSignal": true; }; "requestClose": { "alias": "requestClose"; "required": true; "isSignal": true; }; "requestMinimize": { "alias": "requestMinimize"; "required": false; "isSignal": true; }; "requestMaximize": { "alias": "requestMaximize"; "required": false; "isSignal": true; }; "requestRestore": { "alias": "requestRestore"; "required": false; "isSignal": true; }; "isMaximized": { "alias": "isMaximized"; "required": false; "isSignal": true; }; "initialView": { "alias": "initialView"; "required": false; "isSignal": true; }; "initialConversationId": { "alias": "initialConversationId"; "required": false; "isSignal": true; }; "startWithNewChat": { "alias": "startWithNewChat"; "required": false; "isSignal": true; }; "launchContext": { "alias": "launchContext"; "required": false; "isSignal": true; }; "onSessionChange": { "alias": "onSessionChange"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2127
+ }
2128
+
2129
+ /**
2130
+ * Popup host for mini chat: custom chrome lives in {@link AXMMiniChatPanelComponent},
2131
+ * while this wrapper receives popup `data` and exposes minimize/maximize/close on the window.
2132
+ */
2133
+ declare class AXMMiniChatPopupWindowComponent extends AXPopupComponentBase {
2134
+ private readonly destroyRef;
2135
+ scope: AXMMiniChatPanelScope;
2136
+ entityId?: string;
2137
+ entityType?: string;
2138
+ assistId?: string;
2139
+ panelTitle?: string;
2140
+ showInfoBar: boolean;
2141
+ showComposer: boolean;
2142
+ initialView: 'thread' | 'history';
2143
+ initialConversationId?: string;
2144
+ startWithNewChat: boolean;
2145
+ launchContext?: AXMContextualAssistContext;
2146
+ onSessionChange?: (state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void;
2147
+ registerWindow?: (api: AXMMiniChatPopupWindowApi | null) => void;
2148
+ protected readonly closeFn: () => void;
2149
+ protected readonly minimizeFn: () => void;
2150
+ protected readonly maximizeFn: () => void;
2151
+ protected readonly restoreFn: () => void;
2152
+ private readonly windowApi;
2153
+ constructor();
2154
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPopupWindowComponent, never>;
2155
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPopupWindowComponent, "axm-mini-chat-popup-window", never, {}, {}, never, never, true, never>;
1656
2156
  }
1657
2157
 
1658
2158
  /**
1659
- * Compact, entity-scoped chat: renders a single conversation thread (message list) with an optional
1660
- * info-bar and composer. Opens an existing chat by {@link chatId}, or starts a new entity assist chat
1661
- * (created lazily on first send and tagged with `entityId` / `entityType` in conversation metadata).
2159
+ * Root-footer dock for minimized mini-chat windows (`mini-chat` dock name).
2160
+ */
2161
+ declare class AXMMiniChatFooterDockComponent {
2162
+ protected readonly dockName = "mini-chat";
2163
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatFooterDockComponent, never>;
2164
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatFooterDockComponent, "axm-mini-chat-footer-dock", never, {}, {}, never, never, true, never>;
2165
+ }
2166
+
2167
+ /**
2168
+ * Compact, entity-scoped or inbox chat: renders a single conversation thread (message list)
2169
+ * with an optional info-bar and composer. Opens an existing chat by {@link chatId}, or starts
2170
+ * a new entity assist chat (created lazily on first send and tagged with `entityId` /
2171
+ * `entityType` in conversation metadata).
1662
2172
  *
1663
- * Uses the shared {@link AXConversationService} (same instance as the main chat page) so message
1664
- * streams, realtime updates, and assist replies behave identically. Selecting a chat / starting a
1665
- * new one is coordinated by the host through {@link chatId} and {@link AXConversationService}.
2173
+ * Reports focus through {@link AXMChatConversationApi} so assist SSE and realtime message
2174
+ * patches reach this thread while the overlay is open.
1666
2175
  */
1667
2176
  declare class AXMMiniChatComponent {
1668
2177
  #private;
1669
2178
  private readonly conversationService;
2179
+ private readonly popupService;
1670
2180
  private readonly conversationApi;
2181
+ private readonly assistResponse;
1671
2182
  private readonly destroyRef;
2183
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
1672
2184
  /** Existing conversation id to open. When omitted (and no conversation is active), the new-chat composer is shown. */
1673
2185
  readonly chatId: _angular_core.InputSignal<string | undefined>;
1674
2186
  /** Entity reference the chat is (or will be) bound to; omitted for inbox (regular) chats. */
@@ -1676,16 +2188,23 @@ declare class AXMMiniChatComponent {
1676
2188
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1677
2189
  /** Assist used as the bot peer when creating a new entity chat (falls back to the tenant default). */
1678
2190
  readonly assistId: _angular_core.InputSignal<string | undefined>;
2191
+ /** Surface context for a new assist thread (entity-row assist chips and room metadata). */
2192
+ readonly launchContext: _angular_core.InputSignal<AXMContextualAssistContext | undefined>;
1679
2193
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1680
2194
  readonly showComposer: _angular_core.InputSignal<boolean>;
1681
2195
  /** Emits the active conversation id when one is opened or newly created. */
1682
2196
  readonly conversationOpened: _angular_core.OutputEmitterRef<string>;
1683
2197
  readonly hasActiveConversation: _angular_core.Signal<boolean>;
1684
2198
  constructor();
2199
+ /** Opens the conversation info panel when the info-bar title/avatar area is clicked. */
2200
+ onInfoBarClick(): void;
1685
2201
  /** New-chat composer created and selected a conversation; surface it to the host. */
2202
+ readonly onAssistConversationCreated: (conversationId: string) => void;
1686
2203
  onConversationCreated(conversationId: string): void;
2204
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
2205
+ onComposerGenerationCancelled(): void;
1687
2206
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatComponent, never>;
1688
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatComponent, "axm-mini-chat", never, { "chatId": { "alias": "chatId"; "required": false; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": false; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "assistId": { "alias": "assistId"; "required": false; "isSignal": true; }; "showInfoBar": { "alias": "showInfoBar"; "required": false; "isSignal": true; }; "showComposer": { "alias": "showComposer"; "required": false; "isSignal": true; }; }, { "conversationOpened": "conversationOpened"; }, never, never, true, never>;
2207
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatComponent, "axm-mini-chat", never, { "chatId": { "alias": "chatId"; "required": false; "isSignal": true; }; "entityId": { "alias": "entityId"; "required": false; "isSignal": true; }; "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "assistId": { "alias": "assistId"; "required": false; "isSignal": true; }; "launchContext": { "alias": "launchContext"; "required": false; "isSignal": true; }; "showInfoBar": { "alias": "showInfoBar"; "required": false; "isSignal": true; }; "showComposer": { "alias": "showComposer"; "required": false; "isSignal": true; }; }, { "conversationOpened": "conversationOpened"; }, never, never, true, never>;
1689
2208
  }
1690
2209
 
1691
2210
  /** Fired after a user message is persisted — triggers assist, auto-reply, and realtime side effects. */
@@ -1707,5 +2226,5 @@ declare const CONVERSATION_START_DIRECT_CHAT_COMMAND = "Conversation:StartDirect
1707
2226
  /** Opens an existing conversation in the chat app. */
1708
2227
  declare const CONVERSATION_OPEN_CHAT_COMMAND = "Conversation:OpenChat";
1709
2228
 
1710
- export { AXMAddReactionCommand, AXMAssistSuggestionChipsComponent, AXMChatComponent, AXMChatConversationApi, AXMChatEntityConversationApi, AXMChatEntityConversationFocusHandler, AXMChatEntityConversationRoomQueryService, AXMChatEntityMessageApi, AXMChatEntityRealtimeApi, AXMChatEntityUserApi, AXMChatMessageApi, AXMChatRealtimeApi, AXMChatUserApi, AXMCommentComponent, AXMCommentManagementService, AXMCommentPopupComponent, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXMCommentWidgetViewComponent, AXMConversationAssistBackgroundOperationHandler, AXMConversationEntityStoreService, AXMConversationFocusService, AXMConversationModule, AXMConversationRealtimeBus, AXMEntityChatService, AXMMiniChatComponent, AXMMiniChatHeaderSlotComponent, AXMMiniChatHistoryComponent, AXMMiniChatInboxHistoryComponent, AXMMiniChatInboxPanelHostComponent, AXMMiniChatLauncherComponent, AXMMiniChatPanelComponent, AXMMiniChatPanelService, AXMShowCommentPopupCommand, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, AXM_AI_MANAGEMENT_MODULE_NAME, AXM_ASSIST_DEFAULT_RESOLVER_PORT, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, AXM_CHAT_ASSIST_CATALOG_PORT, AXM_CHAT_EMPTY_STATE_COMPONENT, AXM_CHAT_SIDEBAR_ACTION_PROVIDER, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, AXM_CONVERSATION_ASSIST_RESPONSE_PORT, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, AXM_CONVERSATION_TAB_BOT, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, AXM_MINI_CHAT_INBOX_SESSION_KEY, AXPCommentWidget, COMMENTS_PAGE_COMPONENT_KEY, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, CONVERSATION_OPEN_CHAT_COMMAND, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, CONVERSATION_START_ASSIST_CHAT_COMMAND, CONVERSATION_START_DIRECT_CHAT_COMMAND, CONVERSATION_SYNC_READ_STATE_COMMAND, axmApplyAnswerTextToAssistPayloadLine, axmAssistFollowUpItemsFromUnknown, axmAssistHasFinalizeMetadata, axmAssistLastTranscriptLine, axmAssistNormalizeFollowUpItemForConversation, axmAssistNormalizeFollowUpItemsForConversation, axmAssistPersistedMessageLooksComplete, axmAssistResolveFollowUpCommandName, axmAssistStarterPromptChipItems, axmAssistUserFacingPayloadLine, axmAssistUserVisibleItemsForLine, axmAssistWidgetNodeDedupeKey, axmAssistWidgetNodeFromUnknown, axmBuildAiChatConversationMetadata, axmBuildAssistPeerParticipantFromCreateData, axmBuildAssistPeerParticipantFromId, axmBuildAssistTranscriptLinePayload, axmBuildAutoTitleFromUserText, axmBuildEntityChatConversationMetadata, axmChatAiPeerParticipantId, axmChatAiTargetAvatarUrl, axmChatAiTargetDisplayDescription, axmChatAiTargetDisplayName, axmChatAiTargetShortcutDescriptionKey, axmCoerceDate, axmCoerceTimestampMs, axmComputeConversationUnreadCount, axmConversationHasAiChat, axmConversationIsEntityChat, axmConversationMatchesEntity, axmExtractAssistIdFromMetadata, axmExtractAssistSnapshotFromMetadata, axmExtractDirectAgentIdFromMetadata, axmExtractEntityRefFromMetadata, axmExtractModelEntityIdFromMetadata, axmExtractTextFromPayload, axmFilterChatAiTargets, axmHydrateRealtimeConversationMessage, axmIsAssistBotConversation, axmIsAssistPeerParticipant, axmIsAssistResponseMessage, axmIsAssistRetryableStatus, axmIsAssistStreamingMessage, axmIsAssistStreamingStatus, axmIsAssistTerminalStatus, axmIsUnsupportedLegacyAgentAssistConversation, axmLoadChatAiTargets, axmMessageCountsTowardUnread, axmMessageEntityToMessage, axmNormalizeAssistTranscriptForChatUi, axmNormalizeAssistTranscriptLineResponses, axmParseAssistTranscriptLinePayload, axmParseAssistTranscriptTextEnvelope, axmPartitionAssistAnswerText, axmPreferLocalUnreadCount, axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw, axmReadAssistResponseError, axmReadAssistResponseStatus, axmReadPlainTextMessagePayload, axmReadReplyToUserMessageId, axmResolveAssistFinalAnswerText, axmResolveChatAiTargetText, axmRoomEntityToConversation, axmRoomWithAssistPeerDisplayName, axmSanitizeAssistUserAnswerText, axmShouldPreferPersistedAssistOverLiveCache, axmShowCommentPopupCommandDefinition, axmSortMessagesNewestFirst, axmSyncAssistPeerDisplayName, axmSyntheticEmbedMessage, axmUserRowToParticipant, commentsPlugin, createConversationServiceSessionAdapter, persistChatAttachment };
1711
- export type { AXMAddReactionCommandInput, AXMAssistConversationSnapshotLite, AXMAssistDefaultResolverPort, AXMAssistStarterPromptChipOptions, AXMChatAiTargetRow, AXMChatAssistCatalogPort, AXMChatSidebarAction, AXMComment, AXMCommentEvent, AXMCommentEventType, AXMCommentThread, AXMConversationAssistResponsePort, AXMConversationRegularAutoReplyPort, AXMConversationServiceSessionAdapter, AXMEntityChatCreateData, AXMEntityChatRef, AXMMiniChatInboxConversationFilter, AXMMiniChatPanelAnchor, AXMMiniChatPanelOpenOptions, AXMMiniChatPanelPosition, AXMMiniChatPanelScope, AXMMiniChatPanelSessionState, AXMMiniChatPanelSide, AXMSendAssistChatMessageOptions, AXMShowCommentPopupCommandInput, AXMThreadEvent, AXMThreadEventType, AXPAiChatFollowUpCommandLite, AXPAiChatFollowUpItemLite, AXPAiChatMessageLite, AXPAiChatNodeOrFollowUpResponseLite, AXPAiChatTextResponseLite, AXPAiEffectiveAssistRowLite, AxmAssistPartitionedAnswerText, AxmAssistResponseStatus, AxmAssistTranscriptLinePayload, AxmAssistUserVisibleItem, CommentsDisplayMode, CommentsPluginOptions };
2229
+ export { AXMAddReactionCommand, AXMAssistSuggestionChipsComponent, AXMChannelFeedItemComponent, AXMChannelFeedPage, AXMChatAnnouncementChannelService, AXMChatComponent, AXMChatComposerAssistPickerComponent, AXMChatComposerEnsureAssistConversationDirective, AXMChatConversationApi, AXMChatEmptyAssistSessionService, AXMChatEntityConversationApi, AXMChatEntityConversationFocusHandler, AXMChatEntityConversationRoomQueryService, AXMChatEntityMessageApi, AXMChatEntityRealtimeApi, AXMChatEntityUserApi, AXMChatMessageApi, AXMChatRealtimeApi, AXMChatUserApi, AXMCommentComponent, AXMCommentManagementService, AXMCommentPopupComponent, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXMCommentWidgetViewComponent, AXMConversationAssistBackgroundOperationHandler, AXMConversationEntityStoreService, AXMConversationFocusService, AXMConversationModule, AXMConversationRealtimeBus, AXMEntityChatService, AXMMiniChatComponent, AXMMiniChatFooterDockComponent, AXMMiniChatHeaderSlotComponent, AXMMiniChatHistoryComponent, AXMMiniChatInboxHistoryComponent, AXMMiniChatLauncherComponent, AXMMiniChatPageActionComponent, AXMMiniChatPanelComponent, AXMMiniChatPanelService, AXMMiniChatPopupWindowComponent, AXMShowCommentPopupCommand, AXM_AI_MANAGEMENT_AGENT_ENTITY_NAME, AXM_AI_MANAGEMENT_ASSIST_ENTITY_NAME, AXM_AI_MANAGEMENT_MODULE_NAME, AXM_ASSIST_DEFAULT_RESOLVER_PORT, AXM_ASSIST_TRANSCRIPT_LINE_PAYLOAD_TYPE, AXM_CHAT_ASSIST_CATALOG_PORT, AXM_CHAT_EMPTY_STATE_COMPONENT, AXM_CHAT_SIDEBAR_ACTION_PROVIDER, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS, AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_KEY, AXM_CONVERSATION_ASSIST_RESPONSE_PORT, AXM_CONVERSATION_CHAT_ATTACHMENT_CATEGORY, AXM_CONVERSATION_CHAT_ATTACHMENT_REF_TYPE, AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, AXM_CONVERSATION_TAB_BOT, AXM_ENTITY_LIST_CHAT_ID, AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER, AXM_MINI_CHAT_INBOX_SESSION_KEY, AXM_MINI_CHAT_POPUP_DOCK, AXM_MINI_CHAT_SCOPE_ENTITY, AXM_MINI_CHAT_SCOPE_METADATA_KEY, AXPCommentWidget, COMMENTS_PAGE_COMPONENT_KEY, CONVERSATION_AFTER_MESSAGE_SENT_COMMAND, CONVERSATION_EMIT_TYPING_INDICATOR_COMMAND, CONVERSATION_MARK_CONVERSATION_UNREAD_COMMAND, CONVERSATION_OPEN_CHAT_COMMAND, CONVERSATION_RETRY_ASSIST_RESPONSE_COMMAND, CONVERSATION_SEND_ASSIST_CHAT_MESSAGE_COMMAND, CONVERSATION_START_ASSIST_CHAT_COMMAND, CONVERSATION_START_DIRECT_CHAT_COMMAND, CONVERSATION_SYNC_READ_STATE_COMMAND, axmApplyAnswerTextToAssistPayloadLine, axmAssistFollowUpItemsFromUnknown, axmAssistHasFinalizeMetadata, axmAssistLastTranscriptLine, axmAssistNormalizeFollowUpItemForConversation, axmAssistNormalizeFollowUpItemsForConversation, axmAssistPersistedMessageLooksComplete, axmAssistResolveFollowUpCommandName, axmAssistStarterPromptChipItems, axmAssistSuggestionIconForLabel, axmAssistUserFacingPayloadLine, axmAssistUserVisibleItemsForLine, axmAssistWidgetNodeDedupeKey, axmAssistWidgetNodeFromUnknown, axmBuildAiChatConversationMetadata, axmBuildAssistPeerParticipantFromCreateData, axmBuildAssistPeerParticipantFromId, axmBuildAssistTranscriptLinePayload, axmBuildAutoTitleFromUserText, axmBuildEntityChatConversationMetadata, axmBuildEntityChatRoomEntityRef, axmChatAiPeerParticipantId, axmChatAiTargetAvatarUrl, axmChatAiTargetDisplayDescription, axmChatAiTargetDisplayName, axmChatAiTargetShortcutDescriptionKey, axmChatRenderableAssistWidgetNode, axmCoerceDate, axmCoerceTimestampMs, axmComputeConversationUnreadCount, axmConversationHasAiChat, axmConversationIsEntityChat, axmConversationMatchesEntity, axmEntityRefFromLaunchContext, axmExcludeEntityChatConversations, axmExtractAssistIdFromMetadata, axmExtractAssistSnapshotFromMetadata, axmExtractDirectAgentIdFromMetadata, axmExtractEntityRefFromMetadata, axmExtractModelEntityIdFromMetadata, axmExtractTextFromPayload, axmFilterChatAiTargets, axmFlattenConversationCreateMetadata, axmHydrateRealtimeConversationMessage, axmInboxConversationTab, axmIsAssistBotConversation, axmIsAssistPeerParticipant, axmIsAssistResponseMessage, axmIsAssistRetryableStatus, axmIsAssistStreamingMessage, axmIsAssistStreamingStatus, axmIsAssistTerminalStatus, axmIsUnsupportedLegacyAgentAssistConversation, axmLoadChatAiTargets, axmMessageCountsTowardUnread, axmMessageEntityToMessage, axmNormalizeAssistTranscriptForChatUi, axmNormalizeAssistTranscriptLineResponses, axmParseAssistTranscriptLinePayload, axmParseAssistTranscriptTextEnvelope, axmPartitionAssistAnswerText, axmPreferLocalUnreadCount, axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw, axmReadAssistFollowUpStatus, axmReadAssistResponseError, axmReadAssistResponseStatus, axmReadPlainTextMessagePayload, axmReadReplyToUserMessageId, axmRemoveMiniChatHistoryItem, axmResolveAssistFinalAnswerText, axmResolveChatAiTargetText, axmRoomEntityToConversation, axmRoomIsEntityChat, axmRoomMatchesEntity, axmRoomWithAssistPeerDisplayName, axmSanitizeAssistUserAnswerText, axmShouldPreferPersistedAssistOverLiveCache, axmShowCommentPopupCommandDefinition, axmSortMessagesNewestFirst, axmSyncAssistPeerDisplayName, axmSyntheticEmbedMessage, axmUpsertMiniChatHistoryItem, axmUserRowToParticipant, channelFeedPageRoutes, commentsPlugin, createConversationServiceSessionAdapter, persistChatAttachment };
2230
+ export type { AXMAddReactionCommandInput, AXMAssistConversationSnapshotLite, AXMAssistDefaultResolverPort, AXMAssistStarterPromptChipOptions, AXMChatAiTargetRow, AXMChatAssistCatalogPort, AXMChatEmptyAssistContinue, AXMChatEmptyAssistCreatedHandler, AXMChatEmptyAssistSessionBind, AXMChatSidebarAction, AXMComment, AXMCommentEvent, AXMCommentEventType, AXMCommentThread, AXMConversationAssistResponsePort, AXMConversationRegularAutoReplyPort, AXMConversationServiceSessionAdapter, AXMEntityChatCreateData, AXMEntityChatRef, AXMEntityChatRoomRef, AXMMiniChatInboxConversationFilter, AXMMiniChatPanelAnchor, AXMMiniChatPanelOpenOptions, AXMMiniChatPanelPosition, AXMMiniChatPanelPresentation, AXMMiniChatPanelScope, AXMMiniChatPanelSessionState, AXMMiniChatPanelSide, AXMMiniChatPopupWindowApi, AXMMiniChatPopupWindowData, AXMSendAssistChatMessageOptions, AXMShowCommentPopupCommandInput, AXMThreadEvent, AXMThreadEventType, AXPAiChatFollowUpCommandLite, AXPAiChatFollowUpItemLite, AXPAiChatMessageLite, AXPAiChatNodeOrFollowUpResponseLite, AXPAiChatTextResponseLite, AXPAiEffectiveAssistRowLite, AxmAssistFollowUpStatus, AxmAssistPartitionedAnswerText, AxmAssistResponseStatus, AxmAssistTranscriptLinePayload, AxmAssistUserVisibleItem, CommentsDisplayMode, CommentsPluginOptions };