@acorex-platform/module-conversation-client 0.0.38 → 0.0.48

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 (74) 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-DcdPViNy.mjs} +11480 -8695
  2. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-DcdPViNy.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-Cf1zPn3u.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-Cf1zPn3u.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-R40vR1C3.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-R40vR1C3.mjs.map} +1 -1
  7. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-CUlLCsF6.mjs +1756 -0
  8. package/fesm2022/acorex-platform-module-conversation-client-assist-message-renderer.component-CUlLCsF6.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-B7LW5ie9.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-B7LW5ie9.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-DiA01mpJ.mjs} +747 -25
  12. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-DiA01mpJ.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-nLVRg9HK.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-nLVRg9HK.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-C0JLE_oX.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-C0JLE_oX.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 +860 -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-CIT6UHfK.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-CIT6UHfK.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-kTWhndd2.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-kTWhndd2.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-pKO5UqyB.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-pKO5UqyB.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-BbQHG28M.mjs} +7 -2
  55. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-BbQHG28M.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-module-conversation-client.mjs +2 -1
  57. package/fesm2022/acorex-platform-module-conversation-client.mjs.map +1 -1
  58. package/package.json +14 -2
  59. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-audience.d.ts +5 -0
  60. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-post.d.ts +5 -0
  61. package/types/acorex-platform-module-conversation-client-contracts-entities-channel-receipt.d.ts +5 -0
  62. package/types/acorex-platform-module-conversation-client-contracts.d.ts +451 -2
  63. package/types/acorex-platform-module-conversation-client.d.ts +889 -202
  64. package/fesm2022/acorex-platform-module-conversation-client-acorex-platform-module-conversation-client-XTzQQhii.mjs.map +0 -1
  65. package/fesm2022/acorex-platform-module-conversation-client-assist-tool-detail-popup.component-BV1YH96m.mjs +0 -120
  66. package/fesm2022/acorex-platform-module-conversation-client-chat-call-session-page.component-nE7xP4bF.mjs.map +0 -1
  67. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs +0 -482
  68. package/fesm2022/acorex-platform-module-conversation-client-chat-conversation-info-panel.component-51PtojIM.mjs.map +0 -1
  69. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs +0 -52
  70. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-acorex-platform-module-conversation-client-contracts-entity-catalog-Cy3LwYMZ.mjs.map +0 -1
  71. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-message.entity-Dz7cO1P4.mjs.map +0 -1
  72. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs +0 -263
  73. package/fesm2022/acorex-platform-module-conversation-client-contracts-entity-catalog-room.entity-B9txvc3y.mjs.map +0 -1
  74. package/fesm2022/acorex-platform-module-conversation-client-sync-read-state.command-DxccFsD9.mjs.map +0 -1
@@ -1,19 +1,23 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Provider, InjectionToken, Type, Signal, OnInit, ElementRef, OnDestroy } from '@angular/core';
2
+ import { Provider, ElementRef, InjectionToken, Type, Signal, OnInit, 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 as AXMCommentEntityData$1, AXReaction, AXMessagePayload, AXMReactionType } from '@acorex-platform/module-conversation-client/contracts';
10
+ import { Routes } from '@angular/router';
11
+ import { AXClickEvent, AXPlacement, AXStyleLookType } 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';
15
+ import { AXMCommentEntityData, AXMContextualAssistContext } from '@acorex-platform/module-conversation-client/contracts';
16
+ export { AXMContextualAssistContext, AXM_CONTEXTUAL_ASSIST_KIND_ENTITY_RECORD } from '@acorex-platform/module-conversation-client/contracts';
13
17
  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
18
  import { AXPEntityDefinitionRegistryService, AXPEntityActionPlugin } from '@acorex-platform/framework-client/layout/entity';
19
+ import { AXPopupRef, AXPopupComponentBase } from '@acorex/components/popup';
20
+ import { AXPAiChatResponse, AXPAiChatMessage, AXPAiChatFollowUpItem } from '@acorex-platform/module-ai-management-client';
17
21
  import * as _angular_platform_browser from '@angular/platform-browser';
18
22
  import { AXWysiwygContainerComponent } from '@acorex/components/wysiwyg';
19
23
  import { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';
@@ -42,11 +46,129 @@ declare class AXMConversationAssistBackgroundOperationHandler extends AXPBackgro
42
46
  }
43
47
  declare const AXM_CONVERSATION_ASSIST_BACKGROUND_OPERATION_HANDLERS: Provider[];
44
48
 
49
+ declare class AXMChannelFeedPage extends AXPPageLayoutBaseComponent {
50
+ private readonly queryService;
51
+ private readonly commandService;
52
+ private readonly tagService;
53
+ private readonly unreadBadge;
54
+ protected readonly loading: _angular_core.WritableSignal<boolean>;
55
+ protected readonly loadingMore: _angular_core.WritableSignal<boolean>;
56
+ protected readonly loadFailed: _angular_core.WritableSignal<boolean>;
57
+ protected readonly items: _angular_core.WritableSignal<readonly AXMChannelFeedItem[]>;
58
+ protected readonly hasMore: _angular_core.WritableSignal<boolean>;
59
+ protected readonly filterDefinitions: _angular_core.WritableSignal<AXPFilterDefinition[]>;
60
+ protected readonly panelInitialFilters: _angular_core.WritableSignal<AXPFilterQuery[]>;
61
+ protected readonly queryFiltersKey: _angular_core.WritableSignal<number>;
62
+ private readonly activeFilters;
63
+ private skip;
64
+ protected readonly skeletonPlaceholders: number[];
65
+ readonly hasActiveFilters: _angular_core.Signal<boolean>;
66
+ protected readonly visible: _angular_core.Signal<AXMChannelFeedItem[]>;
67
+ private readonly searchText;
68
+ private readonly isUnreadFilterActive;
69
+ private readonly isPinnedFilterActive;
70
+ private readonly tagFilter;
71
+ ngOnInit(): Promise<void>;
72
+ getPageTitle(): string;
73
+ getPageIcon(): string | null;
74
+ getPageDescription(): string;
75
+ getSecondaryMenuItems(): Promise<AXPActionMenuItem[]>;
76
+ execute(command: AXPExecuteCommand): Promise<void>;
77
+ protected handleFiltersChanged(filters: AXPFilterQuery[]): void;
78
+ protected clearFilters(): void;
79
+ protected onItemSeen(id: string): void;
80
+ protected retry(): void;
81
+ protected onInfiniteScrollReached(): void;
82
+ protected emptyTitle(): string;
83
+ protected emptyDescription(): string;
84
+ private loadMore;
85
+ private loadFeed;
86
+ private markRead;
87
+ private loadFilterDefinitions;
88
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChannelFeedPage, never>;
89
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMChannelFeedPage, "axm-channel-feed-page", never, {}, {}, never, never, true, never>;
90
+ }
91
+
92
+ declare const channelFeedPageRoutes: Routes;
93
+
94
+ type ChannelFeedItemChrome = 'card' | 'bubble';
95
+ type ChannelFeedTagView = {
96
+ title: AXPMultiLanguageString;
97
+ color: string;
98
+ trackKey: string;
99
+ };
100
+ declare class AXMChannelFeedItemComponent {
101
+ private readonly userAvatarService;
102
+ private readonly tagService;
103
+ private readonly commandService;
104
+ private readonly commentManagement;
105
+ private readonly translation;
106
+ private readonly host;
107
+ private readonly destroyRef;
108
+ private readonly injector;
109
+ item: _angular_core.InputSignal<AXMChannelFeedItem>;
110
+ /** `card` is the announcements page. `bubble` sits inside a conversation bubble. */
111
+ chrome: _angular_core.InputSignal<ChannelFeedItemChrome>;
112
+ itemSeen: _angular_core.OutputEmitterRef<string>;
113
+ private readonly bodyEl;
114
+ protected readonly expanded: _angular_core.WritableSignal<boolean>;
115
+ protected readonly authorName: _angular_core.WritableSignal<string>;
116
+ protected readonly canExpand: _angular_core.WritableSignal<boolean>;
117
+ protected readonly commentsBusy: _angular_core.WritableSignal<boolean>;
118
+ private readonly availableTags;
119
+ private readonly commentCountOverride;
120
+ private lastCommentPostId;
121
+ protected readonly isUnread: _angular_core.Signal<boolean>;
122
+ protected readonly gallery: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFileListItem[]>;
123
+ protected readonly attachments: _angular_core.Signal<_acorex_platform_framework_shared_core.AXPFileListItem[]>;
124
+ protected readonly publishedAt: _angular_core.Signal<Date | null>;
125
+ protected readonly eventStartsAt: _angular_core.Signal<Date | null>;
126
+ protected readonly hasEventLocation: _angular_core.Signal<boolean>;
127
+ protected readonly commentCount: _angular_core.Signal<number>;
128
+ protected readonly tags: _angular_core.Signal<ChannelFeedTagView[]>;
129
+ constructor();
130
+ protected toggleBody(event: Event): void;
131
+ protected openComments(event: AXClickEvent): void;
132
+ private showCommentsPopup;
133
+ private refreshCommentCount;
134
+ private updateCanExpand;
135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChannelFeedItemComponent, never>;
136
+ 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>;
137
+ }
138
+
139
+ /**
140
+ * Bridges platform theme/locale into `@acorex/components/conversation`.
141
+ *
142
+ * Showcase chat calls `AXPlatform.switchLightMode()` / `AXLocaleService.setProfile()` directly,
143
+ * so wallpaper and `translateSync` labels update immediately. The platform shell instead
144
+ * toggles `ax-dark` via {@link AXPLayoutThemeService} and keeps the chat page OnPush —
145
+ * conversation computeds that depend on `AXPlatform.themeMode()` never re-run, and
146
+ * `@acorex:chat` JSON for the new locale is not preloaded until a full refresh.
147
+ */
148
+ declare class AXMConversationAppearanceSyncService {
149
+ private readonly layoutTheme;
150
+ private readonly platform;
151
+ private readonly translation;
152
+ private readonly destroyRef;
153
+ private readonly revision;
154
+ /** Stable one-item list so `@for (key of viewKeys(); track key)` remounts conversation widgets. */
155
+ readonly viewKeys: _angular_core.Signal<number[]>;
156
+ constructor();
157
+ /** Ensures constructor effects are created at app start (called from the conversation startup task). */
158
+ start(): void;
159
+ private syncPlatformTheme;
160
+ private toAxThemeMode;
161
+ private preloadChatLocales;
162
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMConversationAppearanceSyncService, never>;
163
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMConversationAppearanceSyncService>;
164
+ }
165
+
45
166
  declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
46
167
  #private;
47
168
  private readonly conversationService;
48
169
  private readonly popupService;
49
170
  private readonly chatConversationApi;
171
+ private readonly assistResponse;
50
172
  private readonly miniChatPanelService;
51
173
  private readonly activeCallSessions;
52
174
  private readonly composerService;
@@ -58,6 +180,7 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
58
180
  private readonly badgeService;
59
181
  protected readonly deviceService: AXPDeviceService;
60
182
  private readonly destroyRef;
183
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
61
184
  private readonly routeConversationId;
62
185
  private readonly routerUrl;
63
186
  ngOnInit(): Promise<void>;
@@ -65,7 +188,9 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
65
188
  * Computed signal to check if there is an active conversation selected.
66
189
  */
67
190
  readonly hasActiveConversation: _angular_core.Signal<boolean>;
191
+ readonly hidePageComposer: _angular_core.Signal<boolean>;
68
192
  readonly showChatList: _angular_core.Signal<boolean>;
193
+ readonly isAnnouncementChannelActive: _angular_core.Signal<boolean>;
69
194
  /**
70
195
  * Unread messages in other chats (excludes the open conversation), for the mobile back control.
71
196
  */
@@ -75,13 +200,16 @@ declare class AXMChatComponent extends AXPPageLayoutBaseComponent {
75
200
  * Navigates to the selected conversation route.
76
201
  * @param conversationId - The ID of the selected conversation.
77
202
  */
78
- onConversationSelected(conversationId: string): void;
203
+ readonly onAssistConversationCreated: (conversationId: string) => Promise<void>;
204
+ onConversationSelected(conversationId: string): Promise<void>;
79
205
  /** Mobile back: return to the full-screen conversation list (no layout sidebar). */
80
206
  openChatList(): void;
81
207
  /**
82
208
  * Opens the platform conversation info panel when the info-bar title/avatar area is clicked.
83
209
  */
84
210
  onInfoBarClick(): void;
211
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
212
+ onComposerGenerationCancelled(): void;
85
213
  /**
86
214
  * Handles Escape key from chat container.
87
215
  * Replicates conversation source behavior by closing active conversation here.
@@ -103,6 +231,232 @@ declare function persistChatAttachment(fileStorage: AXPFileStorageService, file:
103
231
  fileId: string;
104
232
  }>;
105
233
 
234
+ /** Entity reference an entity-scoped chat is bound to (stored in conversation metadata). */
235
+ interface AXMEntityChatRef {
236
+ entityId: string;
237
+ entityType: string;
238
+ }
239
+ /** Room fields used to decide whether a chat belongs on the main inbox. */
240
+ interface AXMEntityChatRoomRef {
241
+ metadata?: Record<string, unknown>;
242
+ entityRef?: Pick<AXMCommentEntityData, 'entityId' | 'entityTypeId'> | null;
243
+ }
244
+ /** Room metadata flag: entity mini-chats stay off `/chat/`; header inbox chats omit this. */
245
+ declare const AXM_MINI_CHAT_SCOPE_METADATA_KEY = "miniChatScope";
246
+ declare const AXM_MINI_CHAT_SCOPE_ENTITY = "entity";
247
+ /**
248
+ * Synthetic record id for Ask AI on an entity **list** (no row id).
249
+ * Keeps list history on that page and out of the main chat sidebar.
250
+ */
251
+ declare const AXM_ENTITY_LIST_CHAT_ID = "__entity-list__";
252
+ /**
253
+ * Conversation metadata for an entity-scoped assist chat.
254
+ * Keeps `assistId` so the existing assist reply pipeline still answers in entity chats.
255
+ */
256
+ declare function axmBuildEntityChatConversationMetadata(args: {
257
+ entityId: string;
258
+ entityType: string;
259
+ assistId: string;
260
+ }): Record<string, unknown>;
261
+ /**
262
+ * `AXConversationService.createConversation` stores the whole UI options object as
263
+ * `room.metadata`, nesting real keys under `metadata.metadata`. Flatten so entity
264
+ * flags sit at the top level for inbox filters and `entityRef`.
265
+ */
266
+ declare function axmFlattenConversationCreateMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
267
+ /**
268
+ * Resolves the entity reference from conversation metadata.
269
+ * `AXConversationService.createConversation` may nest the UI object, so values
270
+ * are also probed at `metadata.metadata.*`.
271
+ */
272
+ declare function axmExtractEntityRefFromMetadata(metadata: Record<string, unknown> | undefined): AXMEntityChatRef | undefined;
273
+ /** Entity id/type from a contextual-assist launch payload (entity row / details). */
274
+ declare function axmEntityRefFromLaunchContext(launch: AXMContextualAssistContext | undefined): AXMEntityChatRef | undefined;
275
+ /** True when the conversation is bound to an entity page (not the site-header inbox). */
276
+ declare function axmConversationIsEntityChat(metadata: Record<string, unknown> | undefined): boolean;
277
+ /** True when conversation metadata targets the given entity reference. */
278
+ declare function axmConversationMatchesEntity(metadata: Record<string, unknown> | undefined, ref: AXMEntityChatRef): boolean;
279
+ /**
280
+ * True when a persisted room is an entity-scoped chat (metadata and/or `entityRef`).
281
+ * Header / inbox AI chats have neither; they belong on `/chat/`.
282
+ */
283
+ declare function axmRoomIsEntityChat(room: AXMEntityChatRoomRef | null | undefined): boolean;
284
+ /** True when a room is bound to the given entity via metadata or `entityRef`. */
285
+ declare function axmRoomMatchesEntity(room: AXMEntityChatRoomRef | null | undefined, ref: AXMEntityChatRef): boolean;
286
+ /**
287
+ * Persisted `entityRef` for an entity-scoped chat room so history can query by record
288
+ * and the main inbox can exclude the room (comment threads use `kind: 'comment'`).
289
+ */
290
+ declare function axmBuildEntityChatRoomEntityRef(metadata: Record<string, unknown> | undefined): AXMCommentEntityData | undefined;
291
+ /** Launch context stored on a chat room, including the nested metadata shape. */
292
+ declare function axmRoomLaunchContext(room: AXMEntityChatRoomRef | null | undefined): AXMContextualAssistContext | undefined;
293
+
294
+ type AXMMiniChatContextChipKind = 'entity' | 'view' | 'record';
295
+ interface AXMMiniChatContextChip {
296
+ id: string;
297
+ kind: AXMMiniChatContextChipKind;
298
+ label: string;
299
+ }
300
+ interface AXMMiniChatPageContextDraft {
301
+ moduleName: string;
302
+ entityName: string;
303
+ entityTitle: string;
304
+ entityKey: string;
305
+ viewName?: string;
306
+ viewTitle?: string;
307
+ viewKey: string;
308
+ includeView: boolean;
309
+ records: Array<{
310
+ id: string;
311
+ title: string;
312
+ }>;
313
+ selectionKey: string;
314
+ }
315
+
316
+ /** Anchor element for overlay positioning. */
317
+ type AXMMiniChatPanelAnchor = Element | ElementRef<HTMLElement>;
318
+ /**
319
+ * Common placement aliases mapped to {@link AXPlacement}.
320
+ * Examples: `top-right` → `top-end`, `bottom-left` → `bottom-start`.
321
+ */
322
+ type AXMMiniChatPanelSide = AXPlacement | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right';
323
+ /** Fixed viewport coordinates (px). Ignored when `anchor` is set. */
324
+ interface AXMMiniChatPanelPosition {
325
+ x: number;
326
+ y: number;
327
+ }
328
+ /** Mini chat panel scope: entity-bound threads or main inbox (non-entity chats). */
329
+ type AXMMiniChatPanelScope = 'entity' | 'inbox';
330
+ /**
331
+ * Who picks the assist on a new mini-chat thread.
332
+ * `ask` prompts before the first message (header inbox).
333
+ * `locked` keeps the caller assist and hides the picker (form designer).
334
+ * `optional` preselects the tenant default and still allows a change.
335
+ */
336
+ type AXMMiniChatAssistSelection = 'ask' | 'locked' | 'optional';
337
+ /**
338
+ * How the shared panel is hosted.
339
+ * `overlay` is the floating window (header / entity pages).
340
+ * `embedded` fills the host (entity record details, later).
341
+ */
342
+ type AXMMiniChatPanelPresentation = 'overlay' | 'embedded';
343
+ /** Session key used for the global inbox mini chat (non-entity conversations). */
344
+ declare const AXM_MINI_CHAT_INBOX_SESSION_KEY = "__inbox__";
345
+ /** Popup dock name for minimized mini-chat tabs in the root footer. */
346
+ declare const AXM_MINI_CHAT_POPUP_DOCK = "mini-chat";
347
+ /** Persisted panel state for a mini chat session. */
348
+ interface AXMMiniChatPanelSessionState {
349
+ view: 'thread' | 'history';
350
+ selectedChatId?: string;
351
+ hasOpened: boolean;
352
+ /** Page the thread belongs to (`Module.Entity:id`, `Module.Entity:list`, or `global`). */
353
+ pageKey?: string;
354
+ }
355
+ /** Options passed to {@link AXMMiniChatPanelService.open}. */
356
+ interface AXMMiniChatPanelOpenOptions {
357
+ /** Default: `entity`. Use `inbox` for regular (non-entity) chats shown in the main chat sidebar. */
358
+ scope?: AXMMiniChatPanelScope;
359
+ entityId?: string;
360
+ entityType?: string;
361
+ assistId?: string;
362
+ /** Default: `optional`. Header inbox uses `ask`; form designer uses `locked`. */
363
+ assistSelection?: AXMMiniChatAssistSelection;
364
+ title?: string;
365
+ showInfoBar?: boolean;
366
+ showComposer?: boolean;
367
+ /** Default: `overlay`. Use `embedded` when the panel is inlined in a page. */
368
+ presentation?: AXMMiniChatPanelPresentation;
369
+ /** Fixed viewport position (px). Ignored when `anchor` is set. */
370
+ position?: AXMMiniChatPanelPosition;
371
+ /** Anchor element for popover placement. */
372
+ anchor?: AXMMiniChatPanelAnchor;
373
+ /** Placement relative to anchor. Default: `top-end` when anchored. */
374
+ placement?: AXMMiniChatPanelSide;
375
+ offsetX?: number;
376
+ offsetY?: number;
377
+ autoFlip?: boolean;
378
+ /** When true, always opens a fresh conversation thread. */
379
+ forceNewChat?: boolean;
380
+ /** Default: true. Form-designer assist hides this control. */
381
+ minimizable?: boolean;
382
+ /**
383
+ * When true, the close button hides the live window instead of destroying it.
384
+ * The next open for the same session shows that same instance.
385
+ */
386
+ retainOnClose?: boolean;
387
+ /**
388
+ * Record/surface context for a new assist thread (entity-row assist).
389
+ * Stored on the room and used to generate contextual starter chips.
390
+ */
391
+ launchContext?: AXMContextualAssistContext;
392
+ }
393
+ /** Window controls exposed by the mini-chat popup host to {@link AXMMiniChatPanelService}. */
394
+ interface AXMMiniChatPopupWindowApi {
395
+ close(): void;
396
+ restore(): void;
397
+ minimize(): void;
398
+ maximize(): void;
399
+ hide(): void;
400
+ show(): void;
401
+ isMinimized(): boolean;
402
+ isMaximized(): boolean;
403
+ isHidden(): boolean;
404
+ }
405
+ /** Assigned onto {@link AXMMiniChatPopupWindowComponent} via popup `data`. */
406
+ interface AXMMiniChatPopupWindowData {
407
+ scope: AXMMiniChatPanelScope;
408
+ entityId?: string;
409
+ entityType?: string;
410
+ assistId?: string;
411
+ assistSelection: AXMMiniChatAssistSelection;
412
+ panelTitle?: string;
413
+ showInfoBar: boolean;
414
+ showComposer: boolean;
415
+ initialView: 'thread' | 'history';
416
+ initialConversationId?: string;
417
+ startWithNewChat: boolean;
418
+ launchContext?: AXMContextualAssistContext;
419
+ minimizable: boolean;
420
+ retainOnClose: boolean;
421
+ onSessionChange?: (state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void;
422
+ onVisibilityChange?: (visible: boolean) => void;
423
+ registerWindow?: (api: AXMMiniChatPopupWindowApi | null) => void;
424
+ }
425
+
426
+ /** Whose chats a mini-chat history list is allowed to show. */
427
+ type AXMMiniChatHistoryScope = {
428
+ mode: 'global';
429
+ } | {
430
+ mode: 'entity';
431
+ entityType: string;
432
+ entityIds: string[];
433
+ } | {
434
+ mode: 'launch';
435
+ kind: string;
436
+ actionName: string;
437
+ recordId: string;
438
+ };
439
+ /** Header chips: a record chip binds that record, an entity chip binds the list, neither is global. */
440
+ declare function axmMiniChatHistoryScopeFromDraft(draft: AXMMiniChatPageContextDraft | null, chips: readonly AXMMiniChatContextChip[]): AXMMiniChatHistoryScope;
441
+ /**
442
+ * Fixed surfaces (form designer, entity window).
443
+ * Plain header inbox returns null so the live chips decide.
444
+ */
445
+ declare function axmMiniChatHistoryScopeFromOpen(options: {
446
+ scope: AXMMiniChatPanelScope;
447
+ entityId?: string;
448
+ entityType?: string;
449
+ launchContext?: AXMContextualAssistContext;
450
+ }): AXMMiniChatHistoryScope | null;
451
+ /** Entity binding stamped on a new header chat so it stays out of global history. */
452
+ declare function axmEntityRefForMiniChatPageContext(launch: AXMContextualAssistContext | undefined): AXMEntityChatRef | undefined;
453
+ declare function axmMiniChatHistoryScopeKey(scope: AXMMiniChatHistoryScope): string;
454
+ /** Chats with no entity and no surface context. These are the only rooms on `/chat/`. */
455
+ declare function axmConversationIsGlobalChat(room: AXMEntityChatRoomRef | null | undefined): boolean;
456
+ declare function axmConversationMatchesHistoryScope(room: AXMEntityChatRoomRef | null | undefined, scope: AXMMiniChatHistoryScope): boolean;
457
+ /** True when this open window still belongs to the route the user is on. Header inbox follows every route. */
458
+ declare function axmMiniChatWindowOwnsRoute(options: Pick<AXMMiniChatPanelOpenOptions, 'scope' | 'entityId' | 'entityType' | 'launchContext'>, params: Record<string, string>): boolean;
459
+
106
460
  /** User profile, discovery, and presence for conversation chat. */
107
461
  declare abstract class AXMChatUserApi extends AXConversationUserApi {
108
462
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatUserApi, never>;
@@ -117,6 +471,8 @@ declare abstract class AXMChatConversationApi extends AXConversationApi {
117
471
  * Bypasses the regular inbox filtering so entity chats remain discoverable per entity.
118
472
  */
119
473
  abstract findEntityConversations(entityType: string, entityId: string): Promise<AXConversation[]>;
474
+ /** Chat rooms that belong to one mini-chat history scope (global, entity, or a surface such as form designer). */
475
+ abstract findHistoryConversations(scope: AXMMiniChatHistoryScope): Promise<AXConversation[]>;
120
476
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatConversationApi, never>;
121
477
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatConversationApi>;
122
478
  }
@@ -136,6 +492,45 @@ declare abstract class AXMChatRealtimeApi extends AXConversationRealtimeApi {
136
492
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatRealtimeApi>;
137
493
  }
138
494
 
495
+ /**
496
+ * Ensures the tenant announcements channel exists and loads feed rows as chat messages.
497
+ */
498
+ declare class AXMChatAnnouncementChannelService {
499
+ private readonly entityService;
500
+ private readonly filterService;
501
+ private readonly queryService;
502
+ private readonly session;
503
+ private readonly translation;
504
+ private readonly locale;
505
+ private readonly userApi;
506
+ private subscriberCountCache;
507
+ private unreadByRoomCache;
508
+ private readonly roomData;
509
+ private readonly feedMessageCache;
510
+ canViewBulletins(): boolean;
511
+ isAnnouncementChannel(value: {
512
+ name?: string | null;
513
+ metadata?: Record<string, unknown> | null;
514
+ } | null | undefined): boolean;
515
+ isChannelRoom(value: {
516
+ kind?: string | null;
517
+ type?: string | null;
518
+ name?: string | null;
519
+ metadata?: Record<string, unknown> | null;
520
+ } | null | undefined): boolean;
521
+ ensureRoom(): Promise<AXMConversationRoom | null>;
522
+ findRoom(): Promise<AXMConversationRoom | null>;
523
+ decorateConversation(conversation: AXConversation): Promise<AXConversation>;
524
+ private resolveUnreadByRoom;
525
+ private resolveSubscriberCount;
526
+ getCachedFeedMessage(messageId: string): AXConversationMessage | null;
527
+ getFeedMessages(conversationId: string, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
528
+ searchFeedMessages(conversationId: string, query: string | undefined, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
529
+ private createRoom;
530
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatAnnouncementChannelService, never>;
531
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatAnnouncementChannelService>;
532
+ }
533
+
139
534
  /**
140
535
  * Entity-backed implementation of {@link AXMChatConversationApi} using Conversation.room.
141
536
  */
@@ -148,6 +543,8 @@ declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
148
543
  private readonly realtimeBus;
149
544
  private readonly focusHandler;
150
545
  private readonly roomQuery;
546
+ private readonly announcements;
547
+ private readonly commandService;
151
548
  private readonly roomData;
152
549
  reportFocusedConversation(conversationId: string | null): void;
153
550
  private publishConversationPatch;
@@ -167,6 +564,7 @@ declare class AXMChatEntityConversationApi extends AXMChatConversationApi {
167
564
  searchConversations(query: string): Promise<AXConversation[]>;
168
565
  filterConversations(filters: AXConversationFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversation>>;
169
566
  findEntityConversations(entityType: string, entityId: string): Promise<AXConversation[]>;
567
+ findHistoryConversations(scope: AXMMiniChatHistoryScope): Promise<AXConversation[]>;
170
568
  getParticipants(conversationId: string): Promise<AXConversationParticipant[]>;
171
569
  addParticipants(conversationId: string, userIds: string[]): Promise<AXConversation>;
172
570
  /**
@@ -223,10 +621,13 @@ declare class AXMChatEntityConversationFocusHandler {
223
621
  declare class AXMChatEntityConversationRoomQueryService {
224
622
  private readonly entityService;
225
623
  private readonly filterService;
624
+ private readonly session;
226
625
  private readonly userApi;
227
626
  private readonly roomData;
228
627
  private readonly messageData;
229
628
  loadChatRooms(): Promise<AXMConversationRoom[]>;
629
+ /** Every chat room the current user can open, including entity and surface mini chats. */
630
+ loadAccessibleChatRooms(): Promise<AXMConversationRoom[]>;
230
631
  enrichRoom(room: AXMConversationRoom, options?: {
231
632
  probeLastMessage?: boolean;
232
633
  currentUserId?: string;
@@ -270,7 +671,9 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
270
671
  private readonly userApi;
271
672
  private readonly commandService;
272
673
  private readonly assistResponse;
674
+ private readonly generationState;
273
675
  private readonly conversationStore;
676
+ private readonly announcements;
274
677
  private readonly realtime;
275
678
  private readonly typingStopTimers;
276
679
  private readonly typingEmitState;
@@ -278,6 +681,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
278
681
  private static readonly TYPING_STOP_IDLE_MS;
279
682
  private readonly messageData;
280
683
  private readonly roomData;
684
+ private readonly receiptData;
685
+ private readonly cancelAssistOnComposerStop;
281
686
  private requireConversationParticipant;
282
687
  private loadConversationMessages;
283
688
  private paginateMessages;
@@ -290,6 +695,8 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
290
695
  editMessage(messageId: string, payload: AXConversationMessagePayload): Promise<AXConversationMessage>;
291
696
  deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
292
697
  deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
698
+ private isAssistUserTextEdit;
699
+ private dropMessagesAfterAssistEdit;
293
700
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
294
701
  searchMessages(conversationId: string, filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
295
702
  searchAllMessages(filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
@@ -299,7 +706,7 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
299
706
  getAvailableReactions(): Promise<string[]>;
300
707
  markAsRead(conversationId: string, messageIds: string[]): Promise<void>;
301
708
  markAsUnread(conversationId: string): Promise<void>;
302
- getReadReceipts(_messageId: string): Promise<AXConversationReadReceipt[]>;
709
+ getReadReceipts(messageId: string): Promise<AXConversationReadReceipt[]>;
303
710
  markMessagesAsRead(messageIds: string[]): Promise<void>;
304
711
  forwardMessage(_data: AXConversationMessageForwardData): Promise<AXConversationMessage[]>;
305
712
  pinMessage(conversationId: string, messageId: string): Promise<void>;
@@ -313,13 +720,16 @@ declare class AXMChatEntityMessageApi extends AXMChatMessageApi {
313
720
  updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
314
721
  getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
315
722
  updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
316
- getMessageDeliveryStatus(_messageId: string): Promise<{
723
+ getMessageDeliveryStatus(messageId: string): Promise<{
317
724
  delivered: number;
318
725
  read: number;
319
726
  total: number;
320
727
  }>;
321
728
  bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
322
729
  exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
730
+ private markChannelPostsRead;
731
+ private resolveChannelPostId;
732
+ private queryPostReceipts;
323
733
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatEntityMessageApi, never>;
324
734
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatEntityMessageApi>;
325
735
  }
@@ -369,6 +779,8 @@ declare class AXMChatEntityUserApi extends AXMChatUserApi {
369
779
  updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationUser>;
370
780
  uploadAvatar(_file: File): Promise<string>;
371
781
  getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
782
+ /** Tenant-scoped directory size (includes the current user). */
783
+ countDirectoryUsers(): Promise<number>;
372
784
  searchUsers(query: string): Promise<AXConversationParticipant[]>;
373
785
  getUserById(userId: string): Promise<AXConversationParticipant>;
374
786
  getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
@@ -404,6 +816,10 @@ declare const AXM_CHAT_SIDEBAR_ACTION_PROVIDER: InjectionToken<AXMChatSidebarAct
404
816
 
405
817
  /** True when the conversation is an assist / AI bot chat. */
406
818
  declare function axmIsAssistBotConversation(conversation: AXConversation): boolean;
819
+ /** Inbox (`/chat/`) lists only global chats: no entity, record, or surface such as form designer. */
820
+ declare function axmExcludeEntityChatConversations(conversations: AXConversation[]): AXConversation[];
821
+ /** Wraps a sidebar tab so only global chats stay on the main chat list. */
822
+ declare function axmInboxConversationTab(tab: AXConversationTab): AXConversationTab;
407
823
  /** Sidebar tab for AI assist conversations (`type: 'bot'` or assist metadata). */
408
824
  declare const AXM_CONVERSATION_TAB_BOT: AXConversationTab;
409
825
 
@@ -450,6 +866,121 @@ interface AXMAssistConversationSnapshotLite {
450
866
  modelId?: string | null;
451
867
  }
452
868
 
869
+ /** Row shown in Conversation “Chat with AI” pickers (catalog assist). */
870
+ interface AXMChatAiTargetRow {
871
+ id: string;
872
+ name: string;
873
+ title: AXPMultiLanguageString | string;
874
+ description?: AXPMultiLanguageString | string;
875
+ professionImageUrl?: string;
876
+ }
877
+ /** Synthetic bot participant id for assist chats. */
878
+ declare function axmChatAiPeerParticipantId(catalogId: string): string;
879
+ /** Conversation metadata for starting an AI chat from a picker row. */
880
+ declare function axmBuildAiChatConversationMetadata(row: AXMChatAiTargetRow, assistSnapshot?: AXMAssistConversationSnapshotLite): Record<string, unknown>;
881
+ /** Loads assist rows for Conversation AI chat pickers. */
882
+ declare function axmLoadChatAiTargets(entityRegistry: AXPEntityDefinitionRegistryService): Promise<AXMChatAiTargetRow[]>;
883
+ /** Resolves ML or plain string for search/display. */
884
+ declare function axmResolveChatAiTargetText(resolveMl: (value: AXPMultiLanguageString) => string | undefined, value: AXPMultiLanguageString | string | undefined): string;
885
+ declare function axmChatAiTargetDisplayName(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string;
886
+ declare function axmChatAiTargetDisplayDescription(resolveMl: (value: AXPMultiLanguageString) => string | undefined, row: AXMChatAiTargetRow): string | undefined;
887
+ declare function axmChatAiTargetAvatarUrl(row: AXMChatAiTargetRow): string | null;
888
+ /** Fallback i18n key for rows with no catalog description. */
889
+ declare function axmChatAiTargetShortcutDescriptionKey(): string;
890
+ /** Same filter as {@link AXMChatWithAssistDialogComponent} target list search. */
891
+ declare function axmFilterChatAiTargets(resolveMl: (value: AXPMultiLanguageString) => string | undefined, rows: AXMChatAiTargetRow[], query: string): AXMChatAiTargetRow[];
892
+
893
+ type AXMChatEmptyAssistCreatedHandler = (conversationId: string) => void | Promise<void>;
894
+ type AXMChatEmptyAssistContinue = 'none' | 'send' | 'attach';
895
+ interface AXMChatEmptyAssistSessionBind {
896
+ selectedAssistId?: string;
897
+ rows?: readonly AXMChatAiTargetRow[];
898
+ entityId?: string;
899
+ entityType?: string;
900
+ launchContext?: AXMContextualAssistContext;
901
+ assistSelection?: AXMMiniChatAssistSelection;
902
+ }
903
+ /**
904
+ * Shared new-chat assist selection for the empty-state welcome UI and the real
905
+ * {@link AXConversationComposerComponent}. Creates the assist room on first send/attach
906
+ * so the library composer can upload files.
907
+ */
908
+ declare class AXMChatEmptyAssistSessionService {
909
+ private readonly injector;
910
+ private readonly conversationService;
911
+ private readonly composerService;
912
+ private readonly entityChatService;
913
+ private readonly pageContextChips;
914
+ private readonly translationService;
915
+ private readonly toastService;
916
+ private get conversationApi();
917
+ private get assistCatalog();
918
+ readonly rows: _angular_core.WritableSignal<AXMChatAiTargetRow[]>;
919
+ readonly selectedAssistId: _angular_core.WritableSignal<string | undefined>;
920
+ readonly entityId: _angular_core.WritableSignal<string | undefined>;
921
+ readonly entityType: _angular_core.WritableSignal<string | undefined>;
922
+ readonly launchContext: _angular_core.WritableSignal<AXMContextualAssistContext | undefined>;
923
+ readonly assistSelection: _angular_core.WritableSignal<AXMMiniChatAssistSelection>;
924
+ readonly assistPickerOpen: _angular_core.WritableSignal<boolean>;
925
+ private ensurePromise;
926
+ bind(input: AXMChatEmptyAssistSessionBind): void;
927
+ setSelectedAssistId(assistId: string | undefined): void;
928
+ openAssistPicker(): void;
929
+ closeAssistPicker(): void;
930
+ /**
931
+ * Creates the assist room only when the empty-state lookalike composer actually sends,
932
+ * then uploads any local files and delivers the first message.
933
+ */
934
+ sendWelcome(text: string, files: File[], onCreated?: AXMChatEmptyAssistCreatedHandler): Promise<string | null>;
935
+ /**
936
+ * Creates and selects an assist conversation when the composer has no active room,
937
+ * restoring any in-progress draft so send/attach can continue on the real composer.
938
+ */
939
+ ensureConversationPreservingDraft(onCreated?: AXMChatEmptyAssistCreatedHandler, continueWith?: AXMChatEmptyAssistContinue): Promise<string | null>;
940
+ private ensureConversationPreservingDraftCore;
941
+ private sendWelcomeCore;
942
+ private waitUntilAttachmentsSettled;
943
+ private sendRestoredDraft;
944
+ private createConversation;
945
+ private createAssistConversation;
946
+ private resolveEntityChatRef;
947
+ private launchMetadata;
948
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatEmptyAssistSessionService, never>;
949
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMChatEmptyAssistSessionService>;
950
+ }
951
+
952
+ /**
953
+ * Compact assist list opened from the composer sparkles action on a new chat.
954
+ */
955
+ declare class AXMChatComposerAssistPickerComponent {
956
+ readonly session: AXMChatEmptyAssistSessionService;
957
+ private readonly translationService;
958
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any> | undefined>;
959
+ assistLabel(title: AXPMultiLanguageString | string | undefined, fallback: string): string;
960
+ select(assistId: string): void;
961
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatComposerAssistPickerComponent, never>;
962
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMChatComposerAssistPickerComponent, "axm-chat-composer-assist-picker", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
963
+ }
964
+
965
+ /**
966
+ * Creates the assist conversation before the library composer sends or attaches files.
967
+ * {@link AXConversationComposerComponent} no-ops both paths when no room is selected.
968
+ */
969
+ declare class AXMChatComposerEnsureAssistConversationDirective {
970
+ private readonly hostRef;
971
+ private readonly conversationService;
972
+ private readonly composerService;
973
+ private readonly session;
974
+ private readonly destroyRef;
975
+ readonly conversationCreated: _angular_core.InputSignal<((conversationId: string) => void | Promise<void> | undefined) | undefined>;
976
+ constructor();
977
+ private onCaptureClick;
978
+ private onCaptureKeydown;
979
+ private shouldEnsureConversation;
980
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMChatComposerEnsureAssistConversationDirective, never>;
981
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXMChatComposerEnsureAssistConversationDirective, "ax-conversation-composer[axmEnsureAssistConversation]", never, { "conversationCreated": { "alias": "axmAssistConversationCreated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
982
+ }
983
+
453
984
  /**
454
985
  * Assist suggestion chips (starter prompts and engine {@code followUp} segments).
455
986
  * Each item runs its platform command via {@link AXPCommandService}.
@@ -458,24 +989,31 @@ declare class AXMAssistSuggestionChipsComponent {
458
989
  readonly items: _angular_core.InputSignal<AXPAiChatFollowUpItemLite[]>;
459
990
  /** Tighter chip layout for mini-chat and other narrow panels. */
460
991
  readonly compact: _angular_core.InputSignal<boolean>;
461
- /** When true, sends starter prompts via the local {@link AXConversationService} instead of routing to chat. */
992
+ /**
993
+ * When true, sends starter-prompt chips via the local {@link AXConversationService}
994
+ * instead of routing to the chat app. Follow-up chips also send in-place when this
995
+ * service already has an active conversation (header mini-chat overlay).
996
+ */
462
997
  readonly sendInPlace: _angular_core.InputSignal<boolean>;
463
998
  /** Disables all chips (e.g. parent composer is loading or sending). */
464
999
  readonly disabled: _angular_core.InputSignal<boolean>;
465
1000
  /** Emits when an in-place send creates a new conversation (mini chat empty state). */
466
1001
  readonly conversationCreated: _angular_core.OutputEmitterRef<string>;
467
1002
  protected readonly normalizedItems: _angular_core.Signal<AXPAiChatFollowUpItemLite[]>;
1003
+ protected readonly chipIcons: _angular_core.Signal<string[]>;
468
1004
  private readonly busy;
469
1005
  protected readonly isInteractionBlocked: _angular_core.Signal<boolean>;
470
1006
  private readonly commandService;
471
1007
  private readonly conversationService;
472
1008
  private readonly conversationApi;
473
1009
  private readonly entityChatService;
1010
+ private readonly pageContextChips;
474
1011
  private readonly assistCatalog;
475
1012
  private readonly translationService;
476
1013
  private readonly layoutTheme;
477
1014
  protected onChipClick(item: AXPAiChatFollowUpItemLite): Promise<void>;
478
1015
  protected resolveChipLabel(item: AXPAiChatFollowUpItemLite): string;
1016
+ private shouldSendAssistMessageInPlace;
479
1017
  private isSendAssistChatMessageCommand;
480
1018
  private resolveItemText;
481
1019
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMAssistSuggestionChipsComponent, never>;
@@ -495,7 +1033,11 @@ interface AXMAssistStarterPromptChipOptions {
495
1033
  /** Entity reference so a chip-created conversation stays bound to its entity (mini chat). */
496
1034
  entityId?: string;
497
1035
  entityType?: string;
1036
+ /** Merged into room metadata when a chip creates a new conversation. */
1037
+ launchContext?: AXMContextualAssistContext;
498
1038
  }
1039
+ /** Picks a chip icon from the prompt text; skips icons already used in the same list. */
1040
+ declare function axmAssistSuggestionIconForLabel(label: string, index?: number, taken?: ReadonlySet<string>): string;
499
1041
  /**
500
1042
  * Resolves a follow-up chip command for Conversation assist.
501
1043
  * AI follow-up output may use invalid `Registry:*` placeholders; those map to
@@ -526,6 +1068,8 @@ interface AXMSendAssistChatMessageOptions {
526
1068
  navigate?: boolean;
527
1069
  entityId?: string;
528
1070
  entityType?: string;
1071
+ /** Merged into room metadata only when this send creates a new conversation. */
1072
+ launchContext?: AXMContextualAssistContext;
529
1073
  }
530
1074
 
531
1075
  /**
@@ -537,6 +1081,8 @@ declare function axmReadAssistAiTranscript(metadata: unknown): AXPAiChatMessage[
537
1081
  /** Raw engine transcript (chronological), without debug UI reordering. */
538
1082
  declare function axmReadAssistAiTranscriptRaw(metadata: unknown): AXPAiChatMessage[];
539
1083
  declare function axmAssistWidgetNodeFromUnknown(content: unknown, depth?: number): AXPWidgetNode | null;
1084
+ /** Widget trees the chat layout renderer can host (not Form Template designer shells). */
1085
+ declare function axmChatRenderableAssistWidgetNode(content: unknown): AXPWidgetNode | null;
540
1086
  /** Stable identity for widget nodes so embedded JSON vs structured `node` segments dedupe despite key order. */
541
1087
  declare function axmAssistWidgetNodeDedupeKey(content: unknown): string;
542
1088
  declare function axmSyntheticEmbedMessage(parent: AXConversationMessage, suffix: string, partial: Pick<AXConversationMessage, 'type' | 'payload'>): AXConversationMessage;
@@ -592,7 +1138,9 @@ type AxmAssistUserVisibleItem = {
592
1138
  kind: 'followUp';
593
1139
  items: AXPAiChatFollowUpItem[];
594
1140
  };
595
- declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage): AxmAssistUserVisibleItem[];
1141
+ declare function axmAssistUserVisibleItemsForLine(line: AXPAiChatMessage, options?: {
1142
+ hideWidgetNodes?: boolean;
1143
+ }): AxmAssistUserVisibleItem[];
596
1144
  /** Parses a raw {@code followUp} segment for UI (normalizes chip commands). */
597
1145
  declare function axmAssistFollowUpItemsFromUnknown(raw: unknown): AXPAiChatFollowUpItem[];
598
1146
 
@@ -642,6 +1190,8 @@ declare function axmReadReplyToUserMessageId(metadata: unknown): string | undefi
642
1190
  declare function axmReadAssistResponseError(metadata: unknown): string | undefined;
643
1191
  declare function axmIsAssistRetryableStatus(status: AxmAssistResponseStatus): boolean;
644
1192
  declare function axmIsAssistStreamingStatus(status: AxmAssistResponseStatus): boolean;
1193
+ type AxmAssistFollowUpStatus = 'preparing' | 'ready' | 'skipped';
1194
+ declare function axmReadAssistFollowUpStatus(metadata: unknown): AxmAssistFollowUpStatus | undefined;
645
1195
  declare function axmIsAssistTerminalStatus(status: AxmAssistResponseStatus): boolean;
646
1196
  /** Finalize metadata persisted when a run completes (even if status lags). */
647
1197
  declare function axmAssistHasFinalizeMetadata(metadata: unknown): boolean;
@@ -686,30 +1236,6 @@ declare function axmCoerceTimestampMs(value: unknown): number;
686
1236
  declare function axmCoerceDate(value: unknown): Date;
687
1237
  declare function axmSortMessagesNewestFirst(messages: AXConversationMessage[]): AXConversationMessage[];
688
1238
 
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
1239
  /** Builds a sidebar/header title from the first user message (heuristic fallback). */
714
1240
  declare function axmBuildAutoTitleFromUserText(raw: string): string | null;
715
1241
  /** Bot/assist list rows often show the assist peer `name` — keep it in sync with room title. */
@@ -717,7 +1243,9 @@ declare function axmSyncAssistPeerDisplayName<T extends Pick<AXConversation, 'ti
717
1243
  declare function axmRoomWithAssistPeerDisplayName(room: AXMConversationRoom): AXMConversationRoom;
718
1244
 
719
1245
  interface AXMConversationAssistResponsePort {
720
- handleAfterUserMessage(conversationId: string, userMessageId: string, command: AXConversationSendMessageCommand, currentUserId: string): Promise<void>;
1246
+ handleAfterUserMessage(conversationId: string, userMessageId: string, command: AXConversationSendMessageCommand, currentUserId: string, options?: {
1247
+ skipAssistSync?: boolean;
1248
+ }): Promise<void>;
721
1249
  retryAssistResponse(conversationId: string, messageId: string): Promise<AXConversationMessage>;
722
1250
  reconcileStaleAssistPlaceholders(conversationId?: string): Promise<void>;
723
1251
  /** True when the conversation has assist rows still marked streaming (cache or entity). */
@@ -726,6 +1254,8 @@ interface AXMConversationAssistResponsePort {
726
1254
  getLiveMessage(messageId: string): AXConversationMessage | null;
727
1255
  /** Merges assist in-memory cache over persisted messages (mock `conversationSharedStorage.messages` parity). */
728
1256
  mergeLiveConversationMessages(conversationId: string, persisted: AXConversationMessage[]): AXConversationMessage[];
1257
+ /** Drops in-memory assist rows (e.g. after the user edited an earlier turn). */
1258
+ forgetLiveMessages(messageIds: string[]): void;
729
1259
  /** Aligns composer Stop / spinner with assist streaming for the focused conversation. */
730
1260
  syncComposerGenerationForFocus(conversationId: string | null): Promise<void>;
731
1261
  /** Cancels in-flight assist generation (composer Stop). Aborts server AI + SSE stream updates. */
@@ -992,13 +1522,14 @@ declare class AXMCommentManagementService {
992
1522
  private formatComment;
993
1523
  private buildCommentTree;
994
1524
  private formatThread;
995
- createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread>;
996
- getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null>;
997
- listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]>;
998
- updateThread(entityRef: AXMCommentEntityData, topic: string, data: Partial<{
1525
+ createThread(entityRef: AXMCommentEntityData$1, topic: string, title?: string): Promise<AXMCommentThread>;
1526
+ getThread(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMCommentThread | null>;
1527
+ countCommentsForEntity(entityRef: AXMCommentEntityData$1): Promise<number>;
1528
+ listThreads(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMCommentThread[]>;
1529
+ updateThread(entityRef: AXMCommentEntityData$1, topic: string, data: Partial<{
999
1530
  title: string;
1000
1531
  }>): Promise<AXMCommentThread>;
1001
- deleteThread(entityRef: AXMCommentEntityData, topic: string): Promise<boolean>;
1532
+ deleteThread(entityRef: AXMCommentEntityData$1, topic: string): Promise<boolean>;
1002
1533
  addComment(threadId: string, content: string, parentCommentId?: string, contentType?: string, userId?: string): Promise<AXMComment>;
1003
1534
  getComments(threadId: string, nested: boolean): Promise<AXMComment[]>;
1004
1535
  getComment(commentId: string): Promise<AXMComment>;
@@ -1120,13 +1651,13 @@ declare class AXMCommentComponent implements OnInit {
1120
1651
  declare function axmExtractTextFromPayload(payload: AXMessagePayload | undefined): string;
1121
1652
 
1122
1653
  declare abstract class AXMCommentService {
1123
- abstract createThread(entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMCommentThread>;
1124
- abstract getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread | null>;
1125
- abstract listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMCommentThread[]>;
1126
- abstract updateThread(entityRef: AXMCommentEntityData, topic: string, data: Partial<{
1654
+ abstract createThread(entityRef: AXMCommentEntityData$1, topic: string, title?: string): Promise<AXMCommentThread>;
1655
+ abstract getThread(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMCommentThread | null>;
1656
+ abstract listThreads(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMCommentThread[]>;
1657
+ abstract updateThread(entityRef: AXMCommentEntityData$1, topic: string, data: Partial<{
1127
1658
  title: string;
1128
1659
  }>): Promise<AXMCommentThread>;
1129
- abstract deleteThread(entityRef: AXMCommentEntityData, topic: string): Promise<boolean>;
1660
+ abstract deleteThread(entityRef: AXMCommentEntityData$1, topic: string): Promise<boolean>;
1130
1661
  abstract addComment(threadId: string, content: string, parentCommentId?: string, contentType?: string, userId?: string): Promise<AXMComment>;
1131
1662
  abstract getComments(threadId: string, nested: boolean): Promise<AXMComment[]>;
1132
1663
  abstract getComment(commentId: string): Promise<AXMComment>;
@@ -1146,9 +1677,10 @@ declare class AXMCommentServiceImpl {
1146
1677
  private readonly messageService;
1147
1678
  private readonly filterService;
1148
1679
  private readonly translationService;
1149
- createThread(creatorUser: AXPUserReference, entityRef: AXMCommentEntityData, topic: string, title?: string): Promise<AXMConversationRoom>;
1150
- getThread(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom | null>;
1151
- listThreads(entityRef: AXMCommentEntityData, topic: string): Promise<AXMConversationRoom[]>;
1680
+ createThread(creatorUser: AXPUserReference, entityRef: AXMCommentEntityData$1, topic: string, title?: string): Promise<AXMConversationRoom>;
1681
+ getThread(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMConversationRoom | null>;
1682
+ listRoomsForEntity(entityRef: AXMCommentEntityData$1): Promise<AXMConversationRoom[]>;
1683
+ listThreads(entityRef: AXMCommentEntityData$1, topic: string): Promise<AXMConversationRoom[]>;
1152
1684
  updateThread(threadId: string, data: Partial<{
1153
1685
  title: string;
1154
1686
  }>): Promise<AXMConversationRoom>;
@@ -1263,31 +1795,6 @@ declare class AXMCommentWidgetViewComponent extends AXPValueWidgetComponent<AXPE
1263
1795
 
1264
1796
  declare const AXPCommentWidget: AXPWidgetConfig;
1265
1797
 
1266
- /** Entity reference an entity-scoped chat is bound to (stored in conversation metadata). */
1267
- interface AXMEntityChatRef {
1268
- entityId: string;
1269
- entityType: string;
1270
- }
1271
- /**
1272
- * Conversation metadata for an entity-scoped assist chat.
1273
- * Keeps `assistId` so the existing assist reply pipeline still answers in entity chats.
1274
- */
1275
- declare function axmBuildEntityChatConversationMetadata(args: {
1276
- entityId: string;
1277
- entityType: string;
1278
- assistId: string;
1279
- }): Record<string, unknown>;
1280
- /**
1281
- * Resolves the entity reference from conversation metadata.
1282
- * `AXConversationService.createConversation` may nest the UI object, so values
1283
- * are also probed at `metadata.metadata.*`.
1284
- */
1285
- 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). */
1287
- declare function axmConversationIsEntityChat(metadata: Record<string, unknown> | undefined): boolean;
1288
- /** True when conversation metadata targets the given entity reference. */
1289
- declare function axmConversationMatchesEntity(metadata: Record<string, unknown> | undefined, ref: AXMEntityChatRef): boolean;
1290
-
1291
1798
  /** Arguments accepted by `AXConversationService.createConversation`, prebuilt for an entity chat. */
1292
1799
  interface AXMEntityChatCreateData {
1293
1800
  participantIds: string[];
@@ -1320,13 +1827,19 @@ declare class AXMEntityChatService {
1320
1827
  private get conversationApi();
1321
1828
  /** Returns every conversation bound to the given entity reference. */
1322
1829
  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>;
1830
+ /** History for one mini-chat surface: global, an entity or record, or a launch such as form designer. */
1831
+ findHistoryConversations(scope: AXMMiniChatHistoryScope): Promise<AXConversation[]>;
1832
+ /**
1833
+ * Creates a new entity-scoped assist conversation and selects it.
1834
+ * Must go through {@link AXConversationService.createConversation} so the open mini-chat
1835
+ * instance owns the thread; the inbox tab filter hides entity rooms from `/chat/`.
1836
+ */
1837
+ createEntityChat(ref: AXMEntityChatRef, assistId?: string, extraMetadata?: Record<string, unknown>): Promise<AXConversation>;
1325
1838
  /**
1326
1839
  * Builds the `createConversation` payload for a new entity assist chat.
1327
1840
  * Uses `assistId` when provided, otherwise the tenant default assist.
1328
1841
  */
1329
- buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string): Promise<AXMEntityChatCreateData>;
1842
+ buildEntityChatCreateData(ref: AXMEntityChatRef, assistId?: string, extraMetadata?: Record<string, unknown>): Promise<AXMEntityChatCreateData>;
1330
1843
  /** Resolves the assist catalog row to chat with (explicit id → tenant default → first row). */
1331
1844
  private resolveAssistRow;
1332
1845
  private resolveDefaultAssistId;
@@ -1339,97 +1852,40 @@ declare class AXMEntityChatService {
1339
1852
  * Compact scrollable list of inbox AI-assist chats (non-entity bot / assist conversations).
1340
1853
  */
1341
1854
  declare class AXMMiniChatInboxHistoryComponent implements OnInit {
1342
- private readonly conversationApi;
1855
+ private readonly entityChatService;
1343
1856
  private readonly conversationFilter;
1857
+ private readonly realtimeBus;
1858
+ private readonly destroyRef;
1859
+ /** Which chats to list. Defaults to global (no entity and no surface). */
1860
+ readonly scope: _angular_core.InputSignal<AXMMiniChatHistoryScope>;
1344
1861
  /** Emits when the user picks a conversation from the list. */
1345
1862
  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
1863
  /** Emits whether the loaded history contains at least one conversation. */
1349
1864
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1350
1865
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
1351
1866
  readonly loading: _angular_core.WritableSignal<boolean>;
1867
+ private refreshGeneration;
1868
+ constructor();
1352
1869
  ngOnInit(): void;
1353
- /** Reloads AI-assist inbox conversations. */
1354
- refresh(): Promise<void>;
1870
+ /** Reloads conversations for the current history scope. */
1871
+ refresh(scope?: AXMMiniChatHistoryScope): Promise<void>;
1872
+ private bindRealtimeHistory;
1873
+ private matchesInbox;
1355
1874
  protected resolveListAvatar(conversation: AXConversation): {
1356
1875
  title: string;
1357
1876
  avatar?: string;
1358
1877
  icon?: string;
1359
1878
  };
1360
1879
  protected onSelect(conversationId: string): void;
1361
- protected onNewChat(): void;
1362
1880
  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>;
1881
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatInboxHistoryComponent, "axm-mini-chat-inbox-history", never, { "scope": { "alias": "scope"; "required": false; "isSignal": true; }; }, { "conversationSelected": "conversationSelected"; "hasConversationsChange": "hasConversationsChange"; }, never, never, true, never>;
1364
1882
  }
1365
1883
 
1366
1884
  type AXMMiniChatInboxConversationFilter = (conversation: AXConversation) => boolean;
1367
1885
  declare const AXM_MINI_CHAT_INBOX_CONVERSATION_FILTER: InjectionToken<AXMMiniChatInboxConversationFilter>;
1368
1886
 
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
1887
  /**
1432
- * Root header slot that toggles the inbox mini chat overlay (AI-assist conversations only).
1888
+ * Root header slot that toggles the shared inbox mini chat overlay (AI-assist conversations).
1433
1889
  */
1434
1890
  declare class AXMMiniChatHeaderSlotComponent {
1435
1891
  private readonly panelService;
@@ -1450,6 +1906,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1450
1906
  sideMenuWidth: _angular_core.Signal<number>;
1451
1907
  sideMenuCompactWidth: _angular_core.Signal<number>;
1452
1908
  menuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1909
+ menuToggleCyclesStyle: _angular_core.Signal<boolean>;
1453
1910
  menuOrientation: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuOrientation>;
1454
1911
  menuAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuAppearance>;
1455
1912
  headerAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPHeaderAppearance>;
@@ -1463,6 +1920,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1463
1920
  overlayTaskCount: _angular_core.Signal<number>;
1464
1921
  isNavigationLoading: _angular_core.Signal<boolean>;
1465
1922
  isMenuHorizontal: _angular_core.Signal<boolean>;
1923
+ menuToggleCyclesStyleEnabled: _angular_core.Signal<boolean>;
1466
1924
  effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
1467
1925
  sideMenuDrawerWidth: _angular_core.Signal<number>;
1468
1926
  menuDarkEnabled: _angular_core.Signal<boolean>;
@@ -1477,6 +1935,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1477
1935
  setSideMenuWidth: (width: number) => void;
1478
1936
  setSideMenuCompactWidth: (width: number) => void;
1479
1937
  setSideMenuDrawerWidth: (width: number) => void;
1938
+ setMenuVerticalMode: (mode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode) => void;
1480
1939
  toggleSideMenu: () => void;
1481
1940
  setNavigationLoading: (value: boolean, delay?: number) => void;
1482
1941
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -1499,6 +1958,7 @@ declare class AXMMiniChatHeaderSlotComponent {
1499
1958
  sideMenuWidth: number;
1500
1959
  sideMenuCompactWidth: number;
1501
1960
  menuVerticalMode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode;
1961
+ menuToggleCyclesStyle: boolean;
1502
1962
  menuOrientation: _acorex_platform_framework_client_themes_shared.AXPMenuOrientation;
1503
1963
  menuAppearance: _acorex_platform_framework_client_themes_shared.AXPMenuAppearance;
1504
1964
  headerAppearance: _acorex_platform_framework_client_themes_shared.AXPHeaderAppearance;
@@ -1511,83 +1971,139 @@ declare class AXMMiniChatHeaderSlotComponent {
1511
1971
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatHeaderSlotComponent, "axm-mini-chat-header-slot", never, {}, {}, never, never, true, never>;
1512
1972
  }
1513
1973
 
1974
+ /**
1975
+ * Page-header Ask AI control for entity list/detail pages.
1976
+ * Opens the same {@link AXMMiniChatPanelService} overlay as the root header slot.
1977
+ */
1978
+ declare class AXMMiniChatPageActionComponent {
1979
+ private readonly panelService;
1980
+ private readonly pageContext;
1981
+ private readonly route;
1982
+ private readonly router;
1983
+ protected readonly device: AXPDeviceService;
1984
+ private readonly url;
1985
+ private readonly buttonRef;
1986
+ protected readonly visible: _angular_core.Signal<boolean>;
1987
+ protected onToggleClick(): void;
1988
+ private resolveEntityChatRef;
1989
+ private readEntityRoute;
1990
+ private collectRouteParams;
1991
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPageActionComponent, never>;
1992
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPageActionComponent, "axm-mini-chat-page-action", never, {}, {}, never, never, true, never>;
1993
+ }
1994
+
1514
1995
  /**
1515
1996
  * Scrollable list of entity-scoped conversations for the mini chat panel.
1516
1997
  * Loads chats via {@link AXMEntityChatService.findEntityConversations}.
1517
1998
  */
1518
1999
  declare class AXMMiniChatHistoryComponent implements OnInit {
1519
2000
  private readonly entityChatService;
2001
+ private readonly realtimeBus;
2002
+ private readonly destroyRef;
1520
2003
  readonly entityId: _angular_core.InputSignal<string>;
1521
2004
  readonly entityType: _angular_core.InputSignal<string>;
1522
2005
  /** Emits when the user picks a conversation from the list. */
1523
2006
  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
2007
  /** Emits whether the loaded history contains at least one conversation. */
1527
2008
  readonly hasConversationsChange: _angular_core.OutputEmitterRef<boolean>;
1528
2009
  readonly conversations: _angular_core.WritableSignal<AXConversation[]>;
1529
2010
  readonly loading: _angular_core.WritableSignal<boolean>;
2011
+ private refreshGeneration;
2012
+ constructor();
1530
2013
  ngOnInit(): void;
1531
2014
  /** Reloads the entity conversation list (call when the history panel becomes visible). */
1532
- refresh(): Promise<void>;
2015
+ refresh(entityId?: string, entityType?: string): Promise<void>;
2016
+ private bindRealtimeHistory;
1533
2017
  protected resolveListAvatar(conversation: AXConversation): {
1534
2018
  title: string;
1535
2019
  avatar?: string;
1536
2020
  icon?: string;
1537
2021
  };
1538
2022
  protected onSelect(conversationId: string): void;
1539
- protected onNewChat(): void;
1540
2023
  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>;
2024
+ 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
2025
  }
1543
2026
 
2027
+ /** Inserts or replaces a conversation in a mini-chat history list, then re-sorts. */
2028
+ declare function axmUpsertMiniChatHistoryItem(items: AXConversation[], next: AXConversation, matches: (conversation: AXConversation) => boolean): AXConversation[];
2029
+ /** Removes a conversation from a mini-chat history list. */
2030
+ declare function axmRemoveMiniChatHistoryItem(items: AXConversation[], conversationId: string): AXConversation[];
2031
+
1544
2032
  /**
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.
2033
+ * Opens the shared mini chat window via {@link AXPopupService} (header inbox, entity FAB, contextual assist).
2034
+ * Uses the module {@link AXConversationService} so assist SSE patches stream live.
2035
+ * Stays mounted across route changes and returns to that page's home thread.
2036
+ * Minimize hides the overlay and docks a tab in the footer.
2037
+ * Restores the last conversation per session on reopen; use {@link forceNewChat} for an explicit new thread.
1547
2038
  */
1548
2039
  declare class AXMMiniChatPanelService {
1549
- private readonly overlayService;
2040
+ private readonly popupService;
2041
+ private readonly settingsService;
2042
+ private readonly document;
2043
+ private readonly translation;
1550
2044
  private readonly conversationService;
1551
2045
  private readonly conversationApi;
1552
- private readonly document;
2046
+ private readonly focusService;
1553
2047
  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). */
2048
+ private readonly routeHome;
2049
+ private windowApi;
2050
+ private closePromise;
2051
+ private windowGeneration;
2052
+ private anchorPlacementCleanup;
2053
+ /** Active conversation before the panel took over selection (entity scope; restored on close). */
1560
2054
  private savedActiveConversationId;
2055
+ /** Root focus id before the panel opened (restored so assist/realtime keep the right thread). */
2056
+ private savedFocusedConversationId;
1561
2057
  /** Per-entity session (view, selected conversation) restored when the panel reopens. */
1562
2058
  private readonly sessions;
1563
- /** Reactive open state for launcher UI (FAB icon). */
2059
+ private retainOnClose;
2060
+ private retainedHidden;
2061
+ private retainedSessionKey;
2062
+ private activeOpenOptions;
2063
+ private boundRouteKey;
2064
+ private activePageKey;
2065
+ private retargeting;
2066
+ private popupFrameReady;
2067
+ /** Reactive open state for launcher UI (true while the window exists, including minimized or hidden). */
1564
2068
  readonly panelOpen: _angular_core.WritableSignal<boolean>;
1565
- /** True while the mini chat overlay is mounted. */
2069
+ constructor();
2070
+ /** True while the mini chat window is mounted (visible, minimized, or retained-hidden). */
1566
2071
  isOpen(): boolean;
1567
- /** Closes the overlay when it is open. */
2072
+ /** True while the window is on screen. */
2073
+ isVisible(): boolean;
2074
+ /** Closes the window when it is open. */
1568
2075
  close(): void;
1569
- /** Toggles the inbox mini chat overlay (regular non-entity conversations). */
2076
+ /** Hides a retained window. Destroys the window when retention is off. */
2077
+ dismiss(): void;
2078
+ /** Toggles the inbox mini chat window (regular non-entity conversations). */
1570
2079
  toggleInbox(options?: Omit<AXMMiniChatPanelOpenOptions, 'scope' | 'entityId' | 'entityType'>): void;
1571
- /** Toggles the overlay, restoring the last session when reopening. */
2080
+ /**
2081
+ * Toggles the window: restores when minimized, closes when visible, opens when closed.
2082
+ */
1572
2083
  toggle(options: AXMMiniChatPanelOpenOptions): void;
1573
2084
  /**
1574
- * Opens the mini chat panel overlay (replaces any existing overlay).
2085
+ * Opens the mini chat window (replaces any existing window).
1575
2086
  * Restores the last session for the entity unless {@link AXMMiniChatPanelOpenOptions.forceNewChat} is set.
1576
2087
  */
1577
2088
  open(options: AXMMiniChatPanelOpenOptions): Promise<void>;
2089
+ private resolveWindowTitle;
2090
+ private buildSessionKey;
1578
2091
  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;
2092
+ /** List and record of the same entity are different chats. */
2093
+ private currentPageChatKey;
2094
+ private abandonOpenWindow;
2095
+ private onNavigation;
2096
+ private finishWindowClose;
2097
+ /** Pins the popup beside its opener, or restores the last header-drag position. */
2098
+ private watchAnchorPlacement;
2099
+ private ensurePopupFrameLoaded;
2100
+ private loadPopupFrame;
2101
+ private persistPopupFrame;
2102
+ private clearAnchorPlacement;
1586
2103
  private captureActiveConversation;
2104
+ private captureFocusedConversation;
2105
+ private restoreFocusedConversation;
1587
2106
  private restoreActiveConversation;
1588
- private resolveAnchorElement;
1589
- private normalizePlacement;
1590
- private applyFixedPosition;
1591
2107
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPanelService, never>;
1592
2108
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatPanelService>;
1593
2109
  }
@@ -1604,7 +2120,7 @@ declare class AXMMiniChatLauncherComponent {
1604
2120
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1605
2121
  readonly title: _angular_core.InputSignal<string | undefined>;
1606
2122
  /** 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">;
2123
+ readonly placement: _angular_core.InputSignal<"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end">;
1608
2124
  readonly offsetX: _angular_core.InputSignal<number>;
1609
2125
  readonly offsetY: _angular_core.InputSignal<number>;
1610
2126
  private readonly fabRef;
@@ -1614,63 +2130,227 @@ declare class AXMMiniChatLauncherComponent {
1614
2130
  }
1615
2131
 
1616
2132
  /**
1617
- * Mini chat panel overlay: header, thread view, and history (entity list or main inbox sidebar).
2133
+ * Live entity/view/record chips for the header mini chat.
2134
+ * Chips stay editable until the first message pins them on the conversation.
2135
+ */
2136
+ declare class AXMMiniChatPageContextChipsService {
2137
+ private readonly pageContext;
2138
+ private readonly router;
2139
+ private readonly entityRegistry;
2140
+ private readonly entityService;
2141
+ private readonly translation;
2142
+ readonly chips: _angular_core.WritableSignal<AXMMiniChatContextChip[]>;
2143
+ readonly locked: _angular_core.WritableSignal<boolean>;
2144
+ readonly historyScope: _angular_core.WritableSignal<AXMMiniChatHistoryScope>;
2145
+ private capturing;
2146
+ private pinnedId;
2147
+ private readonly dismissed;
2148
+ private entityKey;
2149
+ private viewKey;
2150
+ private selectionKey;
2151
+ private draft;
2152
+ private detailSeq;
2153
+ private loadedDetailKey;
2154
+ private detailPending;
2155
+ private watchStop;
2156
+ /** Follows the current page until the panel is destroyed. */
2157
+ start(destroyRef: DestroyRef): void;
2158
+ stop(): void;
2159
+ /** Editable chips from the page the user is on now. */
2160
+ beginDraft(): void;
2161
+ /** Stops live updates while a saved conversation is opening. */
2162
+ pinPending(conversationId: string): void;
2163
+ /** Shows the chips stored on a conversation and keeps them readonly. */
2164
+ pin(conversationId: string, metadata: Record<string, unknown> | undefined): void;
2165
+ dismiss(chipId: string): void;
2166
+ /**
2167
+ * Context for the conversation created by the first mini-chat message.
2168
+ * Empty when the user removed every chip or the page is not an entity page.
2169
+ */
2170
+ resolveDraftLaunchContext(): Promise<AXMContextualAssistContext | undefined>;
2171
+ private refreshLive;
2172
+ private draftFromList;
2173
+ private ensureDetailDraft;
2174
+ private fetchDetail;
2175
+ private applyDraft;
2176
+ private publishHistoryScope;
2177
+ private readDetailRoute;
2178
+ private readRecordTitle;
2179
+ private resolveText;
2180
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPageContextChipsService, never>;
2181
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatPageContextChipsService>;
2182
+ }
2183
+
2184
+ /**
2185
+ * Mini chat panel: branded window chrome, context strip, thread, and history.
2186
+ * Hosted as a popup window (header / entity pages) or embedded in a page.
1618
2187
  */
1619
2188
  declare class AXMMiniChatPanelComponent implements OnInit, OnDestroy {
1620
2189
  private readonly conversationService;
2190
+ private readonly composerService;
2191
+ private readonly fileDrop;
2192
+ private fileDragDepth;
1621
2193
  private readonly conversationApi;
1622
- private readonly realtimeBus;
2194
+ private readonly pageContext;
2195
+ private readonly localeService;
2196
+ private readonly device;
1623
2197
  private readonly destroyRef;
2198
+ protected readonly pageContextChips: AXMMiniChatPageContextChipsService;
2199
+ private readonly routeHome;
2200
+ private readonly localeProfile;
1624
2201
  readonly scope: _angular_core.InputSignal<AXMMiniChatPanelScope>;
2202
+ readonly presentation: _angular_core.InputSignal<AXMMiniChatPanelPresentation>;
1625
2203
  readonly entityId: _angular_core.InputSignal<string | undefined>;
1626
2204
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1627
2205
  readonly assistId: _angular_core.InputSignal<string | undefined>;
1628
- readonly title: _angular_core.InputSignal<string>;
2206
+ readonly assistSelection: _angular_core.InputSignal<AXMMiniChatAssistSelection>;
2207
+ readonly title: _angular_core.InputSignal<string | undefined>;
1629
2208
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1630
2209
  readonly showComposer: _angular_core.InputSignal<boolean>;
1631
2210
  readonly requestClose: _angular_core.InputSignal<() => void>;
2211
+ readonly requestMinimize: _angular_core.InputSignal<(() => void) | undefined>;
2212
+ readonly requestMaximize: _angular_core.InputSignal<(() => void) | undefined>;
2213
+ readonly requestRestore: _angular_core.InputSignal<(() => void) | undefined>;
2214
+ readonly isMaximized: _angular_core.InputSignal<boolean>;
1632
2215
  readonly initialView: _angular_core.InputSignal<"thread" | "history">;
1633
2216
  readonly initialConversationId: _angular_core.InputSignal<string | undefined>;
1634
2217
  readonly startWithNewChat: _angular_core.InputSignal<boolean>;
2218
+ readonly launchContext: _angular_core.InputSignal<AXMContextualAssistContext | undefined>;
1635
2219
  readonly onSessionChange: _angular_core.InputSignal<((state: Pick<AXMMiniChatPanelSessionState, "view" | "selectedChatId">) => void) | undefined>;
1636
2220
  protected readonly view: _angular_core.WritableSignal<"thread" | "history">;
1637
2221
  protected readonly selectedChatId: _angular_core.WritableSignal<string | undefined>;
1638
- protected readonly historyHasItems: _angular_core.WritableSignal<boolean>;
1639
- 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();
2222
+ protected readonly fileDragOver: _angular_core.WritableSignal<boolean>;
2223
+ protected readonly historyScope: _angular_core.Signal<AXMMiniChatHistoryScope>;
2224
+ protected readonly isEmbedded: _angular_core.Signal<boolean>;
2225
+ protected readonly isRtl: _angular_core.Signal<boolean>;
2226
+ protected readonly canDragWindow: _angular_core.Signal<boolean>;
2227
+ protected readonly canMinimize: _angular_core.Signal<boolean>;
2228
+ protected readonly canMaximize: _angular_core.Signal<boolean>;
2229
+ protected readonly canClose: _angular_core.Signal<boolean>;
2230
+ /** Home is already a new chat; the plus action is for history and open threads. */
2231
+ protected readonly showNewChatAction: _angular_core.Signal<boolean>;
2232
+ protected readonly isRecordAssist: _angular_core.Signal<boolean>;
2233
+ protected readonly workingInEntityTitle: _angular_core.Signal<string | null>;
2234
+ protected readonly workingInViewTitle: _angular_core.Signal<string | null>;
2235
+ protected readonly recordTitleLabel: _angular_core.Signal<string | null>;
2236
+ protected readonly recordEntityTitle: _angular_core.Signal<string | null>;
2237
+ protected readonly showContextBar: _angular_core.Signal<boolean>;
2238
+ protected readonly contextBarIcon: _angular_core.Signal<"fa-building" | "fa-table-list">;
1646
2239
  ngOnInit(): void;
1647
2240
  ngOnDestroy(): void;
1648
2241
  protected closePanel(): void;
2242
+ protected minimizePanel(): void;
2243
+ protected toggleMaximizePanel(): void;
2244
+ protected onFileDragEnter(event: DragEvent): void;
2245
+ protected onFileDragOver(event: DragEvent): void;
2246
+ protected onFileDragLeave(event: DragEvent): void;
2247
+ protected onFileDragEnd(): void;
2248
+ protected onFileDrop(event: DragEvent): Promise<void>;
2249
+ protected backToThread(): void;
1649
2250
  protected openHistory(): void;
1650
- protected onHistoryHasConversationsChange(hasItems: boolean): void;
1651
2251
  protected selectChat(conversationId: string): void;
1652
2252
  protected onConversationOpened(conversationId: string): void;
1653
2253
  protected startNewChat(): Promise<void>;
2254
+ protected chipIcon(kind: AXMMiniChatContextChipKind): string;
2255
+ protected dismissPageContextChip(chipId: string, event: Event): void;
2256
+ private bindPageContextChips;
2257
+ private pinPageContextConversation;
2258
+ private readRecordTitle;
2259
+ private canAcceptFileDrop;
2260
+ private isFileDrag;
2261
+ private resetFileDrag;
1654
2262
  private syncSession;
1655
2263
  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>;
2264
+ 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; }; "assistSelection": { "alias": "assistSelection"; "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
2265
  }
1658
2266
 
1659
2267
  /**
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).
2268
+ * Popup host for mini chat: custom chrome lives in {@link AXMMiniChatPanelComponent},
2269
+ * while this wrapper receives popup `data` and exposes minimize/maximize/close on the window.
2270
+ */
2271
+ declare class AXMMiniChatPopupWindowComponent extends AXPopupComponentBase {
2272
+ private readonly destroyRef;
2273
+ private readonly hostElement;
2274
+ scope: AXMMiniChatPanelScope;
2275
+ entityId?: string;
2276
+ entityType?: string;
2277
+ assistId?: string;
2278
+ assistSelection: AXMMiniChatAssistSelection;
2279
+ panelTitle?: string;
2280
+ showInfoBar: boolean;
2281
+ showComposer: boolean;
2282
+ minimizable: boolean;
2283
+ retainOnClose: boolean;
2284
+ initialView: 'thread' | 'history';
2285
+ initialConversationId?: string;
2286
+ startWithNewChat: boolean;
2287
+ launchContext?: AXMContextualAssistContext;
2288
+ onSessionChange?: (state: Pick<AXMMiniChatPanelSessionState, 'view' | 'selectedChatId'>) => void;
2289
+ onVisibilityChange?: (visible: boolean) => void;
2290
+ registerWindow?: (api: AXMMiniChatPopupWindowApi | null) => void;
2291
+ protected readonly closeFn: () => void;
2292
+ protected readonly minimizeFn: () => void;
2293
+ protected readonly maximizeFn: () => void;
2294
+ protected readonly restoreFn: () => void;
2295
+ private readonly windowApi;
2296
+ constructor();
2297
+ /**
2298
+ * Escape uses the popup close path. A retained window stays mounted and only hides.
2299
+ */
2300
+ onClosing(event: {
2301
+ cancel: boolean;
2302
+ }): void;
2303
+ private hideRetained;
2304
+ private showRetained;
2305
+ private overlayElement;
2306
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatPopupWindowComponent, never>;
2307
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatPopupWindowComponent, "axm-mini-chat-popup-window", never, {}, {}, never, never, true, never>;
2308
+ }
2309
+
2310
+ /**
2311
+ * Lets the mini-chat window add files to the empty-state composer
2312
+ * the same way its attachment button does.
2313
+ */
2314
+ declare class AXMMiniChatFileDropService {
2315
+ private emptyDraftAdder;
2316
+ private pendingEmptyDraft;
2317
+ /** Compact empty composer registers while it is the visible new-chat surface. */
2318
+ registerEmptyDraftAdder(add: (files: File[]) => void): () => void;
2319
+ /**
2320
+ * Adds files to the empty composer when it is mounted.
2321
+ * Queues them when the thread is about to show that composer.
2322
+ */
2323
+ addEmptyDraftFiles(files: File[]): void;
2324
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatFileDropService, never>;
2325
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMMiniChatFileDropService>;
2326
+ }
2327
+
2328
+ /**
2329
+ * Root-footer dock for minimized mini-chat windows (`mini-chat` dock name).
2330
+ */
2331
+ declare class AXMMiniChatFooterDockComponent {
2332
+ protected readonly dockName = "mini-chat";
2333
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMMiniChatFooterDockComponent, never>;
2334
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMMiniChatFooterDockComponent, "axm-mini-chat-footer-dock", never, {}, {}, never, never, true, never>;
2335
+ }
2336
+
2337
+ /**
2338
+ * Compact, entity-scoped or inbox chat: renders a single conversation thread (message list)
2339
+ * with an optional info-bar and composer. Opens an existing chat by {@link chatId}, or starts
2340
+ * a new entity assist chat (created lazily on first send and tagged with `entityId` /
2341
+ * `entityType` in conversation metadata).
1663
2342
  *
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}.
2343
+ * Reports focus through {@link AXMChatConversationApi} so assist SSE and realtime message
2344
+ * patches reach this thread while the overlay is open.
1667
2345
  */
1668
2346
  declare class AXMMiniChatComponent {
1669
2347
  #private;
1670
2348
  private readonly conversationService;
1671
2349
  private readonly popupService;
1672
2350
  private readonly conversationApi;
2351
+ private readonly assistResponse;
1673
2352
  private readonly destroyRef;
2353
+ protected readonly appearanceSync: AXMConversationAppearanceSyncService;
1674
2354
  /** Existing conversation id to open. When omitted (and no conversation is active), the new-chat composer is shown. */
1675
2355
  readonly chatId: _angular_core.InputSignal<string | undefined>;
1676
2356
  /** Entity reference the chat is (or will be) bound to; omitted for inbox (regular) chats. */
@@ -1678,6 +2358,10 @@ declare class AXMMiniChatComponent {
1678
2358
  readonly entityType: _angular_core.InputSignal<string | undefined>;
1679
2359
  /** Assist used as the bot peer when creating a new entity chat (falls back to the tenant default). */
1680
2360
  readonly assistId: _angular_core.InputSignal<string | undefined>;
2361
+ /** `ask` prompts in the header inbox. `locked` hides the picker (form designer). */
2362
+ readonly assistSelection: _angular_core.InputSignal<AXMMiniChatAssistSelection>;
2363
+ /** Surface context for a new assist thread (entity-row assist chips and room metadata). */
2364
+ readonly launchContext: _angular_core.InputSignal<AXMContextualAssistContext | undefined>;
1681
2365
  readonly showInfoBar: _angular_core.InputSignal<boolean>;
1682
2366
  readonly showComposer: _angular_core.InputSignal<boolean>;
1683
2367
  /** Emits the active conversation id when one is opened or newly created. */
@@ -1687,9 +2371,12 @@ declare class AXMMiniChatComponent {
1687
2371
  /** Opens the conversation info panel when the info-bar title/avatar area is clicked. */
1688
2372
  onInfoBarClick(): void;
1689
2373
  /** New-chat composer created and selected a conversation; surface it to the host. */
2374
+ readonly onAssistConversationCreated: (conversationId: string) => void;
1690
2375
  onConversationCreated(conversationId: string): void;
2376
+ /** Composer Stop — abort the in-flight assist stream for the active conversation. */
2377
+ onComposerGenerationCancelled(): void;
1691
2378
  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>;
2379
+ 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; }; "assistSelection": { "alias": "assistSelection"; "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
2380
  }
1694
2381
 
1695
2382
  /** Fired after a user message is persisted — triggers assist, auto-reply, and realtime side effects. */
@@ -1711,5 +2398,5 @@ declare const CONVERSATION_START_DIRECT_CHAT_COMMAND = "Conversation:StartDirect
1711
2398
  /** Opens an existing conversation in the chat app. */
1712
2399
  declare const CONVERSATION_OPEN_CHAT_COMMAND = "Conversation:OpenChat";
1713
2400
 
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 };
2401
+ 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, AXMMiniChatFileDropService, 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, axmConversationIsGlobalChat, axmConversationMatchesEntity, axmConversationMatchesHistoryScope, axmEntityRefForMiniChatPageContext, axmEntityRefFromLaunchContext, axmExcludeEntityChatConversations, axmExtractAssistIdFromMetadata, axmExtractAssistSnapshotFromMetadata, axmExtractDirectAgentIdFromMetadata, axmExtractEntityRefFromMetadata, axmExtractModelEntityIdFromMetadata, axmExtractTextFromPayload, axmFilterChatAiTargets, axmFlattenConversationCreateMetadata, axmHydrateRealtimeConversationMessage, axmInboxConversationTab, axmIsAssistBotConversation, axmIsAssistPeerParticipant, axmIsAssistResponseMessage, axmIsAssistRetryableStatus, axmIsAssistStreamingMessage, axmIsAssistStreamingStatus, axmIsAssistTerminalStatus, axmIsUnsupportedLegacyAgentAssistConversation, axmLoadChatAiTargets, axmMessageCountsTowardUnread, axmMessageEntityToMessage, axmMiniChatHistoryScopeFromDraft, axmMiniChatHistoryScopeFromOpen, axmMiniChatHistoryScopeKey, axmMiniChatWindowOwnsRoute, axmNormalizeAssistTranscriptForChatUi, axmNormalizeAssistTranscriptLineResponses, axmParseAssistTranscriptLinePayload, axmParseAssistTranscriptTextEnvelope, axmPartitionAssistAnswerText, axmPreferLocalUnreadCount, axmReadAssistAiTranscript, axmReadAssistAiTranscriptRaw, axmReadAssistFollowUpStatus, axmReadAssistResponseError, axmReadAssistResponseStatus, axmReadPlainTextMessagePayload, axmReadReplyToUserMessageId, axmRemoveMiniChatHistoryItem, axmResolveAssistFinalAnswerText, axmResolveChatAiTargetText, axmRoomEntityToConversation, axmRoomIsEntityChat, axmRoomLaunchContext, axmRoomMatchesEntity, axmRoomWithAssistPeerDisplayName, axmSanitizeAssistUserAnswerText, axmShouldPreferPersistedAssistOverLiveCache, axmShowCommentPopupCommandDefinition, axmSortMessagesNewestFirst, axmSyncAssistPeerDisplayName, axmSyntheticEmbedMessage, axmUpsertMiniChatHistoryItem, axmUserRowToParticipant, channelFeedPageRoutes, commentsPlugin, createConversationServiceSessionAdapter, persistChatAttachment };
2402
+ export type { AXMAddReactionCommandInput, AXMAssistConversationSnapshotLite, AXMAssistDefaultResolverPort, AXMAssistStarterPromptChipOptions, AXMChatAiTargetRow, AXMChatAssistCatalogPort, AXMChatEmptyAssistContinue, AXMChatEmptyAssistCreatedHandler, AXMChatEmptyAssistSessionBind, AXMChatSidebarAction, AXMComment, AXMCommentEvent, AXMCommentEventType, AXMCommentThread, AXMConversationAssistResponsePort, AXMConversationRegularAutoReplyPort, AXMConversationServiceSessionAdapter, AXMEntityChatCreateData, AXMEntityChatRef, AXMEntityChatRoomRef, AXMMiniChatAssistSelection, AXMMiniChatHistoryScope, 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 };