@acorex/components 22.1.0-next.12 → 22.1.0-next.14

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,18 +1,20 @@
1
1
  import * as _acorex_components_conversation from '@acorex/components/conversation';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, InjectionToken, ModuleWithProviders } from '@angular/core';
4
- import { AXComponentCloseEvent, AXHtmlEvent, AXClickEvent, AXDataSource, AXPlacement, AXClosableComponent } from '@acorex/cdk/common';
3
+ import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, ElementRef, InjectionToken, ModuleWithProviders } from '@angular/core';
4
+ import { AXComponentCloseEvent, AXHtmlEvent, AXClickEvent, AXDataSource, AXPlacement } from '@acorex/cdk/common';
5
+ import * as _acorex_components_action_sheet from '@acorex/components/action-sheet';
6
+ import { AXActionSheetRef } from '@acorex/components/action-sheet';
5
7
  import * as _acorex_components_popup from '@acorex/components/popup';
6
8
  import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
7
9
  import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
8
10
  import { AXListComponent } from '@acorex/components/list';
9
11
  import * as rxjs from 'rxjs';
10
- import { Observable, BehaviorSubject, Subject } from 'rxjs';
12
+ import { Observable } from 'rxjs';
11
13
  import { AXDialogService } from '@acorex/components/dialog';
12
14
  import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
13
15
  import { AXBasePageComponent } from '@acorex/components/page';
14
16
  import * as _acorex_core_file from '@acorex/core/file';
15
- import { AXFileTypeInfoProvider, AXFileType, AXFileService, AXFileTypeRegistryService, AXFileTypeExtensionHint, AXFileTypeOpenContext } from '@acorex/core/file';
17
+ import { AXFileTypeInfoProvider, AXFileType, AXFileTypeRegistryService, AXFileService, AXFileTypeExtensionHint, AXFileTypeOpenContext } from '@acorex/core/file';
16
18
  import { AXTranslationService } from '@acorex/core/translation';
17
19
  import { AXToastService } from '@acorex/components/toast';
18
20
  import { AXValidationRuleResult } from '@acorex/core/validation';
@@ -673,22 +675,17 @@ declare abstract class AXConversationBaseRegistry<T extends AXConversationRegist
673
675
  protected abstract getRegistryName(): string;
674
676
  }
675
677
 
676
- /**
677
- * Active component state in composer
678
- */
679
- interface AXConversationComposerActiveComponent {
680
- /** Action that triggered this component */
681
- action: AXConversationComposerAction;
682
- /** Component to render */
683
- component?: Type<unknown>;
684
- /** Lazy loader for the component */
685
- componentLoader?: () => Promise<Type<unknown>>;
686
- /** Component inputs */
687
- inputs?: Record<string, unknown>;
688
- }
678
+ /** Primary composer button mode (send / cancel / stopping / default action / locked). */
679
+ type AXConversationComposerPrimaryButtonMode = 'send' | 'cancel' | 'stopping' | 'default-action' | 'locked';
689
680
  declare class AXConversationComposerService {
690
681
  private readonly conversationService;
682
+ private readonly generationState;
691
683
  private readonly translation;
684
+ private readonly popupService;
685
+ private readonly actionSheetService;
686
+ private readonly platform;
687
+ private readonly config;
688
+ private readonly _activeActionOverlay;
692
689
  private get registry();
693
690
  private readonly _replyMessage;
694
691
  private readonly _editMessage;
@@ -696,9 +693,6 @@ declare class AXConversationComposerService {
696
693
  readonly editMessage: _angular_core.Signal<AXConversationMessage>;
697
694
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
698
695
  readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
699
- /** Active component being shown in composer (full-width mode) */
700
- private readonly _activeComponent;
701
- readonly activeComponent: _angular_core.Signal<AXConversationComposerActiveComponent>;
702
696
  /** Draft text */
703
697
  readonly draftText: _angular_core.WritableSignal<string>;
704
698
  /** Attachments */
@@ -712,8 +706,14 @@ declare class AXConversationComposerService {
712
706
  readonly placeholder: _angular_core.Signal<string>;
713
707
  /** Number of input rows */
714
708
  readonly inputRows: _angular_core.Signal<number>;
715
- /** Can send message */
709
+ /** Can send message (draft has content; does not include generation state). */
716
710
  readonly canSend: _angular_core.Signal<boolean>;
711
+ /** Whether a background generation (e.g. AI response) is in progress. */
712
+ readonly isGenerating: _angular_core.Signal<boolean>;
713
+ /** Whether cancel cleanup is in progress (spinner on primary button). */
714
+ readonly isStopping: _angular_core.Signal<boolean>;
715
+ /** Primary end-button mode for send / cancel / stopping / voice / locked. */
716
+ readonly primaryButtonMode: _angular_core.Signal<AXConversationComposerPrimaryButtonMode>;
717
717
  /** Composer action context */
718
718
  readonly actionContext: _angular_core.Signal<AXConversationComposerActionContext>;
719
719
  /** Start actions from registry */
@@ -730,6 +730,7 @@ declare class AXConversationComposerService {
730
730
  readonly endMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
731
731
  /** Default end action (voice/send morph button) */
732
732
  readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
733
+ cancelGeneration(): void;
733
734
  startReply(message: AXConversationMessage): void;
734
735
  startEdit(message: AXConversationMessage): void;
735
736
  /** Focus the composer text area when the composer component is mounted. */
@@ -746,17 +747,16 @@ declare class AXConversationComposerService {
746
747
  */
747
748
  clearComposerInput(conversationId?: string): void;
748
749
  /**
749
- * Show a component in the composer (full-width mode)
750
+ * Open a composer action component in a popup (desktop) or action sheet (mobile).
750
751
  */
751
- showComponent(action: AXConversationComposerAction, inputs?: Record<string, unknown>): void;
752
+ openActionComponent(action: AXConversationComposerAction, inputs?: Record<string, unknown>, options?: {
753
+ toggleable?: boolean;
754
+ initialFiles?: File[];
755
+ }): Promise<void>;
752
756
  /**
753
- * Hide the active component
757
+ * Hide the active action overlay.
754
758
  */
755
759
  hideComponent(): void;
756
- /**
757
- * Toggle component visibility
758
- */
759
- toggleComponent(action: AXConversationComposerAction, inputs?: Record<string, unknown>): void;
760
760
  /**
761
761
  * Get actions for the active conversation
762
762
  */
@@ -797,6 +797,10 @@ interface AXConversationComposerActionContext {
797
797
  isReplying: boolean;
798
798
  /** Message being replied to (if any) */
799
799
  replyingToMessageId?: string;
800
+ /** Whether a background generation (e.g. AI response) is in progress */
801
+ isGenerating?: boolean;
802
+ /** Whether cancel cleanup is in progress */
803
+ isStopping?: boolean;
800
804
  /** Custom context data */
801
805
  custom?: Record<string, unknown>;
802
806
  }
@@ -813,6 +817,15 @@ interface AXConversationComposerActionComponent {
813
817
  readonly initialFiles?: InputSignal<File[]>;
814
818
  /** Set by {@link AXPopupService} when the picker is shown in a popup. */
815
819
  readonly __popup__?: InputSignal<_acorex_components_popup.AXPopupRef | undefined>;
820
+ /** Set by {@link AXActionSheetService} when the picker is shown in an action sheet. */
821
+ readonly __actionSheet__?: InputSignal<_acorex_components_action_sheet.AXActionSheetRef | undefined>;
822
+ /**
823
+ * When true (from action {@link AXConversationComposerAction.autoRun}), runs {@link activate}
824
+ * once after the component is mounted.
825
+ */
826
+ readonly autoRun?: InputSignal<boolean>;
827
+ /** Primary action when opened from the composer (record, browse files, etc.). */
828
+ activate?(): void | Promise<void>;
816
829
  /** Cancel in-flight uploads when the picker is closed or replaced. */
817
830
  abortInProgressUploads?(): void;
818
831
  }
@@ -848,6 +861,11 @@ interface AXConversationComposerAction extends Omit<AXConversationRegistryItem,
848
861
  * Whether this action is toggleable (shows/hides component)
849
862
  */
850
863
  toggleable?: boolean;
864
+ /**
865
+ * When true, runs {@link AXConversationComposerActionComponent.activate} in
866
+ * {@link afterNextRender} after the upload panel is mounted.
867
+ */
868
+ autoRun?: boolean;
851
869
  /** Action handler (optional if component is provided) */
852
870
  handler?: (context: AXConversationComposerActionContext) => void | Promise<void>;
853
871
  /** Tooltip text */
@@ -1326,10 +1344,6 @@ declare class AXConversationInfoBarService {
1326
1344
  * Reset info-bar overlays when the active conversation changes.
1327
1345
  */
1328
1346
  onConversationChanged(): void;
1329
- /**
1330
- * Open the Telegram-style conversation info panel for the active (or given) conversation.
1331
- */
1332
- openConversationInfoPanel(conversation?: AXConversation): Promise<void>;
1333
1347
  /**
1334
1348
  * Get actions for the active conversation
1335
1349
  */
@@ -1433,7 +1447,7 @@ interface AXConversationInfoBarAction extends AXConversationRegistryItem {
1433
1447
  /** Whether this is a divider */
1434
1448
  divider?: boolean;
1435
1449
  /** Display location: 'inline' for toolbar buttons, 'menu' for dropdown menu */
1436
- location?: 'inline' | 'menu';
1450
+ location?: 'inline' | 'menu' | ((context: AXConversationInfoBarActionContext) => 'inline' | 'menu');
1437
1451
  /**
1438
1452
  * Component to show when action is activated (for inline actions)
1439
1453
  * If provided, clicking the action will show this component in the info-bar
@@ -1483,6 +1497,10 @@ declare class AXConversationInfoBarActionRegistry extends AXConversationBaseRegi
1483
1497
  * Get actions for a specific conversation
1484
1498
  */
1485
1499
  getActionsForConversation(conversation: AXConversation, location?: 'inline' | 'menu'): AXConversationInfoBarAction[];
1500
+ /**
1501
+ * Resolve the display location for an action (supports dynamic location factories).
1502
+ */
1503
+ getActionLocation(action: AXConversationInfoBarAction, conversation: AXConversation): 'inline' | 'menu' | undefined;
1486
1504
  /**
1487
1505
  * Get inline actions (toolbar buttons)
1488
1506
  */
@@ -1622,6 +1640,8 @@ declare class AXConversationComposerComponent implements OnDestroy {
1622
1640
  readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
1623
1641
  /** Message sent event */
1624
1642
  readonly messageSent: _angular_core.OutputEmitterRef<AXConversationSendMessageCommand>;
1643
+ /** Emitted when the user cancels an in-progress generation from the composer. */
1644
+ readonly generationCancelled: _angular_core.OutputEmitterRef<void>;
1625
1645
  /** Emoji clicked event */
1626
1646
  readonly emojiClick: _angular_core.OutputEmitterRef<void>;
1627
1647
  /** Attach clicked event */
@@ -1631,8 +1651,6 @@ declare class AXConversationComposerComponent implements OnDestroy {
1631
1651
  /** Active conversation */
1632
1652
  readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
1633
1653
  readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
1634
- /** Active component from service */
1635
- readonly activeComponent: _angular_core.Signal<_acorex_components_conversation.AXConversationComposerActiveComponent>;
1636
1654
  /** Emoji popover state */
1637
1655
  private readonly emojiPopoverRef;
1638
1656
  readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
@@ -1650,6 +1668,12 @@ declare class AXConversationComposerComponent implements OnDestroy {
1650
1668
  readonly inputRows: _angular_core.Signal<number>;
1651
1669
  /** Can send message - use service */
1652
1670
  readonly canSend: _angular_core.Signal<boolean>;
1671
+ /** Whether AI/generation is in progress */
1672
+ readonly isGenerating: _angular_core.Signal<boolean>;
1673
+ /** Whether cancel cleanup is in progress */
1674
+ readonly isStopping: _angular_core.Signal<boolean>;
1675
+ /** Primary button mode */
1676
+ readonly primaryButtonMode: _angular_core.Signal<_acorex_components_conversation.AXConversationComposerPrimaryButtonMode>;
1653
1677
  /** Start actions from registry - use service */
1654
1678
  readonly startActions: _angular_core.Signal<AXConversationComposerAction[]>;
1655
1679
  /** End actions from registry - use service */
@@ -1690,9 +1714,14 @@ declare class AXConversationComposerComponent implements OnDestroy {
1690
1714
  onAttachPopoverClosed(): void;
1691
1715
  /** Handle attachment menu action selection */
1692
1716
  onAttachMenuAction(actionId: string): Promise<void>;
1693
- /** Handle default action click (voice when empty, send when has content) */
1717
+ /** Handle primary button click (send / cancel / stopping / voice / locked). */
1718
+ onPrimaryButtonClick(): Promise<void>;
1719
+ /** @deprecated Use onPrimaryButtonClick */
1694
1720
  onDefaultActionClick(): Promise<void>;
1695
- /** Icon for the default morph button */
1721
+ getPrimaryButtonIcon(): string;
1722
+ getPrimaryButtonLabel(): string;
1723
+ isPrimaryButtonDisabled(): boolean;
1724
+ /** @deprecated Use getPrimaryButtonIcon */
1696
1725
  getDefaultActionIcon(): string;
1697
1726
  /** Handle voice click */
1698
1727
  onVoiceClick(): void;
@@ -1708,7 +1737,7 @@ declare class AXConversationComposerComponent implements OnDestroy {
1708
1737
  private focusTextArea;
1709
1738
  private getClickTarget;
1710
1739
  /** Handle action click */
1711
- onActionClick(actionId: string, event?: AXClickEvent | MouseEvent): Promise<void>;
1740
+ onActionClick(actionId: string, event?: AXClickEvent | MouseEvent, initialFiles?: File[]): Promise<void>;
1712
1741
  /** Check if action is enabled */
1713
1742
  isActionEnabled(action: any): boolean;
1714
1743
  /** Get replying sender name */
@@ -1739,13 +1768,11 @@ declare class AXConversationComposerComponent implements OnDestroy {
1739
1768
  }): string;
1740
1769
  /** Handle reply preview click - scroll to original message */
1741
1770
  onReplyPreviewClick(): void;
1742
- /** Inputs for picker / full-width composer components */
1771
+ /** Inputs for picker components opened in popup / action sheet */
1743
1772
  private buildPickerInputs;
1744
- /** Get inputs for dynamic component */
1745
- getComponentInputs(): Record<string, unknown>;
1746
1773
  onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
1747
1774
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerComponent, never>;
1748
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
1775
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "generationCancelled": "generationCancelled"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
1749
1776
  }
1750
1777
 
1751
1778
  declare class AXConversationContainerComponent {
@@ -1754,6 +1781,8 @@ declare class AXConversationContainerComponent {
1754
1781
  private readonly fileService;
1755
1782
  private readonly translation;
1756
1783
  private readonly toast;
1784
+ private readonly platform;
1785
+ private readonly actionSheetService;
1757
1786
  private readonly hostRef;
1758
1787
  private readonly platformId;
1759
1788
  protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
@@ -1787,6 +1816,8 @@ declare class AXConversationContainerDirective {
1787
1816
  private readonly platformId;
1788
1817
  private readonly translation;
1789
1818
  private readonly toast;
1819
+ private readonly platform;
1820
+ private readonly actionSheetService;
1790
1821
  private readonly config;
1791
1822
  constructor();
1792
1823
  private get registry();
@@ -1814,7 +1845,12 @@ interface AXConversationDropdownMenuItem {
1814
1845
  declare class AXConversationInfoBarComponent {
1815
1846
  private readonly conversationService;
1816
1847
  private readonly infoBar;
1848
+ private readonly platform;
1849
+ private readonly destroyRef;
1817
1850
  private readonly customUserAvatarComponent;
1851
+ /** Bumps when viewport changes so dynamic action locations re-resolve. */
1852
+ private readonly layoutTick;
1853
+ constructor();
1818
1854
  protected get registry(): _acorex_components_conversation.AXConversationRegistryService;
1819
1855
  /** Whether a custom user avatar component is registered via conversation config. */
1820
1856
  readonly hasCustomUserAvatar: _angular_core.Signal<boolean>;
@@ -1828,10 +1864,8 @@ declare class AXConversationInfoBarComponent {
1828
1864
  readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
1829
1865
  /** Loading state for async actions */
1830
1866
  readonly actionLoading: _angular_core.WritableSignal<boolean>;
1831
- /** Info area clicked — opens conversation profile panel */
1867
+ /** Info area clicked event host apps can open a custom conversation details UI */
1832
1868
  readonly infoClick: _angular_core.OutputEmitterRef<void>;
1833
- /** @deprecated Use infoClick — kept for backward compatibility */
1834
- readonly avatarClick: _angular_core.OutputEmitterRef<void>;
1835
1869
  /** Search clicked event */
1836
1870
  readonly searchClick: _angular_core.OutputEmitterRef<void>;
1837
1871
  /** Search query changed event */
@@ -1839,17 +1873,18 @@ declare class AXConversationInfoBarComponent {
1839
1873
  /** Menu item clicked event */
1840
1874
  readonly menuItemAction: _angular_core.OutputEmitterRef<string>;
1841
1875
  /** Inline action buttons from registry */
1842
- readonly inlineActions: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarAction[]>;
1876
+ readonly inlineActions: _angular_core.Signal<AXConversationInfoBarAction[]>;
1843
1877
  /** Dropdown menu items from registry */
1844
1878
  readonly menuItems: _angular_core.Signal<AXConversationDropdownMenuItem[]>;
1845
1879
  /** Get conversation status - delegate to utils */
1846
1880
  getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
1847
1881
  /** Get subtitle text - delegate to utils */
1848
1882
  getSubtitle(conversation: AXConversation): string;
1849
- /** Open conversation info panel when the left info area is clicked */
1883
+ /** Info area clicked emits for host apps to open a custom conversation details UI */
1850
1884
  onInfoLeftClick(): void;
1851
1885
  /** Handle inline action click */
1852
1886
  onInlineActionClick(actionId: string): Promise<void>;
1887
+ private activateAction;
1853
1888
  /** Get inputs for dynamic component */
1854
1889
  getComponentInputs(): Record<string, unknown>;
1855
1890
  getInlineComponentInputs(): Record<string, unknown>;
@@ -1861,7 +1896,7 @@ declare class AXConversationInfoBarComponent {
1861
1896
  /** Handle menu item click */
1862
1897
  onMenuItemClick(item: AXConversationDropdownMenuItem): Promise<void>;
1863
1898
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarComponent, never>;
1864
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
1899
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
1865
1900
  }
1866
1901
 
1867
1902
  /**
@@ -3168,6 +3203,27 @@ declare abstract class AXConversationUserApi {
3168
3203
  protected createError(code: string, message: string, statusCode?: number, details?: unknown): AXConversationApiError;
3169
3204
  }
3170
3205
 
3206
+ type AXConversationComposerGenerationPhase = 'idle' | 'generating' | 'stopping';
3207
+ declare class AXConversationComposerGenerationStateService {
3208
+ private readonly _phase;
3209
+ private readonly _cancelled$;
3210
+ /** Current generation lifecycle phase. */
3211
+ readonly phase: _angular_core.Signal<AXConversationComposerGenerationPhase>;
3212
+ /** Whether a background generation (e.g. AI response) is in progress. */
3213
+ readonly isGenerating: _angular_core.Signal<boolean>;
3214
+ /** Whether generation is being cancelled (spinner / locked until API finishes). */
3215
+ readonly isStopping: _angular_core.Signal<boolean>;
3216
+ /** Whether generation or stop-cleanup is in progress. */
3217
+ readonly isBusy: _angular_core.Signal<boolean>;
3218
+ /** Emits when the user presses the composer cancel/stop button. */
3219
+ readonly onCancelled: rxjs.Observable<void>;
3220
+ setGenerating(value: boolean): void;
3221
+ /** User requested cancel — enters `stopping` until {@link setGenerating}(false) is called. */
3222
+ cancel(): void;
3223
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerGenerationStateService, never>;
3224
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationComposerGenerationStateService>;
3225
+ }
3226
+
3171
3227
  /**
3172
3228
  * Central Registry Service
3173
3229
  * Provides unified access to all registries
@@ -3234,6 +3290,13 @@ declare class AXConversationService {
3234
3290
  private readonly destroy$;
3235
3291
  /** Registry service - exposed for child services */
3236
3292
  readonly registry: AXConversationRegistryService;
3293
+ private readonly composerGenerationState;
3294
+ /** Whether the composer primary button is in cancel (generation) mode. */
3295
+ readonly isGenerating: _angular_core.Signal<boolean>;
3296
+ /** Whether cancel cleanup is in progress. */
3297
+ readonly isStopping: _angular_core.Signal<boolean>;
3298
+ /** Emits when the user cancels an in-progress generation from the composer. */
3299
+ readonly onGenerationCancelled: rxjs.Observable<void>;
3237
3300
  private readonly _activeConversationId;
3238
3301
  private readonly _loading;
3239
3302
  private readonly _loadingActiveMessages;
@@ -3340,6 +3403,7 @@ declare class AXConversationService {
3340
3403
  * Resolve a media reference to a playback/download URL.
3341
3404
  */
3342
3405
  resolveMediaUrl(reference: AXConversationUploaderReference, signal?: AbortSignal): Promise<string>;
3406
+ private resolveReplyTo;
3343
3407
  /**
3344
3408
  * Send a message
3345
3409
  * Uses optimistic UI updates - message appears immediately
@@ -3390,6 +3454,15 @@ declare class AXConversationService {
3390
3454
  * Marks messages locally and syncs with server
3391
3455
  */
3392
3456
  markAsRead(conversationId: string): Promise<void>;
3457
+ /**
3458
+ * Set composer generation mode (shows cancel button instead of send/voice).
3459
+ * Call from message APIs while an AI or async response is in progress.
3460
+ */
3461
+ setGenerating(value: boolean): void;
3462
+ /**
3463
+ * Cancel an in-progress generation from the composer UI or programmatically.
3464
+ */
3465
+ cancelGeneration(): void;
3393
3466
  /**
3394
3467
  * Send typing indicator
3395
3468
  * Non-critical operation, doesn't throw on failure
@@ -3829,6 +3902,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
3829
3902
  private readonly translation;
3830
3903
  private readonly document;
3831
3904
  private readonly platform;
3905
+ private readonly actionSheetService;
3832
3906
  protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
3833
3907
  /**
3834
3908
  * Background for the message list scroll area from config, or the built-in soft wash when unset/empty.
@@ -4081,6 +4155,97 @@ declare class AXConversationMessageListService {
4081
4155
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationMessageListService>;
4082
4156
  }
4083
4157
 
4158
+ declare class AXConversationAvatarPickerComponent {
4159
+ readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
4160
+ readonly showClearButton: _angular_core.InputSignal<boolean>;
4161
+ readonly avatarUrl: _angular_core.ModelSignal<string>;
4162
+ readonly onFileSelected: _angular_core.OutputEmitterRef<string>;
4163
+ triggerFileInput(): void;
4164
+ onFileInputChange(event: Event): Promise<void>;
4165
+ clearAvatar(): void;
4166
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarPickerComponent, never>;
4167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarPickerComponent, "ax-conversation-avatar-picker", never, { "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, { "avatarUrl": "avatarUrlChange"; "onFileSelected": "onFileSelected"; }, never, never, true, never>;
4168
+ }
4169
+
4170
+ /**
4171
+ * Pluggable avatar components for the conversation UI.
4172
+ * Register via `provideConversation({ avatarComponents: { user, conversation } })`.
4173
+ * When only `user` is registered, a built-in conversation avatar host is wired automatically.
4174
+ */
4175
+
4176
+ /** Custom user avatar (e.g. platform `axp-user-avatar`). */
4177
+ interface AXConversationUserAvatarComponent {
4178
+ readonly userId: InputSignal<string>;
4179
+ readonly size: InputSignal<number>;
4180
+ /** Optional resolved display name (e.g. bot/assist peer title). */
4181
+ readonly displayName?: InputSignal<string | undefined>;
4182
+ /** Optional resolved avatar URL when `userId` is not a platform user row. */
4183
+ readonly displayAvatar?: InputSignal<string | undefined>;
4184
+ /** Optional icon class when no avatar image is available. */
4185
+ readonly displayIcon?: InputSignal<string | undefined>;
4186
+ }
4187
+ /** Optional custom group/channel conversation avatar. */
4188
+ interface AXConversationConversationAvatarComponent {
4189
+ readonly conversationId: InputSignal<string>;
4190
+ readonly size: InputSignal<number>;
4191
+ }
4192
+ type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
4193
+ declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
4194
+ declare const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT: InjectionToken<Type<AXConversationConversationAvatarComponent>>;
4195
+ interface AXConversationAvatarComponents {
4196
+ user?: Type<AXConversationUserAvatarComponent>;
4197
+ conversation?: Type<AXConversationConversationAvatarComponent>;
4198
+ }
4199
+
4200
+ declare class AXConversationAvatarComponent {
4201
+ private readonly conversationService;
4202
+ private readonly userAvatarComponent;
4203
+ private readonly conversationAvatarComponent;
4204
+ readonly kind: _angular_core.InputSignal<AXConversationAvatarKind>;
4205
+ readonly userId: _angular_core.InputSignal<string>;
4206
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
4207
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
4208
+ readonly size: _angular_core.InputSignal<number>;
4209
+ readonly showStatus: _angular_core.InputSignal<boolean>;
4210
+ readonly name: _angular_core.InputSignal<string>;
4211
+ readonly avatar: _angular_core.InputSignal<string>;
4212
+ readonly icon: _angular_core.InputSignal<string>;
4213
+ private readonly currentUserId;
4214
+ readonly resolvedKind: _angular_core.Signal<"user" | "conversation">;
4215
+ readonly resolvedUserId: _angular_core.Signal<string>;
4216
+ readonly customComponent: _angular_core.Signal<Type<unknown>>;
4217
+ readonly customInputs: _angular_core.Signal<Record<string, unknown>>;
4218
+ readonly filteredCustomInputs: _angular_core.Signal<Record<string, unknown>>;
4219
+ readonly fallbackDisplay: _angular_core.Signal<{
4220
+ name: string;
4221
+ avatar: string;
4222
+ icon: string;
4223
+ }>;
4224
+ readonly fallbackInitials: _angular_core.Signal<string>;
4225
+ readonly resolvedStatus: _angular_core.Signal<"online" | "offline" | "away">;
4226
+ /** Hide presence badge when a registered custom avatar component is rendered. */
4227
+ readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away">;
4228
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarComponent, never>;
4229
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarComponent, "ax-conversation-avatar", never, { "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4230
+ }
4231
+
4232
+ interface AXConversationRegistryComponentRef {
4233
+ component?: Type<unknown>;
4234
+ componentLoader?: () => Promise<Type<unknown>>;
4235
+ }
4236
+ declare class AXConversationRegistryComponentOutletComponent {
4237
+ readonly component: _angular_core.InputSignal<Type<unknown>>;
4238
+ readonly componentLoader: _angular_core.InputSignal<() => Promise<Type<unknown>>>;
4239
+ readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
4240
+ readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
4241
+ readonly loading: _angular_core.WritableSignal<boolean>;
4242
+ constructor();
4243
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryComponentOutletComponent, never>;
4244
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationRegistryComponentOutletComponent, "ax-conversation-registry-component-outlet", never, { "component": { "alias": "component"; "required": false; "isSignal": true; }; "componentLoader": { "alias": "componentLoader"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4245
+ }
4246
+ /** Resolve a registry component reference, preferring lazy loaders when provided. */
4247
+ declare function hasRegistryComponent(ref?: AXConversationRegistryComponentRef): boolean;
4248
+
4084
4249
  declare class AXConversationSidebarService {
4085
4250
  private readonly conversationService;
4086
4251
  constructor();
@@ -4358,36 +4523,6 @@ declare const AX_CONVERSATION_CONFIG: InjectionToken<Required<AXConversationConf
4358
4523
  */
4359
4524
  declare const AX_CONVERSATION_ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXConversationErrorHandlerConfig>>;
4360
4525
 
4361
- /**
4362
- * Pluggable avatar components for the conversation UI.
4363
- * Register via `provideConversation({ avatarComponents: { user, conversation } })`.
4364
- * When only `user` is registered, a built-in conversation avatar host is wired automatically.
4365
- */
4366
-
4367
- /** Custom user avatar (e.g. platform `axp-user-avatar`). */
4368
- interface AXConversationUserAvatarComponent {
4369
- readonly userId: InputSignal<string>;
4370
- readonly size: InputSignal<number>;
4371
- /** Optional resolved display name (e.g. bot/assist peer title). */
4372
- readonly displayName?: InputSignal<string | undefined>;
4373
- /** Optional resolved avatar URL when `userId` is not a platform user row. */
4374
- readonly displayAvatar?: InputSignal<string | undefined>;
4375
- /** Optional icon class when no avatar image is available. */
4376
- readonly displayIcon?: InputSignal<string | undefined>;
4377
- }
4378
- /** Optional custom group/channel conversation avatar. */
4379
- interface AXConversationConversationAvatarComponent {
4380
- readonly conversationId: InputSignal<string>;
4381
- readonly size: InputSignal<number>;
4382
- }
4383
- type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
4384
- declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
4385
- declare const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT: InjectionToken<Type<AXConversationConversationAvatarComponent>>;
4386
- interface AXConversationAvatarComponents {
4387
- user?: Type<AXConversationUserAvatarComponent>;
4388
- conversation?: Type<AXConversationConversationAvatarComponent>;
4389
- }
4390
-
4391
4526
  /**
4392
4527
  * Registry Configuration Tokens
4393
4528
  * Injection tokens for configuring default registry values
@@ -4457,472 +4592,6 @@ interface AXConversationRegistryConfiguration {
4457
4592
  */
4458
4593
  declare const AX_CONVERSATION_REGISTRY_CONFIG: InjectionToken<AXConversationRegistryConfiguration>;
4459
4594
 
4460
- /**
4461
- * IndexedDB Storage Wrapper
4462
- * Provides persistent storage for conversation data
4463
- */
4464
-
4465
- declare const AXConversationIndexedDbStores: {
4466
- readonly PARTICIPANTS: "participants";
4467
- readonly CONVERSATIONS: "conversations";
4468
- readonly MESSAGES: "messages";
4469
- readonly MEDIA: "media";
4470
- readonly SETTINGS: "settings";
4471
- };
4472
- /** Blob stored for demo multimedia uploads */
4473
- interface AXConversationIndexedDbMediaRecord {
4474
- id: string;
4475
- conversationId: string;
4476
- mimeType: string;
4477
- size: number;
4478
- fileName?: string;
4479
- blob: Blob;
4480
- createdAt: string;
4481
- }
4482
- declare class AXConversationIndexedDbStorage {
4483
- private db;
4484
- private initPromise;
4485
- /**
4486
- * Initialize IndexedDB
4487
- */
4488
- init(): Promise<void>;
4489
- /**
4490
- * Get a value from a store
4491
- */
4492
- get<T>(storeName: string, key: string): Promise<T | undefined>;
4493
- /**
4494
- * Get all values from a store
4495
- */
4496
- getAll<T>(storeName: string): Promise<T[]>;
4497
- /**
4498
- * Get values by index
4499
- */
4500
- getAllByIndex<T>(storeName: string, indexName: string, query: IDBValidKey): Promise<T[]>;
4501
- /**
4502
- * Put a value into a store
4503
- */
4504
- put<T>(storeName: string, value: T): Promise<void>;
4505
- /**
4506
- * Delete a value from a store
4507
- */
4508
- delete(storeName: string, key: string): Promise<void>;
4509
- /**
4510
- * Clear all data from a store
4511
- */
4512
- clear(storeName: string): Promise<void>;
4513
- getParticipant(id: string): Promise<AXConversationParticipant | undefined>;
4514
- getAllParticipants(): Promise<AXConversationParticipant[]>;
4515
- putParticipant(participant: AXConversationParticipant): Promise<void>;
4516
- getConversation(id: string): Promise<AXConversation | undefined>;
4517
- getAllConversations(): Promise<AXConversation[]>;
4518
- putConversation(conversation: AXConversation): Promise<void>;
4519
- deleteConversation(id: string): Promise<void>;
4520
- getMessage(id: string): Promise<AXConversationMessage | undefined>;
4521
- getAllMessages(): Promise<AXConversationMessage[]>;
4522
- getMessagesByConversation(conversationId: string): Promise<AXConversationMessage[]>;
4523
- putMessage(message: AXConversationMessage): Promise<void>;
4524
- deleteMessage(id: string): Promise<void>;
4525
- getSetting(key: string): Promise<unknown>;
4526
- putSetting(key: string, value: unknown): Promise<void>;
4527
- getMedia(id: string): Promise<AXConversationIndexedDbMediaRecord | undefined>;
4528
- putMedia(record: AXConversationIndexedDbMediaRecord): Promise<void>;
4529
- deleteMedia(id: string): Promise<void>;
4530
- }
4531
- declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
4532
-
4533
- /**
4534
- * Shared In-Memory Storage
4535
- * Internal storage shared between all IndexedDB API implementations
4536
- * This is NOT a service - just a shared data structure
4537
- */
4538
-
4539
- declare class AXConversationSharedStorage {
4540
- readonly connectionStatus$: BehaviorSubject<AXConversationConnectionStatus>;
4541
- readonly participants: Map<string, AXConversationParticipant>;
4542
- readonly conversations: Map<string, AXConversation>;
4543
- readonly messages: Map<string, AXConversationMessage>;
4544
- readonly messagesByConversation: Map<string, string[]>;
4545
- readonly messageStream$: Subject<AXConversationMessage>;
4546
- readonly messageUpdates$: Subject<AXConversationMessage>;
4547
- readonly messageDeletions$: Subject<string>;
4548
- readonly typingIndicators$: Subject<AXConversationTypingIndicator>;
4549
- readonly presenceUpdates$: Subject<AXConversationPresenceUpdate>;
4550
- readonly conversationUpdates$: Subject<AXConversation>;
4551
- readonly currentUserId = "current-user";
4552
- private isSeeded;
4553
- private presenceInterval?;
4554
- private messageSimulationInterval?;
4555
- private isLoadedFromDB;
4556
- /**
4557
- * Load data from IndexedDB
4558
- */
4559
- loadFromIndexedDB(): Promise<void>;
4560
- /**
4561
- * Seed initial data if not already seeded
4562
- */
4563
- seedIfEmpty(): Promise<void>;
4564
- /** Wipe in-memory and persisted demo data (used when seed version changes). */
4565
- private clearAllData;
4566
- /** @internal Used by demo seed module */
4567
- markSeeded(): void;
4568
- /** @internal Starts demo presence and message simulations */
4569
- startDemoSimulations(): void;
4570
- /**
4571
- * Simulate user presence changes (online/offline/away)
4572
- */
4573
- private startPresenceSimulation;
4574
- /**
4575
- * Simulate random messages from users
4576
- */
4577
- private startMessageSimulation;
4578
- /**
4579
- * Stop presence simulation
4580
- */
4581
- stopPresenceSimulation(): void;
4582
- /**
4583
- * Stop message simulation
4584
- */
4585
- stopMessageSimulation(): void;
4586
- }
4587
- declare const axConversationSharedStorage: AXConversationSharedStorage;
4588
-
4589
- declare const AX_CONVERSATION_DEMO_CONVERSATION_IDS: {
4590
- readonly private: "conv-demo-private";
4591
- readonly group: "conv-demo-group";
4592
- readonly channel: "conv-demo-channel";
4593
- };
4594
- declare function seedSharedStorageInitialData(storage: AXConversationSharedStorage): Promise<void>;
4595
-
4596
- /**
4597
- * Chat-oriented pagination helpers for IndexedDB demo APIs.
4598
- *
4599
- * Convention (matches {@link AXConversationService}):
4600
- * - Page 0: newest items (sidebar: recent chats; messages: latest history window).
4601
- * - Page 1+ or `cursor`: older items before the previous window.
4602
- * - `hasMore`: true when older items remain.
4603
- * - `nextCursor`: id of the oldest item in the current page (use as `pagination.cursor` for the next request).
4604
- */
4605
-
4606
- declare const AX_CONVERSATION_MESSAGE_CURSOR_PREFIX = "msg:";
4607
- declare const AX_CONVERSATION_CURSOR_PREFIX = "conv:";
4608
- type AXConversationChatCursorKind = 'message' | 'conversation';
4609
- interface AXConversationParsedChatCursor {
4610
- kind: AXConversationChatCursorKind;
4611
- id: string;
4612
- }
4613
- declare function encodeMessageCursor(messageId: string): string;
4614
- declare function encodeConversationCursor(conversationId: string): string;
4615
- /** Decode cursor from API pagination (supports prefixed or legacy raw message id). */
4616
- declare function parseChatCursor(cursor?: string): AXConversationParsedChatCursor | null;
4617
- /**
4618
- * Paginate a list sorted newest-first (chats, message history windows).
4619
- */
4620
- declare function paginateChatNewestFirst<T extends {
4621
- id: string;
4622
- }>(sortedNewestFirst: T[], pagination: AXConversationPagination, cursorKind: AXConversationChatCursorKind): AXConversationPaginatedResult<T>;
4623
- /**
4624
- * Paginate a list sorted oldest-first (replies, forward history).
4625
- */
4626
- declare function paginateChatOldestFirst<T extends {
4627
- id: string;
4628
- }>(sortedOldestFirst: T[], pagination: AXConversationPagination): AXConversationPaginatedResult<T>;
4629
-
4630
- /**
4631
- * Pagination demo data — disabled for the minimal 3-chat showcase seed.
4632
- * Kept as a no-op so existing imports remain valid.
4633
- */
4634
- /** @deprecated Pagination demo chat removed from default seed. */
4635
- declare const AX_MESSAGE_PAGINATION_CONVERSATION_ID = "conv-pag-msgs";
4636
- /** No-op: showcase uses a fixed 3-conversation seed (private, group, channel). */
4637
- declare function ensurePaginationDemoData(): Promise<void>;
4638
-
4639
- /**
4640
- * Shared read/write helpers for IndexedDB chat storage (in-memory + persistence).
4641
- */
4642
-
4643
- declare function getConversationLastActivity(conv: AXConversation): number;
4644
- /** Messages for a conversation, newest first (API / pagination order). */
4645
- declare function getConversationMessagesNewestFirst(conversationId: string): AXConversationMessage[];
4646
- /** Keep per-conversation id list sorted ascending by timestamp (store order). */
4647
- declare function sortConversationMessageIds(conversationId: string): void;
4648
- /** Register a message in maps and keep the conversation index sorted. */
4649
- declare function registerChatMessage(message: AXConversationMessage): void;
4650
- /** Remove a message from conversation index and global map. */
4651
- declare function unregisterChatMessage(messageId: string, conversationId: string): void;
4652
- declare function applyConversationFilters(conversations: AXConversation[], filters?: AXConversationFilters): AXConversation[];
4653
- /** Sidebar list order: pinned first, then by last activity (newest first). */
4654
- declare function getSortedConversationsForInbox(filters?: AXConversationFilters): AXConversation[];
4655
- /** Sort all loaded conversation message indexes (after IndexedDB hydration). */
4656
- declare function normalizeAllConversationMessageIndexes(): void;
4657
-
4658
- declare class AXConversationIndexedDbUserApi extends AXConversationUserApi {
4659
- private readonly API_DELAY_MS;
4660
- getCurrentUser(): Promise<AXConversationParticipant>;
4661
- updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationParticipant>;
4662
- uploadAvatar(file: File): Promise<string>;
4663
- getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
4664
- searchUsers(query: string): Promise<AXConversationParticipant[]>;
4665
- getUserById(userId: string): Promise<AXConversationParticipant>;
4666
- getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
4667
- getUserPresence(userId: string): Promise<AXConversationPresenceUpdate>;
4668
- updatePresence(_status: AXConversationPresenceStatus, _statusText?: string): Promise<void>;
4669
- blockUser(_userId: string, _reason?: AXConversationBlockReportReason): Promise<void>;
4670
- unblockUser(_userId: string): Promise<void>;
4671
- getBlockedUsers(): Promise<string[]>;
4672
- reportUser(_userId: string, _reason: AXConversationBlockReportReason): Promise<void>;
4673
- getUserSettings(): Promise<Record<string, unknown>>;
4674
- updateUserSettings(_settings: Record<string, unknown>): Promise<void>;
4675
- private getCurrentUserWithoutDelay;
4676
- private fetchUsers;
4677
- private delay;
4678
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbUserApi, never>;
4679
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbUserApi>;
4680
- }
4681
-
4682
- declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
4683
- createConversation(data: AXConversationCreateData): Promise<AXConversation>;
4684
- getConversation(conversationId: string): Promise<AXConversation>;
4685
- /**
4686
- * Inbox page (pinned + recent activity, newest first).
4687
- * Page 0 / cursor align with {@link AXConversationService.loadConversations} and sidebar infinite scroll.
4688
- */
4689
- getConversations(pagination: AXConversationPagination, filters?: AXConversationFilters): Promise<AXConversationPaginatedResult<AXConversation>>;
4690
- updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
4691
- deleteConversation(conversationId: string): Promise<boolean>;
4692
- archiveConversation(conversationId: string): Promise<void>;
4693
- unarchiveConversation(conversationId: string): Promise<void>;
4694
- pinConversation(conversationId: string): Promise<void>;
4695
- unpinConversation(conversationId: string): Promise<void>;
4696
- markConversationAsRead(conversationId: string): Promise<void>;
4697
- markConversationAsUnread(conversationId: string): Promise<void>;
4698
- searchConversations(query: string): Promise<AXConversation[]>;
4699
- filterConversations(filters: AXConversationFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversation>>;
4700
- getParticipants(conversationId: string): Promise<AXConversationParticipant[]>;
4701
- addParticipants(_conversationId: string, _userIds: string[]): Promise<AXConversation>;
4702
- removeParticipant(conversationId: string, _userId: string): Promise<AXConversation>;
4703
- leaveConversation(_conversationId: string): Promise<void>;
4704
- updateParticipant(conversationId: string, _update: AXConversationParticipantUpdate): Promise<AXConversation>;
4705
- getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
4706
- updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
4707
- muteConversation(conversationId: string, duration?: number): Promise<void>;
4708
- unmuteConversation(conversationId: string): Promise<void>;
4709
- uploadConversationAvatar(_conversationId: string, file: File): Promise<string>;
4710
- getConversationMedia(conversationId: string, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<unknown>>;
4711
- addConversationTags(conversationId: string, tags: string[]): Promise<void>;
4712
- removeConversationTags(conversationId: string, tags: string[]): Promise<void>;
4713
- getConversationTags(conversationId: string): Promise<string[]>;
4714
- saveDraft(conversationId: string, draft: string): Promise<void>;
4715
- getDraft(conversationId: string): Promise<string | null>;
4716
- clearDraft(conversationId: string): Promise<void>;
4717
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
4718
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
4719
- }
4720
-
4721
- declare class AXConversationIndexedDbMessageApi extends AXConversationMessageApi {
4722
- sendMessage(command: AXConversationSendMessageCommand): Promise<AXConversationMessage>;
4723
- getMessage(messageId: string): Promise<AXConversationMessage>;
4724
- /**
4725
- * Message history for a chat (newest-first pages).
4726
- * - Page 0: latest `pageSize` messages.
4727
- * - Page 1+ or `pagination.cursor`: older messages before the previous window.
4728
- */
4729
- getMessages(conversationId: string, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
4730
- editMessage(messageId: string, payload: AXConversationMessagePayload): Promise<AXConversationMessage>;
4731
- deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
4732
- deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
4733
- searchMessages(conversationId: string, filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
4734
- searchAllMessages(filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
4735
- addReaction(messageId: string, emoji: string): Promise<void>;
4736
- removeReaction(messageId: string, emoji: string): Promise<void>;
4737
- getAvailableReactions(): Promise<string[]>;
4738
- markAsRead(conversationId: string, messageIds: string[]): Promise<void>;
4739
- markAsUnread(conversationId: string): Promise<void>;
4740
- getReadReceipts(_messageId: string): Promise<AXConversationReadReceipt[]>;
4741
- forwardMessage(_data: AXConversationMessageForwardData): Promise<AXConversationMessage[]>;
4742
- pinMessage(_conversationId: string, _messageId: string): Promise<void>;
4743
- unpinMessage(_conversationId: string, _messageId: string): Promise<void>;
4744
- getPinnedMessages(_conversationId: string): Promise<AXConversationPinnedMessage[]>;
4745
- getMessageReplies(messageId: string, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
4746
- getReplyCount(messageId: string): Promise<number>;
4747
- getForwardCount(messageId: string): Promise<number>;
4748
- sendTypingIndicator(conversationId: string): Promise<void>;
4749
- stopTypingIndicator(conversationId: string): Promise<void>;
4750
- updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
4751
- getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
4752
- updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
4753
- getMessageDeliveryStatus(_messageId: string): Promise<{
4754
- delivered: number;
4755
- read: number;
4756
- total: number;
4757
- }>;
4758
- markMessagesAsRead(messageIds: string[]): Promise<void>;
4759
- bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
4760
- exportMessages(conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
4761
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
4762
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
4763
- }
4764
-
4765
- declare class AXConversationIndexedDbRealtimeApi extends AXConversationRealtimeApi {
4766
- readonly connectionStatus$: Observable<AXConversationConnectionStatus>;
4767
- connect(_options?: AXConversationConnectionOptions): Promise<void>;
4768
- disconnect(): Promise<void>;
4769
- isConnected(): boolean;
4770
- reconnect(): Promise<void>;
4771
- subscribeToConnectionEvents(): Observable<AXConversationConnectionEvent>;
4772
- subscribeToMessages(conversationId: string): Observable<AXConversationMessage>;
4773
- subscribeToMessageUpdates(_conversationId?: string): Observable<AXConversationMessage>;
4774
- subscribeToMessageDeletions(_conversationId?: string): Observable<string>;
4775
- subscribeToMessageReactions(_conversationId?: string): Observable<AXConversationMessage>;
4776
- subscribeToConversationUpdates(): Observable<AXConversation>;
4777
- subscribeToConversationCreated(): Observable<AXConversation>;
4778
- subscribeToConversationDeleted(): Observable<string>;
4779
- subscribeToTypingIndicators(conversationId: string): Observable<AXConversationTypingIndicator>;
4780
- subscribeToPresenceUpdates(_userIds?: string[]): Observable<AXConversationPresenceUpdate>;
4781
- subscribeToReadReceipts(_conversationId?: string): Observable<{
4782
- messageId: string;
4783
- userId: string;
4784
- readAt: Date;
4785
- }>;
4786
- subscribeToNotifications(): Observable<AXConversationNotificationEvent>;
4787
- subscribeToCallEvents(): Observable<AXConversationCallEvent>;
4788
- subscribeToUserBlockEvents(): Observable<{
4789
- userId: string;
4790
- blocked: boolean;
4791
- }>;
4792
- subscribeToParticipantEvents(_conversationId?: string): Observable<{
4793
- conversationId: string;
4794
- userId: string;
4795
- action: 'added' | 'removed';
4796
- }>;
4797
- subscribeToSystemEvents(): Observable<{
4798
- type: string;
4799
- message: string;
4800
- data?: any;
4801
- }>;
4802
- subscribeToMessageStatusChanges(_conversationId?: string): Observable<{
4803
- messageId: string;
4804
- status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
4805
- timestamp: Date;
4806
- }>;
4807
- subscribeToConversationSettingsChanges(_conversationId?: string): Observable<{
4808
- conversationId: string;
4809
- settings: Record<string, unknown>;
4810
- }>;
4811
- subscribeToDraftChanges(_conversationId?: string): Observable<{
4812
- conversationId: string;
4813
- draft: string | null;
4814
- }>;
4815
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbRealtimeApi, never>;
4816
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbRealtimeApi>;
4817
- }
4818
-
4819
- /**
4820
- * AI Responder Service
4821
- * Provides AI-powered automatic responses using Google Gemini API
4822
- *
4823
- * @security API key should be provided via injection token in production
4824
- * @example
4825
- * ```typescript
4826
- * export const AX_CONVERSATION_AI_API_KEY = new InjectionToken<string>('AX_CONVERSATION_AI_API_KEY');
4827
- *
4828
- * providers: [
4829
- * { provide: AX_CONVERSATION_AI_API_KEY, useValue: environment.geminiApiKey }
4830
- * ]
4831
- * ```
4832
- */
4833
-
4834
- /**
4835
- * Injection token for AI API key
4836
- * Provide this in your app config to avoid hardcoding the API key
4837
- */
4838
- declare const AX_CONVERSATION_AI_API_KEY: InjectionToken<string>;
4839
- /**
4840
- * Configuration for AI Responder
4841
- */
4842
- interface AXConversationAiResponderConfig {
4843
- /** Maximum retry attempts for failed requests */
4844
- maxRetries?: number;
4845
- /** Timeout for API requests in milliseconds */
4846
- timeout?: number;
4847
- /** Enable fallback to random replies on error */
4848
- useFallbackReplies?: boolean;
4849
- }
4850
- declare class AXConversationAiResponderService {
4851
- private readonly injectedApiKey;
4852
- private readonly config;
4853
- /**
4854
- * Get API key from injection token
4855
- * Returns undefined if not configured - service will use fallback responses
4856
- */
4857
- private getApiKey;
4858
- /**
4859
- * Get AI-powered response for a given prompt
4860
- * @param prompt - The user's message to respond to
4861
- * @param retryCount - Current retry attempt (internal use)
4862
- * @returns AI-generated response or fallback message
4863
- */
4864
- getAIResponse(prompt: string, retryCount?: number): Promise<string>;
4865
- /**
4866
- * Fetch with timeout
4867
- */
4868
- private fetchWithTimeout;
4869
- /**
4870
- * Delay helper for retry logic
4871
- */
4872
- private delay;
4873
- /**
4874
- * Get a random fallback reply when AI is unavailable
4875
- */
4876
- private getFallbackReply;
4877
- /**
4878
- * Check if AI service is available
4879
- * @returns true if API key is configured
4880
- */
4881
- isAvailable(): boolean;
4882
- /**
4883
- * Update configuration
4884
- */
4885
- configure(config: Partial<AXConversationAiResponderConfig>): void;
4886
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAiResponderService, never>;
4887
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAiResponderService>;
4888
- }
4889
-
4890
- declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedDbMessageApi {
4891
- private readonly aiResponder;
4892
- private readonly AI_TYPING_INDICATOR_DELAY;
4893
- private readonly AI_RESPONSE_DELAY;
4894
- /**
4895
- * Override sendMessage to trigger AI auto-response
4896
- */
4897
- sendMessage(command: AXConversationSendMessageCommand): Promise<AXConversationMessage>;
4898
- /**
4899
- * Extract context from different message types for AI processing
4900
- */
4901
- private extractMessageContext;
4902
- /**
4903
- * Generate AI response to user message
4904
- */
4905
- private generateAIResponse;
4906
- /**
4907
- * Get conversation for AI response
4908
- */
4909
- private getConversationForAI;
4910
- /**
4911
- * Get conversation history (last N messages)
4912
- */
4913
- private getConversationHistory;
4914
- /**
4915
- * Create AI message directly in storage
4916
- */
4917
- private createAIMessage;
4918
- /**
4919
- * Delay helper
4920
- */
4921
- private delay;
4922
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageAiApi, never>;
4923
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
4924
- }
4925
-
4926
4595
  declare const AX_CONVERSATION_AUDIO_PRESENTATION: {
4927
4596
  readonly icon: "fa-light fa-music text-amber-500";
4928
4597
  readonly title: "Audio";
@@ -4995,16 +4664,14 @@ declare function notifyPickerValidationErrors(toast: AXToastService, translation
4995
4664
  file: File;
4996
4665
  errors: AXValidationRuleResult[];
4997
4666
  }[]): void;
4998
- /** Load files dropped onto the message list after the picker is mounted in a popup. */
4999
- declare function seedPickerInitialFiles(initialFiles: InputSignal<File[]>, handleFiles: (files: File[]) => void | Promise<void>): void;
5000
- /** Close inline composer shell or popup host after send/cancel. */
5001
- declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null): void;
4667
+ /** Close popup/action-sheet host or inline composer shell after send/cancel. */
4668
+ declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null, actionSheetRef?: AXActionSheetRef | null): void;
5002
4669
 
5003
4670
  interface AXConversationAudioFile extends AXConversationComposerPickerUploadItem {
5004
4671
  duration?: number;
5005
4672
  dataUrl?: string;
5006
4673
  }
5007
- declare class AXConversationAudioPickerComponent implements OnDestroy {
4674
+ declare class AXConversationAudioPickerComponent implements OnDestroy, AXConversationComposerActionComponent {
5008
4675
  private uploadsDismissed;
5009
4676
  private retainUploadedOnDismiss;
5010
4677
  readonly service: _angular_core.InputSignal<AXConversationComposerService>;
@@ -5019,7 +4686,9 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
5019
4686
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5020
4687
  readonly maxFiles: _angular_core.InputSignal<number>;
5021
4688
  readonly initialFiles: _angular_core.InputSignal<File[]>;
4689
+ readonly autoRun: _angular_core.InputSignal<boolean>;
5022
4690
  readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4691
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5023
4692
  readonly catalogFileType: "conversation-audio";
5024
4693
  readonly audioFiles: _angular_core.WritableSignal<AXConversationAudioFile[]>;
5025
4694
  readonly isDragging: _angular_core.WritableSignal<boolean>;
@@ -5029,6 +4698,7 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
5029
4698
  caption: string;
5030
4699
  readonly allowMultiple: _angular_core.Signal<boolean>;
5031
4700
  constructor();
4701
+ activate(): Promise<void>;
5032
4702
  private createUtilityContext;
5033
4703
  private getCatalogFileTypeDef;
5034
4704
  private runUtility;
@@ -5050,7 +4720,7 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
5050
4720
  getSelectedCountText(): string;
5051
4721
  getSendText(): string;
5052
4722
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioPickerComponent, never>;
5053
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioPickerComponent, "ax-conversation-audio-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4723
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioPickerComponent, "ax-conversation-audio-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5054
4724
  }
5055
4725
 
5056
4726
  declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXConversationComposerTab;
@@ -5125,7 +4795,7 @@ interface AXConversationAttachedFile {
5125
4795
  error?: string;
5126
4796
  abortController?: AbortController;
5127
4797
  }
5128
- declare class AXConversationFilePickerComponent implements OnDestroy {
4798
+ declare class AXConversationFilePickerComponent implements OnDestroy, AXConversationComposerActionComponent {
5129
4799
  private uploadsDismissed;
5130
4800
  private retainUploadedOnDismiss;
5131
4801
  private readonly uploader;
@@ -5140,7 +4810,9 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
5140
4810
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5141
4811
  readonly maxFiles: _angular_core.InputSignal<number>;
5142
4812
  readonly initialFiles: _angular_core.InputSignal<File[]>;
4813
+ readonly autoRun: _angular_core.InputSignal<boolean>;
5143
4814
  readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4815
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5144
4816
  readonly catalogFileType: "conversation-file";
5145
4817
  readonly allowMultiple: _angular_core.Signal<boolean>;
5146
4818
  readonly files: _angular_core.WritableSignal<AXConversationAttachedFile[]>;
@@ -5150,6 +4822,7 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
5150
4822
  private catalogFileTypeDef?;
5151
4823
  caption: string;
5152
4824
  constructor();
4825
+ activate(): Promise<void>;
5153
4826
  private createUtilityContext;
5154
4827
  private getCatalogFileTypeDef;
5155
4828
  private pickerKind;
@@ -5171,7 +4844,7 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
5171
4844
  getSelectedCountText(): string;
5172
4845
  getUploadingLabel(progress: number): string;
5173
4846
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFilePickerComponent, never>;
5174
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFilePickerComponent, "ax-conversation-file-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4847
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFilePickerComponent, "ax-conversation-file-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5175
4848
  }
5176
4849
 
5177
4850
  declare const AX_CONVERSATION_IMAGE_PRESENTATION: {
@@ -5191,7 +4864,7 @@ declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider
5191
4864
  interface AXConversationImageFile extends AXConversationComposerPickerUploadItem {
5192
4865
  preview: string;
5193
4866
  }
5194
- declare class AXConversationImagePickerComponent implements OnDestroy {
4867
+ declare class AXConversationImagePickerComponent implements OnDestroy, AXConversationComposerActionComponent {
5195
4868
  private uploadsDismissed;
5196
4869
  /** Uploaded blobs are referenced by the sent message — do not delete on dismiss. */
5197
4870
  private retainUploadedOnDismiss;
@@ -5208,7 +4881,9 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
5208
4881
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5209
4882
  readonly maxFiles: _angular_core.InputSignal<number>;
5210
4883
  readonly initialFiles: _angular_core.InputSignal<File[]>;
4884
+ readonly autoRun: _angular_core.InputSignal<boolean>;
5211
4885
  readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4886
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5212
4887
  readonly images: _angular_core.WritableSignal<AXConversationImageFile[]>;
5213
4888
  readonly isDragging: _angular_core.WritableSignal<boolean>;
5214
4889
  readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image text-purple-500" | "fa-light fa-cloud-arrow-up">;
@@ -5216,6 +4891,7 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
5216
4891
  readonly allowMultiple: _angular_core.Signal<boolean>;
5217
4892
  private imageFileType?;
5218
4893
  constructor();
4894
+ activate(): Promise<void>;
5219
4895
  private createUtilityContext;
5220
4896
  private loadImageFileType;
5221
4897
  handleFiles(files: File[]): Promise<void>;
@@ -5234,20 +4910,23 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
5234
4910
  getSelectedCountText(): string;
5235
4911
  getSendText(): string;
5236
4912
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImagePickerComponent, never>;
5237
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImagePickerComponent, "ax-conversation-image-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4913
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImagePickerComponent, "ax-conversation-image-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5238
4914
  }
5239
4915
 
5240
4916
  declare class AXConversationLocationPickerComponent {
5241
- private readonly composerService;
5242
- private readonly conversationService;
4917
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
4918
+ private readonly composerServiceFromInjector;
4919
+ private get composerService();
5243
4920
  readonly translation: AXTranslationService;
5244
4921
  readonly conversation: _angular_core.InputSignal<AXConversation>;
4922
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4923
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5245
4924
  readonly currentLocation: _angular_core.WritableSignal<AXConversationLocationPayload>;
5246
4925
  onMarkerAdded(event: AXMapMarker): void;
5247
4926
  sendLocation(): Promise<void>;
5248
4927
  cancel(): void;
5249
4928
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationPickerComponent, never>;
5250
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationPickerComponent, "ax-conversation-location-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
4929
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationPickerComponent, "ax-conversation-location-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5251
4930
  }
5252
4931
 
5253
4932
  declare class AXConversationPickerFooterComponent {
@@ -5311,12 +4990,15 @@ declare class AXConversationPickerEmptyComponent {
5311
4990
  declare class AXConversationPickerShellComponent {
5312
4991
  private readonly toast;
5313
4992
  private readonly translation;
4993
+ private readonly zone;
5314
4994
  readonly fileType: _angular_core.InputSignal<string>;
5315
4995
  readonly multiple: _angular_core.InputSignal<boolean>;
5316
4996
  readonly filesSelected: _angular_core.OutputEmitterRef<File[]>;
5317
4997
  readonly dragEnter: _angular_core.OutputEmitterRef<DragEvent>;
5318
4998
  readonly dragLeave: _angular_core.OutputEmitterRef<DragEvent>;
5319
4999
  readonly dragOver: _angular_core.OutputEmitterRef<DragEvent>;
5000
+ /** Open the OS file picker for this shell's catalog. */
5001
+ browse(): Promise<void>;
5320
5002
  protected onZoneFileChange(event: AXUploaderFileChangeEvent): void;
5321
5003
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerShellComponent, never>;
5322
5004
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerShellComponent, "ax-conversation-picker-shell", never, { "fileType": { "alias": "fileType"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "dragEnter": "dragEnter"; "dragLeave": "dragLeave"; "dragOver": "dragOver"; }, never, ["*"], true, never>;
@@ -5386,7 +5068,7 @@ interface AXConversationVideoFile extends AXConversationComposerPickerUploadItem
5386
5068
  preview?: string;
5387
5069
  duration?: number;
5388
5070
  }
5389
- declare class AXConversationVideoPickerComponent implements OnDestroy {
5071
+ declare class AXConversationVideoPickerComponent implements OnDestroy, AXConversationComposerActionComponent {
5390
5072
  private uploadsDismissed;
5391
5073
  private retainUploadedOnDismiss;
5392
5074
  readonly service: _angular_core.InputSignal<AXConversationComposerService>;
@@ -5401,7 +5083,9 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
5401
5083
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5402
5084
  readonly maxFiles: _angular_core.InputSignal<number>;
5403
5085
  readonly initialFiles: _angular_core.InputSignal<File[]>;
5086
+ readonly autoRun: _angular_core.InputSignal<boolean>;
5404
5087
  readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
5088
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5405
5089
  readonly catalogFileType: "conversation-video";
5406
5090
  readonly videos: _angular_core.WritableSignal<AXConversationVideoFile[]>;
5407
5091
  readonly isDragging: _angular_core.WritableSignal<boolean>;
@@ -5411,6 +5095,7 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
5411
5095
  readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
5412
5096
  private catalogFileTypeDef?;
5413
5097
  constructor();
5098
+ activate(): Promise<void>;
5414
5099
  private createUtilityContext;
5415
5100
  private getCatalogFileTypeDef;
5416
5101
  private runUtility;
@@ -5432,7 +5117,7 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
5432
5117
  getSelectedCountText(): string;
5433
5118
  getSendText(): string;
5434
5119
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoPickerComponent, never>;
5435
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoPickerComponent, "ax-conversation-video-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5120
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoPickerComponent, "ax-conversation-video-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5436
5121
  }
5437
5122
 
5438
5123
  declare const AX_CONVERSATION_VOICE_PRESENTATION: {
@@ -5452,14 +5137,21 @@ declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider
5452
5137
  declare function mergeVoiceUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
5453
5138
  declare function applyVoiceLocalPreview(payload: AXConversationMessagePayload, localUrl: string): AXConversationMessagePayload;
5454
5139
 
5455
- declare class AXConversationVoiceRecorderComponent {
5140
+ declare class AXConversationVoiceRecorderComponent implements AXConversationComposerActionComponent {
5456
5141
  private readonly platformId;
5457
5142
  private readonly destroyRef;
5458
- private readonly composerService;
5143
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
5144
+ private readonly composerServiceFromInjector;
5145
+ private get composerService();
5459
5146
  private readonly uploader;
5147
+ private readonly fileTypeRegistry;
5460
5148
  private readonly toast;
5461
5149
  readonly translation: AXTranslationService;
5462
5150
  readonly conversation: _angular_core.InputSignal<AXConversation>;
5151
+ readonly initialFiles: _angular_core.InputSignal<File[]>;
5152
+ readonly autoRun: _angular_core.InputSignal<boolean>;
5153
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
5154
+ readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
5463
5155
  readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
5464
5156
  readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
5465
5157
  readonly isRecording: _angular_core.WritableSignal<boolean>;
@@ -5475,7 +5167,9 @@ declare class AXConversationVoiceRecorderComponent {
5475
5167
  private uploadAbortController?;
5476
5168
  readonly formattedTime: _angular_core.Signal<string>;
5477
5169
  constructor();
5170
+ activate(): Promise<void>;
5478
5171
  startRecording(): Promise<void>;
5172
+ private dismissHost;
5479
5173
  /** Stop recording and send */
5480
5174
  stopRecording(): void;
5481
5175
  cancelRecording(): void;
@@ -5489,7 +5183,7 @@ declare class AXConversationVoiceRecorderComponent {
5489
5183
  private sendVoiceMessage;
5490
5184
  private stopAndCleanup;
5491
5185
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRecorderComponent, never>;
5492
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVoiceRecorderComponent, "ax-conversation-voice-recorder", never, { "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; }, { "recordingComplete": "recordingComplete"; "recordingCancelled": "recordingCancelled"; }, never, never, true, never>;
5186
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVoiceRecorderComponent, "ax-conversation-voice-recorder", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, { "recordingComplete": "recordingComplete"; "recordingCancelled": "recordingCancelled"; }, never, never, true, never>;
5493
5187
  }
5494
5188
 
5495
5189
  declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXConversationComposerAction;
@@ -5511,6 +5205,8 @@ declare const AX_CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
5511
5205
  /** Registers validation rules and lazy conversation file-type catalogs for composer actions. */
5512
5206
  declare function provideConversationComposerFileTypes(): Provider[];
5513
5207
 
5208
+ /** Ensure a built-in conversation catalog is registered before pre-overlay file selection. */
5209
+ declare function ensureConversationFileCatalogRegistered(registry: AXFileTypeRegistryService, catalogName: string): Promise<void>;
5514
5210
  /**
5515
5211
  * Lazy-loads conversation file catalogs for the root file-type registry.
5516
5212
  * Must not inject {@link AXConversationComposerActionRegistry} — that registry
@@ -5531,170 +5227,6 @@ declare function createLocalPreviewUrl(fileService: AXFileService, platformId: o
5531
5227
 
5532
5228
  declare function resolveComposerMaxFiles(action: Pick<AXConversationComposerAction, 'maxFiles'> | undefined, config: Pick<Required<AXConversationConfig>, 'maxFilesPerMessage'>): number;
5533
5229
 
5534
- interface AXConversationInfoProfileField {
5535
- id: string;
5536
- labelKey: string;
5537
- value: string;
5538
- icon: string;
5539
- }
5540
- type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
5541
- interface AXConversationMediaCategory {
5542
- id: AXConversationMediaCategoryId;
5543
- labelKey: string;
5544
- countLabelKey: string;
5545
- icon: string;
5546
- count: number;
5547
- }
5548
- declare function messageContainsLink(message: AXConversationMessage): boolean;
5549
- declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
5550
- declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
5551
- declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
5552
- declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
5553
- declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
5554
- declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
5555
- interface AXConversationMediaGalleryTile {
5556
- key: string;
5557
- message: AXConversationMessage;
5558
- kind: 'image' | 'video' | 'sticker';
5559
- image?: AXConversationImageMediaItem;
5560
- video?: AXConversationVideoMediaItem;
5561
- stickerUrl?: string;
5562
- stickerAlt?: string;
5563
- }
5564
- declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
5565
- declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
5566
- declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
5567
- declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
5568
- declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
5569
- interface AXConversationMediaPageResult {
5570
- items: AXConversationMessage[];
5571
- hasMore: boolean;
5572
- nextCursor?: string;
5573
- page: number;
5574
- }
5575
- declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
5576
- /** @deprecated Use {@link fetchConversationMediaPage} — loads only the first page. */
5577
- declare function fetchConversationMediaMessages(conversationApi: AXConversationApi, conversationId: string, pageSize: number): Promise<AXConversationMessage[]>;
5578
- /** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
5579
- declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
5580
- declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
5581
-
5582
- interface AXInfoPanelQuickAction {
5583
- id: string;
5584
- labelKey: string;
5585
- icon: string;
5586
- danger?: boolean;
5587
- }
5588
- declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
5589
- private readonly toastService;
5590
- readonly translation: AXTranslationService;
5591
- private readonly platform;
5592
- private readonly injectedConversationService;
5593
- readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
5594
- conversation: AXConversation;
5595
- conversationService: AXConversationService;
5596
- readonly activeTab: _angular_core.WritableSignal<"profile" | "manage">;
5597
- readonly showMemberSearch: _angular_core.WritableSignal<boolean>;
5598
- readonly panelView: _angular_core.WritableSignal<"main" | "media">;
5599
- readonly selectedMediaCategory: _angular_core.WritableSignal<AXConversationMediaCategory>;
5600
- readonly mediaViewLoader: () => Promise<typeof _acorex_components_conversation.AXConversationInfoMediaViewComponent>;
5601
- readonly conversationMessages: _angular_core.WritableSignal<AXConversationMessage[]>;
5602
- readonly loadingMessages: _angular_core.WritableSignal<boolean>;
5603
- readonly loadingMoreMedia: _angular_core.WritableSignal<boolean>;
5604
- readonly mediaHasMore: _angular_core.WritableSignal<boolean>;
5605
- private mediaNextPage;
5606
- private mediaNextCursor;
5607
- readonly memberSearchQuery: _angular_core.WritableSignal<string>;
5608
- archived: boolean;
5609
- private initialNotifications;
5610
- private initialArchived;
5611
- editTitle: string;
5612
- editAvatar: string;
5613
- private groupTitleSaveTimer;
5614
- private groupDetailsSaveInFlight;
5615
- readonly backgroundPresets: {
5616
- label: string;
5617
- id: string;
5618
- value: AXConversationMessageListThemeBackground;
5619
- }[];
5620
- readonly heroSubtitle: _angular_core.Signal<string>;
5621
- readonly liveConversation: _angular_core.Signal<AXConversation>;
5622
- readonly isConversationMuted: _angular_core.Signal<boolean>;
5623
- readonly profileFields: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoProfileField[]>;
5624
- readonly mediaCategories: _angular_core.Signal<AXConversationMediaCategory[]>;
5625
- readonly quickActions: _angular_core.Signal<AXInfoPanelQuickAction[]>;
5626
- readonly filteredMembers: _angular_core.Signal<AXConversationParticipant[]>;
5627
- ngOnInit(): void;
5628
- private loadConversationMessages;
5629
- loadMoreMedia(): Promise<void>;
5630
- isPrivateConversation(): boolean;
5631
- isGroupConversation(): boolean;
5632
- membersSectionTitle(): string;
5633
- getMemberRoleLabel(participant: AXConversationParticipant): string | null;
5634
- onMemberSearchChange(value: string | null | undefined): void;
5635
- setActiveTab(tab: 'profile' | 'manage'): void;
5636
- toggleMemberSearch(): void;
5637
- openMediaCategory(category: AXConversationMediaCategory): void;
5638
- closeMediaView(): void;
5639
- getMediaViewInputs(category: AXConversationMediaCategory): Record<string, unknown>;
5640
- getMediaRowLabel(category: AXConversationMediaCategory): string;
5641
- getMemberSubtitle(participant: AXConversationParticipant): string;
5642
- onQuickAction(actionId: string): void;
5643
- toggleConversationMute(): Promise<void>;
5644
- onNotificationsChange(value: boolean): Promise<void>;
5645
- onArchivedChange(value: boolean): Promise<void>;
5646
- close(data?: unknown): void;
5647
- closeAll(): void;
5648
- onLeave(): Promise<void>;
5649
- onGroupTitleChange(value: string): void;
5650
- onGroupAvatarChange(value: string): void;
5651
- private persistGroupDetails;
5652
- isBackgroundSelected(preset: {
5653
- id: string;
5654
- value: AXConversationMessageListThemeBackground;
5655
- }): boolean;
5656
- presetBackgroundPreview(preset: AXConversationMessageListThemeBackground): string;
5657
- applyMessageListBackground(value: AXConversationMessageListBackground): Promise<void>;
5658
- getBackgroundAriaLabel(label: string): string;
5659
- private translateBackgroundPresetLabel;
5660
- ngOnDestroy(): void;
5661
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
5662
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
5663
- }
5664
-
5665
- declare class AXConversationInfoMediaViewComponent {
5666
- private readonly translation;
5667
- private readonly parentInjector;
5668
- readonly category: _angular_core.InputSignal<AXConversationMediaCategory>;
5669
- readonly messages: _angular_core.InputSignal<AXConversationMessage[]>;
5670
- readonly conversation: _angular_core.InputSignal<AXConversation>;
5671
- readonly conversationServiceInput: _angular_core.InputSignal<AXConversationService>;
5672
- readonly hasMoreMedia: _angular_core.InputSignal<boolean>;
5673
- readonly loadingMoreMedia: _angular_core.InputSignal<boolean>;
5674
- readonly onLoadMoreMedia: _angular_core.InputSignal<() => void | Promise<void>>;
5675
- /** Callback for lazy outlet wiring (alternative to the `back` output). */
5676
- readonly onBack: _angular_core.InputSignal<() => void>;
5677
- readonly back: _angular_core.OutputEmitterRef<void>;
5678
- readonly items: _angular_core.Signal<AXConversationMessage[]>;
5679
- readonly isGrid: _angular_core.Signal<boolean>;
5680
- readonly isAttachmentList: _angular_core.Signal<boolean>;
5681
- readonly galleryTiles: _angular_core.Signal<_acorex_components_conversation.AXConversationMediaGalleryTile[]>;
5682
- readonly rendererInjector: _angular_core.Signal<_angular_core.DestroyableInjector>;
5683
- readonly titleLabel: _angular_core.Signal<string>;
5684
- readonly getMessageVideoItems: typeof getMessageVideoItems;
5685
- readonly getMessageAudioItems: typeof getMessageAudioItems;
5686
- getRendererComponent(message: AXConversationMessage): _angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
5687
- getRendererComponentLoader(message: AXConversationMessage): (() => Promise<_angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof _acorex_components_conversation.AXConversationFallbackRendererComponent>);
5688
- getRendererInputs(message: AXConversationMessage): {
5689
- message: AXConversationMessage;
5690
- };
5691
- formatTimestamp(message: AXConversationMessage): string;
5692
- handleBack(): void;
5693
- onScrollThreshold(edge: 'top' | 'bottom'): void;
5694
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoMediaViewComponent, never>;
5695
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; "hasMoreMedia": { "alias": "hasMoreMedia"; "required": false; "isSignal": true; }; "loadingMoreMedia": { "alias": "loadingMoreMedia"; "required": false; "isSignal": true; }; "onLoadMoreMedia": { "alias": "onLoadMoreMedia"; "required": false; "isSignal": true; }; "onBack": { "alias": "onBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
5696
- }
5697
-
5698
5230
  declare class AXConversationInfoBarSearchComponent {
5699
5231
  private readonly platformId;
5700
5232
  private readonly destroyRef;
@@ -5737,7 +5269,7 @@ declare class AXConversationInfoBarSearchComponent {
5737
5269
  */
5738
5270
 
5739
5271
  /**
5740
- * Search in conversation action (inline)
5272
+ * Search in conversation action (inline on desktop, menu on mobile)
5741
5273
  */
5742
5274
  declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXConversationInfoBarAction;
5743
5275
  /**
@@ -6212,14 +5744,6 @@ declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXConversationMessageAction
6212
5744
  */
6213
5745
  declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXConversationMessageAction;
6214
5746
 
6215
- /** Normalize payload; loads media normalizers on demand. */
6216
- declare function normalizeMessagePayloadAsync(payload: AXConversationMessagePayload): Promise<AXConversationMessagePayload>;
6217
- /**
6218
- * Sync normalize — uses cached normalizers when available.
6219
- * Media payloads pass through until a normalizer chunk has loaded (renderers normalize on display).
6220
- */
6221
- declare function normalizeMessagePayload(payload: AXConversationMessagePayload): AXConversationMessagePayload;
6222
-
6223
5747
  declare const AX_CONVERSATION_TEXT_RENDERER: AXConversationMessageRenderer;
6224
5748
 
6225
5749
  declare const AX_CONVERSATION_IMAGE_RENDERER: AXConversationMessageRenderer;
@@ -6649,6 +6173,52 @@ declare function copyWithFileTypeFallback(message: AXConversationMessage, regist
6649
6173
  /** Use file-type `open` on the message when `message.fileType` is set. */
6650
6174
  declare function openWithFileType(message: AXConversationMessage, registry: AXFileTypeRegistryService, ctx: AXFileTypeOpenContext): Promise<boolean>;
6651
6175
 
6176
+ interface AXConversationInfoProfileField {
6177
+ id: string;
6178
+ labelKey: string;
6179
+ value: string;
6180
+ icon: string;
6181
+ }
6182
+ type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
6183
+ interface AXConversationMediaCategory {
6184
+ id: AXConversationMediaCategoryId;
6185
+ labelKey: string;
6186
+ countLabelKey: string;
6187
+ icon: string;
6188
+ count: number;
6189
+ }
6190
+ declare function messageContainsLink(message: AXConversationMessage): boolean;
6191
+ declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
6192
+ declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
6193
+ declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
6194
+ declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
6195
+ declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
6196
+ declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
6197
+ interface AXConversationMediaGalleryTile {
6198
+ key: string;
6199
+ message: AXConversationMessage;
6200
+ kind: 'image' | 'video' | 'sticker';
6201
+ image?: AXConversationImageMediaItem;
6202
+ video?: AXConversationVideoMediaItem;
6203
+ stickerUrl?: string;
6204
+ stickerAlt?: string;
6205
+ }
6206
+ declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
6207
+ declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
6208
+ declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
6209
+ declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
6210
+ declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
6211
+ interface AXConversationMediaPageResult {
6212
+ items: AXConversationMessage[];
6213
+ hasMore: boolean;
6214
+ nextCursor?: string;
6215
+ page: number;
6216
+ }
6217
+ declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
6218
+ /** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
6219
+ declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
6220
+ declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
6221
+
6652
6222
  /**
6653
6223
  * Error Message Constants
6654
6224
  * Centralized error messages with i18n support structure
@@ -7041,5 +6611,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
7041
6611
  */
7042
6612
  type AXConversationErrorCode = typeof AX_CONVERSATION_MESSAGE_ERRORS[keyof typeof AX_CONVERSATION_MESSAGE_ERRORS]['code'] | typeof AX_CONVERSATION_FILE_ERRORS[keyof typeof AX_CONVERSATION_FILE_ERRORS]['code'] | typeof AX_CONVERSATION_USER_ERRORS[keyof typeof AX_CONVERSATION_USER_ERRORS]['code'] | typeof AX_CONVERSATION_ERRORS[keyof typeof AX_CONVERSATION_ERRORS]['code'] | typeof AX_CONVERSATION_CONNECTION_ERRORS[keyof typeof AX_CONVERSATION_CONNECTION_ERRORS]['code'] | typeof AX_CONVERSATION_LOCATION_ERRORS[keyof typeof AX_CONVERSATION_LOCATION_ERRORS]['code'] | typeof AX_CONVERSATION_URL_ERRORS[keyof typeof AX_CONVERSATION_URL_ERRORS]['code'];
7043
6613
 
7044
- export { AXConversationAiResponderService, AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_DEMO_CONVERSATION_IDS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_MESSAGE_PAGINATION_CONVERSATION_ID, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchConversationMediaMessages, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
7045
- export type { AXConversation, AXConversationAiResponderConfig, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationChatCursorKind, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerActiveComponent, AXConversationComposerPickerUploadItem, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationIndexedDbMediaRecord, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParsedChatCursor, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUserAvatarComponent, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserRole, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
6614
+ export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6615
+ export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUserAvatarComponent, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserRole, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };