@acorex/components 20.4.13 → 20.4.15

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.
@@ -1,14 +1,16 @@
1
1
  import * as _acorex_components_conversation2 from '@acorex/components/conversation2';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnDestroy, ViewContainerRef, WritableSignal, Signal, Type, InjectionToken, TemplateRef, OnInit, EventEmitter, ElementRef, ModuleWithProviders, Provider } from '@angular/core';
4
- import { AXComponentCloseEvent, AXHtmlEvent, AXClosableComponent } from '@acorex/cdk/common';
3
+ import { OnDestroy, ViewContainerRef, WritableSignal, Signal, Type, InputSignal, InjectionToken, OnInit, EventEmitter, TemplateRef, ElementRef, ModuleWithProviders, Provider } from '@angular/core';
4
+ import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXClosableComponent } from '@acorex/cdk/common';
5
5
  import * as rxjs from 'rxjs';
6
- import { Observable } from 'rxjs';
6
+ import { Observable, BehaviorSubject, Subject } from 'rxjs';
7
7
  import { AXDialogService } from '@acorex/components/dialog';
8
- import { AXPopupService } from '@acorex/components/popup';
8
+ import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
9
9
  import { AXUploaderChangedEvent } from '@acorex/cdk/uploader';
10
10
  import { AXPopoverComponent } from '@acorex/components/popover';
11
+ import { AXListComponent } from '@acorex/components/list';
11
12
  import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
13
+ import { AXBasePageComponent } from '@acorex/components/page';
12
14
  import { AXMapMarker } from '@acorex/components/map';
13
15
  import { SafeHtml } from '@angular/platform-browser';
14
16
  import * as i1 from '@angular/common';
@@ -267,25 +269,6 @@ interface AXStickerPayload {
267
269
  /** Emoji representation */
268
270
  emoji?: string;
269
271
  }
270
- /**
271
- * Contact message payload
272
- */
273
- interface AXContactPayload {
274
- /** Message type */
275
- type: 'contact';
276
- /** Contact ID */
277
- id: string;
278
- /** Contact name */
279
- name: string;
280
- /** Phone number */
281
- phoneNumber?: string;
282
- /** Email address */
283
- email?: string;
284
- /** URL address */
285
- url?: string;
286
- /** Avatar URL */
287
- avatar?: string;
288
- }
289
272
  /**
290
273
  * Poll message payload
291
274
  */
@@ -336,7 +319,7 @@ interface AXSystemPayload {
336
319
  /**
337
320
  * Union type of all message payloads
338
321
  */
339
- type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload | AXContactPayload | AXPollPayload | AXSystemPayload;
322
+ type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload | AXPollPayload | AXSystemPayload;
340
323
 
341
324
  /**
342
325
  * Message Model
@@ -344,7 +327,7 @@ type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudi
344
327
  */
345
328
 
346
329
  type AXMessageStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
347
- type AXMessageType = 'text' | 'image' | 'video' | 'audio' | 'voice' | 'file' | 'location' | 'sticker' | 'contact' | 'poll' | 'system' | string;
330
+ type AXMessageType = 'text' | 'image' | 'video' | 'audio' | 'voice' | 'file' | 'location' | 'sticker' | 'poll' | 'system' | string;
348
331
  /**
349
332
  * Reaction on a message
350
333
  */
@@ -548,6 +531,14 @@ interface AXConversationSettings {
548
531
  /** Custom settings */
549
532
  custom?: Record<string, unknown>;
550
533
  }
534
+ /**
535
+ * Conversation metadata
536
+ * Extensible map for app-specific conversation data.
537
+ */
538
+ interface AXConversationMetadata extends Record<string, unknown> {
539
+ /** Optional custom background CSS for message list */
540
+ messageListBackground?: string;
541
+ }
551
542
  /**
552
543
  * Main Conversation interface
553
544
  */
@@ -593,7 +584,7 @@ interface AXConversation {
593
584
  /** Draft message text */
594
585
  draft?: string;
595
586
  /** Custom metadata */
596
- metadata?: Record<string, unknown>;
587
+ metadata?: AXConversationMetadata;
597
588
  }
598
589
  /**
599
590
  * Typing indicator
@@ -2531,6 +2522,11 @@ declare class AXMessageActionRegistry {
2531
2522
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageActionRegistry>;
2532
2523
  }
2533
2524
 
2525
+ /**
2526
+ * Message Renderer Registry
2527
+ * Register custom message renderers for different message types
2528
+ */
2529
+
2534
2530
  /**
2535
2531
  * Message renderer capabilities
2536
2532
  */
@@ -2548,6 +2544,35 @@ interface AXMessageRendererCapabilities {
2548
2544
  /** Custom capabilities */
2549
2545
  custom?: Record<string, boolean>;
2550
2546
  }
2547
+ /**
2548
+ * Remote or binary content lifecycle inside a message renderer (image load, audio decode, etc.).
2549
+ * Use `none` when the renderer has no separate load phase (text, file row, etc.).
2550
+ */
2551
+ type AXMessageRendererContentState = 'none' | 'loading' | 'ready' | 'error';
2552
+ /**
2553
+ * Combined state for a chat message renderer: delivery pipeline plus optional content load.
2554
+ */
2555
+ interface AXMessageRendererState {
2556
+ /** Mirrors `message.status` (sending, sent, delivered, read, failed). */
2557
+ deliveryStatus: AXMessageStatus;
2558
+ /** Media / rich content load; set to `error` from `(error)` handlers on img, audio, video, etc. */
2559
+ contentState: AXMessageRendererContentState;
2560
+ }
2561
+ /**
2562
+ * Contract for components used as {@link AXMessageRenderer.component}.
2563
+ * The message list passes `{ message }`; each view exposes `rendererState` for templates and tooling.
2564
+ */
2565
+ interface AXMessageRendererComponent {
2566
+ readonly message: InputSignal<AXMessage>;
2567
+ readonly rendererState: Signal<AXMessageRendererState>;
2568
+ }
2569
+ /**
2570
+ * Contract for components used as {@link AXMessageRenderer.infoBarBanner}.
2571
+ * Conversation shell passes at least `{ message }`; renderers can pass additional inputs.
2572
+ */
2573
+ interface AXMessageInfoBarBannerComponent {
2574
+ readonly message: InputSignal<AXMessage>;
2575
+ }
2551
2576
  /**
2552
2577
  * Message renderer registration
2553
2578
  */
@@ -2555,7 +2580,12 @@ interface AXMessageRenderer {
2555
2580
  /** Unique type identifier */
2556
2581
  type: string;
2557
2582
  /** Angular component to render this message type */
2558
- component: Type<any>;
2583
+ component: Type<AXMessageRendererComponent>;
2584
+ /**
2585
+ * Optional component rendered as a dismissible banner under info-bar.
2586
+ * Useful for active/interactive message states (e.g. voice playback progress).
2587
+ */
2588
+ infoBarBanner?: Type<AXMessageInfoBarBannerComponent>;
2559
2589
  /** Function to determine if this renderer can handle a message */
2560
2590
  canHandle: (message: AXMessage) => boolean;
2561
2591
  /** Renderer capabilities */
@@ -2564,17 +2594,24 @@ interface AXMessageRenderer {
2564
2594
  displayName?: string;
2565
2595
  /** Icon name/class */
2566
2596
  icon?: string;
2597
+ /**
2598
+ * Optional composer actions co-located with this message type (e.g. pickers that produce this message).
2599
+ * Registered with {@link AXComposerActionRegistry} when the renderer is registered.
2600
+ * Use `AXRegistryConfiguration.composerActions` for actions not tied to a single message renderer.
2601
+ */
2602
+ composerActions?: AXComposerAction[];
2567
2603
  }
2568
2604
  /**
2569
2605
  * Message Renderer Registry Service
2570
2606
  */
2571
2607
  declare class AXMessageRendererRegistry {
2572
2608
  private readonly _renderers;
2609
+ private readonly _composerActions;
2573
2610
  constructor();
2574
2611
  /** All registered renderers */
2575
- readonly renderers: _angular_core.Signal<AXMessageRenderer[]>;
2612
+ readonly renderers: Signal<AXMessageRenderer[]>;
2576
2613
  /** Renderers sorted by priority (highest first) */
2577
- readonly sortedRenderers: _angular_core.Signal<AXMessageRenderer[]>;
2614
+ readonly sortedRenderers: Signal<AXMessageRenderer[]>;
2578
2615
  /**
2579
2616
  * Register a message renderer
2580
2617
  */
@@ -2839,7 +2876,7 @@ declare class AXConversationService {
2839
2876
  * @param conversationId - Conversation ID
2840
2877
  * @param metadata - Metadata to merge
2841
2878
  */
2842
- updateConversationMetadata(conversationId: string, metadata: Record<string, unknown>): Promise<void>;
2879
+ updateConversationMetadata(conversationId: string, metadata: AXConversationMetadata): Promise<void>;
2843
2880
  /**
2844
2881
  * Get conversation by ID
2845
2882
  * @param conversationId - Conversation ID
@@ -2853,7 +2890,7 @@ declare class AXConversationService {
2853
2890
  * @param metadata - Optional metadata (title, avatar, etc.)
2854
2891
  * @returns Created conversation
2855
2892
  */
2856
- createConversation(participantIds: string[], type: 'private' | 'group' | 'channel', metadata?: Record<string, unknown>): Promise<AXConversation>;
2893
+ createConversation(participantIds: string[], type: 'private' | 'group' | 'channel', metadata?: AXConversationMetadata): Promise<AXConversation>;
2857
2894
  /**
2858
2895
  * Get available users for conversation creation
2859
2896
  * @param query - Optional search query
@@ -3412,12 +3449,6 @@ interface AXConversationConfig {
3412
3449
  maxSidebarWidth?: number;
3413
3450
  /** Default sidebar width in pixels */
3414
3451
  defaultSidebarWidth?: number;
3415
- /** Virtual scroll item size in pixels */
3416
- virtualScrollItemSize?: number;
3417
- /** Virtual scroll minimum buffer in pixels */
3418
- virtualScrollMinBuffer?: number;
3419
- /** Virtual scroll maximum buffer in pixels */
3420
- virtualScrollMaxBuffer?: number;
3421
3452
  /** Filter cache size */
3422
3453
  filterCacheSize?: number;
3423
3454
  /** Maximum file size in bytes */
@@ -3430,6 +3461,12 @@ interface AXConversationConfig {
3430
3461
  minMessageLength?: number;
3431
3462
  /** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
3432
3463
  messageReadThreshold?: number;
3464
+ /**
3465
+ * CSS `background` for the message list (`ax-conversation-message-list` area, all states: loading, empty, messages).
3466
+ * Use full shorthand, or a bare `https://...` / `/path/to.png` (wrapped as `url(...)` with `center/cover`).
3467
+ * Empty string = library default soft gradient. `transparent` or `none` = flat background.
3468
+ */
3469
+ messageListBackground?: string;
3433
3470
  }
3434
3471
 
3435
3472
  /**
@@ -3473,7 +3510,7 @@ declare const ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXErrorHandlerConfig>
3473
3510
  /**
3474
3511
  * Additional message renderers configuration
3475
3512
  * Provide this token to add custom message renderers in addition to built-in ones
3476
- * Note: Built-in renderers (text, image, video, audio, voice, file, location, sticker, contact, system, fallback) are automatically registered
3513
+ * Note: Built-in renderers (text, system, fallback) are registered by default; other types are provided via plugins/constants.
3477
3514
  */
3478
3515
  declare const DEFAULT_MESSAGE_RENDERERS: InjectionToken<AXMessageRenderer[]>;
3479
3516
  /**
@@ -3510,7 +3547,10 @@ declare const DEFAULT_CONVERSATION_ITEM_ACTIONS: InjectionToken<AXConversationIt
3510
3547
  * Registry configuration interface
3511
3548
  */
3512
3549
  interface AXRegistryConfiguration {
3513
- /** Additional message renderers to register (built-in renderers are automatic) */
3550
+ /**
3551
+ * Additional message renderers to register (built-in renderers are automatic).
3552
+ * Each {@link AXMessageRenderer} may include optional `composerActions` for co-located send UX.
3553
+ */
3514
3554
  messageRenderers?: AXMessageRenderer[];
3515
3555
  /** Message actions to register by default */
3516
3556
  messageActions?: AXMessageAction[];
@@ -3573,6 +3613,14 @@ interface AXInfoBarActiveComponent {
3573
3613
  /** Component inputs */
3574
3614
  inputs?: Record<string, unknown>;
3575
3615
  }
3616
+ interface AXInfoBarActiveBanner {
3617
+ /** Message that owns this banner */
3618
+ message: AXMessage;
3619
+ /** Banner component */
3620
+ component: Type<AXMessageInfoBarBannerComponent>;
3621
+ /** Additional component inputs */
3622
+ inputs?: Record<string, unknown>;
3623
+ }
3576
3624
  /**
3577
3625
  * Info Bar Service
3578
3626
  * Manages info bar state and actions
@@ -3585,6 +3633,9 @@ declare class AXInfoBarService {
3585
3633
  /** Active component being shown in info-bar */
3586
3634
  private readonly _activeComponent;
3587
3635
  readonly activeComponent: _angular_core.Signal<AXInfoBarActiveComponent>;
3636
+ /** Active banner shown under info-bar */
3637
+ private readonly _activeBanner;
3638
+ readonly activeBanner: _angular_core.Signal<AXInfoBarActiveBanner>;
3588
3639
  /** Search query signal */
3589
3640
  private readonly _searchQuery;
3590
3641
  readonly searchQuery: _angular_core.Signal<string>;
@@ -3593,6 +3644,7 @@ declare class AXInfoBarService {
3593
3644
  /** Current search result index */
3594
3645
  private readonly _currentSearchIndex;
3595
3646
  readonly currentSearchIndex: _angular_core.Signal<number>;
3647
+ constructor();
3596
3648
  /**
3597
3649
  * Get actions for the active conversation
3598
3650
  */
@@ -3617,6 +3669,19 @@ declare class AXInfoBarService {
3617
3669
  * Hide the active component
3618
3670
  */
3619
3671
  hideComponent(): void;
3672
+ /**
3673
+ * Show message-owned banner under info-bar if renderer provides one
3674
+ */
3675
+ showMessageBanner(message: AXMessage, inputs?: Record<string, unknown>): void;
3676
+ /**
3677
+ * Update active banner inputs for a specific message
3678
+ */
3679
+ updateMessageBannerInputs(messageId: string, inputs: Record<string, unknown>): void;
3680
+ /**
3681
+ * Hide active banner. If messageId is provided, hide only when it matches.
3682
+ */
3683
+ hideMessageBanner(messageId?: string): void;
3684
+ isMessageBannerActive(messageId: string): boolean;
3620
3685
  /**
3621
3686
  * Toggle component visibility
3622
3687
  */
@@ -3917,6 +3982,8 @@ declare class AXInfoBarComponent {
3917
3982
  readonly activeConversation: _angular_core.Signal<AXConversation>;
3918
3983
  /** Active component from service */
3919
3984
  readonly activeComponent: _angular_core.Signal<AXInfoBarActiveComponent>;
3985
+ /** Active banner from service */
3986
+ readonly activeBanner: _angular_core.Signal<AXInfoBarActiveBanner>;
3920
3987
  /** Members popover reference */
3921
3988
  readonly membersPopoverRef: _angular_core.Signal<AXPopoverComponent>;
3922
3989
  /** Members popover target element */
@@ -3951,16 +4018,52 @@ declare class AXInfoBarComponent {
3951
4018
  getComponentInputs(): Record<string, any>;
3952
4019
  /** Handle close component */
3953
4020
  onCloseComponent(): void;
4021
+ getBannerInputs(): Record<string, unknown>;
4022
+ onCloseBanner(): void;
3954
4023
  /** Handle menu item click */
3955
4024
  onMenuItemClick(item: DropdownMenuItem): Promise<void>;
3956
4025
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarComponent, never>;
3957
4026
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarComponent, "ax-conversation-info-bar", never, {}, { "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
3958
4027
  }
3959
4028
 
4029
+ declare class AXForwardMessageDialogComponent implements OnInit {
4030
+ private readonly toastService;
4031
+ /**
4032
+ * Set by {@link AXPopupComponent} when opened via {@link AXPopupService} so the shell title can update.
4033
+ */
4034
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4035
+ conversationService: AXConversationService;
4036
+ message: AXMessage;
4037
+ readonly onClosed: EventEmitter<AXComponentCloseEvent>;
4038
+ readonly allConversations: _angular_core.WritableSignal<AXConversation[]>;
4039
+ readonly forwardSearchQuery: _angular_core.WritableSignal<string>;
4040
+ readonly selectedConversationIds: _angular_core.WritableSignal<string[]>;
4041
+ readonly forwardListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
4042
+ readonly forwardList: _angular_core.Signal<AXListComponent>;
4043
+ readonly forwardListDataSource: AXDataSource<unknown>;
4044
+ readonly canForward: _angular_core.Signal<boolean>;
4045
+ private readonly _syncPopupTitleEffect;
4046
+ ngOnInit(): void;
4047
+ onForwardSearchChange(value: string): void;
4048
+ conversationFromItem(item: unknown): AXConversation | null;
4049
+ isSelected(conversationId: string): boolean;
4050
+ getInitials(name: string): string;
4051
+ private getFilteredConversationsForForward;
4052
+ onCancel(): void;
4053
+ onForward(): Promise<void>;
4054
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXForwardMessageDialogComponent, never>;
4055
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4056
+ }
4057
+
3960
4058
  declare class AXMessageListComponent implements OnDestroy {
3961
4059
  private readonly conversationService;
3962
4060
  private readonly messageListService;
3963
4061
  protected readonly config: AXConversationConfig;
4062
+ /**
4063
+ * Background for the message list scroll area from config, or the built-in soft gradient when unset/empty.
4064
+ * Set `messageListBackground` to `transparent` or `none` for a flat look.
4065
+ */
4066
+ messageListBackgroundStyle(): string;
3964
4067
  /** Custom avatar template for message list items */
3965
4068
  readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
3966
4069
  private readonly timeouts;
@@ -4027,7 +4130,7 @@ declare class AXMessageListComponent implements OnDestroy {
4027
4130
  /** Get forwarded text with sender and conversation info */
4028
4131
  getForwardedText(message: AXMessage): string;
4029
4132
  /** Resolve renderer component for message */
4030
- getRendererComponent(message: AXMessage): _angular_core.Type<any>;
4133
+ getRendererComponent(message: AXMessage): _angular_core.Type<_acorex_components_conversation2.AXMessageRendererComponent>;
4031
4134
  /** Provide inputs for the dynamic renderer */
4032
4135
  getRendererInputs(message: AXMessage): {
4033
4136
  message: AXMessage;
@@ -4107,8 +4210,6 @@ declare class AXMessageListComponent implements OnDestroy {
4107
4210
  * This is called when a new reply or forward is detected globally
4108
4211
  */
4109
4212
  private refreshCount;
4110
- /** Show thread view for a message */
4111
- showThread(message: AXMessage): void;
4112
4213
  /** Handle context menu opening for messages */
4113
4214
  handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
4114
4215
  /** Handle context menu item click for messages */
@@ -4179,61 +4280,8 @@ declare class AXMessageListService {
4179
4280
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
4180
4281
  }
4181
4282
 
4182
- declare class AXForwardMessageDialogComponent implements OnInit {
4183
- /** Toast service for notifications */
4184
- private readonly toastService;
4185
- /** Conversation service (passed via popup data) */
4186
- conversationService: AXConversationService;
4187
- /** Message to forward (passed via popup data) */
4188
- message: AXMessage;
4189
- /** Close event emitter for popup */
4190
- readonly onClosed: EventEmitter<AXComponentCloseEvent>;
4191
- /** Available conversations */
4192
- readonly availableConversations: _angular_core.WritableSignal<AXConversation[]>;
4193
- /** Selected conversation IDs */
4194
- readonly selectedConversationIds: _angular_core.WritableSignal<string[]>;
4195
- /** Can forward message */
4196
- readonly canForward: _angular_core.Signal<boolean>;
4197
- ngOnInit(): Promise<void>;
4198
- /** Handle cancel */
4199
- onCancel(): void;
4200
- /** Handle forward */
4201
- onForward(): Promise<void>;
4202
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXForwardMessageDialogComponent, never>;
4203
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, {}, {}, never, never, true, never>;
4204
- }
4205
-
4206
- declare class AXNewConversationDialogComponent implements OnInit {
4207
- /** Toast service for notifications */
4208
- private readonly toastService;
4209
- /** Conversation service (passed via popup data) */
4210
- conversationService: AXConversationService;
4211
- /** Close event emitter for popup */
4212
- readonly onClosed: EventEmitter<AXComponentCloseEvent>;
4213
- /** Available users */
4214
- readonly availableUsers: _angular_core.WritableSignal<AXParticipant[]>;
4215
- /** Selected user IDs */
4216
- readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
4217
- /** Group title */
4218
- groupTitle: _angular_core.WritableSignal<string>;
4219
- /** Group avatar */
4220
- groupAvatar: _angular_core.WritableSignal<string>;
4221
- /** Is group conversation */
4222
- readonly isGroupConversation: _angular_core.Signal<boolean>;
4223
- /** Can create conversation */
4224
- readonly canCreate: _angular_core.Signal<boolean>;
4225
- ngOnInit(): Promise<void>;
4226
- /** Handle cancel */
4227
- onCancel(): void;
4228
- /** Handle create */
4229
- onCreate(): Promise<void>;
4230
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXNewConversationDialogComponent, never>;
4231
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXNewConversationDialogComponent, "ax-new-conversation-dialog", never, {}, {}, never, never, true, never>;
4232
- }
4233
-
4234
4283
  declare class AXSidebarService {
4235
4284
  private readonly conversationService;
4236
- private readonly popupService;
4237
4285
  private readonly config;
4238
4286
  private get registry();
4239
4287
  readonly searchQuery: _angular_core.WritableSignal<string>;
@@ -4254,7 +4302,6 @@ declare class AXSidebarService {
4254
4302
  setActiveTab(tabId: string): void;
4255
4303
  selectConversation(conversation: AXConversation): void;
4256
4304
  getBadgeValue(tabId: string): string | undefined;
4257
- openNewConversationDialog(): Promise<AXConversation | null>;
4258
4305
  /**
4259
4306
  * Load more conversations (pagination)
4260
4307
  */
@@ -4274,6 +4321,8 @@ declare class AXSidebarService {
4274
4321
  declare class AXSidebarComponent implements OnDestroy {
4275
4322
  readonly sidebar: AXSidebarService;
4276
4323
  protected readonly config: AXConversationConfig;
4324
+ private readonly conversationService;
4325
+ private readonly popupService;
4277
4326
  /** Conversation selected event */
4278
4327
  readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
4279
4328
  /** Search debouncing */
@@ -4296,14 +4345,55 @@ declare class AXSidebarComponent implements OnDestroy {
4296
4345
  selectConversation(conversation: AXConversation): void;
4297
4346
  /** Get badge value for tab */
4298
4347
  getBadgeValue(tabId: string): string | undefined;
4299
- /** Open new conversation dialog */
4300
- onNewConversation(): Promise<void>;
4348
+ openNewConversationPopup(): Promise<void>;
4301
4349
  /** Handle infinite scroll threshold - delegate to service */
4302
4350
  onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
4303
4351
  /** Cleanup on destroy */
4304
4352
  ngOnDestroy(): void;
4305
4353
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSidebarComponent, never>;
4306
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never, never, true, never>;
4354
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never, ["ax-suffix"], true, never>;
4355
+ }
4356
+
4357
+ type NewConversationWizardStep = 'selectUsers' | 'groupDetails';
4358
+ declare class AXNewConversationDialogComponent extends AXBasePageComponent {
4359
+ conversationService: AXConversationService;
4360
+ private readonly toastService;
4361
+ /**
4362
+ * Injected by {@link AXPopupComponent} when this dialog is opened via {@link AXPopupService}.
4363
+ * Required for `setTitle` / dynamic header — {@link AXBasePageComponent#setTitle} is otherwise unset.
4364
+ */
4365
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4366
+ readonly availableUsers: _angular_core.WritableSignal<AXParticipant[]>;
4367
+ readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
4368
+ readonly groupTitle: _angular_core.WritableSignal<string>;
4369
+ readonly groupAvatar: _angular_core.WritableSignal<string>;
4370
+ readonly searchQuery: _angular_core.WritableSignal<string>;
4371
+ /** For 2+ users: step 1 = pick users, step 2 = title + avatar. */
4372
+ readonly wizardStep: _angular_core.WritableSignal<NewConversationWizardStep>;
4373
+ readonly showUserPickerStep: _angular_core.Signal<boolean>;
4374
+ readonly showGroupDetailsStep: _angular_core.Signal<boolean>;
4375
+ readonly showNextButton: _angular_core.Signal<boolean>;
4376
+ readonly showGroupBackButton: _angular_core.Signal<boolean>;
4377
+ readonly showCreateButton: _angular_core.Signal<boolean>;
4378
+ readonly canGoNextToGroupDetails: _angular_core.Signal<boolean>;
4379
+ readonly canCreate: _angular_core.Signal<boolean>;
4380
+ private readonly _resetWizardWhenSingleEffect;
4381
+ private readonly _syncPopupTitleEffect;
4382
+ readonly usersListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
4383
+ readonly usersList: _angular_core.Signal<AXListComponent>;
4384
+ readonly usersListDataSource: AXDataSource<unknown>;
4385
+ onCancel(): void;
4386
+ onSelectedUsersChange(ids: string[]): void;
4387
+ onNextToGroupDetails(): void;
4388
+ onBackFromGroupDetails(): void;
4389
+ onSearchChange(value: string): void;
4390
+ isUserSelected(id: string): boolean;
4391
+ userFromItem(item: unknown): AXParticipant | null;
4392
+ getInitials(name: string): string;
4393
+ private filteredUsers;
4394
+ onCreateConversation(): Promise<void>;
4395
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXNewConversationDialogComponent, never>;
4396
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXNewConversationDialogComponent, "ax-new-conversation-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4307
4397
  }
4308
4398
 
4309
4399
  declare class AXInfiniteScrollDirective {
@@ -4324,7 +4414,116 @@ declare class AXInfiniteScrollDirective {
4324
4414
  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>;
4325
4415
  }
4326
4416
 
4327
- declare class AXIndexedDBUserApi extends AXUserApi {
4417
+ /**
4418
+ * IndexedDB Storage Wrapper
4419
+ * Provides persistent storage for conversation data
4420
+ */
4421
+
4422
+ declare const AXConversationIndexedDbStores: {
4423
+ readonly PARTICIPANTS: "participants";
4424
+ readonly CONVERSATIONS: "conversations";
4425
+ readonly MESSAGES: "messages";
4426
+ readonly SETTINGS: "settings";
4427
+ };
4428
+ declare class AXConversationIndexedDbStorage {
4429
+ private db;
4430
+ private initPromise;
4431
+ /**
4432
+ * Initialize IndexedDB
4433
+ */
4434
+ init(): Promise<void>;
4435
+ /**
4436
+ * Get a value from a store
4437
+ */
4438
+ get<T>(storeName: string, key: string): Promise<T | undefined>;
4439
+ /**
4440
+ * Get all values from a store
4441
+ */
4442
+ getAll<T>(storeName: string): Promise<T[]>;
4443
+ /**
4444
+ * Get values by index
4445
+ */
4446
+ getAllByIndex<T>(storeName: string, indexName: string, query: IDBValidKey): Promise<T[]>;
4447
+ /**
4448
+ * Put a value into a store
4449
+ */
4450
+ put<T>(storeName: string, value: T): Promise<void>;
4451
+ /**
4452
+ * Delete a value from a store
4453
+ */
4454
+ delete(storeName: string, key: string): Promise<void>;
4455
+ /**
4456
+ * Clear all data from a store
4457
+ */
4458
+ clear(storeName: string): Promise<void>;
4459
+ getParticipant(id: string): Promise<AXParticipant | undefined>;
4460
+ getAllParticipants(): Promise<AXParticipant[]>;
4461
+ putParticipant(participant: AXParticipant): Promise<void>;
4462
+ getConversation(id: string): Promise<AXConversation | undefined>;
4463
+ getAllConversations(): Promise<AXConversation[]>;
4464
+ putConversation(conversation: AXConversation): Promise<void>;
4465
+ deleteConversation(id: string): Promise<void>;
4466
+ getMessage(id: string): Promise<AXMessage | undefined>;
4467
+ getAllMessages(): Promise<AXMessage[]>;
4468
+ getMessagesByConversation(conversationId: string): Promise<AXMessage[]>;
4469
+ putMessage(message: AXMessage): Promise<void>;
4470
+ deleteMessage(id: string): Promise<void>;
4471
+ getSetting(key: string): Promise<any>;
4472
+ putSetting(key: string, value: any): Promise<void>;
4473
+ }
4474
+ declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
4475
+
4476
+ /**
4477
+ * Shared In-Memory Storage
4478
+ * Internal storage shared between all IndexedDB API implementations
4479
+ * This is NOT a service - just a shared data structure
4480
+ */
4481
+
4482
+ declare class AXConversationSharedStorage {
4483
+ readonly connectionStatus$: BehaviorSubject<AXConnectionStatus>;
4484
+ readonly participants: Map<string, AXParticipant>;
4485
+ readonly conversations: Map<string, AXConversation>;
4486
+ readonly messages: Map<string, AXMessage>;
4487
+ readonly messagesByConversation: Map<string, string[]>;
4488
+ readonly messageStream$: Subject<AXMessage>;
4489
+ readonly messageUpdates$: Subject<AXMessage>;
4490
+ readonly messageDeletions$: Subject<string>;
4491
+ readonly typingIndicators$: Subject<AXTypingIndicator>;
4492
+ readonly presenceUpdates$: Subject<AXPresenceUpdate>;
4493
+ readonly conversationUpdates$: Subject<AXConversation>;
4494
+ readonly currentUserId = "current-user";
4495
+ private isSeeded;
4496
+ private presenceInterval?;
4497
+ private messageSimulationInterval?;
4498
+ private isLoadedFromDB;
4499
+ /**
4500
+ * Load data from IndexedDB
4501
+ */
4502
+ loadFromIndexedDB(): Promise<void>;
4503
+ /**
4504
+ * Seed initial data if not already seeded
4505
+ */
4506
+ seedIfEmpty(): Promise<void>;
4507
+ /**
4508
+ * Simulate user presence changes (online/offline/away)
4509
+ */
4510
+ private startPresenceSimulation;
4511
+ /**
4512
+ * Simulate random messages from users
4513
+ */
4514
+ private startMessageSimulation;
4515
+ /**
4516
+ * Stop presence simulation
4517
+ */
4518
+ stopPresenceSimulation(): void;
4519
+ /**
4520
+ * Stop message simulation
4521
+ */
4522
+ stopMessageSimulation(): void;
4523
+ }
4524
+ declare const conversationSharedStorage: AXConversationSharedStorage;
4525
+
4526
+ declare class AXConversationIndexedDbUserApi extends AXUserApi {
4328
4527
  getCurrentUser(): Promise<AXParticipant>;
4329
4528
  updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
4330
4529
  uploadAvatar(file: File): Promise<string>;
@@ -4340,11 +4539,11 @@ declare class AXIndexedDBUserApi extends AXUserApi {
4340
4539
  reportUser(_userId: string, _reason: AXBlockReportReason): Promise<void>;
4341
4540
  getUserSettings(): Promise<Record<string, any>>;
4342
4541
  updateUserSettings(_settings: Record<string, any>): Promise<void>;
4343
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBUserApi, never>;
4344
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBUserApi>;
4542
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbUserApi, never>;
4543
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbUserApi>;
4345
4544
  }
4346
4545
 
4347
- declare class AXIndexedDBConversationApi extends AXConversationApi {
4546
+ declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
4348
4547
  createConversation(data: AXConversationCreateData): Promise<AXConversation>;
4349
4548
  getConversation(conversationId: string): Promise<AXConversation>;
4350
4549
  getConversations(pagination: AXPagination, _filters?: AXConversationFilters): Promise<AXPaginatedResult<AXConversation>>;
@@ -4377,11 +4576,11 @@ declare class AXIndexedDBConversationApi extends AXConversationApi {
4377
4576
  saveDraft(_conversationId: string, _draft: string): Promise<void>;
4378
4577
  getDraft(_conversationId: string): Promise<string | null>;
4379
4578
  clearDraft(_conversationId: string): Promise<void>;
4380
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBConversationApi, never>;
4381
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBConversationApi>;
4579
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
4580
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
4382
4581
  }
4383
4582
 
4384
- declare class AXIndexedDBMessageApi extends AXMessageApi {
4583
+ declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
4385
4584
  sendMessage(command: AXSendMessageCommand): Promise<AXMessage>;
4386
4585
  getMessage(messageId: string): Promise<AXMessage>;
4387
4586
  getMessages(conversationId: string, pagination: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
@@ -4423,11 +4622,11 @@ declare class AXIndexedDBMessageApi extends AXMessageApi {
4423
4622
  markMessagesAsRead(_messageIds: string[]): Promise<void>;
4424
4623
  bulkDeleteMessages(_conversationId: string, _messageIds: string[], _forEveryone?: boolean): Promise<void>;
4425
4624
  exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
4426
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBMessageApi, never>;
4427
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBMessageApi>;
4625
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
4626
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
4428
4627
  }
4429
4628
 
4430
- declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
4629
+ declare class AXConversationIndexedDbRealtimeApi extends AXRealtimeApi {
4431
4630
  readonly connectionStatus$: Observable<AXConnectionStatus>;
4432
4631
  connect(_options?: AXConnectionOptions): Promise<void>;
4433
4632
  disconnect(): Promise<void>;
@@ -4477,8 +4676,8 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
4477
4676
  conversationId: string;
4478
4677
  draft: string | null;
4479
4678
  }>;
4480
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBRealtimeApi, never>;
4481
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBRealtimeApi>;
4679
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbRealtimeApi, never>;
4680
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbRealtimeApi>;
4482
4681
  }
4483
4682
 
4484
4683
  /**
@@ -4488,10 +4687,10 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
4488
4687
  * @security API key should be provided via injection token in production
4489
4688
  * @example
4490
4689
  * ```typescript
4491
- * export const AI_API_KEY = new InjectionToken<string>('AI_API_KEY');
4690
+ * export const AXConversationAiApiKey = new InjectionToken<string>('AXConversationAiApiKey');
4492
4691
  *
4493
4692
  * providers: [
4494
- * { provide: AI_API_KEY, useValue: environment.geminiApiKey }
4693
+ * { provide: AXConversationAiApiKey, useValue: environment.geminiApiKey }
4495
4694
  * ]
4496
4695
  * ```
4497
4696
  */
@@ -4500,11 +4699,11 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
4500
4699
  * Injection token for AI API key
4501
4700
  * Provide this in your app config to avoid hardcoding the API key
4502
4701
  */
4503
- declare const AI_API_KEY: InjectionToken<string>;
4702
+ declare const AXConversationAiApiKey: InjectionToken<string>;
4504
4703
  /**
4505
4704
  * Configuration for AI Responder
4506
4705
  */
4507
- interface AXAIResponderConfig {
4706
+ interface AXConversationAiResponderConfig {
4508
4707
  /** Maximum retry attempts for failed requests */
4509
4708
  maxRetries?: number;
4510
4709
  /** Timeout for API requests in milliseconds */
@@ -4512,7 +4711,7 @@ interface AXAIResponderConfig {
4512
4711
  /** Enable fallback to random replies on error */
4513
4712
  useFallbackReplies?: boolean;
4514
4713
  }
4515
- declare class AXAIResponderService {
4714
+ declare class AXConversationAiResponderService {
4516
4715
  private readonly injectedApiKey;
4517
4716
  private readonly config;
4518
4717
  /**
@@ -4547,12 +4746,12 @@ declare class AXAIResponderService {
4547
4746
  /**
4548
4747
  * Update configuration
4549
4748
  */
4550
- configure(config: Partial<AXAIResponderConfig>): void;
4551
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAIResponderService, never>;
4552
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXAIResponderService>;
4749
+ configure(config: Partial<AXConversationAiResponderConfig>): void;
4750
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAiResponderService, never>;
4751
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAiResponderService>;
4553
4752
  }
4554
4753
 
4555
- declare class AXIndexedDBMessageAIApi extends AXIndexedDBMessageApi {
4754
+ declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedDbMessageApi {
4556
4755
  private readonly aiResponder;
4557
4756
  private readonly AI_TYPING_INDICATOR_DELAY;
4558
4757
  private readonly AI_RESPONSE_DELAY;
@@ -4584,8 +4783,8 @@ declare class AXIndexedDBMessageAIApi extends AXIndexedDBMessageApi {
4584
4783
  * Delay helper
4585
4784
  */
4586
4785
  private delay;
4587
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXIndexedDBMessageAIApi, never>;
4588
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXIndexedDBMessageAIApi>;
4786
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageAiApi, never>;
4787
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
4589
4788
  }
4590
4789
 
4591
4790
  interface AudioFile {
@@ -4621,31 +4820,6 @@ declare class AXAudioPickerComponent {
4621
4820
  declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXComposerTab;
4622
4821
  declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXComposerTab;
4623
4822
 
4624
- declare class AXContactPickerComponent {
4625
- private readonly composerService;
4626
- private readonly conversationService;
4627
- readonly conversation: _angular_core.InputSignal<AXConversation>;
4628
- readonly onClose: _angular_core.OutputEmitterRef<void>;
4629
- contactName: string;
4630
- contactPhone: string;
4631
- contactEmail: string;
4632
- readonly searchQuery: _angular_core.WritableSignal<string>;
4633
- readonly selectedContact: _angular_core.WritableSignal<AXContactPayload>;
4634
- readonly allContacts: _angular_core.WritableSignal<AXContactPayload[]>;
4635
- readonly filteredContacts: _angular_core.Signal<AXContactPayload[]>;
4636
- readonly canSend: _angular_core.Signal<string | boolean>;
4637
- selectContact(contact: AXContactPayload): void;
4638
- sendContact(): Promise<void>;
4639
- cancel(): void;
4640
- getInitials(name: string): string;
4641
- /** Check if Contact Picker API is supported */
4642
- isContactPickerSupported(): boolean;
4643
- /** Open device contacts using Contact Picker API */
4644
- openDeviceContacts(): Promise<void>;
4645
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXContactPickerComponent, never>;
4646
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXContactPickerComponent, "ax-conversation-contact-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, { "onClose": "onClose"; }, never, never, true, never>;
4647
- }
4648
-
4649
4823
  interface Emoji {
4650
4824
  char: string;
4651
4825
  name: string;
@@ -4903,8 +5077,7 @@ declare class AXVoiceRecorderComponent {
4903
5077
  * - 40: Image (media)
4904
5078
  * - 50: Video (media)
4905
5079
  * - 60: Audio (media)
4906
- * - 70: Contact (special)
4907
- * - 80: Location (special)
5080
+ * - 70: Location (special)
4908
5081
  */
4909
5082
 
4910
5083
  /**
@@ -4931,10 +5104,6 @@ declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
4931
5104
  * Audio file picker action
4932
5105
  */
4933
5106
  declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
4934
- /**
4935
- * Contact picker action
4936
- */
4937
- declare const AX_CONVERSATION_COMPOSER_CONTACT_ACTION: AXComposerAction;
4938
5107
  /**
4939
5108
  * Location picker action
4940
5109
  */
@@ -4958,6 +5127,11 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
4958
5127
  activeTab: string;
4959
5128
  editTitle: string;
4960
5129
  editAvatar: string;
5130
+ readonly backgroundPresets: Array<{
5131
+ id: string;
5132
+ label: string;
5133
+ value: string;
5134
+ }>;
4961
5135
  /** Get filtered members based on search */
4962
5136
  get filteredMembers(): AXParticipant[];
4963
5137
  /** Handle tab change */
@@ -4989,6 +5163,9 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
4989
5163
  canSaveEdit(): boolean;
4990
5164
  /** Save edit */
4991
5165
  saveEdit(): Promise<void>;
5166
+ currentBackground(): string;
5167
+ isBackgroundSelected(value: string): boolean;
5168
+ applyMessageListBackground(value: string): Promise<void>;
4992
5169
  ngOnDestroy(): void;
4993
5170
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
4994
5171
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
@@ -5062,155 +5239,158 @@ declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
5062
5239
  */
5063
5240
  declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
5064
5241
 
5065
- declare class AXAudioRendererComponent {
5066
- private readonly platformId;
5067
- /** Message to render */
5242
+ /**
5243
+ * Shared UI for message bubble bodies: sending / failed (with retry) and content load errors,
5244
+ * driven by {@link AXMessageRendererState}.
5245
+ */
5246
+ declare class AXConversationMessageRendererStateComponent {
5247
+ private readonly conversation;
5248
+ readonly rendererState: _angular_core.InputSignal<AXMessageRendererState>;
5068
5249
  readonly message: _angular_core.InputSignal<AXMessage>;
5069
- /** Audio element reference */
5250
+ /** Overrides default text when {@link AXMessageRendererState.contentState} is `error`. */
5251
+ readonly contentErrorLabel: _angular_core.InputSignal<string>;
5252
+ /** Overrides default text when delivery failed. */
5253
+ readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
5254
+ /** Set false when the renderer shows content errors inline (e.g. inline media error state). */
5255
+ readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
5256
+ /** `inline` matches legacy media rows (e.g. audio): compact danger text under the player. */
5257
+ readonly contentErrorStyle: _angular_core.InputSignal<"inline" | "banner">;
5258
+ /** Icon class for content error (e.g. `fa-light fa-music` for audio). */
5259
+ readonly contentErrorIconClass: _angular_core.InputSignal<string>;
5260
+ /** `below`: render after main bubble body (typical for media). */
5261
+ readonly placement: _angular_core.InputSignal<"above" | "below">;
5262
+ readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
5263
+ readonly contentRetry: _angular_core.OutputEmitterRef<void>;
5264
+ readonly retryBusy: _angular_core.WritableSignal<boolean>;
5265
+ private readonly currentUser;
5266
+ private readonly isOwn;
5267
+ readonly showSending: _angular_core.Signal<boolean>;
5268
+ readonly showFailed: _angular_core.Signal<boolean>;
5269
+ readonly showContentError: _angular_core.Signal<boolean>;
5270
+ readonly hasVisibleChrome: _angular_core.Signal<boolean>;
5271
+ readonly showRetryButton: _angular_core.Signal<boolean>;
5272
+ readonly contentErrorText: _angular_core.Signal<string>;
5273
+ readonly deliveryFailedText: _angular_core.Signal<string>;
5274
+ onRetry(): Promise<void>;
5275
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererStateComponent, never>;
5276
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMessageRendererStateComponent, "ax-conversation-message-renderer-state", never, { "rendererState": { "alias": "rendererState"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": true; "isSignal": true; }; "contentErrorLabel": { "alias": "contentErrorLabel"; "required": false; "isSignal": true; }; "deliveryFailedLabel": { "alias": "deliveryFailedLabel"; "required": false; "isSignal": true; }; "showContentErrorChrome": { "alias": "showContentErrorChrome"; "required": false; "isSignal": true; }; "contentErrorStyle": { "alias": "contentErrorStyle"; "required": false; "isSignal": true; }; "contentErrorIconClass": { "alias": "contentErrorIconClass"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "contentRetryEnabled": { "alias": "contentRetryEnabled"; "required": false; "isSignal": true; }; }, { "contentRetry": "contentRetry"; }, never, never, true, never>;
5277
+ }
5278
+
5279
+ declare class AXAudioRendererComponent implements AXMessageRendererComponent {
5280
+ private readonly platformId;
5281
+ private readonly destroyRef;
5282
+ private readonly infoBarService;
5070
5283
  private readonly audioElementRef;
5071
- /** Playing state */
5284
+ private readonly _contentState;
5285
+ readonly message: _angular_core.InputSignal<AXMessage>;
5286
+ readonly rendererState: _angular_core.Signal<{
5287
+ deliveryStatus: AXMessageStatus;
5288
+ contentState: AXMessageRendererContentState;
5289
+ }>;
5072
5290
  readonly isPlaying: _angular_core.WritableSignal<boolean>;
5073
- /** Muted state */
5074
5291
  readonly isMuted: _angular_core.WritableSignal<boolean>;
5075
- /** Current time in seconds */
5076
5292
  readonly currentTime: _angular_core.WritableSignal<number>;
5077
- /** Duration in seconds */
5078
5293
  readonly duration: _angular_core.WritableSignal<number>;
5079
- /** Error state */
5080
- readonly error: _angular_core.WritableSignal<boolean>;
5081
- /** Audio payload */
5082
5294
  readonly payload: _angular_core.Signal<AXAudioPayload>;
5083
- /** Audio URL */
5084
5295
  readonly audioUrl: _angular_core.Signal<string>;
5085
- /** Title */
5086
5296
  readonly title: _angular_core.Signal<string>;
5087
- /** Progress percentage */
5088
5297
  readonly progress: _angular_core.Signal<number>;
5089
- /** Formatted current time */
5090
5298
  readonly currentTimeFormatted: _angular_core.Signal<string>;
5091
- /** Formatted duration */
5092
5299
  readonly durationFormatted: _angular_core.Signal<string>;
5093
5300
  constructor();
5094
- /** Toggle play/pause */
5095
5301
  togglePlay(): void;
5096
- /** Toggle mute */
5097
5302
  toggleMute(): void;
5098
- /** Handle time update */
5099
5303
  onTimeUpdate(): void;
5100
- /** Handle audio ended */
5101
5304
  onEnded(): void;
5102
- /** Handle audio error */
5103
5305
  onError(): void;
5104
- /** Handle progress bar click */
5105
5306
  onProgressClick(event: MouseEvent): void;
5106
- /** Format time (seconds to MM:SS) */
5107
- private formatTime;
5307
+ private pausePlayback;
5308
+ private syncInfoBarBanner;
5108
5309
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioRendererComponent, never>;
5109
5310
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5110
5311
  }
5111
5312
 
5112
- declare class AXContactRendererComponent {
5113
- private readonly toastService;
5114
- /** Message to render */
5313
+ declare class AXAudioInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
5115
5314
  readonly message: _angular_core.InputSignal<AXMessage>;
5116
- /** Contact payload */
5117
- readonly payload: _angular_core.Signal<AXContactPayload>;
5118
- /** Get initials from name */
5119
- getInitials(name: string): string;
5120
- /** Copy contact information to clipboard */
5121
- copyContact(): Promise<void>;
5122
- /** Format contact information as text */
5123
- private formatContactText;
5124
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXContactRendererComponent, never>;
5125
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXContactRendererComponent, "ax-conversation-contact-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5315
+ readonly title: _angular_core.InputSignal<string>;
5316
+ readonly currentTime: _angular_core.InputSignal<number>;
5317
+ readonly duration: _angular_core.InputSignal<number>;
5318
+ private readonly payload;
5319
+ readonly resolvedTitle: _angular_core.Signal<string>;
5320
+ readonly progressPercent: _angular_core.Signal<number>;
5321
+ readonly timeLabel: _angular_core.Signal<string>;
5322
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioInfoBarBannerComponent, never>;
5323
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioInfoBarBannerComponent, "ax-conversation-audio-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5126
5324
  }
5127
5325
 
5128
- declare class AXFallbackRendererComponent {
5129
- /** Message to render */
5326
+ declare class AXFallbackRendererComponent implements AXMessageRendererComponent {
5327
+ private readonly _contentState;
5130
5328
  readonly message: _angular_core.InputSignal<AXMessage>;
5131
- /** Show raw data */
5132
- readonly showRaw: _angular_core.WritableSignal<boolean>;
5133
- /** Message type label */
5329
+ readonly rendererState: _angular_core.Signal<{
5330
+ deliveryStatus: AXMessageStatus;
5331
+ contentState: AXMessageRendererContentState;
5332
+ }>;
5134
5333
  readonly messageTypeLabel: _angular_core.Signal<string>;
5135
- /** Has payload data */
5136
- readonly hasPayloadData: _angular_core.Signal<boolean>;
5137
- /** Raw payload as JSON string */
5138
- readonly rawPayload: _angular_core.Signal<string>;
5139
- /** Toggle raw data display */
5140
- toggleRaw(): void;
5334
+ /** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
5335
+ readonly fallbackDescription: _angular_core.Signal<string>;
5141
5336
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFallbackRendererComponent, never>;
5142
5337
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5143
5338
  }
5144
5339
 
5145
- declare class AXFileRendererComponent {
5146
- /** Message to render */
5340
+ declare class AXFileRendererComponent implements AXMessageRendererComponent {
5341
+ private readonly _contentState;
5147
5342
  readonly message: _angular_core.InputSignal<AXMessage>;
5148
- /** File payload */
5343
+ readonly rendererState: _angular_core.Signal<{
5344
+ deliveryStatus: AXMessageStatus;
5345
+ contentState: AXMessageRendererContentState;
5346
+ }>;
5149
5347
  readonly payload: _angular_core.Signal<AXFilePayload>;
5150
- /** File URL */
5151
5348
  readonly fileUrl: _angular_core.Signal<string>;
5152
- /** File name */
5153
5349
  readonly fileName: _angular_core.Signal<string>;
5154
- /** File size in bytes */
5155
5350
  readonly fileSize: _angular_core.Signal<number>;
5156
- /** MIME type */
5157
5351
  readonly mimeType: _angular_core.Signal<string>;
5158
- /** File extension */
5159
5352
  readonly fileExtension: _angular_core.Signal<string>;
5160
- /** File icon color based on extension */
5161
- readonly fileIconColor: _angular_core.Signal<string>;
5162
- /** Formatted file size */
5353
+ readonly swatchColor: _angular_core.Signal<string>;
5163
5354
  readonly formattedSize: _angular_core.Signal<string>;
5164
5355
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileRendererComponent, never>;
5165
5356
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5166
5357
  }
5167
5358
 
5168
- declare class AXImageRendererComponent {
5359
+ declare class AXImageRendererComponent implements AXMessageRendererComponent {
5169
5360
  private readonly platformId;
5170
- /** Message to render */
5361
+ private readonly _contentState;
5171
5362
  readonly message: _angular_core.InputSignal<AXMessage>;
5172
- /** Loading state */
5173
- readonly loading: _angular_core.WritableSignal<boolean>;
5174
- /** Error state */
5175
- readonly error: _angular_core.WritableSignal<boolean>;
5176
- /** Image clicked event */
5363
+ readonly rendererState: _angular_core.Signal<{
5364
+ deliveryStatus: AXMessageStatus;
5365
+ contentState: AXMessageRendererContentState;
5366
+ }>;
5177
5367
  readonly imageClick: _angular_core.OutputEmitterRef<string>;
5178
- /** Image payload */
5179
5368
  readonly payload: _angular_core.Signal<AXImagePayload>;
5180
- /** Thumbnail URL */
5181
5369
  readonly thumbnailUrl: _angular_core.Signal<string>;
5182
- /** Alt text */
5183
5370
  readonly alt: _angular_core.Signal<string>;
5184
- /** Caption */
5185
5371
  readonly caption: _angular_core.Signal<string>;
5186
- /** Handle image load */
5372
+ constructor();
5187
5373
  onLoad(): void;
5188
- /** Handle image error */
5189
5374
  onError(): void;
5190
- /** Handle image click */
5191
5375
  onClick(): void;
5192
5376
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageRendererComponent, never>;
5193
5377
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, { "imageClick": "imageClick"; }, never, never, true, never>;
5194
5378
  }
5195
5379
 
5196
- declare class AXLocationRendererComponent {
5197
- /** Message to render */
5380
+ declare class AXLocationRendererComponent implements AXMessageRendererComponent {
5381
+ private readonly _contentState;
5198
5382
  readonly message: _angular_core.InputSignal<AXMessage>;
5199
- /** Location payload */
5383
+ readonly rendererState: _angular_core.Signal<{
5384
+ deliveryStatus: AXMessageStatus;
5385
+ contentState: AXMessageRendererContentState;
5386
+ }>;
5200
5387
  readonly payload: _angular_core.Signal<AXLocationPayload>;
5201
- /** Latitude */
5202
5388
  readonly latitude: _angular_core.Signal<number>;
5203
- /** Longitude */
5204
5389
  readonly longitude: _angular_core.Signal<number>;
5205
- /** Location name */
5206
5390
  readonly locationName: _angular_core.Signal<string>;
5207
- /** Address */
5208
5391
  readonly address: _angular_core.Signal<string>;
5209
- /** Coordinates text */
5210
5392
  readonly coordinatesText: _angular_core.Signal<string>;
5211
- /** Google Maps URL */
5212
5393
  readonly mapsUrl: _angular_core.Signal<string>;
5213
- /** Markers for the map */
5214
5394
  readonly markers: _angular_core.Signal<{
5215
5395
  latitude: number;
5216
5396
  longitude: number;
@@ -5222,130 +5402,154 @@ declare class AXLocationRendererComponent {
5222
5402
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5223
5403
  }
5224
5404
 
5225
- declare class AXStickerRendererComponent {
5226
- /** Message to render */
5405
+ declare class AXStickerRendererComponent implements AXMessageRendererComponent {
5406
+ private readonly _contentState;
5227
5407
  readonly message: _angular_core.InputSignal<AXMessage>;
5228
- /** Loading state */
5229
- readonly loading: _angular_core.WritableSignal<boolean>;
5230
- /** Error state */
5231
- readonly error: _angular_core.WritableSignal<boolean>;
5232
- /** Sticker payload */
5408
+ readonly rendererState: _angular_core.Signal<{
5409
+ deliveryStatus: AXMessageStatus;
5410
+ contentState: AXMessageRendererContentState;
5411
+ }>;
5233
5412
  readonly payload: _angular_core.Signal<AXStickerPayload>;
5234
- /** Sticker URL */
5235
5413
  readonly stickerUrl: _angular_core.Signal<string>;
5236
- /** Alt text */
5237
5414
  readonly alt: _angular_core.Signal<string>;
5238
- /** Handle image load */
5415
+ constructor();
5239
5416
  onLoad(): void;
5240
- /** Handle image error */
5241
5417
  onError(): void;
5242
5418
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerRendererComponent, never>;
5243
5419
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5244
5420
  }
5245
5421
 
5246
- declare class AXSystemRendererComponent {
5247
- /** Message to render */
5422
+ declare class AXSystemRendererComponent implements AXMessageRendererComponent {
5423
+ private readonly _contentState;
5248
5424
  readonly message: _angular_core.InputSignal<AXMessage>;
5249
- /** System payload */
5425
+ readonly rendererState: _angular_core.Signal<{
5426
+ deliveryStatus: AXMessageStatus;
5427
+ contentState: AXMessageRendererContentState;
5428
+ }>;
5250
5429
  readonly payload: _angular_core.Signal<AXSystemPayload>;
5251
- /** Icon class based on system message type */
5252
- 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">;
5430
+ readonly iconClass: _angular_core.Signal<string>;
5253
5431
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSystemRendererComponent, never>;
5254
5432
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5255
5433
  }
5256
5434
 
5257
- declare class AXTextRendererComponent {
5435
+ declare class AXTextRendererComponent implements AXMessageRendererComponent {
5258
5436
  private readonly infoBarService;
5259
5437
  private readonly sanitizer;
5260
- /** Message to render */
5438
+ private readonly _contentState;
5261
5439
  readonly message: _angular_core.InputSignal<AXMessage>;
5262
- /** Search query from service */
5440
+ readonly rendererState: _angular_core.Signal<{
5441
+ deliveryStatus: AXMessageStatus;
5442
+ contentState: AXMessageRendererContentState;
5443
+ }>;
5263
5444
  readonly searchQuery: _angular_core.Signal<string>;
5264
- /** Formatted text with links and search highlights */
5265
5445
  readonly formattedText: _angular_core.Signal<SafeHtml>;
5266
- /** Escape HTML to prevent XSS */
5267
- private escapeHtml;
5268
- /** Convert URLs to clickable links */
5269
5446
  private linkify;
5270
- /** Highlight search query in text */
5271
5447
  private highlightSearch;
5272
5448
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTextRendererComponent, never>;
5273
5449
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5274
5450
  }
5275
5451
 
5276
- declare class AXVideoRendererComponent {
5452
+ /**
5453
+ * Video message: with thumbnail — tap poster to play inline; without thumbnail — native `<video>` only.
5454
+ */
5455
+ declare class AXVideoRendererComponent implements AXMessageRendererComponent {
5277
5456
  private readonly platformId;
5278
- /** Message to render */
5457
+ private readonly destroyRef;
5458
+ private readonly infoBarService;
5459
+ private readonly videoElementRef;
5460
+ private readonly _contentState;
5279
5461
  readonly message: _angular_core.InputSignal<AXMessage>;
5280
- /** Show video player */
5462
+ readonly rendererState: _angular_core.Signal<{
5463
+ deliveryStatus: AXMessageStatus;
5464
+ contentState: AXMessageRendererContentState;
5465
+ }>;
5281
5466
  readonly showPlayer: _angular_core.WritableSignal<boolean>;
5282
- /** Error state */
5283
- readonly error: _angular_core.WritableSignal<boolean>;
5284
- /** Video payload */
5467
+ readonly isPlaying: _angular_core.WritableSignal<boolean>;
5468
+ readonly currentTime: _angular_core.WritableSignal<number>;
5285
5469
  readonly payload: _angular_core.Signal<AXVideoPayload>;
5286
- /** Video URL */
5287
- readonly videoUrl: _angular_core.Signal<string>;
5288
- /** Thumbnail URL */
5470
+ readonly playbackUrl: _angular_core.Signal<string>;
5289
5471
  readonly thumbnailUrl: _angular_core.Signal<string>;
5290
- /** Duration in seconds */
5472
+ readonly hasThumbnail: _angular_core.Signal<boolean>;
5291
5473
  readonly duration: _angular_core.Signal<number>;
5292
- /** Caption */
5293
5474
  readonly caption: _angular_core.Signal<string>;
5294
- /** Play video */
5475
+ readonly durationLabel: _angular_core.Signal<string>;
5476
+ readonly showDurationBadge: _angular_core.Signal<boolean>;
5477
+ readonly playAriaLabel: _angular_core.Signal<string>;
5478
+ constructor();
5295
5479
  playVideo(): void;
5296
- /** Handle video error */
5480
+ onPlay(): void;
5481
+ onPause(): void;
5482
+ onTimeUpdate(): void;
5483
+ onEnded(): void;
5484
+ onThumbLoad(): void;
5485
+ onThumbError(): void;
5486
+ onVideoLoaded(): void;
5297
5487
  onError(): void;
5298
- /** Format duration (seconds to MM:SS) */
5299
- formatDuration(seconds: number): string;
5488
+ private pausePlayback;
5489
+ private syncInfoBarBanner;
5300
5490
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoRendererComponent, never>;
5301
5491
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5302
5492
  }
5303
5493
 
5304
- declare class AXVoiceRendererComponent {
5305
- private readonly platformId;
5306
- /** Message to render */
5494
+ declare class AXVideoInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
5307
5495
  readonly message: _angular_core.InputSignal<AXMessage>;
5308
- /** Audio element reference */
5496
+ readonly title: _angular_core.InputSignal<string>;
5497
+ readonly currentTime: _angular_core.InputSignal<number>;
5498
+ readonly duration: _angular_core.InputSignal<number>;
5499
+ private readonly payload;
5500
+ readonly resolvedTitle: _angular_core.Signal<string>;
5501
+ readonly progressPercent: _angular_core.Signal<number>;
5502
+ readonly timeLabel: _angular_core.Signal<string>;
5503
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoInfoBarBannerComponent, never>;
5504
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoInfoBarBannerComponent, "ax-conversation-video-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5505
+ }
5506
+
5507
+ declare class AXVoiceRendererComponent implements AXMessageRendererComponent {
5508
+ private readonly platformId;
5509
+ private readonly destroyRef;
5510
+ private readonly infoBarService;
5309
5511
  private readonly audioElementRef;
5310
- /** Playing state */
5512
+ private readonly _contentState;
5513
+ readonly message: _angular_core.InputSignal<AXMessage>;
5514
+ readonly rendererState: _angular_core.Signal<{
5515
+ deliveryStatus: AXMessageStatus;
5516
+ contentState: AXMessageRendererContentState;
5517
+ }>;
5311
5518
  readonly isPlaying: _angular_core.WritableSignal<boolean>;
5312
- /** Current time in seconds */
5313
5519
  readonly currentTime: _angular_core.WritableSignal<number>;
5314
- /** Duration in seconds */
5315
5520
  readonly duration: _angular_core.WritableSignal<number>;
5316
- /** Error state */
5317
- readonly error: _angular_core.WritableSignal<boolean>;
5318
- /** Playback speed */
5319
5521
  readonly playbackSpeed: _angular_core.WritableSignal<number>;
5320
- /** Available playback speeds */
5321
5522
  private readonly speeds;
5322
- /** Voice payload */
5323
5523
  readonly payload: _angular_core.Signal<AXVoicePayload>;
5324
- /** Voice URL */
5325
5524
  readonly voiceUrl: _angular_core.Signal<string>;
5326
- /** Waveform data (simplified visualization) */
5327
5525
  readonly waveformBars: _angular_core.Signal<number[]>;
5328
- /** Active bar index based on progress */
5329
5526
  readonly activeBarIndex: _angular_core.Signal<number>;
5330
- /** Formatted current time or duration */
5331
- readonly currentTimeFormatted: _angular_core.Signal<string>;
5527
+ readonly timeLabel: _angular_core.Signal<string>;
5332
5528
  constructor();
5333
- /** Toggle play/pause */
5334
5529
  togglePlay(): void;
5335
- /** Cycle through playback speeds */
5336
5530
  cyclePlaybackSpeed(): void;
5337
- /** Handle time update */
5338
5531
  onTimeUpdate(): void;
5339
- /** Handle audio ended */
5340
5532
  onEnded(): void;
5341
- /** Handle audio error */
5342
5533
  onError(): void;
5343
- /** Format time (seconds to MM:SS) */
5344
- private formatTime;
5534
+ private pausePlayback;
5535
+ private syncInfoBarBanner;
5345
5536
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRendererComponent, never>;
5346
5537
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5347
5538
  }
5348
5539
 
5540
+ declare class AXVoiceInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
5541
+ readonly message: _angular_core.InputSignal<AXMessage>;
5542
+ readonly title: _angular_core.InputSignal<string>;
5543
+ readonly currentTime: _angular_core.InputSignal<number>;
5544
+ readonly duration: _angular_core.InputSignal<number>;
5545
+ private readonly payload;
5546
+ readonly resolvedTitle: _angular_core.Signal<string>;
5547
+ readonly progressPercent: _angular_core.Signal<number>;
5548
+ readonly timeLabel: _angular_core.Signal<string>;
5549
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceInfoBarBannerComponent, never>;
5550
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceInfoBarBannerComponent, "ax-conversation-voice-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5551
+ }
5552
+
5349
5553
  /**
5350
5554
  * Default Message Actions Plugin
5351
5555
  * Individual message action constants
@@ -5385,7 +5589,6 @@ declare const AX_CONVERSATION_VOICE_RENDERER: AXMessageRenderer;
5385
5589
  declare const AX_CONVERSATION_FILE_RENDERER: AXMessageRenderer;
5386
5590
  declare const AX_CONVERSATION_LOCATION_RENDERER: AXMessageRenderer;
5387
5591
  declare const AX_CONVERSATION_STICKER_RENDERER: AXMessageRenderer;
5388
- declare const AX_CONVERSATION_CONTACT_RENDERER: AXMessageRenderer;
5389
5592
  declare const AX_CONVERSATION_SYSTEM_RENDERER: AXMessageRenderer;
5390
5593
  declare const AX_CONVERSATION_FALLBACK_RENDERER: AXMessageRenderer;
5391
5594
 
@@ -5477,19 +5680,19 @@ declare class AXConversation2Module {
5477
5680
  * @example
5478
5681
  * ```typescript
5479
5682
  * import {
5480
- * AXIndexedDBUserApi,
5481
- * AXIndexedDBConversationApi,
5482
- * AXIndexedDBMessageApi,
5483
- * AXIndexedDBRealtimeApi
5683
+ * AXConversationIndexedDbUserApi,
5684
+ * AXConversationIndexedDbConversationApi,
5685
+ * AXConversationIndexedDbMessageApi,
5686
+ * AXConversationIndexedDbRealtimeApi
5484
5687
  * } from '@acorex/components/conversation2';
5485
5688
  *
5486
5689
  * export const appConfig: ApplicationConfig = {
5487
5690
  * providers: [
5488
5691
  * provideConversation({
5489
- * userApi: AXIndexedDBUserApi,
5490
- * conversationApi: AXIndexedDBConversationApi,
5491
- * messageApi: AXIndexedDBMessageApi,
5492
- * realtimeApi: AXIndexedDBRealtimeApi,
5692
+ * userApi: AXConversationIndexedDbUserApi,
5693
+ * conversationApi: AXConversationIndexedDbConversationApi,
5694
+ * messageApi: AXConversationIndexedDbMessageApi,
5695
+ * realtimeApi: AXConversationIndexedDbRealtimeApi,
5493
5696
  * config: { },
5494
5697
  * registry: { messageActions: [myCustomAction] }
5495
5698
  * })
@@ -6136,5 +6339,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
6136
6339
  */
6137
6340
  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'];
6138
6341
 
6139
- export { AI_API_KEY, AXAIResponderService, AXAudioPickerComponent, AXAudioRendererComponent, AXBaseRegistry, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXContactPickerComponent, AXContactRendererComponent, AXConversation2Module, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageUtilsService, AXConversationService, AXConversationStoreService, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFallbackRendererComponent, AXFilePickerComponent, AXFileRendererComponent, AXFileUploadService, AXForwardMessageDialogComponent, AXImagePickerComponent, AXImageRendererComponent, AXIndexedDBConversationApi, AXIndexedDBMessageAIApi, AXIndexedDBMessageApi, AXIndexedDBRealtimeApi, AXIndexedDBUserApi, AXInfiniteScrollDirective, AXInfoBarActionRegistry, AXInfoBarComponent, AXInfoBarSearchComponent, AXInfoBarService, AXLocationPickerComponent, AXLocationRendererComponent, AXMessageActionRegistry, AXMessageApi, AXMessageListComponent, AXMessageListService, AXMessageRendererRegistry, AXNewConversationDialogComponent, AXPickerFooterComponent, AXPickerHeaderComponent, AXRealtimeApi, AXRegistryService, AXSidebarComponent, AXSidebarService, AXStickerRendererComponent, AXStickerTabComponent, AXSystemRendererComponent, AXTextRendererComponent, AXUserApi, AXVideoPickerComponent, AXVideoRendererComponent, AXVoiceRecorderComponent, AXVoiceRendererComponent, 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, CONNECTION_ERRORS, CONVERSATION_CONFIG, CONVERSATION_ERRORS, 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, LOCATION_ERRORS, MESSAGE_ERRORS, PERMISSION_ERRORS, REGISTRY_CONFIG, URL_ERRORS, USER_ERRORS, formatErrorMessage, getDefaultConversationItemActions, getErrorMessage, mergeWithDefaults, provideConversation, sanitizeInput, validateConversationId, validateEmail, validateFile, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
6140
- 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 };
6342
+ export { AXAudioInfoBarBannerComponent, AXAudioPickerComponent, AXAudioRendererComponent, AXBaseRegistry, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXConversation2Module, AXConversationAiApiKey, AXConversationAiResponderService, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationService, AXConversationSharedStorage, AXConversationStoreService, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFallbackRendererComponent, AXFilePickerComponent, AXFileRendererComponent, AXFileUploadService, AXForwardMessageDialogComponent, AXImagePickerComponent, AXImageRendererComponent, AXInfiniteScrollDirective, AXInfoBarActionRegistry, AXInfoBarComponent, AXInfoBarSearchComponent, AXInfoBarService, AXLocationPickerComponent, AXLocationRendererComponent, AXMessageActionRegistry, AXMessageApi, AXMessageListComponent, AXMessageListService, AXMessageRendererRegistry, AXNewConversationDialogComponent, AXPickerFooterComponent, AXPickerHeaderComponent, AXRealtimeApi, AXRegistryService, AXSidebarComponent, AXSidebarService, AXStickerRendererComponent, AXStickerTabComponent, AXSystemRendererComponent, AXTextRendererComponent, AXUserApi, AXVideoInfoBarBannerComponent, AXVideoPickerComponent, AXVideoRendererComponent, AXVoiceInfoBarBannerComponent, AXVoiceRecorderComponent, AXVoiceRendererComponent, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_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, CONNECTION_ERRORS, CONVERSATION_CONFIG, CONVERSATION_ERRORS, 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, LOCATION_ERRORS, MESSAGE_ERRORS, PERMISSION_ERRORS, REGISTRY_CONFIG, URL_ERRORS, USER_ERRORS, axConversationIndexedDbStorage, conversationSharedStorage, formatErrorMessage, getDefaultConversationItemActions, getErrorMessage, mergeWithDefaults, provideConversation, sanitizeInput, validateConversationId, validateEmail, validateFile, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
6343
+ export type { AXApiError, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXComposerAction, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXConversation, AXConversationAiResponderConfig, AXConversationConfig, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationItemAction, AXConversationItemActionContext, AXConversationMetadata, AXConversationOptions, AXConversationPermissions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXDeleteMessageCommand, AXEditMessageCommand, AXErrorCode, AXErrorHandlerConfig, AXErrorMessage, AXErrorSeverity, AXFilePayload, AXFileValidationResult, AXGroupedReaction, AXImagePayload, AXInfoBarAction, AXInfoBarActionContext, AXInfoBarActiveBanner, AXInfoBarActiveComponent, AXLink, AXLinkPreview, AXLocationPayload, AXMention, AXMessage, AXMessageAction, AXMessageActionContext, AXMessageAvatarTemplateContext, AXMessageForwardData, AXMessageInfoBarBannerComponent, AXMessagePayload, AXMessageRenderer, AXMessageRendererCapabilities, AXMessageRendererComponent, AXMessageRendererContentState, AXMessageRendererState, 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 };