@acorex-platform/module-conversation-client 0.0.38 → 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-XTzQQhii.mjs → acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DUR2oyfP.mjs} +9727 -8104
  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-BMGagKtP.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-BMGagKtP.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-D1SDsHvl.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-D1SDsHvl.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-nE7xP4bF.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-DXkqkS50.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-DXkqkS50.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-SYCtAqcV.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-SYCtAqcV.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-Dv_x3ztZ.mjs → acorex-platform-module-conversation-client-comments-page.component-BxUz9jTX.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-conversation-client-comments-page.component-Dv_x3ztZ.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-8NoSuUwe.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-8NoSuUwe.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-BgJ0Z36e.mjs → acorex-platform-module-conversation-client-open-chat.command-ridcdmj7.mjs} +2 -2
  51. package/fesm2022/{acorex-platform-module-conversation-client-open-chat.command-BgJ0Z36e.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-lcNz4Hpu.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-lcNz4Hpu.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-DxccFsD9.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 +676 -161
  63. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.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-nE7xP4bF.mjs.map +0 -1
  66. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs +0 -482
  67. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.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-DxccFsD9.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,11 +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;
48
168
  private readonly popupService;
49
169
  private readonly chatConversationApi;
170
+ private readonly assistResponse;
50
171
  private readonly miniChatPanelService;
51
172
  private readonly activeCallSessions;
52
173
  private readonly composerService;
@@ -58,6 +179,7 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
58
179
  private readonly badgeService;
59
180
  protected readonly deviceService: AXPDeviceService;
60
181
  private readonly destroyRef;
182
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
61
183
  private readonly routeConversationId;
62
184
  private readonly routerUrl;
63
185
  ngOnInit(): Promise<void>;
@@ -65,7 +187,9 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
65
187
  * Computed signal to check if there is an active conversation selected.
66
188
  */
67
189
  readonly hasActiveConversation: _angular_core.Signal<boolean>;
190
+ readonly hidePageComposer: _angular_core.Signal<boolean>;
68
191
  readonly showChatList: _angular_core.Signal<boolean>;
192
+ readonly isAnnouncementChannelActive: _angular_core.Signal<boolean>;
69
193
  /**
70
194
  * Unread messages in other chats (excludes the open conversation), for the mobile back control.
71
195
  */
@@ -75,13 +199,16 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
75
199
  * Navigates to the selected conversation route.
76
200
  * @param conversationId - The ID of the selected conversation.
77
201
  */
78
- onConversationSelected(conversationId: string): void;
202
+ readonly onAssistConversationCreated: (conversationId: string) => Promise<void>;
203
+ onConversationSelected(conversationId: string): Promise<void>;
79
204
  /** Mobile back: return to the full-screen conversation list (no layout sidebar). */
80
205
  openChatList(): void;
81
206
  /**
82
207
  * Opens the platform conversation info panel when the info-bar title/avatar area is clicked.
83
208
  */
84
209
  onInfoBarClick(): void;
210
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
211
+ onComposerGenerationCancelled(): void;
85
212
  /**
86
213
  * Handles Escape key from chat container.
87
214
  * Replicates conversation source behavior by closing active conversation here.
@@ -136,6 +263,45 @@ declare abstract class AXMChatRealtimeApi extends AXConversationRealtimeApi {
136
263
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatRealtimeApi>;
137
264
  }
138
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
+
139
305
  /**
140
306
  * Entity-backed implementation of {@link AXMChatConversationApi} using Conversation.room.
141
307
  */
@@ -148,6 +314,8 @@ declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
148
314
  private readonly realtimeBus;
149
315
  private readonly focusHandler;
150
316
  private readonly roomQuery;
317
+ private readonly announcements;
318
+ private readonly commandService;
151
319
  private readonly roomData;
152
320
  reportFocusedConversation(conversationId: string | null): void;
153
321
  private publishConversationPatch;
@@ -223,6 +391,7 @@ declare class AXMChatEntityConversationFocusHandler {
223
391
  declare class AXMChatEntityConversationRoomQueryService {
224
392
  private readonly entityService;
225
393
  private readonly filterService;
394
+ private readonly session;
226
395
  private readonly userApi;
227
396
  private readonly roomData;
228
397
  private readonly messageData;
@@ -270,7 +439,9 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
270
439
  private readonly userApi;
271
440
  private readonly commandService;
272
441
  private readonly assistResponse;
442
+ private readonly generationState;
273
443
  private readonly conversationStore;
444
+ private readonly announcements;
274
445
  private readonly realtime;
275
446
  private readonly typingStopTimers;
276
447
  private readonly typingEmitState;
@@ -278,6 +449,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
278
449
  private static readonly TYPING_STOP_IDLE_MS;
279
450
  private readonly messageData;
280
451
  private readonly roomData;
452
+ private readonly receiptData;
453
+ private readonly cancelAssistOnComposerStop;
281
454
  private requireConversationParticipant;
282
455
  private loadConversationMessages;
283
456
  private paginateMessages;
@@ -290,6 +463,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
290
463
  editMessage(messageId: string, payload: AXConversationMessagePayload): Promise<AXConversationMessage>;
291
464
  deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
292
465
  deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
466
+ private isAssistUserTextEdit;
467
+ private dropMessagesAfterAssistEdit;
293
468
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
294
469
  searchMessages(conversationId: string, filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
295
470
  searchAllMessages(filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
@@ -299,7 +474,7 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
299
474
  getAvailableReactions(): Promise<string[]>;
300
475
  markAsRead(conversationId: string, messageIds: string[]): Promise<void>;
301
476
  markAsUnread(conversationId: string): Promise<void>;
302
- getReadReceipts(_messageId: string): Promise<AXConversationReadReceipt[]>;
477
+ getReadReceipts(messageId: string): Promise<AXConversationReadReceipt[]>;
303
478
  markMessagesAsRead(messageIds: string[]): Promise<void>;
304
479
  forwardMessage(_data: AXConversationMessageForwardData): Promise<AXConversationMessage[]>;
305
480
  pinMessage(conversationId: string, messageId: string): Promise<void>;
@@ -313,13 +488,16 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
313
488
  updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
314
489
  getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
315
490
  updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
316
- getMessageDeliveryStatus(_messageId: string): Promise<{
491
+ getMessageDeliveryStatus(messageId: string): Promise<{
317
492
  delivered: number;
318
493
  read: number;
319
494
  total: number;
320
495
  }>;
321
496
  bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
322
497
  exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
498
+ private markChannelPostsRead;
499
+ private resolveChannelPostId;
500
+ private queryPostReceipts;
323
501
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatEntityMessageApi, never>;
324
502
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatEntityMessageApi>;
325
503
  }
@@ -369,6 +547,8 @@ declare class AXMChatEntityUserApi extends AXMChatUserApi {
369
547
  updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationUser>;
370
548
  uploadAvatar(_file: File): Promise<string>;
371
549
  getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
550
+ /** Tenant-scoped directory size (includes the current user). */
551
+ countDirectoryUsers(): Promise<number>;
372
552
  searchUsers(query: string): Promise<AXConversationParticipant[]>;
373
553
  getUserById(userId: string): Promise<AXConversationParticipant>;
374
554
  getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
@@ -404,6 +584,10 @@ declare const AXM_CHAT_SIDEBAR_ACTION_PROVIDER: InjectionToken<AXMChatSidebarAct
404
584
 
405
585
  /** True when the conversation is an assist / AI bot chat. */
406
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;
407
591
  /** Sidebar tab for AI assist conversations (`type: 'bot'` or assist metadata). */
408
592
  declare const AXM_CONVERSATION_TAB_BOT: AXConversationTab;
409
593
 
@@ -450,6 +634,119 @@ interface AXMAssistConversationSnapshotLite {
450
634
  modelId?: string | null;
451
635
  }
452
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
+
453
750
  /**
454
751
  * Assist suggestion chips (starter prompts and engine {@code followUp} segments).
455
752
  * Each item runs its platform command via {@link AXPCommandService}.
@@ -458,24 +755,31 @@ declare class AXMAssistSuggestionChipsComponent {
458
755
  readonly items: _angular_core.InputSignal<AXPAiChatFollowUpItemLite[]>;
459
756
  /** Tighter chip layout for mini-chat and other narrow panels. */
460
757
  readonly compact: _angular_core.InputSignal<boolean>;
461
- /** 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
+ */
462
763
  readonly sendInPlace: _angular_core.InputSignal<boolean>;
463
764
  /** Disables all chips (e.g. parent composer is loading or sending). */
464
765
  readonly disabled: _angular_core.InputSignal<boolean>;
465
766
  /** Emits when an in-place send creates a new conversation (mini chat empty state). */
466
767
  readonly conversationCreated: _angular_core.OutputEmitterRef<string>;
467
768
  protected readonly normalizedItems: _angular_core.Signal<AXPAiChatFollowUpItemLite[]>;
769
+ protected readonly chipIcons: _angular_core.Signal<string[]>;
468
770
  private readonly busy;
469
771
  protected readonly isInteractionBlocked: _angular_core.Signal<boolean>;
470
772
  private readonly commandService;
471
773
  private readonly conversationService;
472
774
  private readonly conversationApi;
473
775
  private readonly entityChatService;
776
+ private readonly pageContextChips;
474
777
  private readonly assistCatalog;
475
778
  private readonly translationService;
476
779
  private readonly layoutTheme;
477
780
  protected onChipClick(item: AXPAiChatFollowUpItemLite): Promise<void>;
478
781
  protected resolveChipLabel(item: AXPAiChatFollowUpItemLite): string;
782
+ private shouldSendAssistMessageInPlace;
479
783
  private isSendAssistChatMessageCommand;
480
784
  private resolveItemText;
481
785
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMAssistSuggestionChipsComponent, never>;
@@ -495,7 +799,11 @@ interface AXMAssistStarterPromptChipOptions {
495
799
  /** Entity reference so a chip-created conversation stays bound to its entity (mini chat). */
496
800
  entityId?: string;
497
801
  entityType?: string;
802
+ /** Merged into room metadata when a chip creates a new conversation. */
803
+ launchContext?: AXMContextualAssistContext;
498
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;
499
807
  /**
500
808
  * Resolves a follow-up chip command for Conversation assist.
501
809
  * AI follow-up output may use invalid `Registry:*` placeholders; those map to
@@ -526,6 +834,8 @@ interface AXMSendAssistChatMessageOptions {
526
834
  navigate?: boolean;
527
835
  entityId?: string;
528
836
  entityType?: string;
837
+ /** Merged into room metadata only when this send creates a new conversation. */
838
+ launchContext?: AXMContextualAssistContext;
529
839
  }
530
840
 
531
841
  /**
@@ -537,6 +847,8 @@ declare function axmReadAssistAiTranscript(metadata: unknown): AXPAiChatMessage[
537
847
  /** Raw engine transcript (chronological), without debug UI reordering. */
538
848
  declare function axmReadAssistAiTranscriptRaw(metadata: unknown): AXPAiChatMessage[];
539
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;
540
852
  /** Stable identity for widget nodes so embedded JSON vs structured `node` segments dedupe despite key order. */
541
853
  declare function axmAssistWidgetNodeDedupeKey(content: unknown): string;
542
854
  declare function axmSyntheticEmbedMessage(parent: AXConversationMessage, suffix: string, partial: Pick<AXConversationMessage, 'type' | 'payload'>): AXConversationMessage;
@@ -592,7 +904,9 @@ type AxmAssistUserVisibleItem = {
592
904
  kind: 'followUp';
593
905
  items: AXPAiChatFollowUpItem[];
594
906
  };
595
- declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage): AxmAssistUserVisibleItem[];
907
+ declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage, options?: {
908
+ hideWidgetNodes?: boolean;
909
+ }): AxmAssistUserVisibleItem[];
596
910
  /** Parses a raw {@code followUp} segment for UI (normalizes chip commands). */
597
911
  declare function axmAssistFollowUpItemsFromUnknown(raw: unknown): AXPAiChatFollowUpItem[];
598
912
 
@@ -642,6 +956,8 @@ declare function axmReadReplyToUserMessageId(metadata: unknown): string | undefi
642
956
  declare function axmReadAssistResponseError(metadata: unknown): string | undefined;
643
957
  declare function axmIsAssistRetryableStatus(status: AxmAssistResponseStatus): boolean;
644
958
  declare function axmIsAssistStreamingStatus(status: AxmAssistResponseStatus): boolean;
959
+ type AxmAssistFollowUpStatus = 'preparing' | 'ready' | 'skipped';
960
+ declare function axmReadAssistFollowUpStatus(metadata: unknown): AxmAssistFollowUpStatus | undefined;
645
961
  declare function axmIsAssistTerminalStatus(status: AxmAssistResponseStatus): boolean;
646
962
  /** Finalize metadata persisted when a run completes (even if status lags). */
647
963
  declare function axmAssistHasFinalizeMetadata(metadata: unknown): boolean;
@@ -686,30 +1002,6 @@ declare function axmCoerceTimestampMs(value: unknown): number;
686
1002
  declare function axmCoerceDate(value: unknown): Date;
687
1003
  declare function axmSortMessagesNewestFirst(messages: AXConversationMessage[]): AXConversationMessage[];
688
1004
 
689
- /** Row shown in Conversation “Chat with AI” pickers (catalog assist). */
690
- interface AXMChatAiTargetRow {
691
- id: string;
692
- name: string;
693
- title: AXPMultiLanguageString | string;
694
- description?: AXPMultiLanguageString | string;
695
- professionImageUrl?: string;
696
- }
697
- /** Synthetic bot participant id for assist chats. */
698
- declare function axmChatAiPeerParticipantId(catalogId: string): string;
699
- /** Conversation metadata for starting an AI chat from a picker row. */
700
- declare function axmBuildAiChatConversationMetadata(row: AXMChatAiTargetRow, assistSnapshot?: AXMAssistConversationSnapshotLite): Record<string, unknown>;
701
- /** Loads assist rows for Conversation AI chat pickers. */
702
- declare function axmLoadChatAiTargets(entityRegistry: AXPEntityDefinitionRegistryService): Promise<AXMChatAiTargetRow[]>;
703
- /** Resolves ML or plain string for search/display. */
704
- declare function axmResolveChatAiTargetText(resolveMl: (value: AXPMultiLanguageString) => string | undefined, value: AXPMultiLanguageString | string | undefined): string;
705
- declare function axmChatAiTargetDisplayName(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string;
706
- declare function axmChatAiTargetDisplayDescription(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string | undefined;
707
- declare function axmChatAiTargetAvatarUrl(row: AXMChatAiTargetRow): string | null;
708
- /** Fallback i18n key for rows with no catalog description. */
709
- declare function axmChatAiTargetShortcutDescriptionKey(): string;
710
- /** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */
711
- declare function axmFilterChatAiTargets(resolveMl: (value: AXPMultiLanguageString) => string | undefined, rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[];
712
-
713
1005
  /** Builds a sidebar/header title from the first user message (heuristic fallback). */
714
1006
  declare function axmBuildAutoTitleFromUserText(raw: string): string | null;
715
1007
  /** Bot/assist list rows often show the assist peer `name` — keep it in sync with room title. */
@@ -717,7 +1009,9 @@ declare function axmSyncAssistPeerDisplayName<T extends Pick<AXConversation, 'ti
717
1009
  declare function axmRoomWithAssistPeerDisplayName(room: AXMConversationRoom): AXMConversationRoom;
718
1010
 
719
1011
  interface AXMConversationAssistResponsePort {
720
- 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>;
721
1015
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
722
1016
  reconcileStaleAssistPlaceholders(conversationId?: string): Promise<void>;
723
1017
  /** True when the conversation has assist rows still marked streaming (cache or entity). */
@@ -726,6 +1020,8 @@ interface AXMConversationAssistResponsePort {
726
1020
  getLiveMessage(messageId: string): AXConversationMessage | null;
727
1021
  /** Merges assist in-memory cache over persisted messages (mock `conversationSharedStorage.messages` parity). */
728
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;
729
1025
  /** Aligns composer Stop / spinner with assist streaming for the focused conversation. */
730
1026
  syncComposerGenerationForFocus(conversationId: string | null): Promise<void>;
731
1027
  /** Cancels in-flight assist generation (composer Stop). Aborts server AI + SSE stream updates. */
@@ -994,6 +1290,7 @@ declare class AXMCommentManagementService {
994
1290
  private formatThread;
995
1291
  createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread>;
996
1292
  getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null>;
1293
+ countCommentsForEntity(entityRef: AXMCommentEntityData): Promise<number>;
997
1294
  listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]>;
998
1295
  updateThread(entityRef: AXMCommentEntityData, topic: string, data: Partial<{
999
1296
  title: string;
@@ -1148,6 +1445,7 @@ declare class AXMCommentServiceImpl {
1148
1445
  private readonly translationService;
1149
1446
  createThread(creatorUser: AXPUserReference, entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMConversationRoom>;
1150
1447
  getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom | null>;
1448
+ listRoomsForEntity(entityRef: AXMCommentEntityData): Promise<AXMConversationRoom[]>;
1151
1449
  listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom[]>;
1152
1450
  updateThread(threadId: string, data: Partial<{
1153
1451
  title: string;
@@ -1268,6 +1566,19 @@ interface AXMEntityChatRef {
1268
1566
  entityId: string;
1269
1567
  entityType: string;
1270
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__";
1271
1582
  /**
1272
1583
  * Conversation metadata for an entity-scoped assist chat.
1273
1584
  * Keeps `assistId` so the existing assist reply pipeline still answers in entity chats.
@@ -1277,16 +1588,36 @@ declare function axmBuildEntityChatConversationMetadata(args: {
1277
1588
  entityType: string;
1278
1589
  assistId: string;
1279
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;
1280
1597
  /**
1281
1598
  * Resolves the entity reference from conversation metadata.
1282
1599
  * `AXConversationService.createConversation` may nest the UI object, so values
1283
1600
  * are also probed at `metadata.metadata.*`.
1284
1601
  */
1285
1602
  declare function axmExtractEntityRefFromMetadata(metadata: Record<string, unknown> | undefined): AXMEntityChatRef | undefined;
1286
- /** 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). */
1287
1606
  declare function axmConversationIsEntityChat(metadata: Record<string, unknown> | undefined): boolean;
1288
1607
  /** True when conversation metadata targets the given entity reference. */
1289
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;
1290
1621
 
1291
1622
  /** Arguments accepted by `AXConversationService.createConversation`, prebuilt for an entity chat. */
1292
1623
  interface AXMEntityChatCreateData {
@@ -1320,13 +1651,17 @@ declare class AXMEntityChatService {
1320
1651
  private get conversationApi();
1321
1652
  /** Returns every conversation bound to the given entity reference. */
1322
1653
  findEntityConversations(ref: AXMEntityChatRef): Promise<AXConversation[]>;
1323
- /** Creates a new entity-scoped assist conversation and selects it as the active conversation. */
1324
- 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>;
1325
1660
  /**
1326
1661
  * Builds the `createConversation` payload for a new entity assist chat.
1327
1662
  * Uses `assistId` when provided, otherwise the tenant default assist.
1328
1663
  */
1329
- buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string): Promise<AXMEntityChatCreateData>;
1664
+ buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string, extraMetadata?: Record<string, unknown>): Promise<AXMEntityChatCreateData>;
1330
1665
  /** Resolves the assist catalog row to chat with (explicit id → tenant default → first row). */
1331
1666
  private resolveAssistRow;
1332
1667
  private resolveDefaultAssistId;
@@ -1341,10 +1676,10 @@ declare class AXMEntityChatService {
1341
1676
  declare class AXMMiniChatInboxHistoryComponent implements OnInit {
1342
1677
  private readonly conversationApi;
1343
1678
  private readonly conversationFilter;
1679
+ private readonly realtimeBus;
1680
+ private readonly destroyRef;
1344
1681
  /** Emits when the user picks a conversation from the list. */
1345
1682
  readonly conversationSelected: _angular_core.OutputEmitterRef<string>;
1346
- /** Emits when the user starts a new chat from the empty state. */
1347
- readonly newChatRequested: _angular_core.OutputEmitterRef<void>;
1348
1683
  /** Emits whether the loaded history contains at least one conversation. */
1349
1684
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1350
1685
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
@@ -1352,84 +1687,23 @@ declare class AXMMiniChatInboxHistoryComponent implements OnInit {
1352
1687
  ngOnInit(): void;
1353
1688
  /** Reloads AI-assist inbox conversations. */
1354
1689
  refresh(): Promise<void>;
1690
+ private bindRealtimeHistory;
1691
+ private matchesInbox;
1355
1692
  protected resolveListAvatar(conversation: AXConversation): {
1356
1693
  title: string;
1357
1694
  avatar?: string;
1358
1695
  icon?: string;
1359
1696
  };
1360
1697
  protected onSelect(conversationId: string): void;
1361
- protected onNewChat(): void;
1362
1698
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatInboxHistoryComponent, never>;
1363
- 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>;
1364
1700
  }
1365
1701
 
1366
1702
  type AXMMiniChatInboxConversationFilter = (conversation: AXConversation) => boolean;
1367
1703
  declare const AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER: InjectionToken<AXMMiniChatInboxConversationFilter>;
1368
1704
 
1369
- /** Anchor element for overlay positioning. */
1370
- type AXMMiniChatPanelAnchor = Element | ElementRef<HTMLElement>;
1371
- /**
1372
- * Common placement aliases mapped to {@link AXPlacement}.
1373
- * Examples: `top-right` → `top-end`, `bottom-left` → `bottom-start`.
1374
- */
1375
- type AXMMiniChatPanelSide = AXPlacement | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right';
1376
- /** Fixed viewport coordinates (px). Ignored when `anchor` is set. */
1377
- interface AXMMiniChatPanelPosition {
1378
- x: number;
1379
- y: number;
1380
- }
1381
- /** Mini chat panel scope: entity-bound threads or main inbox (non-entity chats). */
1382
- type AXMMiniChatPanelScope = 'entity' | 'inbox';
1383
- /** Session key used for the global inbox mini chat (non-entity conversations). */
1384
- declare const AXM_MINI_CHAT_INBOX_SESSION_KEY = "__inbox__";
1385
- /** Persisted panel state for a mini chat session. */
1386
- interface AXMMiniChatPanelSessionState {
1387
- view: 'thread' | 'history';
1388
- selectedChatId?: string;
1389
- hasOpened: boolean;
1390
- }
1391
- /** Options passed to {@link AXMMiniChatPanelService.open}. */
1392
- interface AXMMiniChatPanelOpenOptions {
1393
- /** Default: `entity`. Use `inbox` for regular (non-entity) chats shown in the main chat sidebar. */
1394
- scope?: AXMMiniChatPanelScope;
1395
- entityId?: string;
1396
- entityType?: string;
1397
- assistId?: string;
1398
- title?: string;
1399
- showInfoBar?: boolean;
1400
- showComposer?: boolean;
1401
- /** Fixed viewport position (px). Ignored when `anchor` is set. */
1402
- position?: AXMMiniChatPanelPosition;
1403
- /** Anchor element for popover placement. */
1404
- anchor?: AXMMiniChatPanelAnchor;
1405
- /** Placement relative to anchor. Default: `top-end` when anchored. */
1406
- placement?: AXMMiniChatPanelSide;
1407
- offsetX?: number;
1408
- offsetY?: number;
1409
- autoFlip?: boolean;
1410
- /** When true, always opens a fresh conversation thread. */
1411
- forceNewChat?: boolean;
1412
- }
1413
-
1414
- /**
1415
- * Host for inbox mini chat with an isolated {@link AXConversationService} so the header
1416
- * slot does not change the main chat page selection while the user is on the chat route.
1417
- */
1418
- declare class AXMMiniChatInboxPanelHostComponent {
1419
- readonly title: _angular_core.InputSignal<string>;
1420
- readonly showInfoBar: _angular_core.InputSignal<boolean>;
1421
- readonly showComposer: _angular_core.InputSignal<boolean>;
1422
- readonly requestClose: _angular_core.InputSignal<() => void>;
1423
- readonly initialView: _angular_core.InputSignal<"thread" | "history">;
1424
- readonly initialConversationId: _angular_core.InputSignal<string | undefined>;
1425
- readonly startWithNewChat: _angular_core.InputSignal<boolean>;
1426
- readonly onSessionChange: _angular_core.InputSignal<((state: Pick<AXMMiniChatPanelSessionState, "view" | "selectedChatId">) => void) | undefined>;
1427
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatInboxPanelHostComponent, never>;
1428
- 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>;
1429
- }
1430
-
1431
1705
  /**
1432
- * 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).
1433
1707
  */
1434
1708
  declare class AXMMiniChatHeaderSlotComponent {
1435
1709
  private readonly panelService;
@@ -1450,6 +1724,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1450
1724
  sideMenuWidth: _angular_core.Signal<number>;
1451
1725
  sideMenuCompactWidth: _angular_core.Signal<number>;
1452
1726
  menuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1727
+ menuToggleCyclesStyle: _angular_core.Signal<boolean>;
1453
1728
  menuOrientation: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuOrientation>;
1454
1729
  menuAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuAppearance>;
1455
1730
  headerAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPHeaderAppearance>;
@@ -1463,6 +1738,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1463
1738
  overlayTaskCount: _angular_core.Signal<number>;
1464
1739
  isNavigationLoading: _angular_core.Signal<boolean>;
1465
1740
  isMenuHorizontal: _angular_core.Signal<boolean>;
1741
+ menuToggleCyclesStyleEnabled: _angular_core.Signal<boolean>;
1466
1742
  effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1467
1743
  sideMenuDrawerWidth: _angular_core.Signal<number>;
1468
1744
  menuDarkEnabled: _angular_core.Signal<boolean>;
@@ -1477,6 +1753,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1477
1753
  setSideMenuWidth: (width: number) => void;
1478
1754
  setSideMenuCompactWidth: (width: number) => void;
1479
1755
  setSideMenuDrawerWidth: (width: number) => void;
1756
+ setMenuVerticalMode: (mode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode) => void;
1480
1757
  toggleSideMenu: () => void;
1481
1758
  setNavigationLoading: (value: boolean, delay?: number) => void;
1482
1759
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -1499,6 +1776,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1499
1776
  sideMenuWidth: number;
1500
1777
  sideMenuCompactWidth: number;
1501
1778
  menuVerticalMode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode;
1779
+ menuToggleCyclesStyle: boolean;
1502
1780
  menuOrientation: _acorex_platform_framework_client_themes_shared.AXPMenuOrientation;
1503
1781
  menuAppearance: _acorex_platform_framework_client_themes_shared.AXPMenuAppearance;
1504
1782
  headerAppearance: _acorex_platform_framework_client_themes_shared.AXPHeaderAppearance;
@@ -1511,18 +1789,39 @@ declare class AXMMiniChatHeaderSlotComponent {
1511
1789
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatHeaderSlotComponent, "axm-mini-chat-header-slot", never, {}, {}, never, never, true, never>;
1512
1790
  }
1513
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
+
1514
1813
  /**
1515
1814
  * Scrollable list of entity-scoped conversations for the mini chat panel.
1516
1815
  * Loads chats via {@link AXMEntityChatService.findEntityConversations}.
1517
1816
  */
1518
1817
  declare class AXMMiniChatHistoryComponent implements OnInit {
1519
1818
  private readonly entityChatService;
1819
+ private readonly realtimeBus;
1820
+ private readonly destroyRef;
1520
1821
  readonly entityId: _angular_core.InputSignal<string>;
1521
1822
  readonly entityType: _angular_core.InputSignal<string>;
1522
1823
  /** Emits when the user picks a conversation from the list. */
1523
1824
  readonly conversationSelected: _angular_core.OutputEmitterRef<string>;
1524
- /** Emits when the user starts a new chat from the empty state. */
1525
- readonly newChatRequested: _angular_core.OutputEmitterRef<void>;
1526
1825
  /** Emits whether the loaded history contains at least one conversation. */
1527
1826
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1528
1827
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
@@ -1530,64 +1829,154 @@ declare class AXMMiniChatHistoryComponent implements OnInit {
1530
1829
  ngOnInit(): void;
1531
1830
  /** Reloads the entity conversation list (call when the history panel becomes visible). */
1532
1831
  refresh(): Promise<void>;
1832
+ private bindRealtimeHistory;
1533
1833
  protected resolveListAvatar(conversation: AXConversation): {
1534
1834
  title: string;
1535
1835
  avatar?: string;
1536
1836
  icon?: string;
1537
1837
  };
1538
1838
  protected onSelect(conversationId: string): void;
1539
- protected onNewChat(): void;
1540
1839
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatHistoryComponent, never>;
1541
- 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>;
1542
1841
  }
1543
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';
1544
1862
  /**
1545
- * Opens the entity mini chat panel via {@link AXOverlayService}.
1546
- * Restores the last conversation per entity on reopen; use {@link forceNewChat} for an explicit new thread.
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;
1931
+ }
1932
+
1933
+ /**
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.
1547
1938
  */
1548
1939
  declare class AXMMiniChatPanelService {
1549
- private readonly overlayService;
1940
+ private readonly popupService;
1941
+ private readonly translation;
1550
1942
  private readonly conversationService;
1551
1943
  private readonly conversationApi;
1552
- private readonly document;
1553
- private readonly router;
1554
- private overlayRef;
1555
- private anchorElement;
1556
- private keydownHandler;
1557
- private outsideClickHandler;
1558
- private routerSubscription;
1559
- /** 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). */
1560
1949
  private savedActiveConversationId;
1950
+ /** Root focus id before the panel opened (restored so assist/realtime keep the right thread). */
1951
+ private savedFocusedConversationId;
1561
1952
  /** Per-entity session (view, selected conversation) restored when the panel reopens. */
1562
1953
  private readonly sessions;
1563
- /** Reactive open state for launcher UI (FAB icon). */
1954
+ /** Reactive open state for launcher UI (true while the window exists, including minimized). */
1564
1955
  readonly panelOpen: _angular_core.WritableSignal<boolean>;
1565
- /** True while the mini chat overlay is mounted. */
1956
+ /** True while the mini chat window is mounted (visible or minimized). */
1566
1957
  isOpen(): boolean;
1567
- /** Closes the overlay when it is open. */
1958
+ /** Closes the window when it is open. */
1568
1959
  close(): void;
1569
- /** Toggles the inbox mini chat overlay (regular non-entity conversations). */
1960
+ /** Toggles the inbox mini chat window (regular non-entity conversations). */
1570
1961
  toggleInbox(options?: Omit<AXMMiniChatPanelOpenOptions, 'scope' | 'entityId' | 'entityType'>): void;
1571
- /** Toggles the overlay, restoring the last session when reopening. */
1962
+ /**
1963
+ * Toggles the window: restores when minimized, closes when visible, opens when closed.
1964
+ */
1572
1965
  toggle(options: AXMMiniChatPanelOpenOptions): void;
1573
1966
  /**
1574
- * Opens the mini chat panel overlay (replaces any existing overlay).
1967
+ * Opens the mini chat window (replaces any existing window).
1575
1968
  * Restores the last session for the entity unless {@link AXMMiniChatPanelOpenOptions.forceNewChat} is set.
1576
1969
  */
1577
1970
  open(options: AXMMiniChatPanelOpenOptions): Promise<void>;
1971
+ private resolveWindowTitle;
1972
+ private buildSessionKey;
1578
1973
  private buildEntityKey;
1579
- private disposeOverlayOnly;
1580
- private handleOverlayDisposed;
1581
- private finishOverlayClose;
1582
- private bindDismissHandlers;
1583
- /** Ignore clicks on the anchor, overlay panel, or nested dropdown menus. */
1584
- private isInsideInteractiveSurface;
1585
- private removeDismissHandlers;
1974
+ private abandonOpenWindow;
1975
+ private finishWindowClose;
1586
1976
  private captureActiveConversation;
1977
+ private captureFocusedConversation;
1978
+ private restoreFocusedConversation;
1587
1979
  private restoreActiveConversation;
1588
- private resolveAnchorElement;
1589
- private normalizePlacement;
1590
- private applyFixedPosition;
1591
1980
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPanelService, never>;
1592
1981
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatPanelService>;
1593
1982
  }
@@ -1604,7 +1993,7 @@ declare class AXMMiniChatLauncherComponent {
1604
1993
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1605
1994
  readonly title: _angular_core.InputSignal<string | undefined>;
1606
1995
  /** Placement relative to the FAB when no custom {@link position} is set. Default: `top-end`. */
1607
- 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">;
1608
1997
  readonly offsetX: _angular_core.InputSignal<number>;
1609
1998
  readonly offsetY: _angular_core.InputSignal<number>;
1610
1999
  private readonly fabRef;
@@ -1613,64 +2002,185 @@ declare class AXMMiniChatLauncherComponent {
1613
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>;
1614
2003
  }
1615
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
+
1616
2062
  /**
1617
- * 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.
1618
2065
  */
1619
2066
  declare class AXMMiniChatPanelComponent implements OnInit, OnDestroy {
1620
2067
  private readonly conversationService;
1621
2068
  private readonly conversationApi;
1622
- private readonly realtimeBus;
2069
+ private readonly pageContext;
2070
+ private readonly localeService;
2071
+ private readonly device;
1623
2072
  private readonly destroyRef;
2073
+ protected readonly pageContextChips: AXMMiniChatPageContextChipsService;
2074
+ private readonly localeProfile;
1624
2075
  readonly scope: _angular_core.InputSignal<AXMMiniChatPanelScope>;
2076
+ readonly presentation: _angular_core.InputSignal<AXMMiniChatPanelPresentation>;
1625
2077
  readonly entityId: _angular_core.InputSignal<string | undefined>;
1626
2078
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1627
2079
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1628
- readonly title: _angular_core.InputSignal<string>;
2080
+ readonly title: _angular_core.InputSignal<string | undefined>;
1629
2081
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1630
2082
  readonly showComposer: _angular_core.InputSignal<boolean>;
1631
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>;
1632
2088
  readonly initialView: _angular_core.InputSignal<"thread" | "history">;
1633
2089
  readonly initialConversationId: _angular_core.InputSignal<string | undefined>;
1634
2090
  readonly startWithNewChat: _angular_core.InputSignal<boolean>;
2091
+ readonly launchContext: _angular_core.InputSignal<AXMContextualAssistContext | undefined>;
1635
2092
  readonly onSessionChange: _angular_core.InputSignal<((state: Pick<AXMMiniChatPanelSessionState, "view" | "selectedChatId">) => void) | undefined>;
1636
2093
  protected readonly view: _angular_core.WritableSignal<"thread" | "history">;
1637
2094
  protected readonly selectedChatId: _angular_core.WritableSignal<string | undefined>;
1638
- protected readonly historyHasItems: _angular_core.WritableSignal<boolean>;
1639
2095
  protected readonly isInboxScope: _angular_core.Signal<boolean>;
1640
- /** Bumps when shared conversation storage changes so the header title stays in sync. */
1641
- private readonly storageRevision;
1642
- /** Active conversation title for the thread header; null when none is selected yet. */
1643
- protected readonly headerTitle: _angular_core.Signal<string | null>;
1644
- private readonly cachedHeaderTitle;
1645
- 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">;
1646
2109
  ngOnInit(): void;
1647
2110
  ngOnDestroy(): void;
1648
2111
  protected closePanel(): void;
2112
+ protected minimizePanel(): void;
2113
+ protected toggleMaximizePanel(): void;
2114
+ protected backToThread(): void;
1649
2115
  protected openHistory(): void;
1650
- protected onHistoryHasConversationsChange(hasItems: boolean): void;
1651
2116
  protected selectChat(conversationId: string): void;
1652
2117
  protected onConversationOpened(conversationId: string): void;
1653
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;
1654
2124
  private syncSession;
1655
2125
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPanelComponent, never>;
1656
- 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>;
1657
2127
  }
1658
2128
 
1659
2129
  /**
1660
- * Compact, entity-scoped chat: renders a single conversation thread (message list) with an optional
1661
- * info-bar and composer. Opens an existing chat by {@link chatId}, or starts a new entity assist chat
1662
- * (created lazily on first send and tagged with `entityId` / `entityType` in conversation metadata).
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>;
2156
+ }
2157
+
2158
+ /**
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).
1663
2172
  *
1664
- * Uses the shared {@link AXConversationService} (same instance as the main chat page) so message
1665
- * streams, realtime updates, and assist replies behave identically. Selecting a chat / starting a
1666
- * 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.
1667
2175
  */
1668
2176
  declare class AXMMiniChatComponent {
1669
2177
  #private;
1670
2178
  private readonly conversationService;
1671
2179
  private readonly popupService;
1672
2180
  private readonly conversationApi;
2181
+ private readonly assistResponse;
1673
2182
  private readonly destroyRef;
2183
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
1674
2184
  /** Existing conversation id to open. When omitted (and no conversation is active), the new-chat composer is shown. */
1675
2185
  readonly chatId: _angular_core.InputSignal<string | undefined>;
1676
2186
  /** Entity reference the chat is (or will be) bound to; omitted for inbox (regular) chats. */
@@ -1678,6 +2188,8 @@ declare class AXMMiniChatComponent {
1678
2188
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1679
2189
  /** Assist used as the bot peer when creating a new entity chat (falls back to the tenant default). */
1680
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>;
1681
2193
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1682
2194
  readonly showComposer: _angular_core.InputSignal<boolean>;
1683
2195
  /** Emits the active conversation id when one is opened or newly created. */
@@ -1687,9 +2199,12 @@ declare class AXMMiniChatComponent {
1687
2199
  /** Opens the conversation info panel when the info-bar title/avatar area is clicked. */
1688
2200
  onInfoBarClick(): void;
1689
2201
  /** New-chat composer created and selected a conversation; surface it to the host. */
2202
+ readonly onAssistConversationCreated: (conversationId: string) => void;
1690
2203
  onConversationCreated(conversationId: string): void;
2204
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
2205
+ onComposerGenerationCancelled(): void;
1691
2206
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatComponent, never>;
1692
- 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>;
1693
2208
  }
1694
2209
 
1695
2210
  /** Fired after a user message is persisted — triggers assist, auto-reply, and realtime side effects. */
@@ -1711,5 +2226,5 @@ declare const CONVERSATION_START_DIRECT_CHAT_COMMAND = "Conversation:StartDirect
1711
2226
  /** Opens an existing conversation in the chat app. */
1712
2227
  declare const CONVERSATION_OPEN_CHAT_COMMAND = "Conversation:OpenChat";
1713
2228
 
1714
- 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 };
1715
- 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 };