@acorex/components 22.1.0-next.15 → 22.1.0-next.16

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.
@@ -377,12 +377,31 @@ interface AXConversationDeleteMessageCommand {
377
377
  forEveryone?: boolean;
378
378
  }
379
379
 
380
+ /**
381
+ * Per-user preferences for a specific conversation (mute, notifications, etc.).
382
+ * Stored on the user account, keyed by conversation ID — not on the room entity.
383
+ */
384
+ interface AXConversationRoomPreferences {
385
+ /** Muted until timestamp */
386
+ mutedUntil?: Date;
387
+ /** Show notifications for this conversation */
388
+ notifications: boolean;
389
+ /** Custom notification sound */
390
+ notificationSound?: string;
391
+ /** Show message preview in notifications */
392
+ showPreview: boolean;
393
+ /** Custom settings */
394
+ custom?: Record<string, unknown>;
395
+ }
396
+ declare const AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES: AXConversationRoomPreferences;
397
+ /** Map of conversation ID → user-specific room preferences. */
398
+ type AXConversationRoomPreferencesMap = Record<string, AXConversationRoomPreferences>;
399
+
380
400
  /**
381
401
  * Participant Model
382
- * Represents a user/member in a conversation
402
+ * Membership in a conversation (identity fields are snapshots; live presence is on the user store).
383
403
  */
384
- type AXConversationParticipantRole = 'admin' | 'moderator' | 'member';
385
- type AXConversationParticipantStatus = 'online' | 'offline' | 'away';
404
+ type AXConversationParticipantRole = 'owner' | 'admin' | 'moderator' | 'member' | 'guest';
386
405
  /** Extended profile fields shown in private-chat info panels. */
387
406
  interface AXConversationUserProfile {
388
407
  bio?: string;
@@ -393,6 +412,18 @@ interface AXConversationUserProfile {
393
412
  company?: string;
394
413
  title?: string;
395
414
  }
415
+ /** Authenticated user profile (includes per-room preferences). */
416
+ interface AXConversationUser {
417
+ id: string;
418
+ name: string;
419
+ description?: string;
420
+ profile?: AXConversationUserProfile;
421
+ avatar?: string;
422
+ icon?: string;
423
+ metadata?: Record<string, unknown>;
424
+ /** User-specific settings per conversation (key = conversationId). */
425
+ conversationPreferences?: AXConversationRoomPreferencesMap;
426
+ }
396
427
  interface AXConversationParticipant {
397
428
  /** Unique identifier for the participant */
398
429
  id: string;
@@ -413,10 +444,6 @@ interface AXConversationParticipant {
413
444
  icon?: string;
414
445
  /** Role in the conversation (for groups/channels) */
415
446
  role?: AXConversationParticipantRole;
416
- /** Current online status */
417
- status?: AXConversationParticipantStatus;
418
- /** Last seen timestamp (when offline/away) */
419
- lastSeen?: Date;
420
447
  /** Custom metadata */
421
448
  metadata?: Record<string, unknown>;
422
449
  }
@@ -427,34 +454,6 @@ interface AXConversationParticipant {
427
454
  */
428
455
 
429
456
  type AXConversationType = 'private' | 'group' | 'channel' | 'bot';
430
- /**
431
- * Conversation status information
432
- */
433
- interface AXConversationStatus {
434
- /** Whether someone is typing */
435
- isTyping: boolean;
436
- /** User IDs currently typing */
437
- typingUsers: string[];
438
- /** Online presence (for private chats) */
439
- presence?: 'online' | 'offline' | 'away';
440
- /** Last seen timestamp (for private chats when offline) */
441
- lastSeen?: Date;
442
- }
443
- /**
444
- * Conversation settings
445
- */
446
- interface AXConversationSettings {
447
- /** Muted until timestamp */
448
- mutedUntil?: Date;
449
- /** Show notifications */
450
- notifications: boolean;
451
- /** Custom notification sound */
452
- notificationSound?: string;
453
- /** Show message preview in notifications */
454
- showPreview: boolean;
455
- /** Custom settings */
456
- custom?: Record<string, unknown>;
457
- }
458
457
  /** Theme-specific CSS `background` values for the message list area. */
459
458
  interface AXConversationMessageListThemeBackground {
460
459
  light: string;
@@ -512,10 +511,6 @@ interface AXConversation {
512
511
  unreadCount: number;
513
512
  /** Number of unread mentions */
514
513
  unreadMentions?: number;
515
- /** Current status (typing, presence, etc.) */
516
- status: AXConversationStatus;
517
- /** User-specific settings */
518
- settings: AXConversationSettings;
519
514
  /** Pinned messages IDs */
520
515
  pinnedMessageIds?: string[];
521
516
  /** Conversation creation timestamp */
@@ -528,13 +523,11 @@ interface AXConversation {
528
523
  pinned?: boolean;
529
524
  /** Whether conversation is archived */
530
525
  archived?: boolean;
531
- /** Draft message text */
532
- draft?: string;
533
526
  /** Custom metadata */
534
527
  metadata?: AXConversationMetadata;
535
528
  }
536
529
  /**
537
- * Typing indicator
530
+ * Typing indicator (realtime event — ephemeral, not stored on the room entity).
538
531
  */
539
532
  interface AXConversationTypingIndicator {
540
533
  /** Conversation ID */
@@ -545,19 +538,8 @@ interface AXConversationTypingIndicator {
545
538
  userName?: string;
546
539
  /** Timestamp */
547
540
  timestamp: Date;
548
- }
549
- /**
550
- * Presence update
551
- */
552
- interface AXConversationPresenceUpdate {
553
- /** User ID */
554
- userId: string;
555
- /** Presence status */
556
- status: 'online' | 'offline' | 'away';
557
- /** Last seen timestamp */
558
- lastSeen?: Date;
559
- /** Custom status text */
560
- statusText?: string;
541
+ /** When false, user stopped typing */
542
+ isTyping?: boolean;
561
543
  }
562
544
  /**
563
545
  * Conversation filter options
@@ -597,6 +579,26 @@ declare const AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE: Partial<Record<AXConversat
597
579
  /** Resolves {@link AXConversationMessage.fileType} from command or message type. */
598
580
  declare function resolveConversationMessageFileType(type: AXConversationMessageType, fileType?: string): string | undefined;
599
581
 
582
+ /**
583
+ * User presence — global per-user live state (not room-scoped).
584
+ */
585
+ type AXConversationPresenceStatus = 'online' | 'offline' | 'away' | 'busy';
586
+ /** Live presence for a single user. */
587
+ interface AXConversationUserPresence {
588
+ userId: string;
589
+ status: AXConversationPresenceStatus;
590
+ lastSeen?: Date;
591
+ statusText?: string;
592
+ updatedAt?: Date;
593
+ }
594
+ /** Realtime / API presence event payload. */
595
+ interface AXConversationPresenceUpdate {
596
+ userId: string;
597
+ status: AXConversationPresenceStatus;
598
+ lastSeen?: Date;
599
+ statusText?: string;
600
+ }
601
+
600
602
  /**
601
603
  * Abstract Base Registry
602
604
  * Base class for all registries with common functionality
@@ -697,8 +699,6 @@ declare class AXConversationComposerService {
697
699
  readonly draftText: _angular_core.WritableSignal<string>;
698
700
  /** Attachments */
699
701
  readonly attachments: _angular_core.WritableSignal<File[]>;
700
- /** Show typing indicator */
701
- readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
702
702
  /** Incremented to request focus on the composer text area (handled by AXConversationComposerComponent). */
703
703
  private readonly _focusRequest;
704
704
  readonly focusRequest: _angular_core.Signal<number>;
@@ -1636,8 +1636,6 @@ declare class AXConversationComposerComponent implements OnDestroy {
1636
1636
  readonly editingMessage: _angular_core.WritableSignal<any>;
1637
1637
  /** Replying to message */
1638
1638
  readonly replyingToMessage: _angular_core.WritableSignal<AXConversationMessage>;
1639
- /** Show typing indicator - use service */
1640
- readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
1641
1639
  /** Message sent event */
1642
1640
  readonly messageSent: _angular_core.OutputEmitterRef<AXConversationSendMessageCommand>;
1643
1641
  /** Emitted when the user cancels an in-progress generation from the composer. */
@@ -1694,6 +1692,8 @@ declare class AXConversationComposerComponent implements OnDestroy {
1694
1692
  onInput(): void;
1695
1693
  /** Send typing indicator (throttled via RxJS) */
1696
1694
  private sendTypingIndicator;
1695
+ private stopTypingIndicator;
1696
+ private typingStopHandle?;
1697
1697
  /** Cleanup on destroy */
1698
1698
  ngOnDestroy(): void;
1699
1699
  /** Handle send click */
@@ -1848,63 +1848,48 @@ declare class AXConversationInfoBarComponent {
1848
1848
  private readonly platform;
1849
1849
  private readonly destroyRef;
1850
1850
  private readonly customUserAvatarComponent;
1851
- /** Bumps when viewport changes so dynamic action locations re-resolve. */
1852
1851
  private readonly layoutTick;
1853
1852
  constructor();
1854
1853
  protected get registry(): _acorex_components_conversation.AXConversationRegistryService;
1855
- /** Whether a custom user avatar component is registered via conversation config. */
1856
1854
  readonly hasCustomUserAvatar: _angular_core.Signal<boolean>;
1857
- /** Active conversation */
1858
1855
  readonly activeConversation: _angular_core.Signal<AXConversation>;
1859
- /** Active component from service */
1860
1856
  readonly activeComponent: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveComponent>;
1861
- /** Active banner from service */
1862
1857
  readonly activeBanner: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveBanner>;
1863
- /** Members popover target element — retained for API compatibility */
1864
1858
  readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
1865
- /** Loading state for async actions */
1866
1859
  readonly actionLoading: _angular_core.WritableSignal<boolean>;
1867
- /** Info area clicked event — host apps can open a custom conversation details UI */
1868
1860
  readonly infoClick: _angular_core.OutputEmitterRef<void>;
1869
- /** Search clicked event */
1870
1861
  readonly searchClick: _angular_core.OutputEmitterRef<void>;
1871
- /** Search query changed event */
1872
1862
  readonly searchQuery: _angular_core.OutputEmitterRef<string>;
1873
- /** Menu item clicked event */
1874
1863
  readonly menuItemAction: _angular_core.OutputEmitterRef<string>;
1875
- /** Inline action buttons from registry */
1876
1864
  readonly inlineActions: _angular_core.Signal<AXConversationInfoBarAction[]>;
1877
- /** Dropdown menu items from registry */
1878
1865
  readonly menuItems: _angular_core.Signal<AXConversationDropdownMenuItem[]>;
1879
- /** Get conversation status - delegate to utils */
1880
- getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
1881
- /** Get subtitle text - delegate to utils */
1866
+ getStatus(conversation: AXConversation): _acorex_components_conversation.AXConversationPresenceStatus;
1882
1867
  getSubtitle(conversation: AXConversation): string;
1883
- /** Info area clicked — emits for host apps to open a custom conversation details UI */
1884
1868
  onInfoLeftClick(): void;
1885
- /** Handle inline action click */
1886
1869
  onInlineActionClick(actionId: string): Promise<void>;
1887
1870
  private activateAction;
1888
- /** Get inputs for dynamic component */
1889
1871
  getComponentInputs(): Record<string, unknown>;
1890
1872
  getInlineComponentInputs(): Record<string, unknown>;
1891
1873
  isActiveComponentFullWidth(): boolean;
1892
- /** Handle close component */
1893
1874
  onCloseComponent(): void;
1894
1875
  getBannerInputs(): Record<string, unknown>;
1895
1876
  onCloseBanner(): void;
1896
- /** Handle menu item click */
1897
1877
  onMenuItemClick(item: AXConversationDropdownMenuItem): Promise<void>;
1898
1878
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarComponent, never>;
1899
1879
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
1900
1880
  }
1901
1881
 
1902
1882
  /**
1883
+
1903
1884
  * Shared API Types
1885
+
1904
1886
  * Common types used across all API services
1887
+
1905
1888
  */
1906
1889
  /**
1890
+
1907
1891
  * Pagination parameters
1892
+
1908
1893
  */
1909
1894
  interface AXConversationPagination {
1910
1895
  /** Page number (0-based) */
@@ -1919,7 +1904,9 @@ interface AXConversationPagination {
1919
1904
  sortDirection?: 'asc' | 'desc';
1920
1905
  }
1921
1906
  /**
1907
+
1922
1908
  * Paginated response
1909
+
1923
1910
  */
1924
1911
  interface AXConversationPaginatedResult<T> {
1925
1912
  /** Result items */
@@ -1938,7 +1925,9 @@ interface AXConversationPaginatedResult<T> {
1938
1925
  totalPages?: number;
1939
1926
  }
1940
1927
  /**
1928
+
1941
1929
  * Pagination cursor state for a single list (conversations or messages).
1930
+
1942
1931
  */
1943
1932
  interface AXConversationPaginationState {
1944
1933
  page: number;
@@ -1946,11 +1935,15 @@ interface AXConversationPaginationState {
1946
1935
  nextCursor?: string;
1947
1936
  }
1948
1937
  /**
1938
+
1949
1939
  * Connection status
1940
+
1950
1941
  */
1951
1942
  type AXConversationConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';
1952
1943
  /**
1944
+
1953
1945
  * API Error with details
1946
+
1954
1947
  */
1955
1948
  interface AXConversationApiError {
1956
1949
  /** Error code */
@@ -1964,14 +1957,6 @@ interface AXConversationApiError {
1964
1957
  /** Timestamp */
1965
1958
  timestamp?: Date;
1966
1959
  }
1967
- /**
1968
- * User presence status
1969
- */
1970
- type AXConversationPresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'invisible';
1971
- /**
1972
- * User role in conversation
1973
- */
1974
- type AXConversationUserRole = 'owner' | 'admin' | 'member' | 'guest';
1975
1960
 
1976
1961
  type AXConversationApiName = 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi';
1977
1962
  interface AXConversationApiLogEntry {
@@ -1991,11 +1976,6 @@ declare class AXConversationApiLoggerService {
1991
1976
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationApiLoggerService>;
1992
1977
  }
1993
1978
 
1994
- /**
1995
- * Abstract Conversation Management API
1996
- * Handle conversation CRUD operations, participants, and settings
1997
- */
1998
-
1999
1979
  /**
2000
1980
  * Conversation creation data
2001
1981
  */
@@ -2063,20 +2043,9 @@ interface AXConversationFilters {
2063
2043
  custom?: Record<string, unknown>;
2064
2044
  }
2065
2045
  /**
2066
- * Conversation settings update
2046
+ * @deprecated Use {@link AXConversationRoomPreferences} on the user API instead.
2067
2047
  */
2068
- interface AXConversationSettingsUpdate {
2069
- /** Muted until timestamp */
2070
- mutedUntil?: Date;
2071
- /** Show notifications */
2072
- notifications?: boolean;
2073
- /** Custom notification sound */
2074
- notificationSound?: string;
2075
- /** Show message preview in notifications */
2076
- showPreview?: boolean;
2077
- /** Custom settings */
2078
- custom?: Record<string, unknown>;
2079
- }
2048
+ type AXConversationSettingsUpdate = AXConversationRoomPreferences;
2080
2049
  /**
2081
2050
  * Participant update data
2082
2051
  */
@@ -2084,7 +2053,7 @@ interface AXConversationParticipantUpdate {
2084
2053
  /** User ID */
2085
2054
  userId: string;
2086
2055
  /** New role */
2087
- role?: AXConversationUserRole;
2056
+ role?: AXConversationParticipantRole;
2088
2057
  }
2089
2058
  /**
2090
2059
  * Abstract Conversation Management API
@@ -2185,13 +2154,6 @@ declare abstract class AXConversationApi {
2185
2154
  * @throws {AXConversationApiError} If marking fails
2186
2155
  */
2187
2156
  abstract markConversationAsRead(conversationId: string): Promise<void>;
2188
- /**
2189
- * Mark conversation as unread
2190
- *
2191
- * @param conversationId - Conversation ID
2192
- * @throws {AXConversationApiError} If marking fails
2193
- */
2194
- abstract markConversationAsUnread(conversationId: string): Promise<void>;
2195
2157
  /**
2196
2158
  * Search conversations
2197
2159
  *
@@ -2251,37 +2213,6 @@ declare abstract class AXConversationApi {
2251
2213
  * @throws {AXConversationApiError} If update fails
2252
2214
  */
2253
2215
  abstract updateParticipant(conversationId: string, update: AXConversationParticipantUpdate): Promise<AXConversation>;
2254
- /**
2255
- * Get conversation settings
2256
- *
2257
- * @param conversationId - Conversation ID
2258
- * @returns Conversation settings
2259
- * @throws {AXConversationApiError} If request fails
2260
- */
2261
- abstract getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
2262
- /**
2263
- * Update conversation settings
2264
- *
2265
- * @param conversationId - Conversation ID
2266
- * @param settings - Settings to update
2267
- * @throws {AXConversationApiError} If update fails
2268
- */
2269
- abstract updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
2270
- /**
2271
- * Mute conversation
2272
- *
2273
- * @param conversationId - Conversation ID
2274
- * @param duration - Mute duration in milliseconds (undefined = forever)
2275
- * @throws {AXConversationApiError} If muting fails
2276
- */
2277
- abstract muteConversation(conversationId: string, duration?: number): Promise<void>;
2278
- /**
2279
- * Unmute conversation
2280
- *
2281
- * @param conversationId - Conversation ID
2282
- * @throws {AXConversationApiError} If unmuting fails
2283
- */
2284
- abstract unmuteConversation(conversationId: string): Promise<void>;
2285
2216
  /**
2286
2217
  * Upload conversation avatar
2287
2218
  *
@@ -3080,7 +3011,7 @@ declare abstract class AXConversationUserApi {
3080
3011
  * @returns Current user information
3081
3012
  * @throws {AXConversationApiError} If user is not authenticated
3082
3013
  */
3083
- abstract getCurrentUser(): Promise<AXConversationParticipant>;
3014
+ abstract getCurrentUser(): Promise<AXConversationUser>;
3084
3015
  /**
3085
3016
  * Update current user profile
3086
3017
  *
@@ -3088,7 +3019,7 @@ declare abstract class AXConversationUserApi {
3088
3019
  * @returns Updated user information
3089
3020
  * @throws {AXConversationApiError} If update fails
3090
3021
  */
3091
- abstract updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationParticipant>;
3022
+ abstract updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationUser>;
3092
3023
  /**
3093
3024
  * Upload user avatar
3094
3025
  *
@@ -3138,6 +3069,10 @@ declare abstract class AXConversationUserApi {
3138
3069
  * @throws {AXConversationApiError} If request fails
3139
3070
  */
3140
3071
  abstract getUserPresence(userId: string): Promise<AXConversationPresenceUpdate>;
3072
+ /**
3073
+ * Get presence for multiple users (bulk hydration).
3074
+ */
3075
+ abstract getUsersPresence(userIds: string[]): Promise<AXConversationPresenceUpdate[]>;
3141
3076
  /**
3142
3077
  * Update current user presence
3143
3078
  *
@@ -3190,6 +3125,18 @@ declare abstract class AXConversationUserApi {
3190
3125
  * @throws {AXConversationApiError} If update fails
3191
3126
  */
3192
3127
  abstract updateUserSettings(settings: Record<string, unknown>): Promise<void>;
3128
+ /**
3129
+ * Get all conversation preferences for the current user.
3130
+ */
3131
+ abstract getConversationPreferences(): Promise<AXConversationRoomPreferencesMap>;
3132
+ /**
3133
+ * Get preferences for a single conversation.
3134
+ */
3135
+ abstract getConversationPreferencesForRoom(conversationId: string): Promise<AXConversationRoomPreferences>;
3136
+ /**
3137
+ * Update preferences for a conversation (current user's view).
3138
+ */
3139
+ abstract updateConversationPreferences(conversationId: string, preferences: Partial<AXConversationRoomPreferences>): Promise<AXConversationRoomPreferences>;
3193
3140
  /**
3194
3141
  * Create an API error
3195
3142
  * Helper method for consistent error creation
@@ -3300,6 +3247,7 @@ declare class AXConversationService {
3300
3247
  private readonly _activeConversationId;
3301
3248
  private readonly _loading;
3302
3249
  private readonly _loadingActiveMessages;
3250
+ private readonly _isForwardingMessage;
3303
3251
  private readonly _error;
3304
3252
  private readonly _conversationsPagination;
3305
3253
  private readonly _messagesPaginationByConversation;
@@ -3322,6 +3270,8 @@ declare class AXConversationService {
3322
3270
  readonly loading: _angular_core.Signal<boolean>;
3323
3271
  /** Loading state for the active conversation's message history */
3324
3272
  readonly loadingActiveMessages: _angular_core.Signal<boolean>;
3273
+ /** Whether a message forward operation is in progress. */
3274
+ readonly isForwardingMessage: _angular_core.Signal<boolean>;
3325
3275
  /** Sidebar conversation list pagination */
3326
3276
  readonly conversationsPagination: _angular_core.Signal<AXConversationPaginationState>;
3327
3277
  /** Active conversation message pagination */
@@ -3338,7 +3288,10 @@ declare class AXConversationService {
3338
3288
  readonly onTypingIndicator: rxjs.Observable<AXConversationTypingIndicator>;
3339
3289
  readonly onPresenceChange: rxjs.Observable<AXConversationPresenceUpdate>;
3340
3290
  private _currentUser;
3341
- readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationParticipant>;
3291
+ readonly currentUser: _angular_core.Signal<AXConversationUser>;
3292
+ readonly userPresenceMap: _angular_core.Signal<Map<string, AXConversationUserPresence>>;
3293
+ readonly presenceTimeTick: _angular_core.Signal<Map<string, AXConversationUserPresence>>;
3294
+ readonly typingRevision: _angular_core.Signal<Map<string, Map<string, number>>>;
3342
3295
  /** One-time async initialization (connect, user, conversations, realtime). */
3343
3296
  private initPromise;
3344
3297
  /** Generation counter — stale page-0 loads are ignored after conversation switches. */
@@ -3348,6 +3301,10 @@ declare class AXConversationService {
3348
3301
  /** Batched read-receipt queue keyed by conversation ID. */
3349
3302
  private readonly readQueue;
3350
3303
  private readFlushHandle;
3304
+ private presenceTickHandle?;
3305
+ private typingPruneHandle?;
3306
+ private isTypingActiveForConversation;
3307
+ private typingStopHandle?;
3351
3308
  /** Session cache for available reaction emojis. */
3352
3309
  private availableReactionsCache;
3353
3310
  private availableReactionsPromise;
@@ -3371,6 +3328,13 @@ declare class AXConversationService {
3371
3328
  * All subscriptions include error handling to prevent stream termination
3372
3329
  */
3373
3330
  private subscribeToEvents;
3331
+ getUserPresence(userId: string): AXConversationUserPresence | undefined;
3332
+ getRoomPreferences(conversationId: string): AXConversationRoomPreferences;
3333
+ isAnyoneTyping(conversationId: string): boolean;
3334
+ getActiveTypingUserIds(conversationId: string): string[];
3335
+ getPeerPresence(conversation: AXConversation): AXConversationUserPresence | undefined;
3336
+ private hydrateUserPresence;
3337
+ private loadRoomPreferences;
3374
3338
  /**
3375
3339
  * Load conversations from server
3376
3340
  * Includes comprehensive error handling
@@ -3468,6 +3432,7 @@ declare class AXConversationService {
3468
3432
  * Non-critical operation, doesn't throw on failure
3469
3433
  */
3470
3434
  sendTypingIndicator(conversationId: string): Promise<void>;
3435
+ stopTypingIndicator(conversationId: string): Promise<void>;
3471
3436
  /**
3472
3437
  * Search conversations
3473
3438
  * Returns empty array on failure
@@ -3503,11 +3468,17 @@ declare class AXConversationService {
3503
3468
  * Updates conversation metadata including unread count, last message, etc.
3504
3469
  */
3505
3470
  private handleConversationUpdate;
3471
+ private handleConversationCreated;
3472
+ private handleConversationDeleted;
3473
+ private handleReadReceipt;
3474
+ private handleMessageStatusChange;
3475
+ private handleRoomPreferencesChange;
3506
3476
  /**
3507
3477
  * Insert or refresh a conversation in the in-memory inbox.
3508
3478
  * @param promote When true, bumps activity so the chat sorts to the top (create / reopen).
3509
3479
  */
3510
3480
  private syncConversationToInbox;
3481
+ private finalizeSentMessage;
3511
3482
  /**
3512
3483
  * Update conversation's last message
3513
3484
  */
@@ -3523,7 +3494,7 @@ declare class AXConversationService {
3523
3494
  * @param conversationId - Conversation ID
3524
3495
  * @param settings - Partial settings to update
3525
3496
  */
3526
- updateConversationSettings(conversationId: string, settings: Partial<AXConversation['settings']>): Promise<void>;
3497
+ updateConversationSettings(conversationId: string, settings: Partial<AXConversationRoomPreferences>): Promise<void>;
3527
3498
  /**
3528
3499
  * Update conversation title
3529
3500
  * @param conversationId - Conversation ID
@@ -3666,6 +3637,10 @@ declare class AXConversationService {
3666
3637
  * @param caption - Optional caption
3667
3638
  */
3668
3639
  forwardMessage(messageId: string, conversationIds: string[], caption?: string): Promise<void>;
3640
+ /**
3641
+ * Runs a forward operation while locking all forward actions until it completes.
3642
+ */
3643
+ runWithForwardingLock<T>(task: () => Promise<T>): Promise<T>;
3669
3644
  /**
3670
3645
  * Search messages in conversation
3671
3646
  * @param conversationId - Conversation ID
@@ -3720,7 +3695,7 @@ declare class AXConversationService {
3720
3695
  * @param status - Presence status
3721
3696
  * @param statusText - Optional status text
3722
3697
  */
3723
- updatePresence(status: 'online' | 'offline' | 'away' | 'busy' | 'invisible', statusText?: string): Promise<void>;
3698
+ updatePresence(status: AXConversationPresenceStatus, statusText?: string): Promise<void>;
3724
3699
  /**
3725
3700
  * Validate message content before sending
3726
3701
  * Uses centralized validation utilities for consistency
@@ -3868,6 +3843,7 @@ declare class AXConversationForwardMessageDialogComponent implements OnInit {
3868
3843
  readonly forwardListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
3869
3844
  readonly forwardList: _angular_core.Signal<AXListComponent>;
3870
3845
  readonly forwardListDataSource: AXDataSource<unknown>;
3846
+ readonly isForwarding: _angular_core.Signal<boolean>;
3871
3847
  readonly canForward: _angular_core.Signal<boolean>;
3872
3848
  private readonly _syncPopupTitleEffect;
3873
3849
  ngOnInit(): void;
@@ -3954,7 +3930,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3954
3930
  action: string;
3955
3931
  }>;
3956
3932
  /** Current user from service */
3957
- readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationParticipant>;
3933
+ readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
3958
3934
  /** Message grouped by date - use service */
3959
3935
  readonly messageGroups: _angular_core.Signal<{
3960
3936
  date: string;
@@ -3991,6 +3967,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3991
3967
  /** Resolve renderer component for message */
3992
3968
  getRendererComponent(message: AXConversationMessage): Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
3993
3969
  /** Resolve lazy renderer loader for message */
3970
+ private static readonly fallbackRendererLoader;
3994
3971
  getRendererComponentLoader(message: AXConversationMessage): (() => Promise<Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof _acorex_components_conversation.AXConversationFallbackRendererComponent>);
3995
3972
  /** Provide inputs for the dynamic renderer */
3996
3973
  getRendererInputs(message: AXConversationMessage): {
@@ -4085,7 +4062,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
4085
4062
  handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXConversationMessage): void;
4086
4063
  /**
4087
4064
  * TrackBy function for message groups.
4088
- * Include the latest message id so new messages in the same date group re-render.
4065
+ * Track by date only new messages in the same day are handled by the inner message @for.
4089
4066
  */
4090
4067
  trackMessageGroup(index: number, group: {
4091
4068
  date: string;
@@ -4105,7 +4082,7 @@ declare class AXConversationMessageListService {
4105
4082
  private get registry();
4106
4083
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
4107
4084
  readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
4108
- readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationParticipant>;
4085
+ readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
4109
4086
  /** Initial message history load (conversation switch) */
4110
4087
  readonly loading: _angular_core.Signal<boolean>;
4111
4088
  /** Loading older messages (scroll-up pagination) */
@@ -4188,6 +4165,12 @@ interface AXConversationUserAvatarComponent {
4188
4165
  interface AXConversationConversationAvatarComponent {
4189
4166
  readonly conversationId: InputSignal<string>;
4190
4167
  readonly size: InputSignal<number>;
4168
+ /** Optional resolved display name for the conversation. */
4169
+ readonly displayName?: InputSignal<string | undefined>;
4170
+ /** Optional resolved avatar URL when no platform conversation row exists. */
4171
+ readonly displayAvatar?: InputSignal<string | undefined>;
4172
+ /** Optional icon class when no avatar image is available. */
4173
+ readonly displayIcon?: InputSignal<string | undefined>;
4191
4174
  }
4192
4175
  type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
4193
4176
  declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
@@ -4222,9 +4205,8 @@ declare class AXConversationAvatarComponent {
4222
4205
  icon: string;
4223
4206
  }>;
4224
4207
  readonly fallbackInitials: _angular_core.Signal<string>;
4225
- readonly resolvedStatus: _angular_core.Signal<"online" | "offline" | "away">;
4226
- /** Hide presence badge when a registered custom avatar component is rendered. */
4227
- readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away">;
4208
+ readonly resolvedStatus: _angular_core.Signal<_acorex_components_conversation.AXConversationPresenceStatus>;
4209
+ readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away" | "busy">;
4228
4210
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarComponent, never>;
4229
4211
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarComponent, "ax-conversation-avatar", never, { "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4230
4212
  }
@@ -4239,6 +4221,8 @@ declare class AXConversationRegistryComponentOutletComponent {
4239
4221
  readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
4240
4222
  readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
4241
4223
  readonly loading: _angular_core.WritableSignal<boolean>;
4224
+ /** Avoid re-loading when the parent re-binds the same lazy loader reference. */
4225
+ private activeLoader;
4242
4226
  constructor();
4243
4227
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryComponentOutletComponent, never>;
4244
4228
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationRegistryComponentOutletComponent, "ax-conversation-registry-component-outlet", never, { "component": { "alias": "component"; "required": false; "isSignal": true; }; "componentLoader": { "alias": "componentLoader"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -4430,8 +4414,10 @@ interface AXConversationConfig {
4430
4414
  infiniteScrollThreshold?: number;
4431
4415
  /** Typing indicator timeout in milliseconds */
4432
4416
  typingIndicatorTimeout?: number;
4433
- /** Typing indicator throttle in milliseconds (for rate limiting) */
4417
+ /** Typing indicator emit throttle in milliseconds while composing (default: 3000) */
4434
4418
  typingIndicatorThrottle?: number;
4419
+ /** How long to show received typing indicators in the UI (default: 4000) */
4420
+ typingDisplayDuration?: number;
4435
4421
  /** Message highlight duration in milliseconds */
4436
4422
  messageHighlightDuration?: number;
4437
4423
  /** Search debounce delay in milliseconds */
@@ -4480,31 +4466,20 @@ interface AXConversationConfig {
4480
4466
  }
4481
4467
 
4482
4468
  /**
4483
-
4484
4469
  * Default Configuration Values
4485
-
4486
4470
  * Centralized defaults to avoid magic numbers throughout the codebase
4487
-
4488
4471
  */
4489
4472
 
4490
4473
  /**
4491
-
4492
4474
  * Default conversation configuration
4493
-
4494
4475
  * All values are explicitly defined here for easy maintenance and documentation
4495
-
4496
4476
  */
4497
4477
  declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
4498
4478
  /**
4499
-
4500
4479
  * Helper function to merge user config with defaults
4501
-
4502
4480
  * Properly handles array merging to avoid reference issues
4503
-
4504
4481
  * @param userConfig - User-provided configuration
4505
-
4506
4482
  * @returns Merged configuration with all required fields
4507
-
4508
4483
  */
4509
4484
  declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
4510
4485
 
@@ -5990,92 +5965,38 @@ declare class AXConversationDateUtilsService {
5990
5965
  static formatTime(date: Date): string;
5991
5966
  }
5992
5967
 
5968
+ /**
5969
+ * Message Utilities Service
5970
+ * Helper functions for message formatting and display
5971
+ */
5972
+
5993
5973
  declare class AXConversationMessageUtilsService {
5994
- /**
5995
- * Normalize optional avatar/icon values so empty or whitespace-only strings
5996
- * are treated as missing data.
5997
- */
5998
- private static normalizeOptionalMediaValue;
5999
- /**
6000
- * Get conversation avatar image URL.
6001
- */
6002
- static getConversationAvatar(conversation: AXConversation): string | undefined;
6003
- /**
6004
- * Font Awesome icon class(es) for a conversation when there is no avatar image.
6005
- */
6006
- static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
6007
- /**
6008
- * Font Awesome icon for a participant when there is no avatar image.
6009
- */
6010
- static getParticipantAvatarIcon(participant?: {
6011
- avatar?: string;
6012
- icon?: string;
6013
- }): string | undefined;
6014
- /**
6015
- * Get sender name from message
6016
- */
6017
- static getSenderName(message: AXConversationMessage, conversation: AXConversation): string;
6018
- /**
6019
- * Get sender avatar image URL (takes precedence over {@link getSenderAvatarIcon}).
6020
- */
6021
- static getSenderAvatar(message: AXConversationMessage, conversation: AXConversation): string | undefined;
6022
- /**
6023
- * Font Awesome icon class(es) for the sender when there is no avatar image:
6024
- * participant `icon` first, then conversation-level `icon`.
6025
- */
6026
- static getSenderAvatarIcon(message: AXConversationMessage, conversation: AXConversation): string | undefined;
6027
- /**
6028
- * Get initials from name
6029
- */
6030
5974
  static getInitials(name: string): string;
6031
- /**
6032
- * Type guard for text payload
6033
- */
6034
- static isTextPayload(payload: AXConversationMessagePayload): payload is AXConversationTextPayload;
6035
- /**
6036
- * Get message text content
6037
- */
6038
5975
  static getMessageText(message: AXConversationMessage): string;
6039
- /**
6040
- * Format message preview text
6041
- */
6042
5976
  static getPreviewText(message: AXConversationMessage, maxLength?: number): {
6043
5977
  value: string;
6044
5978
  type: string;
6045
5979
  icon: string;
6046
5980
  };
6047
- /**
6048
- * Check if message is from current user
6049
- */
6050
5981
  static isOwnMessage(message: AXConversationMessage, currentUserId: string): boolean;
6051
- /**
6052
- * Get message status icon class (Font Awesome)
6053
- */
5982
+ static getSenderName(message: AXConversationMessage, conversation: AXConversation): string;
5983
+ static getSenderAvatar(message: AXConversationMessage, conversation: AXConversation): string | undefined;
5984
+ static getSenderAvatarIcon(message: AXConversationMessage, conversation: AXConversation): string | undefined;
5985
+ static getConversationAvatar(conversation: AXConversation): string | undefined;
5986
+ static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
6054
5987
  static getStatusIcon(message: AXConversationMessage): string;
6055
- /**
6056
- * Check if message should show avatar
6057
- */
6058
- static shouldShowAvatar(message: AXConversationMessage, previousMessage: AXConversationMessage | undefined, conversation: AXConversation): boolean;
6059
- /**
6060
- * Group messages by sender for consecutive messages
6061
- */
6062
- static shouldGroupWithPrevious(message: AXConversationMessage, previousMessage: AXConversationMessage | undefined): boolean;
6063
- /**
6064
- * Get conversation status for avatar (private conversations only)
6065
- */
6066
- static getConversationStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
6067
- /**
6068
- * Get typing indicator text for conversation
6069
- */
6070
- static getTypingText(conversation: AXConversation): string;
6071
- /**
6072
- * Format last seen time
6073
- */
5988
+ static getConversationStatus(conversation: AXConversation, presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
5989
+ static getDeliveryStatusIcon(status: AXConversationMessage['status']): string;
5990
+ static shouldGroupMessages(message: AXConversationMessage, previousMessage?: AXConversationMessage): boolean;
5991
+ static getUserPresenceStatus(presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
5992
+ static getTypingText(conversation: AXConversation, typingUserIds: string[]): string;
6074
5993
  static formatLastSeen(date: Date): string;
6075
- /**
6076
- * Get conversation subtitle (status or member count)
6077
- */
6078
- static getConversationSubtitle(conversation: AXConversation): string;
5994
+ static getPrivateChatSubtitle(conversation: AXConversation, presence?: AXConversationUserPresence, currentUserId?: string): string;
5995
+ static getConversationSubtitle(conversation: AXConversation, options?: {
5996
+ typingUserIds?: string[];
5997
+ peerPresence?: AXConversationUserPresence;
5998
+ currentUserId?: string;
5999
+ }): string;
6079
6000
  }
6080
6001
 
6081
6002
  /**
@@ -6611,5 +6532,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
6611
6532
  */
6612
6533
  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'];
6613
6534
 
6614
- export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, 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_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_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_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, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6615
- export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, 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, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, 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 };
6535
+ export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, 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_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_ROOM_PREFERENCES, AX_CONVERSATION_DEFAULT_USER_ICON, 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_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, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6536
+ export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, 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, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };