@acorex/components 21.0.0-next.26 → 21.0.0-next.27

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.
@@ -793,34 +793,10 @@ type AXPresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'invisible';
793
793
  type AXUserRole = 'owner' | 'admin' | 'member' | 'guest';
794
794
 
795
795
  /**
796
- * Abstract Authentication & User Management API
797
- * Handle user authentication, profile management, and user operations
796
+ * Abstract User Management API
797
+ * Handle user profile management and user operations for conversations
798
798
  */
799
799
 
800
- /**
801
- * Login credentials
802
- */
803
- interface AXLoginCredentials {
804
- /** Username or email */
805
- username: string;
806
- /** Password */
807
- password: string;
808
- /** Remember me flag */
809
- rememberMe?: boolean;
810
- }
811
- /**
812
- * Login response
813
- */
814
- interface AXLoginResponse {
815
- /** Access token */
816
- accessToken: string;
817
- /** Refresh token */
818
- refreshToken?: string;
819
- /** Token expiry timestamp */
820
- expiresAt?: Date;
821
- /** User information */
822
- user: AXParticipant;
823
- }
824
800
  /**
825
801
  * User profile update data
826
802
  */
@@ -861,20 +837,20 @@ interface AXBlockReportReason {
861
837
  description?: string;
862
838
  }
863
839
  /**
864
- * Abstract Authentication & User Management API
840
+ * Abstract User Management API
865
841
  *
866
- * Implement this abstract class to handle user authentication and management.
842
+ * Implement this abstract class to handle user management for conversations.
867
843
  *
868
844
  * @example
869
845
  * ```typescript
870
846
  * @Injectable()
871
- * export class MyAuthApi extends AXAuthApi {
847
+ * export class MyUserApi extends AXUserApi {
872
848
  * constructor(private http: HttpClient) {
873
849
  * super();
874
850
  * }
875
851
  *
876
- * async login(credentials: AXLoginCredentials): Promise<AXLoginResponse> {
877
- * const response = await this.http.post('/api/auth/login', credentials).toPromise();
852
+ * async getCurrentUser(): Promise<AXParticipant> {
853
+ * const response = await this.http.get('/api/users/me').toPromise();
878
854
  * return response;
879
855
  * }
880
856
  *
@@ -882,36 +858,7 @@ interface AXBlockReportReason {
882
858
  * }
883
859
  * ```
884
860
  */
885
- declare abstract class AXAuthApi {
886
- /**
887
- * Login with credentials
888
- *
889
- * @param credentials - Login credentials
890
- * @returns Login response with tokens and user info
891
- * @throws {AXApiError} If login fails
892
- */
893
- abstract login(credentials: AXLoginCredentials): Promise<AXLoginResponse>;
894
- /**
895
- * Logout current user
896
- * Invalidate tokens and clear session
897
- *
898
- * @throws {AXApiError} If logout fails
899
- */
900
- abstract logout(): Promise<void>;
901
- /**
902
- * Refresh access token
903
- *
904
- * @param refreshToken - Refresh token
905
- * @returns New access token
906
- * @throws {AXApiError} If refresh fails
907
- */
908
- abstract refreshToken(refreshToken: string): Promise<AXLoginResponse>;
909
- /**
910
- * Check if user is authenticated
911
- *
912
- * @returns True if authenticated
913
- */
914
- abstract isAuthenticated(): boolean;
861
+ declare abstract class AXUserApi {
915
862
  /**
916
863
  * Get current authenticated user
917
864
  *
@@ -1183,7 +1130,7 @@ declare abstract class AXConversationApi {
1183
1130
  * @param conversationId - Conversation ID
1184
1131
  * @throws {AXApiError} If deletion fails
1185
1132
  */
1186
- abstract deleteConversation(conversationId: string): Promise<void>;
1133
+ abstract deleteConversation(conversationId: string): Promise<boolean>;
1187
1134
  /**
1188
1135
  * Archive conversation
1189
1136
  *
@@ -2701,7 +2648,7 @@ declare class AXRegistryService {
2701
2648
  */
2702
2649
  declare class AXConversationService {
2703
2650
  private readonly config;
2704
- readonly authApi: AXAuthApi;
2651
+ readonly userApi: AXUserApi;
2705
2652
  readonly conversationApi: AXConversationApi;
2706
2653
  readonly messageApi: AXMessageApi;
2707
2654
  readonly realtimeApi: AXRealtimeApi;
@@ -2923,7 +2870,7 @@ declare class AXConversationService {
2923
2870
  * Shows confirmation dialog, then deletes from server and store
2924
2871
  * @param conversationId - Conversation ID
2925
2872
  */
2926
- deleteConversation(conversationId: string): Promise<void>;
2873
+ deleteConversation(conversationId: string): Promise<boolean>;
2927
2874
  /**
2928
2875
  * Get reply count for a message
2929
2876
  * @param messageId - Message ID
@@ -3076,6 +3023,7 @@ declare class AXConversationService {
3076
3023
  updatePresence(status: 'online' | 'offline' | 'away' | 'busy' | 'invisible', statusText?: string): Promise<void>;
3077
3024
  /**
3078
3025
  * Validate message content before sending
3026
+ * Uses centralized validation utilities for consistency
3079
3027
  * @param command - Message command to validate
3080
3028
  * @throws {Error} If message content is invalid
3081
3029
  */
@@ -3298,6 +3246,7 @@ declare class AXComposerComponent implements OnDestroy {
3298
3246
  private readonly conversationService;
3299
3247
  private readonly messageApi;
3300
3248
  private readonly composerService;
3249
+ private readonly messageListService;
3301
3250
  private readonly popupService;
3302
3251
  private readonly config;
3303
3252
  /** Access registry through conversation service */
@@ -3405,6 +3354,18 @@ declare class AXComposerComponent implements OnDestroy {
3405
3354
  getReplyingSenderName(): string;
3406
3355
  /** Get replying message text */
3407
3356
  getReplyingMessageText(): string;
3357
+ /** Preview object for replying banner (type, icon, value) */
3358
+ getReplyingPreview(): {
3359
+ value: string;
3360
+ type: string;
3361
+ icon: string;
3362
+ } | null;
3363
+ /** Preview object for editing banner (type, icon, value) */
3364
+ getEditingPreview(): {
3365
+ value: string;
3366
+ type: string;
3367
+ icon: string;
3368
+ } | null;
3408
3369
  /** Handle reply preview click - scroll to original message */
3409
3370
  onReplyPreviewClick(): void;
3410
3371
  /** Get inputs for dynamic component */
@@ -3438,6 +3399,7 @@ interface AXConversationConfig {
3438
3399
  messageHighlightDuration?: number;
3439
3400
  /** Search debounce delay in milliseconds */
3440
3401
  debounceSearch?: number;
3402
+ /** Date separator inactivity fade delay in milliseconds */
3441
3403
  /** Maximum messages per conversation */
3442
3404
  maxMessagesPerConversation?: number;
3443
3405
  /** Maximum total messages in store */
@@ -3470,6 +3432,24 @@ interface AXConversationConfig {
3470
3432
  messageReadThreshold?: number;
3471
3433
  }
3472
3434
 
3435
+ /**
3436
+ * Default Configuration Values
3437
+ * Centralized defaults to avoid magic numbers throughout the codebase
3438
+ */
3439
+
3440
+ /**
3441
+ * Default conversation configuration
3442
+ * All values are explicitly defined here for easy maintenance and documentation
3443
+ */
3444
+ declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
3445
+ /**
3446
+ * Helper function to merge user config with defaults
3447
+ * Properly handles array merging to avoid reference issues
3448
+ * @param userConfig - User-provided configuration
3449
+ * @returns Merged configuration with all required fields
3450
+ */
3451
+ declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
3452
+
3473
3453
  /**
3474
3454
  * Dependency Injection Tokens
3475
3455
  * InjectionTokens for configuration and dependencies
@@ -3477,7 +3457,7 @@ interface AXConversationConfig {
3477
3457
 
3478
3458
  /**
3479
3459
  * Configuration token for conversation component
3480
- * Provides default values for all conversation settings
3460
+ * Uses centralized defaults from AX_DEFAULT_CONVERSATION_CONFIG
3481
3461
  */
3482
3462
  declare const CONVERSATION_CONFIG: InjectionToken<AXConversationConfig>;
3483
3463
  /**
@@ -3544,8 +3524,6 @@ interface AXRegistryConfiguration {
3544
3524
  infoBarActions?: AXInfoBarAction[];
3545
3525
  /** Conversation item actions to register by default */
3546
3526
  conversationItemActions?: AXConversationItemAction[];
3547
- /** Auto-initialize defaults */
3548
- autoInitialize?: boolean;
3549
3527
  }
3550
3528
  /**
3551
3529
  * Complete registry configuration token
@@ -3850,6 +3828,7 @@ interface FilePreview {
3850
3828
  type: 'image' | 'video' | 'audio' | 'file';
3851
3829
  }
3852
3830
  declare class AXFileUploadService {
3831
+ private readonly config;
3853
3832
  private uploadProgress$;
3854
3833
  /**
3855
3834
  * Get upload progress observable
@@ -3899,6 +3878,24 @@ declare class AXFileUploadService {
3899
3878
  * Filter files by type
3900
3879
  */
3901
3880
  filterFilesByType(files: File[], allowedTypes: string[]): File[];
3881
+ /**
3882
+ * Validate file type against conversation config
3883
+ */
3884
+ isFileTypeAllowed(file: File): boolean;
3885
+ /**
3886
+ * Validate file size against conversation config
3887
+ */
3888
+ isFileSizeAllowed(file: File): boolean;
3889
+ /**
3890
+ * Validate a set of files using conversation config
3891
+ */
3892
+ validateFilesWithConfig(files: File[]): {
3893
+ accepted: File[];
3894
+ rejected: {
3895
+ file: File;
3896
+ reason: string;
3897
+ }[];
3898
+ };
3902
3899
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
3903
3900
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
3904
3901
  }
@@ -4152,6 +4149,8 @@ declare class AXMessageListService {
4152
4149
  readonly loadingMore: _angular_core.WritableSignal<boolean>;
4153
4150
  /** Show scroll to bottom button */
4154
4151
  readonly showScrollButton: _angular_core.WritableSignal<boolean>;
4152
+ /** Scroll requests counter */
4153
+ readonly scrollRequests: _angular_core.WritableSignal<number>;
4155
4154
  /** Current page for pagination */
4156
4155
  private readonly currentPage;
4157
4156
  /** Has more messages to load */
@@ -4173,6 +4172,8 @@ declare class AXMessageListService {
4173
4172
  getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
4174
4173
  executeAction(message: AXMessage, actionId: string): Promise<void>;
4175
4174
  reactToMessage(messageId: string, emoji: string): Promise<void>;
4175
+ /** Request message list to scroll to bottom */
4176
+ requestScrollToBottom(): void;
4176
4177
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListService, never>;
4177
4178
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
4178
4179
  }
@@ -4322,11 +4323,7 @@ declare class AXInfiniteScrollDirective {
4322
4323
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInfiniteScrollDirective, "[axInfiniteScroll]", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "edge": { "alias": "edge"; "required": false; "isSignal": true; }; }, { "scrollThreshold": "scrollThreshold"; }, never, never, true, never>;
4323
4324
  }
4324
4325
 
4325
- declare class AXIndexedDBAuthApi extends AXAuthApi {
4326
- login(_credentials: AXLoginCredentials): Promise<AXLoginResponse>;
4327
- logout(): Promise<void>;
4328
- refreshToken(_refreshToken: string): Promise<AXLoginResponse>;
4329
- isAuthenticated(): boolean;
4326
+ declare class AXIndexedDBUserApi extends AXUserApi {
4330
4327
  getCurrentUser(): Promise<AXParticipant>;
4331
4328
  updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
4332
4329
  uploadAvatar(file: File): Promise<string>;
@@ -4342,8 +4339,8 @@ declare class AXIndexedDBAuthApi extends AXAuthApi {
4342
4339
  reportUser(_userId: string, _reason: AXBlockReportReason): Promise<void>;
4343
4340
  getUserSettings(): Promise<Record<string, any>>;
4344
4341
  updateUserSettings(_settings: Record<string, any>): Promise<void>;
4345
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBAuthApi, never>;
4346
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBAuthApi>;
4342
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBUserApi, never>;
4343
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBUserApi>;
4347
4344
  }
4348
4345
 
4349
4346
  declare class AXIndexedDBConversationApi extends AXConversationApi {
@@ -4351,7 +4348,7 @@ declare class AXIndexedDBConversationApi extends AXConversationApi {
4351
4348
  getConversation(conversationId: string): Promise<AXConversation>;
4352
4349
  getConversations(pagination: AXPagination, _filters?: AXConversationFilters): Promise<AXPaginatedResult<AXConversation>>;
4353
4350
  updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
4354
- deleteConversation(conversationId: string): Promise<void>;
4351
+ deleteConversation(conversationId: string): Promise<boolean>;
4355
4352
  archiveConversation(conversationId: string): Promise<void>;
4356
4353
  unarchiveConversation(conversationId: string): Promise<void>;
4357
4354
  pinConversation(_conversationId: string): Promise<void>;
@@ -4620,11 +4617,8 @@ declare class AXAudioPickerComponent {
4620
4617
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioPickerComponent, "ax-conversation-audio-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
4621
4618
  }
4622
4619
 
4623
- /**
4624
- * Get default composer tabs
4625
- * Import and register these in your app configuration
4626
- */
4627
- declare function getDefaultComposerTabs(): AXComposerTab[];
4620
+ declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXComposerTab;
4621
+ declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXComposerTab;
4628
4622
 
4629
4623
  declare class AXContactPickerComponent {
4630
4624
  private readonly composerService;
@@ -4915,40 +4909,35 @@ declare class AXVoiceRecorderComponent {
4915
4909
  /**
4916
4910
  * Emoji & Stickers picker action
4917
4911
  */
4918
- declare const AX_COMPOSER_EMOJI_ACTION: AXComposerAction;
4912
+ declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXComposerAction;
4919
4913
  /**
4920
4914
  * Image picker action
4921
4915
  */
4922
- declare const AX_COMPOSER_IMAGE_ACTION: AXComposerAction;
4916
+ declare const AX_CONVERSATION_COMPOSER_IMAGE_ACTION: AXComposerAction;
4923
4917
  /**
4924
4918
  * Video picker action
4925
4919
  */
4926
- declare const AX_COMPOSER_VIDEO_ACTION: AXComposerAction;
4920
+ declare const AX_CONVERSATION_COMPOSER_VIDEO_ACTION: AXComposerAction;
4927
4921
  /**
4928
4922
  * File picker action
4929
4923
  */
4930
- declare const AX_COMPOSER_FILE_ACTION: AXComposerAction;
4924
+ declare const AX_CONVERSATION_COMPOSER_FILE_ACTION: AXComposerAction;
4931
4925
  /**
4932
4926
  * Voice recording action
4933
4927
  */
4934
- declare const AX_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
4928
+ declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
4935
4929
  /**
4936
4930
  * Audio file picker action
4937
4931
  */
4938
- declare const AX_COMPOSER_AUDIO_ACTION: AXComposerAction;
4932
+ declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
4939
4933
  /**
4940
4934
  * Contact picker action
4941
4935
  */
4942
- declare const AX_COMPOSER_CONTACT_ACTION: AXComposerAction;
4936
+ declare const AX_CONVERSATION_COMPOSER_CONTACT_ACTION: AXComposerAction;
4943
4937
  /**
4944
4938
  * Location picker action
4945
4939
  */
4946
- declare const AX_COMPOSER_LOCATION_ACTION: AXComposerAction;
4947
- /**
4948
- * Get all default composer actions
4949
- * @deprecated Use individual action constants instead
4950
- */
4951
- declare function getDefaultComposerActions(): AXComposerAction[];
4940
+ declare const AX_CONVERSATION_COMPOSER_LOCATION_ACTION: AXComposerAction;
4952
4941
 
4953
4942
  declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
4954
4943
  private readonly toastService;
@@ -5044,38 +5033,33 @@ declare class AXInfoBarSearchComponent {
5044
5033
  /**
5045
5034
  * Search in conversation action (inline)
5046
5035
  */
5047
- declare const AX_INFO_BAR_SEARCH_ACTION: AXInfoBarAction;
5036
+ declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXInfoBarAction;
5048
5037
  /**
5049
5038
  * Show conversation info action (menu)
5050
5039
  */
5051
- declare const AX_INFO_BAR_INFO_ACTION: AXInfoBarAction;
5040
+ declare const AX_CONVERSATION_INFO_BAR_INFO_ACTION: AXInfoBarAction;
5052
5041
  /**
5053
5042
  * Mute/Unmute notifications action (menu)
5054
5043
  */
5055
- declare const AX_INFO_BAR_MUTE_ACTION: AXInfoBarAction;
5044
+ declare const AX_CONVERSATION_INFO_BAR_MUTE_ACTION: AXInfoBarAction;
5056
5045
  /**
5057
5046
  * Divider separator (menu)
5058
5047
  */
5059
- declare const AX_INFO_BAR_DIVIDER: AXInfoBarAction;
5048
+ declare const AX_CONVERSATION_INFO_BAR_DIVIDER: AXInfoBarAction;
5060
5049
  /**
5061
5050
  * Archive/Unarchive conversation action (menu)
5062
5051
  */
5063
- declare const AX_INFO_BAR_ARCHIVE_ACTION: AXInfoBarAction;
5052
+ declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXInfoBarAction;
5064
5053
  /**
5065
5054
  * Delete/Leave conversation action (smart action that adapts based on conversation type)
5066
5055
  * - Private: "Delete" - Deletes the conversation
5067
5056
  * - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
5068
5057
  */
5069
- declare const AX_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
5058
+ declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
5070
5059
  /**
5071
5060
  * Block user action (private chats only, menu)
5072
5061
  */
5073
- declare const AX_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
5074
- /**
5075
- * Get all default info bar actions
5076
- * @deprecated Use individual action constants instead
5077
- */
5078
- declare function getDefaultInfoBarActions(): AXInfoBarAction[];
5062
+ declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
5079
5063
 
5080
5064
  declare class AudioRendererComponent {
5081
5065
  private readonly platformId;
@@ -5264,7 +5248,7 @@ declare class SystemRendererComponent {
5264
5248
  /** System payload */
5265
5249
  readonly payload: _angular_core.Signal<AXSystemPayload>;
5266
5250
  /** Icon class based on system message type */
5267
- readonly iconClass: _angular_core.Signal<"fa-light fa-user-plus" | "fa-light fa-user-minus" | "fa-light fa-pen" | "fa-light fa-image" | "fa-light fa-info-circle">;
5251
+ readonly iconClass: _angular_core.Signal<"fa-light fa-image" | "fa-light fa-user-plus" | "fa-light fa-user-minus" | "fa-light fa-pen" | "fa-light fa-info-circle">;
5268
5252
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SystemRendererComponent, never>;
5269
5253
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5270
5254
  }
@@ -5369,39 +5353,40 @@ declare class VoiceRendererComponent {
5369
5353
  /**
5370
5354
  * Copy message text to clipboard
5371
5355
  */
5372
- declare const AX_MESSAGE_COPY_ACTION: AXMessageAction;
5356
+ declare const AX_CONVERSATION_MESSAGE_COPY_ACTION: AXMessageAction;
5373
5357
  /**
5374
5358
  * Reply to message
5375
5359
  */
5376
- declare const AX_MESSAGE_REPLY_ACTION: AXMessageAction;
5360
+ declare const AX_CONVERSATION_MESSAGE_REPLY_ACTION: AXMessageAction;
5377
5361
  /**
5378
5362
  * Edit own message (text only)
5379
5363
  */
5380
- declare const AX_MESSAGE_EDIT_ACTION: AXMessageAction;
5364
+ declare const AX_CONVERSATION_MESSAGE_EDIT_ACTION: AXMessageAction;
5381
5365
  /**
5382
5366
  * Delete own message
5383
5367
  */
5384
- declare const AX_MESSAGE_DELETE_ACTION: AXMessageAction;
5368
+ declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXMessageAction;
5385
5369
  /**
5386
5370
  * Forward message to another conversation
5387
5371
  */
5388
- declare const AX_MESSAGE_FORWARD_ACTION: AXMessageAction;
5389
- /**
5390
- * Get all default message actions
5391
- * @deprecated Use individual action constants instead
5392
- */
5393
- declare function getDefaultMessageActions(): AXMessageAction[];
5372
+ declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXMessageAction;
5394
5373
 
5395
5374
  /**
5396
5375
  * Default Message Renderers Plugin
5397
5376
  * Provides standard message type renderers (text, image, video, etc.)
5398
5377
  */
5399
5378
 
5400
- /**
5401
- * Get default message renderers
5402
- * Import and register these in your app configuration
5403
- */
5404
- declare function getDefaultMessageRenderers(): AXMessageRenderer[];
5379
+ declare const AX_CONVERSATION_TEXT_RENDERER: AXMessageRenderer;
5380
+ declare const AX_CONVERSATION_IMAGE_RENDERER: AXMessageRenderer;
5381
+ declare const AX_CONVERSATION_VIDEO_RENDERER: AXMessageRenderer;
5382
+ declare const AX_CONVERSATION_AUDIO_RENDERER: AXMessageRenderer;
5383
+ declare const AX_CONVERSATION_VOICE_RENDERER: AXMessageRenderer;
5384
+ declare const AX_CONVERSATION_FILE_RENDERER: AXMessageRenderer;
5385
+ declare const AX_CONVERSATION_LOCATION_RENDERER: AXMessageRenderer;
5386
+ declare const AX_CONVERSATION_STICKER_RENDERER: AXMessageRenderer;
5387
+ declare const AX_CONVERSATION_CONTACT_RENDERER: AXMessageRenderer;
5388
+ declare const AX_CONVERSATION_SYSTEM_RENDERER: AXMessageRenderer;
5389
+ declare const AX_CONVERSATION_FALLBACK_RENDERER: AXMessageRenderer;
5405
5390
 
5406
5391
  /**
5407
5392
  * Default Conversation Item Actions Plugin
@@ -5445,24 +5430,25 @@ declare function getDefaultConversationItemActions(): AXConversationItemAction[]
5445
5430
  * Provides sidebar conversation filter tabs (all, private, groups, etc.)
5446
5431
  */
5447
5432
 
5448
- /**
5449
- * Get default conversation tabs
5450
- * Import and register these in your app configuration
5451
- */
5452
- declare function getDefaultConversationTabs(): AXConversationTab[];
5433
+ declare const AX_CONVERSATION_TAB_ALL: AXConversationTab;
5434
+ declare const AX_CONVERSATION_TAB_PRIVATE: AXConversationTab;
5435
+ declare const AX_CONVERSATION_TAB_GROUPS: AXConversationTab;
5436
+ declare const AX_CONVERSATION_TAB_CHANNELS: AXConversationTab;
5437
+ declare const AX_CONVERSATION_TAB_UNREAD: AXConversationTab;
5438
+ declare const AX_CONVERSATION_TAB_ARCHIVED: AXConversationTab;
5453
5439
 
5454
5440
  /**
5455
5441
  * Configuration options for conversation module
5456
5442
  */
5457
5443
  interface AXConversationOptions {
5458
- /** Auth API implementation (required) */
5459
- authApi: Type<AXAuthApi>;
5444
+ /** User API implementation (required) */
5445
+ userApi: Type<AXUserApi>;
5460
5446
  /** Conversation Management API implementation (required) */
5461
5447
  conversationApi: Type<AXConversationApi>;
5462
5448
  /** Message API implementation (required) */
5463
5449
  messageApi: Type<AXMessageApi>;
5464
- /** Realtime API implementation (required) */
5465
- realtimeApi: Type<AXRealtimeApi>;
5450
+ /** Realtime API implementation (optional) */
5451
+ realtimeApi?: Type<AXRealtimeApi>;
5466
5452
  /** Configuration overrides */
5467
5453
  config?: Partial<AXConversationConfig>;
5468
5454
  /** Registry configuration */
@@ -5478,7 +5464,7 @@ declare class AXConversation2Module {
5478
5464
  * Configure module for lazy-loaded feature modules.
5479
5465
  * Reuses singleton services from root, optionally overrides config/registry.
5480
5466
  */
5481
- static forChild(options?: Omit<AXConversationOptions, 'authApi' | 'conversationApi' | 'messageApi' | 'realtimeApi'>): ModuleWithProviders<AXConversation2Module>;
5467
+ static forChild(options?: Omit<AXConversationOptions, 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi'>): ModuleWithProviders<AXConversation2Module>;
5482
5468
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversation2Module, never>;
5483
5469
  static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXConversation2Module, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof AXConversationContainerComponent, typeof AXSidebarComponent, typeof AXInfoBarComponent, typeof AXMessageListComponent, typeof AXComposerComponent, typeof TextRendererComponent, typeof ImageRendererComponent, typeof VideoRendererComponent, typeof AudioRendererComponent, typeof VoiceRendererComponent, typeof FileRendererComponent, typeof LocationRendererComponent, typeof StickerRendererComponent, typeof FallbackRendererComponent, typeof AXInfiniteScrollDirective], [typeof AXConversationContainerComponent, typeof AXSidebarComponent, typeof AXInfoBarComponent, typeof AXMessageListComponent, typeof AXComposerComponent, typeof TextRendererComponent, typeof ImageRendererComponent, typeof VideoRendererComponent, typeof AudioRendererComponent, typeof VoiceRendererComponent, typeof FileRendererComponent, typeof LocationRendererComponent, typeof StickerRendererComponent, typeof FallbackRendererComponent, typeof AXInfiniteScrollDirective]>;
5484
5470
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXConversation2Module>;
@@ -5490,7 +5476,7 @@ declare class AXConversation2Module {
5490
5476
  * @example
5491
5477
  * ```typescript
5492
5478
  * import {
5493
- * AXIndexedDBAuthApi,
5479
+ * AXIndexedDBUserApi,
5494
5480
  * AXIndexedDBConversationApi,
5495
5481
  * AXIndexedDBMessageApi,
5496
5482
  * AXIndexedDBRealtimeApi
@@ -5499,7 +5485,7 @@ declare class AXConversation2Module {
5499
5485
  * export const appConfig: ApplicationConfig = {
5500
5486
  * providers: [
5501
5487
  * provideConversation({
5502
- * authApi: AXIndexedDBAuthApi,
5488
+ * userApi: AXIndexedDBUserApi,
5503
5489
  * conversationApi: AXIndexedDBConversationApi,
5504
5490
  * messageApi: AXIndexedDBMessageApi,
5505
5491
  * realtimeApi: AXIndexedDBRealtimeApi,
@@ -5598,5 +5584,556 @@ declare class AXConversationMessageUtilsService {
5598
5584
  static getConversationSubtitle(conversation: AXConversation): string;
5599
5585
  }
5600
5586
 
5601
- export { AI_API_KEY, AXAIResponderService, AXAudioPickerComponent, AXAuthApi, AXBaseRegistry, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXContactPickerComponent, AXConversation2Module, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageUtilsService, AXConversationService, AXConversationStoreService, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFilePickerComponent, AXFileUploadService, AXForwardMessageDialogComponent, AXImagePickerComponent, AXIndexedDBAuthApi, AXIndexedDBConversationApi, AXIndexedDBMessageAIApi, AXIndexedDBMessageApi, AXIndexedDBRealtimeApi, AXInfiniteScrollDirective, AXInfoBarActionRegistry, AXInfoBarComponent, AXInfoBarSearchComponent, AXInfoBarService, AXLocationPickerComponent, AXMessageActionRegistry, AXMessageApi, AXMessageListComponent, AXMessageListService, AXMessageRendererRegistry, AXNewConversationDialogComponent, AXPickerFooterComponent, AXPickerHeaderComponent, AXRealtimeApi, AXRegistryService, AXSidebarComponent, AXSidebarService, AXStickerTabComponent, AXVideoPickerComponent, AXVoiceRecorderComponent, AX_COMPOSER_AUDIO_ACTION, AX_COMPOSER_CONTACT_ACTION, AX_COMPOSER_EMOJI_ACTION, AX_COMPOSER_FILE_ACTION, AX_COMPOSER_IMAGE_ACTION, AX_COMPOSER_LOCATION_ACTION, AX_COMPOSER_VIDEO_ACTION, AX_COMPOSER_VOICE_RECORDING_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_INFO_BAR_ARCHIVE_ACTION, AX_INFO_BAR_BLOCK_ACTION, AX_INFO_BAR_DELETE_ACTION, AX_INFO_BAR_DIVIDER, AX_INFO_BAR_INFO_ACTION, AX_INFO_BAR_MUTE_ACTION, AX_INFO_BAR_SEARCH_ACTION, AX_MESSAGE_COPY_ACTION, AX_MESSAGE_DELETE_ACTION, AX_MESSAGE_EDIT_ACTION, AX_MESSAGE_FORWARD_ACTION, AX_MESSAGE_REPLY_ACTION, AudioRendererComponent, CONVERSATION_CONFIG, ContactRendererComponent, DEFAULT_COMPOSER_ACTIONS, DEFAULT_COMPOSER_TABS, DEFAULT_CONVERSATION_ITEM_ACTIONS, DEFAULT_CONVERSATION_TABS, DEFAULT_INFO_BAR_ACTIONS, DEFAULT_MESSAGE_ACTIONS, DEFAULT_MESSAGE_RENDERERS, ERROR_HANDLER_CONFIG, FallbackRendererComponent, FileRendererComponent, ImageRendererComponent, LocationRendererComponent, REGISTRY_CONFIG, StickerRendererComponent, SystemRendererComponent, TextRendererComponent, VideoRendererComponent, VoiceRendererComponent, getDefaultComposerActions, getDefaultComposerTabs, getDefaultConversationItemActions, getDefaultConversationTabs, getDefaultInfoBarActions, getDefaultMessageActions, getDefaultMessageRenderers, provideConversation };
5602
- export type { AXAIResponderConfig, AXApiError, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXComposerAction, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXContactPayload, AXConversation, AXConversationConfig, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationItemAction, AXConversationItemActionContext, AXConversationOptions, AXConversationPermissions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXDeleteMessageCommand, AXEditMessageCommand, AXErrorHandlerConfig, AXErrorSeverity, AXFilePayload, AXGroupedReaction, AXImagePayload, AXInfoBarAction, AXInfoBarActionContext, AXInfoBarActiveComponent, AXLink, AXLinkPreview, AXLocationPayload, AXLoginCredentials, AXLoginResponse, AXMention, AXMessage, AXMessageAction, AXMessageActionContext, AXMessageAvatarTemplateContext, AXMessageForwardData, AXMessagePayload, AXMessageRenderer, AXMessageRendererCapabilities, AXMessageSearchFilters, AXMessageStatus, AXMessageType, AXNotificationEvent, AXPaginatedResult, AXPagination, AXParticipant, AXParticipantRole, AXParticipantStatus, AXParticipantUpdate, AXPinnedMessage, AXPollOption, AXPollPayload, AXPresenceStatus, AXPresenceUpdate, AXReaction, AXReadReceipt, AXRegistryConfiguration, AXRegistryItem, AXSendMessageCommand, AXStickerPayload, AXSystemPayload, AXTextFormat, AXTextPayload, AXTypingIndicator, AXUserProfileUpdate, AXUserRole, AXUserSearchFilters, AXVideoPayload, AXVoicePayload, DropdownMenuItem, FilePreview, FileUploadProgress };
5587
+ /**
5588
+ * Validation Utilities
5589
+ * Centralized validation functions for messages, files, and user input
5590
+ */
5591
+
5592
+ /**
5593
+ * Validation result interface
5594
+ */
5595
+ interface AXValidationResult {
5596
+ /** Whether validation passed */
5597
+ valid: boolean;
5598
+ /** Error message if validation failed */
5599
+ error?: string;
5600
+ /** Error code for programmatic handling */
5601
+ errorCode?: string;
5602
+ }
5603
+ /**
5604
+ * File validation result with additional metadata
5605
+ */
5606
+ interface AXFileValidationResult extends AXValidationResult {
5607
+ /** File size in bytes */
5608
+ size?: number;
5609
+ /** File type/MIME type */
5610
+ type?: string;
5611
+ }
5612
+ /**
5613
+ * Validate message text content
5614
+ * @param text - Text to validate
5615
+ * @param config - Configuration for validation rules
5616
+ * @returns Validation result
5617
+ */
5618
+ declare function validateMessageText(text: string | undefined, config: AXConversationConfig): AXValidationResult;
5619
+ /**
5620
+ * Validate file upload
5621
+ * @param file - File to validate
5622
+ * @param config - Configuration for validation rules
5623
+ * @returns File validation result
5624
+ */
5625
+ declare function validateFile(file: File, config: AXConversationConfig): AXFileValidationResult;
5626
+ /**
5627
+ * Validate conversation ID
5628
+ * @param conversationId - Conversation ID to validate
5629
+ * @returns Validation result
5630
+ */
5631
+ declare function validateConversationId(conversationId: string | undefined): AXValidationResult;
5632
+ /**
5633
+ * Validate message type
5634
+ * @param type - Message type to validate
5635
+ * @returns Validation result
5636
+ */
5637
+ declare function validateMessageType(type: AXMessageType | undefined): AXValidationResult;
5638
+ /**
5639
+ * Validate message payload
5640
+ * @param payload - Message payload to validate
5641
+ * @param type - Message type
5642
+ * @returns Validation result
5643
+ */
5644
+ declare function validateMessagePayload(payload: AXMessagePayload | undefined, type: AXMessageType): AXValidationResult;
5645
+ /**
5646
+ * Validate user ID
5647
+ * @param userId - User ID to validate
5648
+ * @returns Validation result
5649
+ */
5650
+ declare function validateUserId(userId: string | undefined): AXValidationResult;
5651
+ /**
5652
+ * Validate array of user IDs
5653
+ * @param userIds - Array of user IDs to validate
5654
+ * @param minCount - Minimum number of users required
5655
+ * @param maxCount - Maximum number of users allowed
5656
+ * @returns Validation result
5657
+ */
5658
+ declare function validateUserIds(userIds: string[] | undefined, minCount?: number, maxCount?: number): AXValidationResult;
5659
+ /**
5660
+ * Validate email address
5661
+ * @param email - Email to validate
5662
+ * @returns Validation result
5663
+ */
5664
+ declare function validateEmail(email: string | undefined): AXValidationResult;
5665
+ /**
5666
+ * Validate URL
5667
+ * @param url - URL to validate
5668
+ * @returns Validation result
5669
+ */
5670
+ declare function validateUrl(url: string | undefined): AXValidationResult;
5671
+ /**
5672
+ * Sanitize user input to prevent XSS
5673
+ * Note: Angular provides built-in sanitization, but this is an additional layer
5674
+ * @param input - User input to sanitize
5675
+ * @returns Sanitized input
5676
+ */
5677
+ declare function sanitizeInput(input: string): string;
5678
+ /**
5679
+ * Validate latitude coordinate
5680
+ * @param latitude - Latitude to validate
5681
+ * @returns Validation result
5682
+ */
5683
+ declare function validateLatitude(latitude: number | undefined | null): AXValidationResult;
5684
+ /**
5685
+ * Validate longitude coordinate
5686
+ * @param longitude - Longitude to validate
5687
+ * @returns Validation result
5688
+ */
5689
+ declare function validateLongitude(longitude: number | undefined | null): AXValidationResult;
5690
+
5691
+ /**
5692
+ * Error Message Constants
5693
+ * Centralized error messages with i18n support structure
5694
+ *
5695
+ * This file provides a foundation for internationalization.
5696
+ * Each error has a code and default English message.
5697
+ * Future i18n implementation can use these codes to look up translated messages.
5698
+ */
5699
+ /**
5700
+ * Error message interface
5701
+ */
5702
+ interface AXErrorMessage {
5703
+ /** Error code for programmatic handling and i18n lookup */
5704
+ code: string;
5705
+ /** Default English message */
5706
+ message: string;
5707
+ /** Optional message template with placeholders */
5708
+ template?: string;
5709
+ }
5710
+ /**
5711
+ * Message validation errors
5712
+ */
5713
+ declare const MESSAGE_ERRORS: {
5714
+ readonly EMPTY_MESSAGE: {
5715
+ readonly code: "MESSAGE.EMPTY";
5716
+ readonly message: "Message text cannot be empty";
5717
+ };
5718
+ readonly MESSAGE_TOO_SHORT: {
5719
+ readonly code: "MESSAGE.TOO_SHORT";
5720
+ readonly message: "Message is too short";
5721
+ readonly template: "Message must be at least {minLength} character(s)";
5722
+ };
5723
+ readonly MESSAGE_TOO_LONG: {
5724
+ readonly code: "MESSAGE.TOO_LONG";
5725
+ readonly message: "Message is too long";
5726
+ readonly template: "Message exceeds {maxLength} character limit";
5727
+ };
5728
+ readonly MISSING_CONVERSATION_ID: {
5729
+ readonly code: "MESSAGE.MISSING_CONVERSATION_ID";
5730
+ readonly message: "Conversation ID is required";
5731
+ };
5732
+ readonly MISSING_MESSAGE_TYPE: {
5733
+ readonly code: "MESSAGE.MISSING_TYPE";
5734
+ readonly message: "Message type is required";
5735
+ };
5736
+ readonly MISSING_PAYLOAD: {
5737
+ readonly code: "MESSAGE.MISSING_PAYLOAD";
5738
+ readonly message: "Message payload is required";
5739
+ };
5740
+ readonly INVALID_TEXT_PAYLOAD: {
5741
+ readonly code: "MESSAGE.INVALID_TEXT_PAYLOAD";
5742
+ readonly message: "Text message must have a text property";
5743
+ };
5744
+ readonly INVALID_MEDIA_PAYLOAD: {
5745
+ readonly code: "MESSAGE.INVALID_MEDIA_PAYLOAD";
5746
+ readonly message: "Media message must have a url property";
5747
+ };
5748
+ readonly INVALID_LOCATION_PAYLOAD: {
5749
+ readonly code: "MESSAGE.INVALID_LOCATION_PAYLOAD";
5750
+ readonly message: "Location message must have latitude and longitude properties";
5751
+ };
5752
+ };
5753
+ /**
5754
+ * File upload errors
5755
+ */
5756
+ declare const FILE_ERRORS: {
5757
+ readonly FILE_TOO_LARGE: {
5758
+ readonly code: "FILE.TOO_LARGE";
5759
+ readonly message: "File is too large";
5760
+ readonly template: "File size exceeds {maxSize} limit";
5761
+ };
5762
+ readonly FILE_TYPE_NOT_ALLOWED: {
5763
+ readonly code: "FILE.TYPE_NOT_ALLOWED";
5764
+ readonly message: "File type is not allowed";
5765
+ readonly template: "File type \"{fileType}\" is not allowed";
5766
+ };
5767
+ readonly UPLOAD_FAILED: {
5768
+ readonly code: "FILE.UPLOAD_FAILED";
5769
+ readonly message: "File upload failed";
5770
+ };
5771
+ };
5772
+ /**
5773
+ * User validation errors
5774
+ */
5775
+ declare const USER_ERRORS: {
5776
+ readonly MISSING_USER_ID: {
5777
+ readonly code: "USER.MISSING_ID";
5778
+ readonly message: "User ID is required";
5779
+ };
5780
+ readonly INVALID_USER_IDS: {
5781
+ readonly code: "USER.INVALID_IDS";
5782
+ readonly message: "User IDs must be an array";
5783
+ };
5784
+ readonly TOO_FEW_USERS: {
5785
+ readonly code: "USER.TOO_FEW";
5786
+ readonly message: "Not enough users";
5787
+ readonly template: "At least {minCount} user(s) required";
5788
+ };
5789
+ readonly TOO_MANY_USERS: {
5790
+ readonly code: "USER.TOO_MANY";
5791
+ readonly message: "Too many users";
5792
+ readonly template: "Maximum {maxCount} user(s) allowed";
5793
+ };
5794
+ readonly INVALID_USER_ID: {
5795
+ readonly code: "USER.INVALID_ID";
5796
+ readonly message: "All user IDs must be non-empty strings";
5797
+ };
5798
+ readonly MISSING_EMAIL: {
5799
+ readonly code: "USER.MISSING_EMAIL";
5800
+ readonly message: "Email is required";
5801
+ };
5802
+ readonly INVALID_EMAIL: {
5803
+ readonly code: "USER.INVALID_EMAIL";
5804
+ readonly message: "Invalid email format";
5805
+ };
5806
+ };
5807
+ /**
5808
+ * Conversation errors
5809
+ */
5810
+ declare const CONVERSATION_ERRORS: {
5811
+ readonly NOT_FOUND: {
5812
+ readonly code: "CONVERSATION.NOT_FOUND";
5813
+ readonly message: "Conversation not found";
5814
+ };
5815
+ readonly ALREADY_EXISTS: {
5816
+ readonly code: "CONVERSATION.ALREADY_EXISTS";
5817
+ readonly message: "Conversation already exists";
5818
+ };
5819
+ readonly CREATE_FAILED: {
5820
+ readonly code: "CONVERSATION.CREATE_FAILED";
5821
+ readonly message: "Failed to create conversation";
5822
+ };
5823
+ readonly DELETE_FAILED: {
5824
+ readonly code: "CONVERSATION.DELETE_FAILED";
5825
+ readonly message: "Failed to delete conversation";
5826
+ };
5827
+ readonly UPDATE_FAILED: {
5828
+ readonly code: "CONVERSATION.UPDATE_FAILED";
5829
+ readonly message: "Failed to update conversation";
5830
+ };
5831
+ readonly LOAD_FAILED: {
5832
+ readonly code: "CONVERSATION.LOAD_FAILED";
5833
+ readonly message: "Failed to load conversations";
5834
+ };
5835
+ };
5836
+ /**
5837
+ * Connection errors
5838
+ */
5839
+ declare const CONNECTION_ERRORS: {
5840
+ readonly DISCONNECTED: {
5841
+ readonly code: "CONNECTION.DISCONNECTED";
5842
+ readonly message: "Connection lost";
5843
+ };
5844
+ readonly FAILED_TO_CONNECT: {
5845
+ readonly code: "CONNECTION.FAILED";
5846
+ readonly message: "Failed to connect to server";
5847
+ };
5848
+ readonly TIMEOUT: {
5849
+ readonly code: "CONNECTION.TIMEOUT";
5850
+ readonly message: "Connection timeout";
5851
+ };
5852
+ readonly UNAUTHORIZED: {
5853
+ readonly code: "CONNECTION.UNAUTHORIZED";
5854
+ readonly message: "Unauthorized access";
5855
+ };
5856
+ };
5857
+ /**
5858
+ * Location validation errors
5859
+ */
5860
+ declare const LOCATION_ERRORS: {
5861
+ readonly MISSING_LATITUDE: {
5862
+ readonly code: "LOCATION.MISSING_LATITUDE";
5863
+ readonly message: "Latitude is required";
5864
+ };
5865
+ readonly MISSING_LONGITUDE: {
5866
+ readonly code: "LOCATION.MISSING_LONGITUDE";
5867
+ readonly message: "Longitude is required";
5868
+ };
5869
+ readonly INVALID_LATITUDE: {
5870
+ readonly code: "LOCATION.INVALID_LATITUDE";
5871
+ readonly message: "Latitude must be between -90 and 90";
5872
+ };
5873
+ readonly INVALID_LONGITUDE: {
5874
+ readonly code: "LOCATION.INVALID_LONGITUDE";
5875
+ readonly message: "Longitude must be between -180 and 180";
5876
+ };
5877
+ };
5878
+ /**
5879
+ * URL validation errors
5880
+ */
5881
+ declare const URL_ERRORS: {
5882
+ readonly MISSING_URL: {
5883
+ readonly code: "URL.MISSING";
5884
+ readonly message: "URL is required";
5885
+ };
5886
+ readonly INVALID_URL: {
5887
+ readonly code: "URL.INVALID";
5888
+ readonly message: "Invalid URL format";
5889
+ };
5890
+ };
5891
+ /**
5892
+ * Permission errors
5893
+ */
5894
+ declare const PERMISSION_ERRORS: {
5895
+ readonly CANNOT_SEND_MESSAGES: {
5896
+ readonly code: "PERMISSION.CANNOT_SEND_MESSAGES";
5897
+ readonly message: "You do not have permission to send messages";
5898
+ };
5899
+ readonly CANNOT_SEND_MEDIA: {
5900
+ readonly code: "PERMISSION.CANNOT_SEND_MEDIA";
5901
+ readonly message: "You do not have permission to send media";
5902
+ };
5903
+ readonly CANNOT_ADD_MEMBERS: {
5904
+ readonly code: "PERMISSION.CANNOT_ADD_MEMBERS";
5905
+ readonly message: "You do not have permission to add members";
5906
+ };
5907
+ readonly CANNOT_REMOVE_MEMBERS: {
5908
+ readonly code: "PERMISSION.CANNOT_REMOVE_MEMBERS";
5909
+ readonly message: "You do not have permission to remove members";
5910
+ };
5911
+ readonly CANNOT_EDIT_INFO: {
5912
+ readonly code: "PERMISSION.CANNOT_EDIT_INFO";
5913
+ readonly message: "You do not have permission to edit conversation info";
5914
+ };
5915
+ readonly CANNOT_DELETE_MESSAGES: {
5916
+ readonly code: "PERMISSION.CANNOT_DELETE_MESSAGES";
5917
+ readonly message: "You do not have permission to delete messages";
5918
+ };
5919
+ };
5920
+ /**
5921
+ * All error messages combined
5922
+ */
5923
+ declare const ERROR_MESSAGES: {
5924
+ readonly MESSAGE: {
5925
+ readonly EMPTY_MESSAGE: {
5926
+ readonly code: "MESSAGE.EMPTY";
5927
+ readonly message: "Message text cannot be empty";
5928
+ };
5929
+ readonly MESSAGE_TOO_SHORT: {
5930
+ readonly code: "MESSAGE.TOO_SHORT";
5931
+ readonly message: "Message is too short";
5932
+ readonly template: "Message must be at least {minLength} character(s)";
5933
+ };
5934
+ readonly MESSAGE_TOO_LONG: {
5935
+ readonly code: "MESSAGE.TOO_LONG";
5936
+ readonly message: "Message is too long";
5937
+ readonly template: "Message exceeds {maxLength} character limit";
5938
+ };
5939
+ readonly MISSING_CONVERSATION_ID: {
5940
+ readonly code: "MESSAGE.MISSING_CONVERSATION_ID";
5941
+ readonly message: "Conversation ID is required";
5942
+ };
5943
+ readonly MISSING_MESSAGE_TYPE: {
5944
+ readonly code: "MESSAGE.MISSING_TYPE";
5945
+ readonly message: "Message type is required";
5946
+ };
5947
+ readonly MISSING_PAYLOAD: {
5948
+ readonly code: "MESSAGE.MISSING_PAYLOAD";
5949
+ readonly message: "Message payload is required";
5950
+ };
5951
+ readonly INVALID_TEXT_PAYLOAD: {
5952
+ readonly code: "MESSAGE.INVALID_TEXT_PAYLOAD";
5953
+ readonly message: "Text message must have a text property";
5954
+ };
5955
+ readonly INVALID_MEDIA_PAYLOAD: {
5956
+ readonly code: "MESSAGE.INVALID_MEDIA_PAYLOAD";
5957
+ readonly message: "Media message must have a url property";
5958
+ };
5959
+ readonly INVALID_LOCATION_PAYLOAD: {
5960
+ readonly code: "MESSAGE.INVALID_LOCATION_PAYLOAD";
5961
+ readonly message: "Location message must have latitude and longitude properties";
5962
+ };
5963
+ };
5964
+ readonly FILE: {
5965
+ readonly FILE_TOO_LARGE: {
5966
+ readonly code: "FILE.TOO_LARGE";
5967
+ readonly message: "File is too large";
5968
+ readonly template: "File size exceeds {maxSize} limit";
5969
+ };
5970
+ readonly FILE_TYPE_NOT_ALLOWED: {
5971
+ readonly code: "FILE.TYPE_NOT_ALLOWED";
5972
+ readonly message: "File type is not allowed";
5973
+ readonly template: "File type \"{fileType}\" is not allowed";
5974
+ };
5975
+ readonly UPLOAD_FAILED: {
5976
+ readonly code: "FILE.UPLOAD_FAILED";
5977
+ readonly message: "File upload failed";
5978
+ };
5979
+ };
5980
+ readonly USER: {
5981
+ readonly MISSING_USER_ID: {
5982
+ readonly code: "USER.MISSING_ID";
5983
+ readonly message: "User ID is required";
5984
+ };
5985
+ readonly INVALID_USER_IDS: {
5986
+ readonly code: "USER.INVALID_IDS";
5987
+ readonly message: "User IDs must be an array";
5988
+ };
5989
+ readonly TOO_FEW_USERS: {
5990
+ readonly code: "USER.TOO_FEW";
5991
+ readonly message: "Not enough users";
5992
+ readonly template: "At least {minCount} user(s) required";
5993
+ };
5994
+ readonly TOO_MANY_USERS: {
5995
+ readonly code: "USER.TOO_MANY";
5996
+ readonly message: "Too many users";
5997
+ readonly template: "Maximum {maxCount} user(s) allowed";
5998
+ };
5999
+ readonly INVALID_USER_ID: {
6000
+ readonly code: "USER.INVALID_ID";
6001
+ readonly message: "All user IDs must be non-empty strings";
6002
+ };
6003
+ readonly MISSING_EMAIL: {
6004
+ readonly code: "USER.MISSING_EMAIL";
6005
+ readonly message: "Email is required";
6006
+ };
6007
+ readonly INVALID_EMAIL: {
6008
+ readonly code: "USER.INVALID_EMAIL";
6009
+ readonly message: "Invalid email format";
6010
+ };
6011
+ };
6012
+ readonly CONVERSATION: {
6013
+ readonly NOT_FOUND: {
6014
+ readonly code: "CONVERSATION.NOT_FOUND";
6015
+ readonly message: "Conversation not found";
6016
+ };
6017
+ readonly ALREADY_EXISTS: {
6018
+ readonly code: "CONVERSATION.ALREADY_EXISTS";
6019
+ readonly message: "Conversation already exists";
6020
+ };
6021
+ readonly CREATE_FAILED: {
6022
+ readonly code: "CONVERSATION.CREATE_FAILED";
6023
+ readonly message: "Failed to create conversation";
6024
+ };
6025
+ readonly DELETE_FAILED: {
6026
+ readonly code: "CONVERSATION.DELETE_FAILED";
6027
+ readonly message: "Failed to delete conversation";
6028
+ };
6029
+ readonly UPDATE_FAILED: {
6030
+ readonly code: "CONVERSATION.UPDATE_FAILED";
6031
+ readonly message: "Failed to update conversation";
6032
+ };
6033
+ readonly LOAD_FAILED: {
6034
+ readonly code: "CONVERSATION.LOAD_FAILED";
6035
+ readonly message: "Failed to load conversations";
6036
+ };
6037
+ };
6038
+ readonly CONNECTION: {
6039
+ readonly DISCONNECTED: {
6040
+ readonly code: "CONNECTION.DISCONNECTED";
6041
+ readonly message: "Connection lost";
6042
+ };
6043
+ readonly FAILED_TO_CONNECT: {
6044
+ readonly code: "CONNECTION.FAILED";
6045
+ readonly message: "Failed to connect to server";
6046
+ };
6047
+ readonly TIMEOUT: {
6048
+ readonly code: "CONNECTION.TIMEOUT";
6049
+ readonly message: "Connection timeout";
6050
+ };
6051
+ readonly UNAUTHORIZED: {
6052
+ readonly code: "CONNECTION.UNAUTHORIZED";
6053
+ readonly message: "Unauthorized access";
6054
+ };
6055
+ };
6056
+ readonly LOCATION: {
6057
+ readonly MISSING_LATITUDE: {
6058
+ readonly code: "LOCATION.MISSING_LATITUDE";
6059
+ readonly message: "Latitude is required";
6060
+ };
6061
+ readonly MISSING_LONGITUDE: {
6062
+ readonly code: "LOCATION.MISSING_LONGITUDE";
6063
+ readonly message: "Longitude is required";
6064
+ };
6065
+ readonly INVALID_LATITUDE: {
6066
+ readonly code: "LOCATION.INVALID_LATITUDE";
6067
+ readonly message: "Latitude must be between -90 and 90";
6068
+ };
6069
+ readonly INVALID_LONGITUDE: {
6070
+ readonly code: "LOCATION.INVALID_LONGITUDE";
6071
+ readonly message: "Longitude must be between -180 and 180";
6072
+ };
6073
+ };
6074
+ readonly URL: {
6075
+ readonly MISSING_URL: {
6076
+ readonly code: "URL.MISSING";
6077
+ readonly message: "URL is required";
6078
+ };
6079
+ readonly INVALID_URL: {
6080
+ readonly code: "URL.INVALID";
6081
+ readonly message: "Invalid URL format";
6082
+ };
6083
+ };
6084
+ readonly PERMISSION: {
6085
+ readonly CANNOT_SEND_MESSAGES: {
6086
+ readonly code: "PERMISSION.CANNOT_SEND_MESSAGES";
6087
+ readonly message: "You do not have permission to send messages";
6088
+ };
6089
+ readonly CANNOT_SEND_MEDIA: {
6090
+ readonly code: "PERMISSION.CANNOT_SEND_MEDIA";
6091
+ readonly message: "You do not have permission to send media";
6092
+ };
6093
+ readonly CANNOT_ADD_MEMBERS: {
6094
+ readonly code: "PERMISSION.CANNOT_ADD_MEMBERS";
6095
+ readonly message: "You do not have permission to add members";
6096
+ };
6097
+ readonly CANNOT_REMOVE_MEMBERS: {
6098
+ readonly code: "PERMISSION.CANNOT_REMOVE_MEMBERS";
6099
+ readonly message: "You do not have permission to remove members";
6100
+ };
6101
+ readonly CANNOT_EDIT_INFO: {
6102
+ readonly code: "PERMISSION.CANNOT_EDIT_INFO";
6103
+ readonly message: "You do not have permission to edit conversation info";
6104
+ };
6105
+ readonly CANNOT_DELETE_MESSAGES: {
6106
+ readonly code: "PERMISSION.CANNOT_DELETE_MESSAGES";
6107
+ readonly message: "You do not have permission to delete messages";
6108
+ };
6109
+ };
6110
+ };
6111
+ /**
6112
+ * Helper function to format error message with parameters
6113
+ * Optimized to avoid creating regex objects in loop
6114
+ * @param template - Message template with placeholders
6115
+ * @param params - Parameters to replace in template
6116
+ * @returns Formatted message
6117
+ *
6118
+ * @example
6119
+ * formatErrorMessage('Message exceeds {maxLength} character limit', { maxLength: 1000 })
6120
+ * // Returns: 'Message exceeds 1000 character limit'
6121
+ */
6122
+ declare function formatErrorMessage(template: string, params: Record<string, string | number>): string;
6123
+ /**
6124
+ * Get error message by code
6125
+ * This function can be extended to support i18n by looking up translations
6126
+ * Uses caching for better performance
6127
+ * @param code - Error code
6128
+ * @param params - Optional parameters for message template
6129
+ * @returns Error message
6130
+ */
6131
+ declare function getErrorMessage(code: string, params?: Record<string, string | number>): string;
6132
+ /**
6133
+ * Type for error codes
6134
+ * Useful for type-safe error handling
6135
+ */
6136
+ type AXErrorCode = typeof MESSAGE_ERRORS[keyof typeof MESSAGE_ERRORS]['code'] | typeof FILE_ERRORS[keyof typeof FILE_ERRORS]['code'] | typeof USER_ERRORS[keyof typeof USER_ERRORS]['code'] | typeof CONVERSATION_ERRORS[keyof typeof CONVERSATION_ERRORS]['code'] | typeof CONNECTION_ERRORS[keyof typeof CONNECTION_ERRORS]['code'] | typeof LOCATION_ERRORS[keyof typeof LOCATION_ERRORS]['code'] | typeof URL_ERRORS[keyof typeof URL_ERRORS]['code'] | typeof PERMISSION_ERRORS[keyof typeof PERMISSION_ERRORS]['code'];
6137
+
6138
+ export { AI_API_KEY, AXAIResponderService, AXAudioPickerComponent, AXBaseRegistry, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXContactPickerComponent, AXConversation2Module, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageUtilsService, AXConversationService, AXConversationStoreService, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFilePickerComponent, AXFileUploadService, AXForwardMessageDialogComponent, AXImagePickerComponent, AXIndexedDBConversationApi, AXIndexedDBMessageAIApi, AXIndexedDBMessageApi, AXIndexedDBRealtimeApi, AXIndexedDBUserApi, AXInfiniteScrollDirective, AXInfoBarActionRegistry, AXInfoBarComponent, AXInfoBarSearchComponent, AXInfoBarService, AXLocationPickerComponent, AXMessageActionRegistry, AXMessageApi, AXMessageListComponent, AXMessageListService, AXMessageRendererRegistry, AXNewConversationDialogComponent, AXPickerFooterComponent, AXPickerHeaderComponent, AXRealtimeApi, AXRegistryService, AXSidebarComponent, AXSidebarService, AXStickerTabComponent, AXUserApi, AXVideoPickerComponent, AXVoiceRecorderComponent, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_CONTACT_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_CONTACT_RENDERER, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_RENDERER, 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_INFO_ACTION, 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_RENDERER, AX_CONVERSATION_MESSAGE_COPY_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AudioRendererComponent, CONNECTION_ERRORS, CONVERSATION_CONFIG, CONVERSATION_ERRORS, ContactRendererComponent, DEFAULT_COMPOSER_ACTIONS, DEFAULT_COMPOSER_TABS, DEFAULT_CONVERSATION_ITEM_ACTIONS, DEFAULT_CONVERSATION_TABS, DEFAULT_INFO_BAR_ACTIONS, DEFAULT_MESSAGE_ACTIONS, DEFAULT_MESSAGE_RENDERERS, ERROR_HANDLER_CONFIG, ERROR_MESSAGES, FILE_ERRORS, FallbackRendererComponent, FileRendererComponent, ImageRendererComponent, LOCATION_ERRORS, LocationRendererComponent, MESSAGE_ERRORS, PERMISSION_ERRORS, REGISTRY_CONFIG, StickerRendererComponent, SystemRendererComponent, TextRendererComponent, URL_ERRORS, USER_ERRORS, VideoRendererComponent, VoiceRendererComponent, formatErrorMessage, getDefaultConversationItemActions, getErrorMessage, mergeWithDefaults, provideConversation, sanitizeInput, validateConversationId, validateEmail, validateFile, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
6139
+ export type { AXAIResponderConfig, AXApiError, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXComposerAction, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXContactPayload, AXConversation, AXConversationConfig, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationItemAction, AXConversationItemActionContext, AXConversationOptions, AXConversationPermissions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXDeleteMessageCommand, AXEditMessageCommand, AXErrorCode, AXErrorHandlerConfig, AXErrorMessage, AXErrorSeverity, AXFilePayload, AXFileValidationResult, AXGroupedReaction, AXImagePayload, AXInfoBarAction, AXInfoBarActionContext, AXInfoBarActiveComponent, AXLink, AXLinkPreview, AXLocationPayload, AXMention, AXMessage, AXMessageAction, AXMessageActionContext, AXMessageAvatarTemplateContext, AXMessageForwardData, AXMessagePayload, AXMessageRenderer, AXMessageRendererCapabilities, AXMessageSearchFilters, AXMessageStatus, AXMessageType, AXNotificationEvent, AXPaginatedResult, AXPagination, AXParticipant, AXParticipantRole, AXParticipantStatus, AXParticipantUpdate, AXPinnedMessage, AXPollOption, AXPollPayload, AXPresenceStatus, AXPresenceUpdate, AXReaction, AXReadReceipt, AXRegistryConfiguration, AXRegistryItem, AXSendMessageCommand, AXStickerPayload, AXSystemPayload, AXTextFormat, AXTextPayload, AXTypingIndicator, AXUserProfileUpdate, AXUserRole, AXUserSearchFilters, AXValidationResult, AXVideoPayload, AXVoicePayload, DropdownMenuItem, FilePreview, FileUploadProgress };