@acorex/components 22.0.0-next.8 → 22.1.0-next.0

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 (52) hide show
  1. package/combo-box/README.md +26 -0
  2. package/fesm2022/acorex-components-calendar.mjs +10 -12
  3. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  4. package/fesm2022/acorex-components-combo-box.mjs +237 -0
  5. package/fesm2022/acorex-components-combo-box.mjs.map +1 -0
  6. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +50 -0
  7. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +1 -0
  8. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs} +2 -2
  9. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs.map → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map} +1 -1
  10. package/fesm2022/acorex-components-conversation.mjs +2034 -7467
  11. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  12. package/fesm2022/acorex-components-data-table.mjs +135 -45
  13. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  14. package/fesm2022/acorex-components-datetime-box.mjs +14 -16
  15. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  16. package/fesm2022/acorex-components-datetime-input.mjs +61 -32
  17. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  18. package/fesm2022/acorex-components-dialog.mjs +3 -2
  19. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  20. package/fesm2022/acorex-components-file-viewer.mjs +38 -78
  21. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
  22. package/fesm2022/acorex-components-grid-layout-builder.mjs +238 -36
  23. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  24. package/fesm2022/acorex-components-list.mjs +2 -2
  25. package/fesm2022/acorex-components-list.mjs.map +1 -1
  26. package/fesm2022/acorex-components-lookup.mjs +1292 -0
  27. package/fesm2022/acorex-components-lookup.mjs.map +1 -0
  28. package/fesm2022/acorex-components-menu.mjs +211 -74
  29. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  30. package/fesm2022/acorex-components-number-box.mjs +30 -29
  31. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  32. package/fesm2022/acorex-components-scheduler.mjs +7 -17
  33. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  34. package/fesm2022/acorex-components-select-box.mjs +2 -2
  35. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  36. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  37. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  38. package/lookup/README.md +47 -0
  39. package/package.json +11 -3
  40. package/types/acorex-components-combo-box.d.ts +114 -0
  41. package/types/acorex-components-conversation.d.ts +317 -94
  42. package/types/acorex-components-data-table.d.ts +35 -3
  43. package/types/acorex-components-datetime-box.d.ts +2 -0
  44. package/types/acorex-components-datetime-input.d.ts +24 -5
  45. package/types/acorex-components-file-viewer.d.ts +15 -52
  46. package/types/acorex-components-grid-layout-builder.d.ts +34 -2
  47. package/types/acorex-components-lookup.d.ts +454 -0
  48. package/types/acorex-components-menu.d.ts +26 -4
  49. package/types/acorex-components-number-box.d.ts +3 -1
  50. package/types/acorex-components-scheduler.d.ts +2 -4
  51. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs +0 -106
  52. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs.map +0 -1
@@ -37,9 +37,11 @@ declare class AXConversationComposerPopupComponent implements OnDestroy {
37
37
  /** Close event for popup service */
38
38
  readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
39
39
  /** Active tab ID */
40
- private readonly activeTabId;
40
+ readonly activeTabId: _angular_core.WritableSignal<string>;
41
41
  /** Enabled tabs from registry */
42
42
  readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation.AXConversationComposerTab[]>;
43
+ /** Whether more than one tab is available */
44
+ readonly hasMultipleTabs: _angular_core.Signal<boolean>;
43
45
  getTabTitle(tabId: string): string;
44
46
  constructor();
45
47
  /** Handle tab change */
@@ -284,6 +286,16 @@ interface AXConversationMessage {
284
286
  };
285
287
  /** Message reactions */
286
288
  reactions: AXConversationReaction[];
289
+ /**
290
+ * Total reply count when provided by the message API (`getMessages` or realtime).
291
+ * When omitted, the UI derives a minimum from loaded messages in the active conversation.
292
+ */
293
+ replyCount?: number;
294
+ /**
295
+ * Total forward count when provided by the message API (`getMessages` or realtime).
296
+ * When omitted, the UI derives a minimum from loaded messages in the active conversation.
297
+ */
298
+ forwardCount?: number;
287
299
  /** Whether message is pinned */
288
300
  pinned?: boolean;
289
301
  /** Edit timestamp (if edited) */
@@ -441,15 +453,27 @@ interface AXConversationSettings {
441
453
  /** Custom settings */
442
454
  custom?: Record<string, unknown>;
443
455
  }
456
+ /** Theme-specific CSS `background` values for the message list area. */
457
+ interface AXConversationMessageListThemeBackground {
458
+ light: string;
459
+ dark: string;
460
+ }
461
+ /** Single CSS value (both themes) or per-theme `{ light, dark }` backgrounds. */
462
+ type AXConversationMessageListBackground = string | AXConversationMessageListThemeBackground;
444
463
  /**
445
464
  * Conversation metadata
446
465
  * Extensible map for app-specific conversation data.
447
466
  */
448
467
  interface AXConversationMetadata extends Record<string, unknown> {
449
- /** Optional custom background CSS for message list */
450
- messageListBackground?: string;
468
+ /** Optional custom background CSS for message list (per light/dark theme). */
469
+ messageListBackground?: AXConversationMessageListBackground;
451
470
  /** Optional custom empty-state component for the message list. */
452
471
  messageListEmptyComponent?: Type<AXConversationMessageListEmptyComponent>;
472
+ /**
473
+ * When `false`, hides reaction UI (add button, bubbles, picker) for this conversation.
474
+ * Defaults to `true` when omitted.
475
+ */
476
+ reactionsEnabled?: boolean;
453
477
  }
454
478
  /** Contract for custom empty-state components rendered by message list. */
455
479
  interface AXConversationMessageListEmptyComponent {
@@ -841,7 +865,7 @@ declare class AXConversationComposerActionRegistry {
841
865
  private readonly _actions;
842
866
  private readonly translation;
843
867
  private readonly injector;
844
- private readonly fileTypeRegistry;
868
+ private readonly composerTabRegistry;
845
869
  constructor();
846
870
  /** All registered actions */
847
871
  readonly actions: _angular_core.Signal<AXConversationComposerAction[]>;
@@ -861,6 +885,8 @@ declare class AXConversationComposerActionRegistry {
861
885
  * Register a composer action
862
886
  */
863
887
  register(action: AXConversationComposerAction): void;
888
+ /** Resolved lazily to avoid a DI cycle with {@link AXConversationComposerFileTypesProvider}. */
889
+ private fileTypeRegistry;
864
890
  private ensureFileTypeExists;
865
891
  /**
866
892
  * Unregister a composer action
@@ -935,6 +961,8 @@ declare class AXConversationComposerTabRegistry {
935
961
  readonly tabs: _angular_core.Signal<AXConversationComposerTab[]>;
936
962
  /** Enabled tabs sorted by priority */
937
963
  readonly enabledTabs: _angular_core.Signal<AXConversationComposerTab[]>;
964
+ /** Whether the composer popup has any tabs to show. */
965
+ readonly hasEnabledTabs: _angular_core.Signal<boolean>;
938
966
  /**
939
967
  * Register a composer tab
940
968
  */
@@ -1703,6 +1731,7 @@ declare class AXConversationContainerComponent {
1703
1731
  private readonly hostRef;
1704
1732
  private readonly platformId;
1705
1733
  protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
1734
+ constructor();
1706
1735
  private get registry();
1707
1736
  /** Custom CSS class */
1708
1737
  readonly customClass: _angular_core.InputSignal<string>;
@@ -1733,6 +1762,7 @@ declare class AXConversationContainerDirective {
1733
1762
  private readonly translation;
1734
1763
  private readonly toast;
1735
1764
  private readonly config;
1765
+ constructor();
1736
1766
  private get registry();
1737
1767
  /** Active conversation */
1738
1768
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
@@ -1879,6 +1909,24 @@ type AXConversationPresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'in
1879
1909
  */
1880
1910
  type AXConversationUserRole = 'owner' | 'admin' | 'member' | 'guest';
1881
1911
 
1912
+ type AXConversationApiName = 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi';
1913
+ interface AXConversationApiLogEntry {
1914
+ /** Public method on AXConversationService that triggered the API call. */
1915
+ serviceMethod: string;
1916
+ /** Injected API instance name. */
1917
+ api: AXConversationApiName;
1918
+ /** Method invoked on the API instance. */
1919
+ apiMethod: string;
1920
+ /** Positional arguments passed to the API method. */
1921
+ context: unknown[];
1922
+ }
1923
+ declare class AXConversationApiLoggerService {
1924
+ private readonly config;
1925
+ log(entry: AXConversationApiLogEntry): void;
1926
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationApiLoggerService, never>;
1927
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationApiLoggerService>;
1928
+ }
1929
+
1882
1930
  /**
1883
1931
  * Abstract Conversation Management API
1884
1932
  * Handle conversation CRUD operations, participants, and settings
@@ -1907,6 +1955,11 @@ interface AXConversationCreateData {
1907
1955
  icon?: string;
1908
1956
  /** Custom metadata */
1909
1957
  metadata?: Record<string, unknown>;
1958
+ /**
1959
+ * When `true`, create a new private chat even if one already exists with the same participants.
1960
+ * Defaults to `false` for private conversations.
1961
+ */
1962
+ forceCreate?: boolean;
1910
1963
  }
1911
1964
  /**
1912
1965
  * Conversation update data
@@ -2983,11 +3036,12 @@ declare abstract class AXConversationUserApi {
2983
3036
  /**
2984
3037
  * Get available users for conversation creation
2985
3038
  *
3039
+ * @param pagination - Pagination parameters
2986
3040
  * @param filters - Search filters
2987
- * @returns List of users
3041
+ * @returns Paginated list of users
2988
3042
  * @throws {AXConversationApiError} If request fails
2989
3043
  */
2990
- abstract getUsers(filters?: AXConversationUserSearchFilters): Promise<AXConversationParticipant[]>;
3044
+ abstract getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
2991
3045
  /**
2992
3046
  * Search users by query
2993
3047
  *
@@ -3143,6 +3197,7 @@ declare class AXConversationService {
3143
3197
  private readonly fileService;
3144
3198
  private readonly platformId;
3145
3199
  private readonly errorHandler;
3200
+ private readonly apiLogger;
3146
3201
  readonly dialogService: AXDialogService;
3147
3202
  readonly popupService: AXPopupService;
3148
3203
  private readonly translation;
@@ -3190,14 +3245,30 @@ declare class AXConversationService {
3190
3245
  readonly onMessageDeleted: rxjs.Observable<string>;
3191
3246
  readonly onTypingIndicator: rxjs.Observable<AXConversationTypingIndicator>;
3192
3247
  readonly onPresenceChange: rxjs.Observable<AXConversationPresenceUpdate>;
3193
- private readonly _messageCountRefresh$;
3194
- readonly onMessageCountRefresh: rxjs.Observable<{
3195
- messageId: string;
3196
- type: "reply" | "forward";
3197
- }>;
3198
3248
  private _currentUser;
3199
3249
  readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationParticipant>;
3250
+ /** One-time async initialization (connect, user, conversations, realtime). */
3251
+ private initPromise;
3252
+ /** Generation counter — stale page-0 loads are ignored after conversation switches. */
3253
+ private messageLoadGeneration;
3254
+ /** Bumps when a conversation is created while a list load is in flight. */
3255
+ private conversationListLoadGeneration;
3256
+ /** Batched read-receipt queue keyed by conversation ID. */
3257
+ private readonly readQueue;
3258
+ private readFlushHandle;
3259
+ /** Session cache for available reaction emojis. */
3260
+ private availableReactionsCache;
3261
+ private availableReactionsPromise;
3200
3262
  constructor();
3263
+ /** Log and invoke an async API method from AXConversationService. */
3264
+ private callApi;
3265
+ /** Log a sync API invocation (e.g. realtime observable subscriptions). */
3266
+ private logApi;
3267
+ /**
3268
+ * Ensures the service is initialized exactly once.
3269
+ * Safe to call from container components or before any public API usage.
3270
+ */
3271
+ ensureInitialized(): Promise<void>;
3201
3272
  /**
3202
3273
  * Initialize the service
3203
3274
  * Connects to API and loads initial data
@@ -3219,9 +3290,7 @@ declare class AXConversationService {
3219
3290
  */
3220
3291
  loadMoreConversations(page: number): Promise<boolean>;
3221
3292
  /**
3222
- * Select a conversation
3223
- * Loads messages and subscribes to real-time updates
3224
- * Note: Messages are now marked as read individually via intersection observer when viewed
3293
+ * Select a conversation and load page 0 of its message history.
3225
3294
  */
3226
3295
  selectConversation(conversationId: string): Promise<void>;
3227
3296
  closeActiveConversation(): void;
@@ -3273,10 +3342,20 @@ declare class AXConversationService {
3273
3342
  */
3274
3343
  getAvailableReactions(): Promise<string[]>;
3275
3344
  /**
3276
- * Mark a single message as read
3277
- * Updates message status locally and syncs with server
3345
+ * Queue a message to be marked as read (batched/debounced API sync).
3346
+ */
3347
+ queueMessageAsRead(messageId: string): void;
3348
+ /**
3349
+ * Mark a single message as read (queues for batched sync).
3278
3350
  */
3279
3351
  markMessageAsRead(messageId: string): Promise<void>;
3352
+ private scheduleReadFlush;
3353
+ /**
3354
+ * Drop queued per-message read receipts without syncing to the API.
3355
+ * Used before conversation-level mark-as-read to avoid duplicate API calls.
3356
+ */
3357
+ private discardReadQueue;
3358
+ private flushReadQueue;
3280
3359
  /**
3281
3360
  * Mark conversation as read
3282
3361
  * Marks messages locally and syncs with server
@@ -3301,10 +3380,10 @@ declare class AXConversationService {
3301
3380
  */
3302
3381
  private handleMessageUpdate;
3303
3382
  /**
3304
- * Handle message count update
3305
- * Emits events when a message is a reply or forward so components can refresh counts
3383
+ * Bump reply/forward counts locally when realtime events arrive outside the active message list.
3306
3384
  */
3307
- private handleMessageCountUpdate;
3385
+ private syncMessageCountFromRealtime;
3386
+ private bumpMessageCount;
3308
3387
  /**
3309
3388
  * Handle message deletion
3310
3389
  */
@@ -3322,6 +3401,11 @@ declare class AXConversationService {
3322
3401
  * Updates conversation metadata including unread count, last message, etc.
3323
3402
  */
3324
3403
  private handleConversationUpdate;
3404
+ /**
3405
+ * Insert or refresh a conversation in the in-memory inbox.
3406
+ * @param promote When true, bumps activity so the chat sorts to the top (create / reopen).
3407
+ */
3408
+ private syncConversationToInbox;
3325
3409
  /**
3326
3410
  * Update conversation's last message
3327
3411
  */
@@ -3361,15 +3445,19 @@ declare class AXConversationService {
3361
3445
  * @param participantIds - Array of participant user IDs
3362
3446
  * @param type - Conversation type (private, group, channel)
3363
3447
  * @param metadata - Optional metadata (title, avatar, etc.)
3364
- * @returns Created conversation
3448
+ * @param options - Optional flags (`forceCreate` recreates private chats even when one exists)
3449
+ * @returns Created or existing conversation
3365
3450
  */
3366
- createConversation(participantIds: string[], type: AXConversationType, metadata?: AXConversationMetadata): Promise<AXConversation>;
3451
+ createConversation(participantIds: string[], type: AXConversationType, metadata?: AXConversationMetadata, options?: {
3452
+ forceCreate?: boolean;
3453
+ }): Promise<AXConversation>;
3367
3454
  /**
3368
3455
  * Get available users for conversation creation
3369
- * @param query - Optional search query
3370
- * @returns List of users
3456
+ * @param filters - Optional search filters (e.g. `query`)
3457
+ * @param pagination - Pagination parameters
3458
+ * @returns Paginated list of users
3371
3459
  */
3372
- getUsers(query?: string): Promise<AXConversationParticipant[]>;
3460
+ getUsers(filters?: AXConversationUserSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
3373
3461
  /**
3374
3462
  * Mark entire conversation as read
3375
3463
  * @param conversationId - Conversation ID
@@ -3711,18 +3799,18 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3711
3799
  private readonly infoBarService;
3712
3800
  private readonly translation;
3713
3801
  private readonly document;
3802
+ private readonly platform;
3714
3803
  protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
3715
3804
  /**
3716
- * Background for the message list scroll area from config, or the built-in soft gradient when unset/empty.
3805
+ * Background for the message list scroll area from config, or the built-in soft wash when unset/empty.
3717
3806
  * Set `messageListBackground` to `transparent` or `none` for a flat look.
3807
+ * Supports `{ light, dark }` for theme-specific backgrounds.
3718
3808
  */
3719
- messageListBackgroundStyle(): string;
3809
+ readonly messageListBackgroundStyle: _angular_core.Signal<string>;
3720
3810
  resolvedEmptyStateComponent(): Type<AXConversationMessageListEmptyComponent>;
3721
3811
  /** Fallback when no conversation is active and no `ax-conversation-message-list-no-active` content is projected. */
3722
3812
  protected readonly noActiveFallbackComponent: typeof AXConversationMessageListNoActiveDefaultComponent;
3723
3813
  private readonly timeouts;
3724
- private readonly replyCounts;
3725
- private readonly forwardCounts;
3726
3814
  readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
3727
3815
  readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
3728
3816
  readonly reactionPickerPlacement: _angular_core.WritableSignal<AXPlacement>;
@@ -3734,6 +3822,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3734
3822
  /** While true, older history is being prepended — do not auto-scroll to the latest message. */
3735
3823
  private restoringScrollAfterPrepend;
3736
3824
  readonly availableReactions: _angular_core.WritableSignal<string[]>;
3825
+ private reactionsLoading;
3737
3826
  private get registry();
3738
3827
  /** Message list element reference */
3739
3828
  private readonly messageListRef;
@@ -3749,6 +3838,8 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3749
3838
  readonly showScrollButton: _angular_core.WritableSignal<boolean>;
3750
3839
  /** Active conversation */
3751
3840
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
3841
+ /** Whether the active conversation allows message reactions. */
3842
+ readonly reactionsEnabled: _angular_core.Signal<boolean>;
3752
3843
  /** Messages */
3753
3844
  readonly messages: _angular_core.Signal<AXConversationMessage[]>;
3754
3845
  /** Message action event */
@@ -3766,6 +3857,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3766
3857
  }[]>;
3767
3858
  constructor();
3768
3859
  private intersectionObserver?;
3860
+ private readonly observedReadMessageIds;
3769
3861
  /**
3770
3862
  * Setup intersection observer to mark messages as read when visible
3771
3863
  */
@@ -3820,6 +3912,8 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3820
3912
  userIds: string[];
3821
3913
  hasReacted: boolean;
3822
3914
  }): string;
3915
+ /** Whether reactions can be shown or added for a message in the active conversation. */
3916
+ messageSupportsReactions(message: AXConversationMessage): boolean;
3823
3917
  /** Toggle reaction picker */
3824
3918
  toggleReactionPicker(message: AXConversationMessage, event: MouseEvent): void;
3825
3919
  /** Close reaction picker */
@@ -3832,8 +3926,8 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3832
3926
  onReactionClickById(messageId: string, emoji: string): void;
3833
3927
  /** Get message by ID */
3834
3928
  getMessageById(messageId: string): AXConversationMessage | undefined;
3835
- /** Load available reactions from API */
3836
- private loadAvailableReactions;
3929
+ /** Load available reactions when the picker is opened (session-cached in service). */
3930
+ private ensureAvailableReactions;
3837
3931
  /** Get message actions from registry */
3838
3932
  getMessageActions(message: AXConversationMessage): _acorex_components_conversation.AXConversationMessageAction[];
3839
3933
  /** Handle reaction click */
@@ -3872,15 +3966,8 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3872
3966
  /** Get ARIA label for message */
3873
3967
  getMessageAriaLabel(message: AXConversationMessage): string;
3874
3968
  getDateSeparatorAriaLabel(dateLabel: string): string;
3875
- /** Get reply count for a message (fetches from API across all conversations) */
3876
3969
  getReplyCount(message: AXConversationMessage): number;
3877
- /** Get forward count for a message (fetches from API across all conversations) */
3878
3970
  getForwardCount(message: AXConversationMessage): number;
3879
- /**
3880
- * Refresh count for a specific message from API
3881
- * This is called when a new reply or forward is detected globally
3882
- */
3883
- private refreshCount;
3884
3971
  onMessageListDragEnter(): void;
3885
3972
  onMessageListDragLeave(): void;
3886
3973
  /** Open the matching composer picker popup when files are dropped on the message list. */
@@ -3909,7 +3996,6 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3909
3996
 
3910
3997
  declare class AXConversationMessageListService {
3911
3998
  private readonly conversationService;
3912
- private readonly config;
3913
3999
  private get registry();
3914
4000
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
3915
4001
  readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
@@ -3926,9 +4012,19 @@ declare class AXConversationMessageListService {
3926
4012
  readonly scrollRequests: _angular_core.WritableSignal<number>;
3927
4013
  /** Live renderer instances keyed by message id (for message actions). */
3928
4014
  private readonly _rendererInstances;
4015
+ /**
4016
+ * Reply counts merged from API fields and loaded messages.
4017
+ */
4018
+ readonly replyCounts: _angular_core.Signal<Map<string, number>>;
4019
+ /**
4020
+ * Forward counts merged from API fields and loaded messages.
4021
+ */
4022
+ readonly forwardCounts: _angular_core.Signal<Map<string, number>>;
3929
4023
  registerRendererInstance(messageId: string, instance: AXConversationMessageRendererComponent): void;
3930
4024
  unregisterRendererInstance(messageId: string): void;
3931
4025
  getRendererInstance(messageId: string): AXConversationMessageRendererComponent | undefined;
4026
+ getReplyCount(messageId: string): number;
4027
+ getForwardCount(messageId: string): number;
3932
4028
  /** Message grouped by date */
3933
4029
  readonly messageGroups: _angular_core.Signal<{
3934
4030
  date: string;
@@ -3948,13 +4044,14 @@ declare class AXConversationMessageListService {
3948
4044
  reactToMessage(messageId: string, emoji: string): Promise<void>;
3949
4045
  /** Request message list to scroll to bottom */
3950
4046
  requestScrollToBottom(): void;
4047
+ private buildCountMap;
3951
4048
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageListService, never>;
3952
4049
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationMessageListService>;
3953
4050
  }
3954
4051
 
3955
4052
  declare class AXConversationSidebarService {
3956
4053
  private readonly conversationService;
3957
- private readonly config;
4054
+ constructor();
3958
4055
  private get registry();
3959
4056
  readonly searchQuery: _angular_core.WritableSignal<string>;
3960
4057
  readonly activeTabId: _angular_core.WritableSignal<string>;
@@ -3963,7 +4060,6 @@ declare class AXConversationSidebarService {
3963
4060
  readonly loading: _angular_core.Signal<boolean>;
3964
4061
  readonly hasMoreConversations: _angular_core.Signal<boolean>;
3965
4062
  readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation.AXConversationTab[]>;
3966
- private filterCache;
3967
4063
  readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
3968
4064
  /**
3969
4065
  * Filter and sort conversations
@@ -3995,6 +4091,8 @@ declare class AXConversationSidebarComponent implements OnDestroy {
3995
4091
  private readonly conversationService;
3996
4092
  private readonly popupService;
3997
4093
  private readonly translation;
4094
+ private readonly ngZone;
4095
+ private readonly cdr;
3998
4096
  /** Conversation selected event */
3999
4097
  readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
4000
4098
  /** Search debouncing */
@@ -4038,6 +4136,10 @@ declare class AXConversationNewDialogComponent extends AXBasePageComponent {
4038
4136
  conversationService: AXConversationService;
4039
4137
  private readonly toastService;
4040
4138
  private readonly translation;
4139
+ private readonly config;
4140
+ private readonly destroyRef;
4141
+ private searchDebounceTimer?;
4142
+ constructor();
4041
4143
  /**
4042
4144
  * Injected by {@link AXPopupComponent} when this dialog is opened via {@link AXPopupService}.
4043
4145
  * Required for `setTitle` / dynamic header — {@link AXBasePageComponent#setTitle} is otherwise unset.
@@ -4061,6 +4163,7 @@ declare class AXConversationNewDialogComponent extends AXBasePageComponent {
4061
4163
  private readonly _resetWizardWhenSingleEffect;
4062
4164
  private readonly _syncPopupTitleEffect;
4063
4165
  readonly usersListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
4166
+ readonly usersListLoadingTpl: _angular_core.Signal<TemplateRef<unknown>>;
4064
4167
  readonly usersList: _angular_core.Signal<AXListComponent>;
4065
4168
  readonly usersListDataSource: AXDataSource<unknown>;
4066
4169
  onCancel(): void;
@@ -4070,7 +4173,7 @@ declare class AXConversationNewDialogComponent extends AXBasePageComponent {
4070
4173
  onSearchChange(value: string): void;
4071
4174
  isUserSelected(id: string): boolean;
4072
4175
  userFromItem(item: unknown): AXConversationParticipant | null;
4073
- private filteredUsers;
4176
+ private mergeUsersCache;
4074
4177
  onCreateConversation(): Promise<void>;
4075
4178
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationNewDialogComponent, never>;
4076
4179
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationNewDialogComponent, "ax-conversation-new-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -4104,19 +4207,12 @@ declare class AXConversationInfiniteScrollDirective {
4104
4207
  /**
4105
4208
  * Conversation feature flags for configurable bundle size.
4106
4209
  */
4107
- type AXConversationMediaPickerFeature = 'image' | 'video' | 'audio' | 'file' | 'voice' | 'location';
4108
4210
  type AXConversationComposerTabFeature = 'emoji' | 'sticker';
4109
4211
  interface AXConversationFeatures {
4110
- /** Enabled composer media pickers; defaults to all when omitted. */
4111
- mediaPickers?: AXConversationMediaPickerFeature[];
4112
- /** Enabled composer popup tabs; defaults to all when omitted. */
4212
+ /** Enabled built-in composer popup tabs (`emoji`, `sticker`). Defaults to none when omitted. */
4113
4213
  composerTabs?: AXConversationComposerTabFeature[];
4114
4214
  }
4115
- declare const AX_ALL_CONVERSATION_MEDIA_PICKERS: readonly AXConversationMediaPickerFeature[];
4116
- declare const AX_ALL_CONVERSATION_COMPOSER_TABS: readonly AXConversationComposerTabFeature[];
4117
- declare function resolveConversationMediaPickers(features?: AXConversationFeatures): readonly AXConversationMediaPickerFeature[];
4118
4215
  declare function resolveConversationComposerTabs(features?: AXConversationFeatures): readonly AXConversationComposerTabFeature[];
4119
- declare function isMediaPickerEnabled(picker: AXConversationMediaPickerFeature, features?: AXConversationFeatures): boolean;
4120
4216
  declare function isComposerTabEnabled(tab: AXConversationComposerTabFeature, features?: AXConversationFeatures): boolean;
4121
4217
 
4122
4218
  /**
@@ -4166,31 +4262,52 @@ interface AXConversationConfig {
4166
4262
  maxFilesPerMessage?: number;
4167
4263
  /** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
4168
4264
  messageReadThreshold?: number;
4265
+ /** Debounce window (ms) before flushing batched read-receipt API calls (default: 400) */
4266
+ messageReadDebounce?: number;
4267
+ /**
4268
+ * When true, marks the whole conversation as read once when it is selected (single API call).
4269
+ * Per-message intersection observer still handles new messages received while the chat is open.
4270
+ */
4271
+ markConversationReadOnSelect?: boolean;
4169
4272
  /**
4170
4273
  * CSS `background` for the message list (`ax-conversation-message-list` area, all states: loading, empty, messages).
4171
4274
  * Use full shorthand, or a bare `https://...` / `/path/to.png` (wrapped as `url(...)` with `center/cover`).
4172
- * Empty string = library default soft gradient. `transparent` or `none` = flat background.
4275
+ * Pass a string for the same value in both themes, or `{ light, dark }` for theme-specific backgrounds.
4276
+ * Empty string = library default. `transparent` or `none` = flat background.
4173
4277
  */
4174
- messageListBackground?: string;
4278
+ messageListBackground?: AXConversationMessageListBackground;
4175
4279
  /** Optional feature flags to reduce bundle size per app. */
4176
4280
  features?: AXConversationFeatures;
4281
+ /** Log API calls made by AXConversationService to the console (default: false). */
4282
+ debugApiLogging?: boolean;
4177
4283
  }
4178
4284
 
4179
4285
  /**
4286
+
4180
4287
  * Default Configuration Values
4288
+
4181
4289
  * Centralized defaults to avoid magic numbers throughout the codebase
4290
+
4182
4291
  */
4183
4292
 
4184
4293
  /**
4294
+
4185
4295
  * Default conversation configuration
4296
+
4186
4297
  * All values are explicitly defined here for easy maintenance and documentation
4298
+
4187
4299
  */
4188
4300
  declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
4189
4301
  /**
4302
+
4190
4303
  * Helper function to merge user config with defaults
4304
+
4191
4305
  * Properly handles array merging to avoid reference issues
4306
+
4192
4307
  * @param userConfig - User-provided configuration
4308
+
4193
4309
  * @returns Merged configuration with all required fields
4310
+
4194
4311
  */
4195
4312
  declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
4196
4313
 
@@ -4212,12 +4329,19 @@ declare const AX_CONVERSATION_ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXCon
4212
4329
  /**
4213
4330
  * Pluggable avatar components for the conversation UI.
4214
4331
  * Register via `provideConversation({ avatarComponents: { user, conversation } })`.
4332
+ * When only `user` is registered, a built-in conversation avatar host is wired automatically.
4215
4333
  */
4216
4334
 
4217
4335
  /** Custom user avatar (e.g. platform `axp-user-avatar`). */
4218
4336
  interface AXConversationUserAvatarComponent {
4219
4337
  readonly userId: InputSignal<string>;
4220
4338
  readonly size: InputSignal<number>;
4339
+ /** Optional resolved display name (e.g. bot/assist peer title). */
4340
+ readonly displayName?: InputSignal<string | undefined>;
4341
+ /** Optional resolved avatar URL when `userId` is not a platform user row. */
4342
+ readonly displayAvatar?: InputSignal<string | undefined>;
4343
+ /** Optional icon class when no avatar image is available. */
4344
+ readonly displayIcon?: InputSignal<string | undefined>;
4221
4345
  }
4222
4346
  /** Optional custom group/channel conversation avatar. */
4223
4347
  interface AXConversationConversationAvatarComponent {
@@ -4405,6 +4529,8 @@ declare class AXConversationSharedStorage {
4405
4529
  * Seed initial data if not already seeded
4406
4530
  */
4407
4531
  seedIfEmpty(): Promise<void>;
4532
+ /** Wipe in-memory and persisted demo data (used when seed version changes). */
4533
+ private clearAllData;
4408
4534
  /** @internal Used by demo seed module */
4409
4535
  markSeeded(): void;
4410
4536
  /** @internal Starts demo presence and message simulations */
@@ -4428,6 +4554,11 @@ declare class AXConversationSharedStorage {
4428
4554
  }
4429
4555
  declare const axConversationSharedStorage: AXConversationSharedStorage;
4430
4556
 
4557
+ declare const AX_CONVERSATION_DEMO_CONVERSATION_IDS: {
4558
+ readonly private: "conv-demo-private";
4559
+ readonly group: "conv-demo-group";
4560
+ readonly channel: "conv-demo-channel";
4561
+ };
4431
4562
  declare function seedSharedStorageInitialData(storage: AXConversationSharedStorage): Promise<void>;
4432
4563
 
4433
4564
  /**
@@ -4465,11 +4596,12 @@ declare function paginateChatOldestFirst<T extends {
4465
4596
  }>(sortedOldestFirst: T[], pagination: AXConversationPagination): AXConversationPaginatedResult<T>;
4466
4597
 
4467
4598
  /**
4468
- * Extra seed data so sidebar and message-list pagination can be exercised in the demo.
4469
- */
4470
- /**
4471
- * Append demo chats/messages when the DB is too small for default page sizes (30 / 50).
4599
+ * Pagination demo data disabled for the minimal 3-chat showcase seed.
4600
+ * Kept as a no-op so existing imports remain valid.
4472
4601
  */
4602
+ /** @deprecated Pagination demo chat removed from default seed. */
4603
+ declare const AX_MESSAGE_PAGINATION_CONVERSATION_ID = "conv-pag-msgs";
4604
+ /** No-op: showcase uses a fixed 3-conversation seed (private, group, channel). */
4473
4605
  declare function ensurePaginationDemoData(): Promise<void>;
4474
4606
 
4475
4607
  /**
@@ -4492,10 +4624,11 @@ declare function getSortedConversationsForInbox(filters?: AXConversationFilters)
4492
4624
  declare function normalizeAllConversationMessageIndexes(): void;
4493
4625
 
4494
4626
  declare class AXConversationIndexedDbUserApi extends AXConversationUserApi {
4627
+ private readonly API_DELAY_MS;
4495
4628
  getCurrentUser(): Promise<AXConversationParticipant>;
4496
4629
  updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationParticipant>;
4497
4630
  uploadAvatar(file: File): Promise<string>;
4498
- getUsers(filters?: AXConversationUserSearchFilters): Promise<AXConversationParticipant[]>;
4631
+ getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
4499
4632
  searchUsers(query: string): Promise<AXConversationParticipant[]>;
4500
4633
  getUserById(userId: string): Promise<AXConversationParticipant>;
4501
4634
  getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
@@ -4507,6 +4640,9 @@ declare class AXConversationIndexedDbUserApi extends AXConversationUserApi {
4507
4640
  reportUser(_userId: string, _reason: AXConversationBlockReportReason): Promise<void>;
4508
4641
  getUserSettings(): Promise<Record<string, unknown>>;
4509
4642
  updateUserSettings(_settings: Record<string, unknown>): Promise<void>;
4643
+ private getCurrentUserWithoutDelay;
4644
+ private fetchUsers;
4645
+ private delay;
4510
4646
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbUserApi, never>;
4511
4647
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbUserApi>;
4512
4648
  }
@@ -4887,6 +5023,8 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
4887
5023
 
4888
5024
  declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXConversationComposerTab;
4889
5025
  declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXConversationComposerTab;
5026
+ /** Built-in composer popup tabs keyed by {@link AXConversationComposerTabFeature}. */
5027
+ declare const AX_CONVERSATION_BUILTIN_COMPOSER_TABS: Record<AXConversationComposerTabFeature, AXConversationComposerTab>;
4890
5028
 
4891
5029
  interface AXConversationEmoji {
4892
5030
  char: string;
@@ -5135,17 +5273,6 @@ declare class AXConversationPickerEmptyComponent {
5135
5273
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerEmptyComponent, "ax-conversation-picker-empty", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": true; "isSignal": true; }; "iconClass": { "alias": "iconClass"; "required": true; "isSignal": true; }; "dragOver": { "alias": "dragOver"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5136
5274
  }
5137
5275
 
5138
- /**
5139
- * Shell flex + max-height (on {@link AXConversationPickerShellComponent}).
5140
- * Styles here target projected content inside the shell.
5141
- */
5142
- declare const AX_CONVERSATION_PICKER_SHELL_STYLES = "\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-height: 0;\n container-type: inline-size;\n container-name: picker;\n }\n\n .ax-conversation-picker {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 100%;\n max-height: min(32rem, 85dvh);\n background: rgb(var(--ax-sys-color-lightest-surface));\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n overflow: hidden;\n }\n\n .ax-conversation-picker__content {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n }\n\n @container picker (max-width: 480px) {\n .ax-conversation-picker {\n max-height: min(28rem, 90dvh);\n border-radius: 0;\n }\n }\n";
5143
- /**
5144
- * Shared layout and surface styles for composer media pickers.
5145
- * Uses ACoreX system color tokens only.
5146
- */
5147
- declare const AX_CONVERSATION_PICKER_SHARED_STYLES = "\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-height: 0;\n }\n\n .ax-conversation-picker__scroll {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n\n .ax-conversation-picker__empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.375rem;\n min-height: 8.5rem;\n margin: 0.75rem;\n padding: 1rem 0.75rem;\n border: 1px dashed rgb(var(--ax-sys-color-border-surface));\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n cursor: pointer;\n transition: border-color 0.15s ease, background-color 0.15s ease;\n text-align: center;\n touch-action: manipulation;\n }\n\n .ax-conversation-picker__empty:hover,\n .ax-conversation-picker__empty--drag {\n border-color: rgb(var(--ax-sys-color-primary-500));\n background: rgba(var(--ax-sys-color-primary-500), 0.06);\n }\n\n .ax-conversation-picker__empty-icon {\n font-size: 1.75rem;\n line-height: 1;\n color: rgba(var(--ax-sys-color-on-surface), 0.55);\n }\n\n .ax-conversation-picker__empty-title {\n margin: 0;\n font-size: 0.8125rem;\n font-weight: 600;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .ax-conversation-picker__empty-hint {\n margin: 0;\n font-size: 0.75rem;\n color: rgba(var(--ax-sys-color-on-surface), 0.6);\n }\n\n .ax-conversation-picker__body {\n padding: 0 0.75rem 0.75rem;\n }\n\n .ax-conversation-picker__list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-top: 0.5rem;\n }\n\n .ax-conversation-picker__row {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.625rem;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n background: rgb(var(--ax-sys-color-surface));\n transition: background-color 0.15s ease;\n }\n\n @media (hover: hover) {\n .ax-conversation-picker__row:hover {\n background: rgb(var(--ax-sys-color-light-surface));\n }\n }\n\n .ax-conversation-picker__thumb {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n flex-shrink: 0;\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n background: rgba(var(--ax-sys-color-primary-500), 0.08);\n color: rgb(var(--ax-sys-color-primary-500));\n font-size: 1.125rem;\n overflow: hidden;\n }\n\n .ax-conversation-picker__thumb img,\n .ax-conversation-picker__thumb video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n pointer-events: none;\n }\n\n .ax-conversation-picker__thumb-badge {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgb(0 0 0 / 0.32);\n color: rgb(var(--ax-sys-color-light));\n font-size: 0.625rem;\n pointer-events: none;\n }\n\n .ax-conversation-picker__details {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n }\n\n .ax-conversation-picker__name {\n font-size: 0.8125rem;\n font-weight: 500;\n color: rgb(var(--ax-sys-color-on-surface));\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ax-conversation-picker__status {\n display: flex;\n flex-wrap: wrap;\n gap: 0.375rem;\n font-size: 0.6875rem;\n color: rgba(var(--ax-sys-color-on-surface), 0.65);\n }\n\n .ax-conversation-picker__status--ok {\n color: rgb(var(--ax-sys-color-success-600));\n font-weight: 500;\n }\n\n .ax-conversation-picker__status--err {\n color: rgb(var(--ax-sys-color-danger-600));\n font-weight: 500;\n }\n\n .ax-conversation-picker__progress {\n width: 100%;\n margin-top: 0.125rem;\n }\n\n .ax-conversation-picker__remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n flex-shrink: 0;\n border: none;\n border-radius: var(--ax-sys-border-radius, 0.25rem);\n background: transparent;\n color: rgba(var(--ax-sys-color-on-surface), 0.55);\n font-size: 1rem;\n cursor: pointer;\n touch-action: manipulation;\n transition: background-color 0.15s ease, color 0.15s ease;\n }\n\n .ax-conversation-picker__remove:hover,\n .ax-conversation-picker__remove:focus-visible {\n background: rgba(var(--ax-sys-color-danger-500), 0.1);\n color: rgb(var(--ax-sys-color-danger-500));\n outline: none;\n }\n\n .ax-conversation-picker__grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5.25rem, 1fr));\n gap: 0.5rem;\n }\n\n .ax-conversation-picker__tile {\n position: relative;\n aspect-ratio: 1;\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n overflow: hidden;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-light-surface));\n }\n\n .ax-conversation-picker__tile img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n .ax-conversation-picker__tile-remove {\n position: absolute;\n top: 0.25rem;\n inset-inline-end: 0.25rem;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n border-radius: 50%;\n background: rgb(var(--ax-sys-color-danger-500));\n color: rgb(var(--ax-sys-color-light));\n font-size: 0.6875rem;\n cursor: pointer;\n touch-action: manipulation;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .ax-conversation-picker__tile-overlay {\n position: absolute;\n inset-inline: 0;\n bottom: 0;\n padding: 0.25rem;\n background: linear-gradient(transparent, rgb(0 0 0 / 0.55));\n }\n\n .ax-conversation-picker__tile-status {\n font-size: 0.625rem;\n color: rgb(var(--ax-sys-color-light));\n line-height: 1.2;\n }\n\n .ax-conversation-picker__caption-slot {\n flex-shrink: 0;\n padding: 0.5rem 0.75rem;\n border-top: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-lightest-surface));\n }\n\n .ax-conversation-picker__input-hidden {\n display: none;\n }\n\n @container picker (max-width: 480px) {\n .ax-conversation-picker__grid {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 0.375rem;\n }\n\n .ax-conversation-picker__row {\n padding: 0.4375rem 0.5rem;\n gap: 0.5rem;\n }\n\n .ax-conversation-picker__thumb {\n width: 2.25rem;\n height: 2.25rem;\n }\n\n .ax-conversation-picker__empty {\n min-height: 7.5rem;\n margin: 0.5rem;\n }\n\n .ax-conversation-picker__body {\n padding-inline: 0.5rem;\n padding-bottom: 0.5rem;\n }\n }\n";
5148
-
5149
5276
  /**
5150
5277
  * Wraps composer pickers with {@link AXUploaderZoneDirective} for browse, drop, and validation.
5151
5278
  */
@@ -5349,13 +5476,15 @@ declare const AX_CONVERSATION_COMPOSER_LOCATION_ACTION: AXConversationComposerAc
5349
5476
 
5350
5477
  /** Ensures built-in conversation catalogs exist on the root file-type registry. */
5351
5478
  declare const AX_CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
5352
- /** Registers validation rules and lazy conversation file-type catalogs for enabled pickers. */
5353
- declare function provideConversationComposerFileTypes(_features?: AXConversationFeatures): Provider[];
5479
+ /** Registers validation rules and lazy conversation file-type catalogs for composer actions. */
5480
+ declare function provideConversationComposerFileTypes(): Provider[];
5354
5481
 
5355
- /** Lazy-loads conversation file catalogs only for enabled media pickers. */
5482
+ /**
5483
+ * Lazy-loads conversation file catalogs for the root file-type registry.
5484
+ * Must not inject {@link AXConversationComposerActionRegistry} — that registry
5485
+ * depends on {@link AXFileTypeRegistryService}, which would create a circular DI cycle.
5486
+ */
5356
5487
  declare class AXConversationComposerFileTypesProvider extends AXFileTypeInfoProvider {
5357
- private readonly config;
5358
- private cache;
5359
5488
  items(): Promise<AXFileType[]>;
5360
5489
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerFileTypesProvider, never>;
5361
5490
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationComposerFileTypesProvider>;
@@ -5405,7 +5534,18 @@ declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem):
5405
5534
  declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
5406
5535
  declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
5407
5536
  declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
5408
- declare function fetchAllConversationMessages(messageApi: AXConversationMessageApi, conversationId: string, pageSize: number): Promise<AXConversationMessage[]>;
5537
+ interface AXConversationMediaPageResult {
5538
+ items: AXConversationMessage[];
5539
+ hasMore: boolean;
5540
+ nextCursor?: string;
5541
+ page: number;
5542
+ }
5543
+ declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
5544
+ /** @deprecated Use {@link fetchConversationMediaPage} — loads only the first page. */
5545
+ declare function fetchConversationMediaMessages(conversationApi: AXConversationApi, conversationId: string, pageSize: number): Promise<AXConversationMessage[]>;
5546
+ /** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
5547
+ declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
5548
+ declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
5409
5549
 
5410
5550
  interface AXInfoPanelQuickAction {
5411
5551
  id: string;
@@ -5416,6 +5556,7 @@ interface AXInfoPanelQuickAction {
5416
5556
  declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
5417
5557
  private readonly toastService;
5418
5558
  readonly translation: AXTranslationService;
5559
+ private readonly platform;
5419
5560
  private readonly injectedConversationService;
5420
5561
  readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
5421
5562
  conversation: AXConversation;
@@ -5427,6 +5568,10 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
5427
5568
  readonly mediaViewLoader: () => Promise<typeof _acorex_components_conversation.AXConversationInfoMediaViewComponent>;
5428
5569
  readonly conversationMessages: _angular_core.WritableSignal<AXConversationMessage[]>;
5429
5570
  readonly loadingMessages: _angular_core.WritableSignal<boolean>;
5571
+ readonly loadingMoreMedia: _angular_core.WritableSignal<boolean>;
5572
+ readonly mediaHasMore: _angular_core.WritableSignal<boolean>;
5573
+ private mediaNextPage;
5574
+ private mediaNextCursor;
5430
5575
  readonly memberSearchQuery: _angular_core.WritableSignal<string>;
5431
5576
  archived: boolean;
5432
5577
  private initialNotifications;
@@ -5435,11 +5580,11 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
5435
5580
  editAvatar: string;
5436
5581
  private groupTitleSaveTimer;
5437
5582
  private groupDetailsSaveInFlight;
5438
- readonly backgroundPresets: Array<{
5439
- id: string;
5583
+ readonly backgroundPresets: {
5440
5584
  label: string;
5441
- value: string;
5442
- }>;
5585
+ id: string;
5586
+ value: AXConversationMessageListThemeBackground;
5587
+ }[];
5443
5588
  readonly heroSubtitle: _angular_core.Signal<string>;
5444
5589
  readonly liveConversation: _angular_core.Signal<AXConversation>;
5445
5590
  readonly isConversationMuted: _angular_core.Signal<boolean>;
@@ -5449,6 +5594,7 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
5449
5594
  readonly filteredMembers: _angular_core.Signal<AXConversationParticipant[]>;
5450
5595
  ngOnInit(): void;
5451
5596
  private loadConversationMessages;
5597
+ loadMoreMedia(): Promise<void>;
5452
5598
  isPrivateConversation(): boolean;
5453
5599
  isGroupConversation(): boolean;
5454
5600
  membersSectionTitle(): string;
@@ -5471,9 +5617,14 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
5471
5617
  onGroupTitleChange(value: string): void;
5472
5618
  onGroupAvatarChange(value: string): void;
5473
5619
  private persistGroupDetails;
5474
- isBackgroundSelected(value: string): boolean;
5475
- applyMessageListBackground(value: string): Promise<void>;
5620
+ isBackgroundSelected(preset: {
5621
+ id: string;
5622
+ value: AXConversationMessageListThemeBackground;
5623
+ }): boolean;
5624
+ presetBackgroundPreview(preset: AXConversationMessageListThemeBackground): string;
5625
+ applyMessageListBackground(value: AXConversationMessageListBackground): Promise<void>;
5476
5626
  getBackgroundAriaLabel(label: string): string;
5627
+ private translateBackgroundPresetLabel;
5477
5628
  ngOnDestroy(): void;
5478
5629
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
5479
5630
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
@@ -5486,6 +5637,9 @@ declare class AXConversationInfoMediaViewComponent {
5486
5637
  readonly messages: _angular_core.InputSignal<AXConversationMessage[]>;
5487
5638
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5488
5639
  readonly conversationServiceInput: _angular_core.InputSignal<AXConversationService>;
5640
+ readonly hasMoreMedia: _angular_core.InputSignal<boolean>;
5641
+ readonly loadingMoreMedia: _angular_core.InputSignal<boolean>;
5642
+ readonly onLoadMoreMedia: _angular_core.InputSignal<() => void | Promise<void>>;
5489
5643
  /** Callback for lazy outlet wiring (alternative to the `back` output). */
5490
5644
  readonly onBack: _angular_core.InputSignal<() => void>;
5491
5645
  readonly back: _angular_core.OutputEmitterRef<void>;
@@ -5504,8 +5658,9 @@ declare class AXConversationInfoMediaViewComponent {
5504
5658
  };
5505
5659
  formatTimestamp(message: AXConversationMessage): string;
5506
5660
  handleBack(): void;
5661
+ onScrollThreshold(edge: 'top' | 'bottom'): void;
5507
5662
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoMediaViewComponent, never>;
5508
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; "onBack": { "alias": "onBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
5663
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; "hasMoreMedia": { "alias": "hasMoreMedia"; "required": false; "isSignal": true; }; "loadingMoreMedia": { "alias": "loadingMoreMedia"; "required": false; "isSignal": true; }; "onLoadMoreMedia": { "alias": "onLoadMoreMedia"; "required": false; "isSignal": true; }; "onBack": { "alias": "onBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
5509
5664
  }
5510
5665
 
5511
5666
  declare class AXConversationInfoBarSearchComponent {
@@ -5513,6 +5668,7 @@ declare class AXConversationInfoBarSearchComponent {
5513
5668
  private readonly destroyRef;
5514
5669
  private readonly infoBarService;
5515
5670
  private readonly conversationService;
5671
+ private readonly config;
5516
5672
  /** Conversation input */
5517
5673
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5518
5674
  /** Service input */
@@ -5523,13 +5679,14 @@ declare class AXConversationInfoBarSearchComponent {
5523
5679
  readonly resultsCount: _angular_core.Signal<number>;
5524
5680
  /** Current index from service */
5525
5681
  readonly currentIndex: _angular_core.Signal<number>;
5526
- /** Messages from conversation */
5527
- readonly messages: _angular_core.Signal<_acorex_components_conversation.AXConversationMessage[]>;
5682
+ private readonly searchResults;
5683
+ private searchDebounceTimer?;
5528
5684
  private scrollTimer?;
5685
+ private searchRequestId;
5529
5686
  constructor();
5530
5687
  /** Handle search input change */
5531
5688
  onSearchChange(value: string): void;
5532
- /** Perform search in messages */
5689
+ /** Perform server-side search in messages */
5533
5690
  private performSearch;
5534
5691
  /** Navigate to next result */
5535
5692
  onNext(): void;
@@ -5734,11 +5891,6 @@ declare function syncPlaybackInfoBarBanner(infoBar: AXConversationInfoBarService
5734
5891
  forceOpen?: boolean;
5735
5892
  }): void;
5736
5893
 
5737
- /**
5738
- * Shared layout tokens for conversation message renderers.
5739
- */
5740
- declare const AX_CONVERSATION_RENDERER_SHARED_STYLES = "\n :host {\n display: block;\n max-width: 100%;\n }\n\n .ax-conversation-msg {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n }\n\n .ax-conversation-msg__stack {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n }\n\n .ax-conversation-msg__grid {\n display: grid;\n gap: 2px;\n width: 100%;\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n overflow: hidden;\n background: rgb(var(--ax-sys-color-border-light-surface));\n }\n\n .ax-conversation-msg__grid--single {\n grid-template-columns: 1fr;\n }\n\n .ax-conversation-msg__grid--single ::ng-deep .ax-conversation-image-attachment {\n max-height: min(50dvh, 20rem);\n }\n\n .ax-conversation-msg__grid--dual {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .ax-conversation-msg__grid--multi {\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 10rem;\n }\n\n @container (max-width: 380px) {\n .ax-conversation-msg__grid--multi {\n grid-template-columns: repeat(2, 1fr);\n grid-auto-rows: 10rem;\n }\n }\n\n .ax-conversation-msg__caption {\n margin: 0;\n padding: 0 0.125rem;\n font-size: 0.8125rem;\n line-height: 1.4;\n word-break: break-word;\n opacity: 0.88;\n }\n\n /* Flush layout: media fills the message bubble edge-to-edge (image / video). */\n .ax-conversation-msg--flush {\n width: 100%;\n max-width: 100%;\n gap: 0;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__caption {\n padding: 0.375rem 0.625rem 0;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__grid {\n border-radius: 0;\n background: transparent;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__stack {\n gap: 2px;\n }\n\n .ax-conversation-msg--flush ::ng-deep .ax-conversation-video {\n border-radius: 0;\n }\n\n .ax-conversation-msg__card {\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-surface));\n overflow: hidden;\n }\n";
5741
-
5742
5894
  declare class AXConversationVideoAttachmentComponent {
5743
5895
  readonly item: _angular_core.InputSignal<AXConversationVideoMediaItem>;
5744
5896
  readonly playingChange: _angular_core.OutputEmitterRef<boolean>;
@@ -6101,6 +6253,28 @@ declare const AX_CONVERSATION_TAB_BOT: AXConversationTab;
6101
6253
  declare const AX_CONVERSATION_TAB_UNREAD: AXConversationTab;
6102
6254
  declare const AX_CONVERSATION_TAB_ARCHIVED: AXConversationTab;
6103
6255
 
6256
+ declare class AXConversationDefaultConversationAvatarComponent {
6257
+ private readonly conversationService;
6258
+ private readonly userAvatarComponent;
6259
+ readonly conversationId: _angular_core.InputSignal<string>;
6260
+ readonly size: _angular_core.InputSignal<number>;
6261
+ private readonly currentUserId;
6262
+ private readonly conversation;
6263
+ readonly peerUserId: _angular_core.Signal<string>;
6264
+ readonly useUserAvatar: _angular_core.Signal<_angular_core.Type<_acorex_components_conversation.AXConversationUserAvatarComponent>>;
6265
+ readonly userAvatarInputs: _angular_core.Signal<{
6266
+ userId: string;
6267
+ size: number;
6268
+ displayName: string;
6269
+ displayAvatar: string;
6270
+ displayIcon: string;
6271
+ }>;
6272
+ readonly fallbackDisplay: _angular_core.Signal<_acorex_components_conversation.AXConversationAvatarDisplay>;
6273
+ readonly fallbackInitials: _angular_core.Signal<string>;
6274
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationDefaultConversationAvatarComponent, never>;
6275
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationDefaultConversationAvatarComponent, "ax-conversation-default-conversation-avatar", never, { "conversationId": { "alias": "conversationId"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6276
+ }
6277
+
6104
6278
  /**
6105
6279
  * Configuration options for conversation module
6106
6280
  */
@@ -6132,7 +6306,7 @@ declare class AXConversationModule {
6132
6306
  */
6133
6307
  static forChild(options?: Omit<AXConversationOptions, 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi'>): ModuleWithProviders<AXConversationModule>;
6134
6308
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationModule, never>;
6135
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXConversationModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective], [typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective]>;
6309
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXConversationModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective, typeof AXConversationDefaultConversationAvatarComponent], [typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective]>;
6136
6310
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXConversationModule>;
6137
6311
  }
6138
6312
  /**
@@ -6169,27 +6343,69 @@ interface AXConversationAvatarDisplay {
6169
6343
  avatar?: string;
6170
6344
  icon?: string;
6171
6345
  }
6346
+ /** Conversation types that resolve a single peer participant for viewer-scoped avatar/title. */
6347
+ declare const AX_CONVERSATION_PEER_AVATAR_TYPES: ReadonlySet<AXConversationType>;
6348
+ /**
6349
+ * Other participant in a peer-scoped conversation (excludes the current viewer).
6350
+ * Applies to private 1:1 and bot assist chats with exactly one non-viewer participant.
6351
+ */
6352
+ declare function resolveConversationPeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
6172
6353
  /** Other participant in a private chat (excludes the current user). */
6173
6354
  declare function resolvePrivatePeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
6174
- /** Whether `auto` kind should render a user avatar for this conversation. */
6355
+ /** Peer participant for private and bot conversations. */
6356
+ declare function resolveConversationPeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
6357
+ /** Whether `auto` kind should render a registered user avatar for this conversation. */
6175
6358
  declare function shouldUseUserAvatarForConversation(conversation: AXConversation, currentUserId?: string): boolean;
6176
6359
  declare function resolveUserAvatarDisplay(userId: string, conversation: AXConversation | undefined, message?: AXConversationMessage): AXConversationAvatarDisplay;
6177
6360
  declare function resolveConversationAvatarDisplay(conversation: AXConversation, currentUserId?: string): AXConversationAvatarDisplay;
6178
6361
 
6362
+ interface AXConversationMessageListBackgroundPreset {
6363
+ id: string;
6364
+ value: AXConversationMessageListThemeBackground;
6365
+ }
6366
+ /** Library default when no per-conversation or global background is set. */
6367
+ declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND: AXConversationMessageListThemeBackground;
6368
+ /** Predefined chat-area backgrounds for the info panel (light + dark variants). */
6369
+ declare const AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS: AXConversationMessageListBackgroundPreset[];
6370
+ declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID = "solid-default";
6371
+
6372
+ /** Subtle chat-area wash when `messageListBackground` is not set (theme-aware). */
6373
+ declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND: string;
6374
+ declare function isMessageListThemeBackground(value: unknown): value is AXConversationMessageListThemeBackground;
6375
+ /** Pick the raw CSS string for the active theme; `undefined` when unset. */
6376
+ declare function resolveMessageListBackgroundRaw(value: AXConversationMessageListBackground | undefined, isDark: boolean): string | undefined;
6377
+ /** Turn bare `https://...` or `/path` into valid CSS `background` for images. */
6378
+ declare function normalizeMessageListBackgroundValue(raw: string): string;
6379
+ /** Resolve config/metadata background for the active theme, with library default fallback. */
6380
+ declare function resolveMessageListBackgroundStyle(value: AXConversationMessageListBackground | undefined, isDark: boolean): string;
6381
+ /** Whether two stored backgrounds represent the same preset (supports legacy string values). */
6382
+ declare function isSameMessageListBackground(a: AXConversationMessageListBackground | undefined, b: AXConversationMessageListThemeBackground, isDark: boolean): boolean;
6383
+
6384
+ /** Default Font Awesome icon for group conversations without a custom avatar image. */
6385
+ declare const AX_CONVERSATION_DEFAULT_GROUP_ICON = "fa-light fa-users";
6386
+ /** Default Font Awesome icon for private/bot conversations without a custom avatar image. */
6387
+ declare const AX_CONVERSATION_DEFAULT_USER_ICON = "fa-light fa-user";
6179
6388
  /** True when the stored title is a placeholder, not a user-defined name. */
6180
6389
  declare function isGenericPrivateConversationTitle(title: string | undefined): boolean;
6390
+ /**
6391
+ * Find an existing private 1:1 conversation between the current user and a peer.
6392
+ * Matches conversations with exactly those two participants.
6393
+ */
6394
+ declare function findExistingPrivateConversation(conversations: AXConversation[], currentUserId: string, peerUserId: string): AXConversation | undefined;
6181
6395
  /** Other participant in a private 1v1 chat (excludes the current viewer). */
6182
6396
  declare function resolvePrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
6183
6397
  /**
6184
6398
  * Resolves the display title for the current viewer.
6185
- * Private 1v1 chats show the other participant's name when no custom title is set.
6399
+ * Private and bot peer-scoped chats show the other participant's name when no custom title is set.
6186
6400
  */
6187
6401
  declare function resolveConversationTitleForViewer(conversation: AXConversation, currentUserId?: string): string;
6188
6402
  /**
6189
- * Returns a viewer-scoped copy of a conversation with dynamic private title/avatar/icon.
6403
+ * Returns a viewer-scoped copy of a conversation with dynamic peer title/avatar/icon.
6190
6404
  * Does not mutate the source object.
6191
6405
  */
6192
6406
  declare function resolveConversationForViewer(conversation: AXConversation, currentUserId?: string): AXConversation;
6407
+ /** Whether message reactions are enabled for a conversation. Defaults to `true` when omitted. */
6408
+ declare function isConversationReactionsEnabled(conversation?: AXConversation | null): boolean;
6193
6409
 
6194
6410
  /** Resolves typed `profile`, falling back to legacy `metadata.profile`. */
6195
6411
  declare function resolveParticipantProfile(participant?: AXConversationParticipant): AXConversationUserProfile;
@@ -6231,6 +6447,13 @@ declare class AXConversationMessageUtilsService {
6231
6447
  * Font Awesome icon class(es) for a conversation when there is no avatar image.
6232
6448
  */
6233
6449
  static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
6450
+ /**
6451
+ * Font Awesome icon for a participant when there is no avatar image.
6452
+ */
6453
+ static getParticipantAvatarIcon(participant?: {
6454
+ avatar?: string;
6455
+ icon?: string;
6456
+ }): string | undefined;
6234
6457
  /**
6235
6458
  * Get sender name from message
6236
6459
  */
@@ -6785,5 +7008,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
6785
7008
  */
6786
7009
  type AXConversationErrorCode = typeof AX_CONVERSATION_MESSAGE_ERRORS[keyof typeof AX_CONVERSATION_MESSAGE_ERRORS]['code'] | typeof AX_CONVERSATION_FILE_ERRORS[keyof typeof AX_CONVERSATION_FILE_ERRORS]['code'] | typeof AX_CONVERSATION_USER_ERRORS[keyof typeof AX_CONVERSATION_USER_ERRORS]['code'] | typeof AX_CONVERSATION_ERRORS[keyof typeof AX_CONVERSATION_ERRORS]['code'] | typeof AX_CONVERSATION_CONNECTION_ERRORS[keyof typeof AX_CONVERSATION_CONNECTION_ERRORS]['code'] | typeof AX_CONVERSATION_LOCATION_ERRORS[keyof typeof AX_CONVERSATION_LOCATION_ERRORS]['code'] | typeof AX_CONVERSATION_URL_ERRORS[keyof typeof AX_CONVERSATION_URL_ERRORS]['code'];
6787
7010
 
6788
- export { AXConversationAiResponderService, AXConversationApi, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_ALL_CONVERSATION_COMPOSER_TABS, AX_ALL_CONVERSATION_MEDIA_PICKERS, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PICKER_SHARED_STYLES, AX_CONVERSATION_PICKER_SHELL_STYLES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_RENDERER_SHARED_STYLES, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchAllConversationMessages, fileItemFromUpload, filterMessagesByMediaCategory, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMediaPickerEnabled, isMessageDeliveryPending, isNonPersistableMediaUrl, isPickerItemReadyToSend, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMediaPickers, resolveConversationMessageFileType, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6789
- export type { AXConversation, AXConversationAiResponderConfig, AXConversationApiError, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationChatCursorKind, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerActiveComponent, AXConversationComposerPickerUploadItem, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationIndexedDbMediaRecord, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPickerFeature, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListEmptyComponent, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParsedChatCursor, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUserAvatarComponent, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserRole, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
7011
+ export { AXConversationAiResponderService, AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_DEMO_CONVERSATION_IDS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_MESSAGE_PAGINATION_CONVERSATION_ID, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchConversationMediaMessages, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
7012
+ export type { AXConversation, AXConversationAiResponderConfig, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationChatCursorKind, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerActiveComponent, AXConversationComposerPickerUploadItem, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationIndexedDbMediaRecord, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParsedChatCursor, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUserAvatarComponent, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserRole, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };