@acorex/components 20.9.0 → 20.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/badge/index.d.ts +2 -4
  2. package/conversation/index.d.ts +1213 -33
  3. package/fesm2022/acorex-components-badge.mjs +17 -12
  4. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  5. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs → acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs} +2 -3
  6. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map → acorex-components-conversation-open-composer-picker-for-files-BLInQalk.mjs.map} +1 -1
  7. package/fesm2022/acorex-components-conversation.mjs +22436 -1
  8. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  9. package/fesm2022/acorex-components-file-viewer.mjs +736 -0
  10. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -0
  11. package/fesm2022/acorex-components-list.mjs +16 -3
  12. package/fesm2022/acorex-components-list.mjs.map +1 -1
  13. package/fesm2022/acorex-components-select-box.mjs +56 -9
  14. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  15. package/file-viewer/index.d.ts +178 -0
  16. package/list/index.d.ts +19 -9
  17. package/package.json +20 -15
  18. package/select-box/index.d.ts +6 -0
  19. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +0 -13711
  20. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +0 -1
  21. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +0 -119
  22. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +0 -1
  23. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +0 -59
  24. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +0 -1
  25. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +0 -432
  26. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +0 -1
  27. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +0 -177
  28. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +0 -1
  29. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +0 -54
  30. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +0 -1
  31. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +0 -100
  32. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +0 -1
  33. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +0 -121
  34. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +0 -1
  35. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +0 -84
  36. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +0 -1
  37. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +0 -238
  38. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +0 -1
  39. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +0 -1080
  40. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +0 -1
  41. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +0 -102
  42. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +0 -1
  43. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +0 -90
  44. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +0 -1
  45. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +0 -44
  46. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +0 -1
  47. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +0 -64
  48. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +0 -1
  49. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +0 -468
  50. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +0 -1
  51. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +0 -125
  52. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +0 -1
  53. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +0 -50
  54. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +0 -1
  55. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +0 -21
  56. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +0 -1
  57. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +0 -77
  58. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +0 -1
  59. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +0 -407
  60. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +0 -1
  61. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +0 -83
  62. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +0 -1
  63. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +0 -180
  64. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +0 -1
  65. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +0 -266
  66. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +0 -1
  67. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +0 -149
  68. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +0 -1
  69. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +0 -118
  70. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +0 -1
  71. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +0 -17
  72. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +0 -1
  73. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +0 -140
  74. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +0 -1
  75. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +0 -33
  76. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +0 -1
  77. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +0 -172
  78. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +0 -1
  79. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +0 -81
  80. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +0 -1
  81. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +0 -91
  82. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +0 -1
  83. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +0 -537
  84. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +0 -1
  85. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +0 -163
  86. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +0 -1
  87. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +0 -68
  88. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +0 -1
  89. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +0 -95
  90. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +0 -1
  91. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +0 -187
  92. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +0 -1
  93. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +0 -170
  94. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +0 -1
  95. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +0 -750
  96. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +0 -1
  97. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +0 -103
  98. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +0 -1
  99. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +0 -55
  100. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +0 -1
  101. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +0 -109
  102. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +0 -1
  103. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +0 -105
  104. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +0 -1
  105. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +0 -62
  106. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +0 -1
  107. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +0 -446
  108. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +0 -1
  109. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +0 -181
  110. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +0 -1
  111. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +0 -54
  112. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +0 -1
  113. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +0 -17
  114. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +0 -1
  115. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +0 -328
  116. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +0 -1
  117. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +0 -270
  118. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import * as _acorex_components_conversation from '@acorex/components/conversation';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, InjectionToken, OnInit, EventEmitter, TemplateRef, ModuleWithProviders } from '@angular/core';
4
- import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXPlacement } from '@acorex/cdk/common';
4
+ import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXPlacement, AXClosableComponent } from '@acorex/cdk/common';
5
5
  import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
6
6
  import * as _acorex_components_popup from '@acorex/components/popup';
7
7
  import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
@@ -11,9 +11,15 @@ import { AXListComponent } from '@acorex/components/list';
11
11
  import { AXDialogService } from '@acorex/components/dialog';
12
12
  import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
13
13
  import { AXBasePageComponent } from '@acorex/components/page';
14
+ import * as _acorex_core_file from '@acorex/core/file';
15
+ import { AXFileTypeInfoProvider, AXFileType, AXFileService, AXFileTypeRegistryService, AXFileTypeExtensionHint, AXFileTypeOpenContext } from '@acorex/core/file';
16
+ import { AXTranslationService } from '@acorex/core/translation';
17
+ import { AXToastService } from '@acorex/components/toast';
18
+ import { AXValidationRuleResult } from '@acorex/core/validation';
19
+ import { AXMapMarker } from '@acorex/components/map';
20
+ import { SafeHtml } from '@angular/platform-browser';
14
21
  import * as i1 from '@angular/common';
15
22
  import * as i2 from '@angular/forms';
16
- import { AXFileTypeRegistryService, AXFileTypeExtensionHint, AXFileTypeOpenContext } from '@acorex/core/file';
17
23
 
18
24
  declare class AXConversationComposerPopupComponent implements OnDestroy {
19
25
  private readonly conversationService;
@@ -4436,6 +4442,8 @@ declare class AXConversationSharedStorage {
4436
4442
  }
4437
4443
  declare const axConversationSharedStorage: AXConversationSharedStorage;
4438
4444
 
4445
+ declare function seedSharedStorageInitialData(storage: AXConversationSharedStorage): Promise<void>;
4446
+
4439
4447
  /**
4440
4448
  * Chat-oriented pagination helpers for IndexedDB demo APIs.
4441
4449
  *
@@ -4470,6 +4478,14 @@ declare function paginateChatOldestFirst<T extends {
4470
4478
  id: string;
4471
4479
  }>(sortedOldestFirst: T[], pagination: AXConversationPagination): AXConversationPaginatedResult<T>;
4472
4480
 
4481
+ /**
4482
+ * Extra seed data so sidebar and message-list pagination can be exercised in the demo.
4483
+ */
4484
+ /**
4485
+ * Append demo chats/messages when the DB is too small for default page sizes (30 / 50).
4486
+ */
4487
+ declare function ensurePaginationDemoData(): Promise<void>;
4488
+
4473
4489
  /**
4474
4490
  * Shared read/write helpers for IndexedDB chat storage (in-memory + persistence).
4475
4491
  */
@@ -4753,6 +4769,584 @@ declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedD
4753
4769
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
4754
4770
  }
4755
4771
 
4772
+ declare const AX_CONVERSATION_AUDIO_PRESENTATION: {
4773
+ readonly icon: "fa-light fa-music ax-text-amber-500";
4774
+ readonly title: "Audio";
4775
+ };
4776
+ declare function conversationAudioUtilities(): NonNullable<AXFileType['utilities']>;
4777
+ declare function createConversationAudioFileType(): AXFileType;
4778
+ declare class AXConversationAudioFileTypeProvider extends AXFileTypeInfoProvider {
4779
+ items(): Promise<AXFileType<{
4780
+ [x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
4781
+ }>[]>;
4782
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioFileTypeProvider, never>;
4783
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAudioFileTypeProvider>;
4784
+ }
4785
+
4786
+ declare function audioItemFromUpload(file: File, result: AXConversationUploaderResult, duration: number): AXConversationAudioMediaItem;
4787
+ declare function mergeAudioUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
4788
+ declare function applyAudioLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
4789
+
4790
+ /**
4791
+ * Shared upload state and helpers for composer media pickers.
4792
+ */
4793
+
4794
+ interface AXConversationComposerPickerUploadItem {
4795
+ file: File;
4796
+ preview?: string;
4797
+ duration?: number;
4798
+ uploadProgress?: number;
4799
+ uploading?: boolean;
4800
+ uploaded?: boolean;
4801
+ uploadedUrl?: string;
4802
+ mediaId?: string;
4803
+ error?: string;
4804
+ abortController?: AbortController;
4805
+ }
4806
+ declare function getPickerCancelUploadLabel(translation: AXTranslationService): string;
4807
+ declare function abortPickerUploads(items: Iterable<{
4808
+ abortController?: AbortController;
4809
+ } | null | undefined>): void;
4810
+ interface AXConversationCleanupPickerUploadsOptions {
4811
+ retainUploaded?: boolean;
4812
+ }
4813
+ /** Upload finished; reference is {@link mediaId} and/or a non-empty session url. */
4814
+ declare function isPickerItemReadyToSend(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId'>): boolean;
4815
+ /** Build uploader result shape for {@link *ItemFromUpload} after picker upload. */
4816
+ declare function pickerItemToUploadResult(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId' | 'file'>): {
4817
+ url: string;
4818
+ mediaId?: string;
4819
+ mimeType: string;
4820
+ size: number;
4821
+ } | null;
4822
+ declare function pickerItemToMediaReference(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId' | 'file'>): AXConversationUploaderReference | null;
4823
+ declare function deleteUploadedPickerMedia(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>): Promise<void>;
4824
+ declare function cleanupPickerUploads(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>, options?: AXConversationCleanupPickerUploadsOptions): void;
4825
+ declare function revokePickerBlobPreviews(items: Iterable<{
4826
+ preview?: string;
4827
+ } | null | undefined>): void;
4828
+ declare function isUploadAborted(error: unknown, signal?: AbortSignal): boolean;
4829
+ declare function limitFilesToCapacity(files: File[], currentCount: number, maxFiles: number): File[];
4830
+ declare function uploadPickerFile(uploader: AXUploaderService, conversationId: string, file: File, onProgress: (percent: number) => void, signal?: AbortSignal): Promise<{
4831
+ url: string;
4832
+ mediaId?: string;
4833
+ mimeType: string;
4834
+ size: number;
4835
+ }>;
4836
+ declare function notifyMaxFilesCapacityExceeded(toast: AXToastService, translation: AXTranslationService, maxFiles: number): void;
4837
+ /** User-facing message for a file validation failure. */
4838
+ declare function formatPickerValidationMessage(translation: AXTranslationService, file: File, error: AXValidationRuleResult | undefined): string;
4839
+ /** Show a warning toast for each failed validation rule result. */
4840
+ declare function notifyPickerValidationErrors(toast: AXToastService, translation: AXTranslationService, rejected: {
4841
+ file: File;
4842
+ errors: AXValidationRuleResult[];
4843
+ }[]): void;
4844
+ /** Load files dropped onto the message list after the picker is mounted in a popup. */
4845
+ declare function seedPickerInitialFiles(initialFiles: InputSignal<File[]>, handleFiles: (files: File[]) => void | Promise<void>): void;
4846
+ /** Close inline composer shell or popup host after send/cancel. */
4847
+ declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null): void;
4848
+
4849
+ interface AXConversationAudioFile extends AXConversationComposerPickerUploadItem {
4850
+ duration?: number;
4851
+ dataUrl?: string;
4852
+ }
4853
+ declare class AXConversationAudioPickerComponent implements OnDestroy {
4854
+ private uploadsDismissed;
4855
+ private retainUploadedOnDismiss;
4856
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
4857
+ private readonly composerServiceFromInjector;
4858
+ private get composerService();
4859
+ private readonly uploader;
4860
+ private readonly fileService;
4861
+ private readonly fileTypeRegistry;
4862
+ private readonly platformId;
4863
+ private readonly toast;
4864
+ readonly translation: AXTranslationService;
4865
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
4866
+ readonly maxFiles: _angular_core.InputSignal<number>;
4867
+ readonly initialFiles: _angular_core.InputSignal<File[]>;
4868
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4869
+ readonly catalogFileType: "conversation-audio";
4870
+ readonly audioFiles: _angular_core.WritableSignal<AXConversationAudioFile[]>;
4871
+ readonly isDragging: _angular_core.WritableSignal<boolean>;
4872
+ readonly typeIconClass: "fa-light fa-music ax-text-amber-500";
4873
+ readonly emptyIconClass: _angular_core.Signal<"fa-light fa-music ax-text-amber-500" | "fa-light fa-cloud-arrow-up">;
4874
+ private catalogFileTypeDef?;
4875
+ caption: string;
4876
+ readonly allowMultiple: _angular_core.Signal<boolean>;
4877
+ constructor();
4878
+ private createUtilityContext;
4879
+ private getCatalogFileTypeDef;
4880
+ private runUtility;
4881
+ handleFiles(files: File[]): Promise<void>;
4882
+ private uploadAudioAt;
4883
+ private patchAudio;
4884
+ removeAudio(index: number): void;
4885
+ sendAudio(): Promise<void>;
4886
+ canSend(): boolean;
4887
+ getUploadingLabel(progress: number): string;
4888
+ getCancelUploadLabel(): string;
4889
+ cancel(): void;
4890
+ ngOnDestroy(): void;
4891
+ private dismissPicker;
4892
+ formatFileSize(bytes: number): string;
4893
+ formatDuration(seconds: number): string;
4894
+ getEmptyTitle(): string;
4895
+ getEmptySubtitle(): string;
4896
+ getSelectedCountText(): string;
4897
+ getSendText(): string;
4898
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioPickerComponent, never>;
4899
+ 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>;
4900
+ }
4901
+
4902
+ declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXConversationComposerTab;
4903
+ declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXConversationComposerTab;
4904
+
4905
+ interface AXConversationEmoji {
4906
+ char: string;
4907
+ name: string;
4908
+ keywords: string[];
4909
+ }
4910
+ interface AXConversationEmojiCategory {
4911
+ id: string;
4912
+ name: string;
4913
+ icon: string;
4914
+ emojis: AXConversationEmoji[];
4915
+ }
4916
+ declare class AXConversationEmojiTabComponent {
4917
+ /** Emoji selected event */
4918
+ readonly itemSelected: _angular_core.OutputEmitterRef<string>;
4919
+ /** Search query */
4920
+ readonly searchQuery: _angular_core.WritableSignal<string>;
4921
+ /** Active category */
4922
+ private readonly activeCategoryId;
4923
+ /** Categories */
4924
+ readonly categories: _angular_core.WritableSignal<AXConversationEmojiCategory[]>;
4925
+ constructor();
4926
+ /** Filtered emojis */
4927
+ readonly filteredEmojis: _angular_core.Signal<AXConversationEmoji[]>;
4928
+ /** Select category */
4929
+ selectCategory(categoryId: string): void;
4930
+ /** Get category CSS classes */
4931
+ getCategoryClasses(categoryId: string): string;
4932
+ onSearchChange(event: {
4933
+ value?: string;
4934
+ }): void;
4935
+ /** Select emoji */
4936
+ selectEmoji(emoji: string): void;
4937
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationEmojiTabComponent, never>;
4938
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationEmojiTabComponent, "ax-conversation-emoji-tab", never, {}, { "itemSelected": "itemSelected"; }, never, never, true, never>;
4939
+ }
4940
+
4941
+ declare const AX_CONVERSATION_FILE_PRESENTATION: {
4942
+ readonly icon: "fa-light fa-file ax-text-neutral-500";
4943
+ readonly title: "File";
4944
+ };
4945
+ declare function conversationFileUtilities(): NonNullable<AXFileType['utilities']>;
4946
+ declare function createConversationFileFileType(): _acorex_core_file.AXFileType;
4947
+ declare class AXConversationFileFileTypeProvider extends AXFileTypeInfoProvider {
4948
+ items(): Promise<AXFileType<{
4949
+ [x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
4950
+ }>[]>;
4951
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileFileTypeProvider, never>;
4952
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationFileFileTypeProvider>;
4953
+ }
4954
+
4955
+ declare function fileItemFromUpload(file: File, result: AXConversationUploaderResult): AXConversationFileMediaItem;
4956
+ declare function mergeFileUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
4957
+ declare function applyFileLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
4958
+
4959
+ interface AXConversationAttachedFile {
4960
+ file: File;
4961
+ preview?: string;
4962
+ icon: string;
4963
+ type: 'image' | 'video' | 'audio' | 'file';
4964
+ uploadProgress?: number;
4965
+ uploading?: boolean;
4966
+ uploaded?: boolean;
4967
+ uploadedUrl?: string;
4968
+ mediaId?: string;
4969
+ error?: string;
4970
+ abortController?: AbortController;
4971
+ }
4972
+ declare class AXConversationFilePickerComponent implements OnDestroy {
4973
+ private uploadsDismissed;
4974
+ private retainUploadedOnDismiss;
4975
+ private readonly uploader;
4976
+ private readonly fileService;
4977
+ private readonly fileTypeRegistry;
4978
+ private readonly platformId;
4979
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
4980
+ private readonly composerServiceFromInjector;
4981
+ private get composerService();
4982
+ private readonly toast;
4983
+ readonly translation: AXTranslationService;
4984
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
4985
+ readonly maxFiles: _angular_core.InputSignal<number>;
4986
+ readonly initialFiles: _angular_core.InputSignal<File[]>;
4987
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
4988
+ readonly catalogFileType: "conversation-file";
4989
+ readonly allowMultiple: _angular_core.Signal<boolean>;
4990
+ readonly files: _angular_core.WritableSignal<AXConversationAttachedFile[]>;
4991
+ readonly isDragging: _angular_core.WritableSignal<boolean>;
4992
+ readonly isUploading: _angular_core.WritableSignal<boolean>;
4993
+ readonly emptyIconClass: _angular_core.Signal<"fa-light fa-file ax-text-neutral-500" | "fa-light fa-cloud-arrow-up">;
4994
+ private catalogFileTypeDef?;
4995
+ caption: string;
4996
+ constructor();
4997
+ private createUtilityContext;
4998
+ private getCatalogFileTypeDef;
4999
+ private pickerKind;
5000
+ handleFiles(fileList: File[]): Promise<void>;
5001
+ private uploadFile;
5002
+ removeFile(index: number): void;
5003
+ sendFiles(): Promise<void>;
5004
+ private updateFileProgress;
5005
+ private uploadFileWithProgress;
5006
+ cancel(): void;
5007
+ ngOnDestroy(): void;
5008
+ private dismissPicker;
5009
+ getCancelUploadLabel(): string;
5010
+ formatFileSize(bytes: number): string;
5011
+ canSend(): boolean;
5012
+ getSendButtonText(): string;
5013
+ getEmptyTitle(): string;
5014
+ getEmptySubtitle(): string;
5015
+ getSelectedCountText(): string;
5016
+ getUploadingLabel(progress: number): string;
5017
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFilePickerComponent, never>;
5018
+ 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>;
5019
+ }
5020
+
5021
+ declare const AX_CONVERSATION_IMAGE_PRESENTATION: {
5022
+ readonly icon: "fa-light fa-image ax-text-purple-500";
5023
+ readonly title: "Image";
5024
+ };
5025
+ declare function conversationImageUtilities(): NonNullable<AXFileType['utilities']>;
5026
+ declare function createConversationImageFileType(): AXFileType;
5027
+ declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider {
5028
+ items(): Promise<AXFileType<{
5029
+ [x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
5030
+ }>[]>;
5031
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageFileTypeProvider, never>;
5032
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationImageFileTypeProvider>;
5033
+ }
5034
+
5035
+ interface AXConversationImageFile extends AXConversationComposerPickerUploadItem {
5036
+ preview: string;
5037
+ }
5038
+ declare class AXConversationImagePickerComponent implements OnDestroy {
5039
+ private uploadsDismissed;
5040
+ /** Uploaded blobs are referenced by the sent message — do not delete on dismiss. */
5041
+ private retainUploadedOnDismiss;
5042
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
5043
+ private readonly composerServiceFromInjector;
5044
+ private get composerService();
5045
+ private readonly uploader;
5046
+ private readonly fileService;
5047
+ private readonly fileTypeRegistry;
5048
+ private readonly platformId;
5049
+ private readonly toast;
5050
+ readonly translation: AXTranslationService;
5051
+ readonly catalogFileType: "conversation-image";
5052
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5053
+ readonly maxFiles: _angular_core.InputSignal<number>;
5054
+ readonly initialFiles: _angular_core.InputSignal<File[]>;
5055
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
5056
+ readonly images: _angular_core.WritableSignal<AXConversationImageFile[]>;
5057
+ readonly isDragging: _angular_core.WritableSignal<boolean>;
5058
+ readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image ax-text-purple-500" | "fa-light fa-cloud-arrow-up">;
5059
+ caption: string;
5060
+ readonly allowMultiple: _angular_core.Signal<boolean>;
5061
+ private imageFileType?;
5062
+ constructor();
5063
+ private createUtilityContext;
5064
+ private loadImageFileType;
5065
+ handleFiles(files: File[]): Promise<void>;
5066
+ private uploadImageAt;
5067
+ private patchImage;
5068
+ removeImage(index: number): void;
5069
+ sendImages(): Promise<void>;
5070
+ canSend(): boolean;
5071
+ getUploadingLabel(progress: number): string;
5072
+ getCancelUploadLabel(): string;
5073
+ cancel(): void;
5074
+ ngOnDestroy(): void;
5075
+ private dismissPicker;
5076
+ getEmptyTitle(): string;
5077
+ getEmptySubtitle(): string;
5078
+ getSelectedCountText(): string;
5079
+ getSendText(): string;
5080
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImagePickerComponent, never>;
5081
+ 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>;
5082
+ }
5083
+
5084
+ declare class AXConversationLocationPickerComponent {
5085
+ private readonly composerService;
5086
+ private readonly conversationService;
5087
+ readonly translation: AXTranslationService;
5088
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5089
+ readonly currentLocation: _angular_core.WritableSignal<AXConversationLocationPayload>;
5090
+ onMarkerAdded(event: AXMapMarker): void;
5091
+ sendLocation(): Promise<void>;
5092
+ cancel(): void;
5093
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationPickerComponent, never>;
5094
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationPickerComponent, "ax-conversation-location-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5095
+ }
5096
+
5097
+ declare class AXConversationPickerFooterComponent {
5098
+ readonly sendText: _angular_core.InputSignal<string>;
5099
+ readonly sendDisabled: _angular_core.InputSignal<boolean>;
5100
+ readonly onCancel: _angular_core.OutputEmitterRef<void>;
5101
+ readonly onSend: _angular_core.OutputEmitterRef<void>;
5102
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerFooterComponent, never>;
5103
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerFooterComponent, "ax-conversation-picker-footer", never, { "sendText": { "alias": "sendText"; "required": true; "isSignal": true; }; "sendDisabled": { "alias": "sendDisabled"; "required": false; "isSignal": true; }; }, { "onCancel": "onCancel"; "onSend": "onSend"; }, never, never, true, never>;
5104
+ }
5105
+
5106
+ declare class AXConversationPickerHeaderComponent {
5107
+ readonly title: _angular_core.InputSignal<string>;
5108
+ readonly onClose: _angular_core.OutputEmitterRef<void>;
5109
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerHeaderComponent, never>;
5110
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerHeaderComponent, "ax-conversation-picker-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; }, { "onClose": "onClose"; }, never, never, true, never>;
5111
+ }
5112
+
5113
+ declare function formatFileSize(bytes: number): string;
5114
+ declare function formatDuration(seconds: number): string;
5115
+
5116
+ /** Inline or session-only URLs that must not be stored on message payloads or sent to APIs. */
5117
+ declare function isNonPersistableMediaUrl(url: string | undefined): boolean;
5118
+ /** Thumbnail for persistence/API (never data: or blob:). */
5119
+ declare function resolvePersistedThumbnailUrl(thumbnailUrl: string | undefined, contentUrl?: string): string | undefined;
5120
+ /** Content URL safe to persist or bind on reload (blob:/data: are session-only). */
5121
+ declare function resolvePersistableMediaUrl(url: string | undefined): string | undefined;
5122
+ /** First non-empty URL for img/video/audio at runtime (includes resolved blob: URLs). */
5123
+ declare function pickDisplayMediaUrl(...candidates: (string | null | undefined)[]): string;
5124
+
5125
+ /** Optional caption field shared by composer media pickers. */
5126
+ declare class AXConversationPickerCaptionComponent {
5127
+ readonly translation: AXTranslationService;
5128
+ readonly caption: _angular_core.ModelSignal<string>;
5129
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerCaptionComponent, never>;
5130
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerCaptionComponent, "ax-conversation-picker-caption", never, { "caption": { "alias": "caption"; "required": false; "isSignal": true; }; }, { "caption": "captionChange"; }, never, never, true, never>;
5131
+ }
5132
+
5133
+ /** Shared drag-and-drop handlers for composer pickers. */
5134
+ declare function createPickerDragHandlers(isDragging: WritableSignal<boolean>): {
5135
+ onDragEnter(event: DragEvent): void;
5136
+ onDragOver(event: DragEvent): void;
5137
+ onDragLeave(event: DragEvent): void;
5138
+ onDrop(event: DragEvent, onFiles: (files: File[]) => void): void;
5139
+ };
5140
+
5141
+ declare class AXConversationPickerEmptyComponent {
5142
+ private readonly host;
5143
+ readonly title: _angular_core.InputSignal<string>;
5144
+ readonly hint: _angular_core.InputSignal<string>;
5145
+ readonly iconClass: _angular_core.InputSignal<string>;
5146
+ readonly dragOver: _angular_core.InputSignal<boolean>;
5147
+ onKeyboardActivate(event: Event): void;
5148
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerEmptyComponent, never>;
5149
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerEmptyComponent, "ax-conversation-picker-empty", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": true; "isSignal": true; }; "iconClass": { "alias": "iconClass"; "required": true; "isSignal": true; }; "dragOver": { "alias": "dragOver"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5150
+ }
5151
+
5152
+ /**
5153
+ * Shell flex + max-height (on {@link AXConversationPickerShellComponent}).
5154
+ * Styles here target projected content inside the shell.
5155
+ */
5156
+ declare const AX_CONVERSATION_PICKER_SHELL_STYLES = "\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-height: 0;\n container-type: inline-size;\n container-name: picker;\n }\n\n .ax-conversation-picker {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: 100%;\n max-height: min(32rem, 85dvh);\n background: rgb(var(--ax-sys-color-lightest-surface));\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n overflow: hidden;\n }\n\n .ax-conversation-picker__content {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n }\n\n @container picker (max-width: 480px) {\n .ax-conversation-picker {\n max-height: min(28rem, 90dvh);\n border-radius: 0;\n }\n }\n";
5157
+ /**
5158
+ * Shared layout and surface styles for composer media pickers.
5159
+ * Uses ACoreX system color tokens only.
5160
+ */
5161
+ declare const AX_CONVERSATION_PICKER_SHARED_STYLES = "\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-height: 0;\n }\n\n .ax-conversation-picker__scroll {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n }\n\n .ax-conversation-picker__empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.375rem;\n min-height: 8.5rem;\n margin: 0.75rem;\n padding: 1rem 0.75rem;\n border: 1px dashed rgb(var(--ax-sys-color-border-surface));\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n cursor: pointer;\n transition: border-color 0.15s ease, background-color 0.15s ease;\n text-align: center;\n touch-action: manipulation;\n }\n\n .ax-conversation-picker__empty:hover,\n .ax-conversation-picker__empty--drag {\n border-color: rgb(var(--ax-sys-color-primary-500));\n background: rgba(var(--ax-sys-color-primary-500), 0.06);\n }\n\n .ax-conversation-picker__empty-icon {\n font-size: 1.75rem;\n line-height: 1;\n color: rgba(var(--ax-sys-color-on-surface), 0.55);\n }\n\n .ax-conversation-picker__empty-title {\n margin: 0;\n font-size: 0.8125rem;\n font-weight: 600;\n color: rgb(var(--ax-sys-color-on-surface));\n }\n\n .ax-conversation-picker__empty-hint {\n margin: 0;\n font-size: 0.75rem;\n color: rgba(var(--ax-sys-color-on-surface), 0.6);\n }\n\n .ax-conversation-picker__body {\n padding: 0 0.75rem 0.75rem;\n }\n\n .ax-conversation-picker__list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding-top: 0.5rem;\n }\n\n .ax-conversation-picker__row {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.625rem;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n background: rgb(var(--ax-sys-color-surface));\n transition: background-color 0.15s ease;\n }\n\n @media (hover: hover) {\n .ax-conversation-picker__row:hover {\n background: rgb(var(--ax-sys-color-light-surface));\n }\n }\n\n .ax-conversation-picker__thumb {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n flex-shrink: 0;\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n background: rgba(var(--ax-sys-color-primary-500), 0.08);\n color: rgb(var(--ax-sys-color-primary-500));\n font-size: 1.125rem;\n overflow: hidden;\n }\n\n .ax-conversation-picker__thumb img,\n .ax-conversation-picker__thumb video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n pointer-events: none;\n }\n\n .ax-conversation-picker__thumb-badge {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgb(0 0 0 / 0.32);\n color: rgb(var(--ax-sys-color-light));\n font-size: 0.625rem;\n pointer-events: none;\n }\n\n .ax-conversation-picker__details {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n }\n\n .ax-conversation-picker__name {\n font-size: 0.8125rem;\n font-weight: 500;\n color: rgb(var(--ax-sys-color-on-surface));\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ax-conversation-picker__status {\n display: flex;\n flex-wrap: wrap;\n gap: 0.375rem;\n font-size: 0.6875rem;\n color: rgba(var(--ax-sys-color-on-surface), 0.65);\n }\n\n .ax-conversation-picker__status--ok {\n color: rgb(var(--ax-sys-color-success-600));\n font-weight: 500;\n }\n\n .ax-conversation-picker__status--err {\n color: rgb(var(--ax-sys-color-danger-600));\n font-weight: 500;\n }\n\n .ax-conversation-picker__progress {\n width: 100%;\n margin-top: 0.125rem;\n }\n\n .ax-conversation-picker__remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n flex-shrink: 0;\n border: none;\n border-radius: var(--ax-sys-border-radius, 0.25rem);\n background: transparent;\n color: rgba(var(--ax-sys-color-on-surface), 0.55);\n font-size: 1rem;\n cursor: pointer;\n touch-action: manipulation;\n transition: background-color 0.15s ease, color 0.15s ease;\n }\n\n .ax-conversation-picker__remove:hover,\n .ax-conversation-picker__remove:focus-visible {\n background: rgba(var(--ax-sys-color-danger-500), 0.1);\n color: rgb(var(--ax-sys-color-danger-500));\n outline: none;\n }\n\n .ax-conversation-picker__grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5.25rem, 1fr));\n gap: 0.5rem;\n }\n\n .ax-conversation-picker__tile {\n position: relative;\n aspect-ratio: 1;\n border-radius: var(--ax-sys-border-radius, 0.375rem);\n overflow: hidden;\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-light-surface));\n }\n\n .ax-conversation-picker__tile img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n .ax-conversation-picker__tile-remove {\n position: absolute;\n top: 0.25rem;\n inset-inline-end: 0.25rem;\n z-index: 2;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 1.75rem;\n height: 1.75rem;\n border: none;\n border-radius: 50%;\n background: rgb(var(--ax-sys-color-danger-500));\n color: rgb(var(--ax-sys-color-light));\n font-size: 0.6875rem;\n cursor: pointer;\n touch-action: manipulation;\n box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);\n }\n\n .ax-conversation-picker__tile-overlay {\n position: absolute;\n inset-inline: 0;\n bottom: 0;\n padding: 0.25rem;\n background: linear-gradient(transparent, rgb(0 0 0 / 0.55));\n }\n\n .ax-conversation-picker__tile-status {\n font-size: 0.625rem;\n color: rgb(var(--ax-sys-color-light));\n line-height: 1.2;\n }\n\n .ax-conversation-picker__caption-slot {\n flex-shrink: 0;\n padding: 0.5rem 0.75rem;\n border-top: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-lightest-surface));\n }\n\n .ax-conversation-picker__input-hidden {\n display: none;\n }\n\n @container picker (max-width: 480px) {\n .ax-conversation-picker__grid {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 0.375rem;\n }\n\n .ax-conversation-picker__row {\n padding: 0.4375rem 0.5rem;\n gap: 0.5rem;\n }\n\n .ax-conversation-picker__thumb {\n width: 2.25rem;\n height: 2.25rem;\n }\n\n .ax-conversation-picker__empty {\n min-height: 7.5rem;\n margin: 0.5rem;\n }\n\n .ax-conversation-picker__body {\n padding-inline: 0.5rem;\n padding-bottom: 0.5rem;\n }\n }\n";
5162
+
5163
+ /**
5164
+ * Wraps composer pickers with {@link AXUploaderZoneDirective} for browse, drop, and validation.
5165
+ */
5166
+ declare class AXConversationPickerShellComponent {
5167
+ private readonly toast;
5168
+ private readonly translation;
5169
+ readonly fileType: _angular_core.InputSignal<string>;
5170
+ readonly multiple: _angular_core.InputSignal<boolean>;
5171
+ readonly filesSelected: _angular_core.OutputEmitterRef<File[]>;
5172
+ readonly dragEnter: _angular_core.OutputEmitterRef<DragEvent>;
5173
+ readonly dragLeave: _angular_core.OutputEmitterRef<DragEvent>;
5174
+ readonly dragOver: _angular_core.OutputEmitterRef<DragEvent>;
5175
+ protected onZoneFileChange(event: AXUploaderFileChangeEvent): void;
5176
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerShellComponent, never>;
5177
+ 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>;
5178
+ }
5179
+
5180
+ declare class AXConversationPickerToolbarComponent {
5181
+ readonly countLabel: _angular_core.InputSignal<string>;
5182
+ readonly addMoreLabel: _angular_core.InputSignal<string>;
5183
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerToolbarComponent, never>;
5184
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerToolbarComponent, "ax-conversation-picker-toolbar", never, { "countLabel": { "alias": "countLabel"; "required": true; "isSignal": true; }; "addMoreLabel": { "alias": "addMoreLabel"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5185
+ }
5186
+
5187
+ declare const AX_CONVERSATION_STICKER_API_KEY: InjectionToken<string>;
5188
+ interface AXConversationStickerCategory {
5189
+ id: string;
5190
+ name: string;
5191
+ icon: string;
5192
+ searchTerm: string;
5193
+ }
5194
+ declare class AXConversationStickerTabComponent {
5195
+ private readonly http;
5196
+ private readonly destroyRef;
5197
+ private readonly apiKey;
5198
+ readonly itemSelected: _angular_core.OutputEmitterRef<AXConversationStickerPayload>;
5199
+ readonly searchQuery: _angular_core.WritableSignal<string>;
5200
+ readonly activeStickers: _angular_core.WritableSignal<AXConversationStickerPayload[]>;
5201
+ readonly loading: _angular_core.WritableSignal<boolean>;
5202
+ readonly stickerCategories: AXConversationStickerCategory[];
5203
+ readonly skeletonItems: number[];
5204
+ private readonly activeCategoryId;
5205
+ private searchTimeout?;
5206
+ constructor();
5207
+ private loadStickers;
5208
+ /** Select category */
5209
+ selectPack(categoryId: string): void;
5210
+ private searchStickers;
5211
+ onSearchChange(event: {
5212
+ value?: string;
5213
+ }): void;
5214
+ /** Get category CSS classes */
5215
+ getPackClasses(categoryId: string): string;
5216
+ private mapGiphyStickers;
5217
+ selectSticker(sticker: AXConversationStickerPayload): void;
5218
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationStickerTabComponent, never>;
5219
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationStickerTabComponent, "ax-conversation-sticker-tab", never, {}, { "itemSelected": "itemSelected"; }, never, never, true, never>;
5220
+ }
5221
+
5222
+ declare const AX_CONVERSATION_VIDEO_PRESENTATION: {
5223
+ readonly icon: "fa-light fa-video ax-text-blue-500";
5224
+ readonly title: "Video";
5225
+ };
5226
+ declare function conversationVideoUtilities(): NonNullable<AXFileType['utilities']>;
5227
+ declare function createConversationVideoFileType(): AXFileType;
5228
+ declare class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider {
5229
+ items(): Promise<AXFileType<{
5230
+ [x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
5231
+ }>[]>;
5232
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoFileTypeProvider, never>;
5233
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVideoFileTypeProvider>;
5234
+ }
5235
+
5236
+ declare function videoItemFromUpload(file: File, result: AXConversationUploaderResult, duration: number): AXConversationVideoMediaItem;
5237
+ declare function mergeVideoUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
5238
+ declare function applyVideoLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
5239
+
5240
+ interface AXConversationVideoFile extends AXConversationComposerPickerUploadItem {
5241
+ preview?: string;
5242
+ duration?: number;
5243
+ }
5244
+ declare class AXConversationVideoPickerComponent implements OnDestroy {
5245
+ private uploadsDismissed;
5246
+ private retainUploadedOnDismiss;
5247
+ readonly service: _angular_core.InputSignal<AXConversationComposerService>;
5248
+ private readonly composerServiceFromInjector;
5249
+ private get composerService();
5250
+ private readonly uploader;
5251
+ private readonly fileService;
5252
+ private readonly fileTypeRegistry;
5253
+ private readonly platformId;
5254
+ private readonly toast;
5255
+ readonly translation: AXTranslationService;
5256
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5257
+ readonly maxFiles: _angular_core.InputSignal<number>;
5258
+ readonly initialFiles: _angular_core.InputSignal<File[]>;
5259
+ readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
5260
+ readonly catalogFileType: "conversation-video";
5261
+ readonly videos: _angular_core.WritableSignal<AXConversationVideoFile[]>;
5262
+ readonly isDragging: _angular_core.WritableSignal<boolean>;
5263
+ caption: string;
5264
+ readonly allowMultiple: _angular_core.Signal<boolean>;
5265
+ readonly typeIconClass: "fa-light fa-video ax-text-blue-500";
5266
+ readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
5267
+ private catalogFileTypeDef?;
5268
+ constructor();
5269
+ private createUtilityContext;
5270
+ private getCatalogFileTypeDef;
5271
+ private runUtility;
5272
+ handleFiles(files: File[]): Promise<void>;
5273
+ private uploadVideoAt;
5274
+ private patchVideo;
5275
+ removeVideo(index: number): void;
5276
+ sendVideos(): Promise<void>;
5277
+ canSend(): boolean;
5278
+ getUploadingLabel(progress: number): string;
5279
+ getCancelUploadLabel(): string;
5280
+ cancel(): void;
5281
+ ngOnDestroy(): void;
5282
+ private dismissPicker;
5283
+ formatFileSize(bytes: number): string;
5284
+ formatDuration(seconds: number): string;
5285
+ getEmptyTitle(): string;
5286
+ getEmptySubtitle(): string;
5287
+ getSelectedCountText(): string;
5288
+ getSendText(): string;
5289
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoPickerComponent, never>;
5290
+ 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>;
5291
+ }
5292
+
5293
+ declare const AX_CONVERSATION_VOICE_PRESENTATION: {
5294
+ readonly icon: "fa-light fa-microphone ax-text-green-500";
5295
+ readonly title: "Voice message";
5296
+ };
5297
+ declare function conversationVoiceUtilities(): NonNullable<AXFileType['utilities']>;
5298
+ declare function createConversationVoiceFileType(): AXFileType;
5299
+ declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider {
5300
+ items(): Promise<AXFileType<{
5301
+ [x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
5302
+ }>[]>;
5303
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceFileTypeProvider, never>;
5304
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVoiceFileTypeProvider>;
5305
+ }
5306
+
5307
+ declare function mergeVoiceUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
5308
+ declare function applyVoiceLocalPreview(payload: AXConversationMessagePayload, localUrl: string): AXConversationMessagePayload;
5309
+
5310
+ declare class AXConversationVoiceRecorderComponent {
5311
+ private readonly platformId;
5312
+ private readonly destroyRef;
5313
+ private readonly composerService;
5314
+ private readonly uploader;
5315
+ private readonly toast;
5316
+ readonly translation: AXTranslationService;
5317
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5318
+ readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
5319
+ readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
5320
+ readonly isRecording: _angular_core.WritableSignal<boolean>;
5321
+ readonly isUploading: _angular_core.WritableSignal<boolean>;
5322
+ readonly uploadProgress: _angular_core.WritableSignal<number>;
5323
+ readonly recordingDuration: _angular_core.WritableSignal<number>;
5324
+ private recordingStartTime;
5325
+ private timerInterval?;
5326
+ private mediaRecorder?;
5327
+ private audioChunks;
5328
+ private activeStream?;
5329
+ private cancelled;
5330
+ private uploadAbortController?;
5331
+ readonly formattedTime: _angular_core.Signal<string>;
5332
+ constructor();
5333
+ startRecording(): Promise<void>;
5334
+ /** Stop recording and send */
5335
+ stopRecording(): void;
5336
+ cancelRecording(): void;
5337
+ /** Close the voice recorder */
5338
+ cancel(): void;
5339
+ abortInProgressUploads(): void;
5340
+ /** Clear timer */
5341
+ private clearTimer;
5342
+ getUploadingLabel(): string;
5343
+ /** Send voice message */
5344
+ private sendVoiceMessage;
5345
+ private stopAndCleanup;
5346
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRecorderComponent, never>;
5347
+ 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>;
5348
+ }
5349
+
4756
5350
  declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXConversationComposerAction;
4757
5351
 
4758
5352
  declare const AX_CONVERSATION_COMPOSER_IMAGE_ACTION: AXConversationComposerAction;
@@ -4772,8 +5366,195 @@ declare const AX_CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
4772
5366
  /** Registers validation rules and lazy conversation file-type catalogs for enabled pickers. */
4773
5367
  declare function provideConversationComposerFileTypes(_features?: AXConversationFeatures): Provider[];
4774
5368
 
4775
- declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXConversationComposerTab;
4776
- declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXConversationComposerTab;
5369
+ /** Lazy-loads conversation file catalogs only for enabled media pickers. */
5370
+ declare class AXConversationComposerFileTypesProvider extends AXFileTypeInfoProvider {
5371
+ private readonly config;
5372
+ private cache;
5373
+ items(): Promise<AXFileType[]>;
5374
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerFileTypesProvider, never>;
5375
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationComposerFileTypesProvider>;
5376
+ }
5377
+
5378
+ declare function mergeUploadResult(type: AXConversationMessageType, payload: AXConversationMessagePayload, result: AXUploadResult): Promise<AXConversationMessagePayload>;
5379
+ declare function applyLocalPreview(type: AXConversationMessageType, payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): Promise<AXConversationMessagePayload>;
5380
+ declare function toUploaderReference$1(payload: AXConversationMessagePayload): AXConversationUploaderReference;
5381
+ declare function createObjectUrl(platformId: object, blob: Blob): string;
5382
+ declare function revokeObjectUrl(platformId: object, url: string): void;
5383
+ declare function createLocalPreviewUrl(fileService: AXFileService, platformId: object, source: File | Blob, messageType: AXConversationMessageType): Promise<string | undefined>;
5384
+
5385
+ declare function resolveComposerMaxFiles(action: Pick<AXConversationComposerAction, 'maxFiles'> | undefined, config: Pick<Required<AXConversationConfig>, 'maxFilesPerMessage'>): number;
5386
+
5387
+ interface AXConversationInfoProfileField {
5388
+ id: string;
5389
+ labelKey: string;
5390
+ value: string;
5391
+ icon: string;
5392
+ }
5393
+ type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
5394
+ interface AXConversationMediaCategory {
5395
+ id: AXConversationMediaCategoryId;
5396
+ labelKey: string;
5397
+ countLabelKey: string;
5398
+ icon: string;
5399
+ count: number;
5400
+ }
5401
+ declare function messageContainsLink(message: AXConversationMessage): boolean;
5402
+ declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
5403
+ declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
5404
+ declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
5405
+ declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
5406
+ declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
5407
+ declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
5408
+ interface AXConversationMediaGalleryTile {
5409
+ key: string;
5410
+ message: AXConversationMessage;
5411
+ kind: 'image' | 'video' | 'sticker';
5412
+ image?: AXConversationImageMediaItem;
5413
+ video?: AXConversationVideoMediaItem;
5414
+ stickerUrl?: string;
5415
+ stickerAlt?: string;
5416
+ }
5417
+ declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
5418
+ declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
5419
+ declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
5420
+ declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
5421
+ declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
5422
+ declare function fetchAllConversationMessages(messageApi: AXConversationMessageApi, conversationId: string, pageSize: number): Promise<AXConversationMessage[]>;
5423
+
5424
+ declare class AXConversationInfoMediaViewComponent {
5425
+ private readonly translation;
5426
+ private readonly parentInjector;
5427
+ readonly category: _angular_core.InputSignal<AXConversationMediaCategory>;
5428
+ readonly messages: _angular_core.InputSignal<AXConversationMessage[]>;
5429
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5430
+ readonly conversationServiceInput: _angular_core.InputSignal<AXConversationService>;
5431
+ /** Callback for lazy outlet wiring (alternative to the `back` output). */
5432
+ readonly onBack: _angular_core.InputSignal<() => void>;
5433
+ readonly back: _angular_core.OutputEmitterRef<void>;
5434
+ readonly items: _angular_core.Signal<AXConversationMessage[]>;
5435
+ readonly isGrid: _angular_core.Signal<boolean>;
5436
+ readonly isAttachmentList: _angular_core.Signal<boolean>;
5437
+ readonly galleryTiles: _angular_core.Signal<AXConversationMediaGalleryTile[]>;
5438
+ readonly rendererInjector: _angular_core.Signal<_angular_core.DestroyableInjector>;
5439
+ readonly titleLabel: _angular_core.Signal<string>;
5440
+ readonly getMessageVideoItems: typeof getMessageVideoItems;
5441
+ readonly getMessageAudioItems: typeof getMessageAudioItems;
5442
+ getRendererComponent(message: AXConversationMessage): _angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
5443
+ getRendererComponentLoader(message: AXConversationMessage): (() => Promise<_angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof AXConversationFallbackRendererComponent>);
5444
+ getRendererInputs(message: AXConversationMessage): {
5445
+ message: AXConversationMessage;
5446
+ };
5447
+ formatTimestamp(message: AXConversationMessage): string;
5448
+ handleBack(): void;
5449
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoMediaViewComponent, never>;
5450
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; "onBack": { "alias": "onBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
5451
+ }
5452
+
5453
+ interface AXInfoPanelQuickAction {
5454
+ id: string;
5455
+ labelKey: string;
5456
+ icon: string;
5457
+ danger?: boolean;
5458
+ }
5459
+ declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
5460
+ private readonly toastService;
5461
+ readonly translation: AXTranslationService;
5462
+ private readonly injectedConversationService;
5463
+ readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
5464
+ conversation: AXConversation;
5465
+ conversationService: AXConversationService;
5466
+ readonly activeTab: _angular_core.WritableSignal<"profile" | "manage">;
5467
+ readonly showMemberSearch: _angular_core.WritableSignal<boolean>;
5468
+ readonly panelView: _angular_core.WritableSignal<"main" | "media">;
5469
+ readonly selectedMediaCategory: _angular_core.WritableSignal<AXConversationMediaCategory>;
5470
+ readonly mediaViewLoader: () => Promise<typeof AXConversationInfoMediaViewComponent>;
5471
+ readonly conversationMessages: _angular_core.WritableSignal<AXConversationMessage[]>;
5472
+ readonly loadingMessages: _angular_core.WritableSignal<boolean>;
5473
+ readonly memberSearchQuery: _angular_core.WritableSignal<string>;
5474
+ archived: boolean;
5475
+ private initialNotifications;
5476
+ private initialArchived;
5477
+ editTitle: string;
5478
+ editAvatar: string;
5479
+ private groupTitleSaveTimer;
5480
+ private groupDetailsSaveInFlight;
5481
+ readonly backgroundPresets: Array<{
5482
+ id: string;
5483
+ label: string;
5484
+ value: string;
5485
+ }>;
5486
+ readonly heroSubtitle: _angular_core.Signal<string>;
5487
+ readonly liveConversation: _angular_core.Signal<AXConversation>;
5488
+ readonly isConversationMuted: _angular_core.Signal<boolean>;
5489
+ readonly profileFields: _angular_core.Signal<AXConversationInfoProfileField[]>;
5490
+ readonly mediaCategories: _angular_core.Signal<AXConversationMediaCategory[]>;
5491
+ readonly quickActions: _angular_core.Signal<AXInfoPanelQuickAction[]>;
5492
+ readonly filteredMembers: _angular_core.Signal<AXConversationParticipant[]>;
5493
+ ngOnInit(): void;
5494
+ private loadConversationMessages;
5495
+ isPrivateConversation(): boolean;
5496
+ isGroupConversation(): boolean;
5497
+ membersSectionTitle(): string;
5498
+ getMemberRoleLabel(participant: AXConversationParticipant): string | null;
5499
+ onMemberSearchChange(value: string | null | undefined): void;
5500
+ setActiveTab(tab: 'profile' | 'manage'): void;
5501
+ toggleMemberSearch(): void;
5502
+ openMediaCategory(category: AXConversationMediaCategory): void;
5503
+ closeMediaView(): void;
5504
+ getMediaViewInputs(category: AXConversationMediaCategory): Record<string, unknown>;
5505
+ getMediaRowLabel(category: AXConversationMediaCategory): string;
5506
+ getMemberSubtitle(participant: AXConversationParticipant): string;
5507
+ onQuickAction(actionId: string): void;
5508
+ toggleConversationMute(): Promise<void>;
5509
+ onNotificationsChange(value: boolean): Promise<void>;
5510
+ onArchivedChange(value: boolean): Promise<void>;
5511
+ close(data?: unknown): void;
5512
+ closeAll(): void;
5513
+ onLeave(): Promise<void>;
5514
+ onGroupTitleChange(value: string): void;
5515
+ onGroupAvatarChange(value: string): void;
5516
+ private persistGroupDetails;
5517
+ isBackgroundSelected(value: string): boolean;
5518
+ applyMessageListBackground(value: string): Promise<void>;
5519
+ getBackgroundAriaLabel(label: string): string;
5520
+ ngOnDestroy(): void;
5521
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
5522
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
5523
+ }
5524
+
5525
+ declare class AXConversationInfoBarSearchComponent {
5526
+ private readonly platformId;
5527
+ private readonly destroyRef;
5528
+ private readonly infoBarService;
5529
+ private readonly conversationService;
5530
+ /** Conversation input */
5531
+ readonly conversation: _angular_core.InputSignal<AXConversation>;
5532
+ /** Service input */
5533
+ readonly service: _angular_core.InputSignal<AXConversationInfoBarService>;
5534
+ /** Search query from service */
5535
+ readonly searchQuery: _angular_core.Signal<string>;
5536
+ /** Results count from service */
5537
+ readonly resultsCount: _angular_core.Signal<number>;
5538
+ /** Current index from service */
5539
+ readonly currentIndex: _angular_core.Signal<number>;
5540
+ /** Messages from conversation */
5541
+ readonly messages: _angular_core.Signal<AXConversationMessage[]>;
5542
+ private scrollTimer?;
5543
+ constructor();
5544
+ /** Handle search input change */
5545
+ onSearchChange(value: string): void;
5546
+ /** Perform search in messages */
5547
+ private performSearch;
5548
+ /** Navigate to next result */
5549
+ onNext(): void;
5550
+ /** Navigate to previous result */
5551
+ onPrevious(): void;
5552
+ /** Scroll to current search result */
5553
+ private scrollToCurrentResult;
5554
+ private scrollToResult;
5555
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarSearchComponent, never>;
5556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarSearchComponent, "ax-conversation-info-bar-search", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "service": { "alias": "service"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5557
+ }
4777
5558
 
4778
5559
  /**
4779
5560
  * Info Bar Actions Plugin
@@ -4807,6 +5588,424 @@ declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXConversationInfoBarActio
4807
5588
  */
4808
5589
  declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXConversationInfoBarAction;
4809
5590
 
5591
+ declare function toUploaderReference(item: AXConversationMediaItemFields): AXConversationUploaderReference;
5592
+
5593
+ declare class AXConversationAudioAttachmentComponent {
5594
+ readonly item: _angular_core.InputSignal<AXConversationAudioMediaItem>;
5595
+ readonly playingChange: _angular_core.OutputEmitterRef<boolean>;
5596
+ readonly timeUpdate: _angular_core.OutputEmitterRef<number>;
5597
+ readonly durationChange: _angular_core.OutputEmitterRef<number>;
5598
+ readonly playbackEnded: _angular_core.OutputEmitterRef<void>;
5599
+ readonly playbackError: _angular_core.OutputEmitterRef<void>;
5600
+ private readonly audioElementRef;
5601
+ private readonly mediaReference;
5602
+ private readonly resolvedUrl;
5603
+ readonly audioUrl: _angular_core.Signal<string>;
5604
+ readonly title: _angular_core.Signal<string>;
5605
+ readonly duration: _angular_core.Signal<number>;
5606
+ readonly durationLabel: _angular_core.Signal<string>;
5607
+ togglePlay(): void;
5608
+ pause(): void;
5609
+ onPlay(): void;
5610
+ onPause(): void;
5611
+ onTimeUpdate(): void;
5612
+ onLoadedMetadata(): void;
5613
+ onEnded(): void;
5614
+ onError(): void;
5615
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioAttachmentComponent, never>;
5616
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioAttachmentComponent, "ax-conversation-audio-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
5617
+ }
5618
+
5619
+ declare class AXConversationFileAttachmentComponent {
5620
+ readonly item: _angular_core.InputSignal<AXConversationFileMediaItem>;
5621
+ private readonly mediaReference;
5622
+ private readonly resolvedUrl;
5623
+ readonly fileUrl: _angular_core.Signal<string>;
5624
+ readonly fileName: _angular_core.Signal<string>;
5625
+ readonly fileSize: _angular_core.Signal<number>;
5626
+ readonly fileExtension: _angular_core.Signal<string>;
5627
+ readonly swatchColor: _angular_core.Signal<string>;
5628
+ readonly formattedSize: _angular_core.Signal<string>;
5629
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileAttachmentComponent, never>;
5630
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFileAttachmentComponent, "ax-conversation-file-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5631
+ }
5632
+
5633
+ /** Shared formatting for message renderer UIs. */
5634
+ declare function formatMediaDuration(seconds: number): string;
5635
+ declare function formatFileByteSize(bytes: number): string;
5636
+
5637
+ declare class AXConversationImageAttachmentComponent {
5638
+ private readonly platformId;
5639
+ private readonly document;
5640
+ readonly item: _angular_core.InputSignal<AXConversationImageMediaItem>;
5641
+ readonly alt: _angular_core.InputSignal<string>;
5642
+ readonly ready: _angular_core.WritableSignal<boolean>;
5643
+ private readonly mediaReference;
5644
+ private readonly resolvedUrl;
5645
+ readonly displayUrl: _angular_core.Signal<string>;
5646
+ constructor();
5647
+ onImageLoad(): void;
5648
+ onImageError(): void;
5649
+ toggleFullscreen(event: MouseEvent): void;
5650
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageAttachmentComponent, never>;
5651
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageAttachmentComponent, "ax-conversation-image-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5652
+ }
5653
+
5654
+ interface AXConversationPlaybackBannerInputs {
5655
+ title?: string;
5656
+ currentTime?: number;
5657
+ duration?: number;
5658
+ isPlaying?: boolean;
5659
+ onTogglePlay?: () => void;
5660
+ onClose?: () => void;
5661
+ playbackSpeed?: number;
5662
+ onCycleSpeed?: () => void;
5663
+ showSpeedControl?: boolean;
5664
+ }
5665
+ declare class AXConversationMediaPlaybackInfoBarBannerComponent implements AXConversationMessageInfoBarBannerComponent {
5666
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5667
+ readonly title: _angular_core.InputSignal<string>;
5668
+ readonly currentTime: _angular_core.InputSignal<number>;
5669
+ readonly duration: _angular_core.InputSignal<number>;
5670
+ readonly isPlaying: _angular_core.InputSignal<boolean>;
5671
+ readonly onTogglePlay: _angular_core.InputSignal<() => void>;
5672
+ readonly playbackSpeed: _angular_core.InputSignal<number>;
5673
+ readonly onCycleSpeed: _angular_core.InputSignal<() => void>;
5674
+ readonly showSpeedControl: _angular_core.InputSignal<boolean>;
5675
+ readonly iconClass: _angular_core.Signal<string>;
5676
+ readonly resolvedTitle: _angular_core.Signal<string>;
5677
+ readonly progressPercent: _angular_core.Signal<number>;
5678
+ readonly timeLabel: _angular_core.Signal<string>;
5679
+ onTogglePlayClick(): void;
5680
+ onCycleSpeedClick(): void;
5681
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMediaPlaybackInfoBarBannerComponent, never>;
5682
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMediaPlaybackInfoBarBannerComponent, "ax-conversation-media-playback-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "isPlaying": { "alias": "isPlaying"; "required": false; "isSignal": true; }; "onTogglePlay": { "alias": "onTogglePlay"; "required": false; "isSignal": true; }; "playbackSpeed": { "alias": "playbackSpeed"; "required": false; "isSignal": true; }; "onCycleSpeed": { "alias": "onCycleSpeed"; "required": false; "isSignal": true; }; "showSpeedControl": { "alias": "showSpeedControl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5683
+ }
5684
+
5685
+ /**
5686
+ * Keeps media renderers from showing load errors while a message is still uploading.
5687
+ */
5688
+ declare function bindMediaRendererContentState(message: InputSignal<AXConversationMessage>, contentState: WritableSignal<AXConversationMessageRendererContentState>, mediaVersion: () => unknown): void;
5689
+ declare function reportMediaLoadError(message: AXConversationMessage, contentState: WritableSignal<AXConversationMessageRendererContentState>): boolean;
5690
+
5691
+ /**
5692
+ * Resolves multimedia payload URLs for renderers (direct url or mediaId via uploader).
5693
+ */
5694
+
5695
+ /**
5696
+ * Creates a signal of the resolved playback URL for a media reference.
5697
+ */
5698
+ declare function createResolvedMediaUrlSignal(reference: Signal<AXConversationUploaderReference | undefined>): Signal<string | null>;
5699
+
5700
+ /** Caption first, else a label with optional extra lines (URLs, names). */
5701
+ declare function mediaCopyText(caption: string | undefined, singleLabel: string, pluralLabel: string, count: number, lines: (string | undefined)[]): string;
5702
+ /**
5703
+ * Registers the live renderer on {@link AXConversationMessageListService} for message actions.
5704
+ */
5705
+ declare abstract class AXConversationMessageRendererCopyHostComponent implements AXConversationMessageRendererComponent {
5706
+ abstract readonly message: InputSignal<AXConversationMessage>;
5707
+ abstract readonly rendererState: Signal<AXConversationMessageRendererState>;
5708
+ abstract copy(): string | Promise<string>;
5709
+ private readonly messageList;
5710
+ constructor();
5711
+ }
5712
+
5713
+ /**
5714
+ * Shared UI for message bubble bodies: failed delivery (with retry) and content load errors.
5715
+ * Sending state is shown in the message-list footer only — not here (avoids layout glitch in media bubbles).
5716
+ */
5717
+ declare class AXConversationMessageRendererStateComponent {
5718
+ private readonly conversation;
5719
+ readonly translation: AXTranslationService;
5720
+ readonly rendererState: _angular_core.InputSignal<AXConversationMessageRendererState>;
5721
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5722
+ readonly contentErrorLabel: _angular_core.InputSignal<string>;
5723
+ readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
5724
+ readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
5725
+ readonly contentErrorStyle: _angular_core.InputSignal<"banner" | "inline">;
5726
+ readonly contentErrorIconClass: _angular_core.InputSignal<string>;
5727
+ readonly placement: _angular_core.InputSignal<"above" | "below">;
5728
+ readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
5729
+ readonly contentRetry: _angular_core.OutputEmitterRef<void>;
5730
+ readonly retryBusy: _angular_core.WritableSignal<boolean>;
5731
+ private readonly currentUser;
5732
+ private readonly isOwn;
5733
+ readonly showFailed: _angular_core.Signal<boolean>;
5734
+ readonly showContentError: _angular_core.Signal<boolean>;
5735
+ readonly hasVisibleChrome: _angular_core.Signal<boolean>;
5736
+ readonly contentErrorText: _angular_core.Signal<string>;
5737
+ readonly deliveryFailedText: _angular_core.Signal<string>;
5738
+ onRetry(): Promise<void>;
5739
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererStateComponent, never>;
5740
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMessageRendererStateComponent, "ax-conversation-message-renderer-state", never, { "rendererState": { "alias": "rendererState"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": true; "isSignal": true; }; "contentErrorLabel": { "alias": "contentErrorLabel"; "required": false; "isSignal": true; }; "deliveryFailedLabel": { "alias": "deliveryFailedLabel"; "required": false; "isSignal": true; }; "showContentErrorChrome": { "alias": "showContentErrorChrome"; "required": false; "isSignal": true; }; "contentErrorStyle": { "alias": "contentErrorStyle"; "required": false; "isSignal": true; }; "contentErrorIconClass": { "alias": "contentErrorIconClass"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "contentRetryEnabled": { "alias": "contentRetryEnabled"; "required": false; "isSignal": true; }; }, { "contentRetry": "contentRetry"; }, never, never, true, never>;
5741
+ }
5742
+
5743
+ declare function isMessageDeliveryPending(status: AXConversationMessageStatus): boolean;
5744
+ declare function canShowRendererContentError(status: AXConversationMessageStatus, contentState: AXConversationMessageRendererContentState): boolean;
5745
+
5746
+ /** Push playback state to the info-bar banner for a message. */
5747
+ declare function syncPlaybackInfoBarBanner(infoBar: AXConversationInfoBarService, message: AXConversationMessage, inputs: AXConversationPlaybackBannerInputs, options?: {
5748
+ forceOpen?: boolean;
5749
+ }): void;
5750
+
5751
+ /**
5752
+ * Shared layout tokens for conversation message renderers.
5753
+ */
5754
+ declare const AX_CONVERSATION_RENDERER_SHARED_STYLES = "\n :host {\n display: block;\n max-width: 100%;\n }\n\n .ax-conversation-msg {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n }\n\n .ax-conversation-msg__stack {\n display: flex;\n flex-direction: column;\n gap: 0.375rem;\n }\n\n .ax-conversation-msg__grid {\n display: grid;\n gap: 2px;\n width: 100%;\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n overflow: hidden;\n background: rgb(var(--ax-sys-color-border-light-surface));\n }\n\n .ax-conversation-msg__grid--single {\n grid-template-columns: 1fr;\n }\n\n .ax-conversation-msg__grid--single ::ng-deep .ax-conversation-image-attachment {\n max-height: min(50dvh, 20rem);\n }\n\n .ax-conversation-msg__grid--dual {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .ax-conversation-msg__grid--multi {\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 10rem;\n }\n\n @container (max-width: 380px) {\n .ax-conversation-msg__grid--multi {\n grid-template-columns: repeat(2, 1fr);\n grid-auto-rows: 10rem;\n }\n }\n\n .ax-conversation-msg__caption {\n margin: 0;\n padding: 0 0.125rem;\n font-size: 0.8125rem;\n line-height: 1.4;\n word-break: break-word;\n opacity: 0.88;\n }\n\n /* Flush layout: media fills the message bubble edge-to-edge (image / video). */\n .ax-conversation-msg--flush {\n width: 100%;\n max-width: 100%;\n gap: 0;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__caption {\n padding: 0.375rem 0.625rem 0;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__grid {\n border-radius: 0;\n background: transparent;\n }\n\n .ax-conversation-msg--flush .ax-conversation-msg__stack {\n gap: 2px;\n }\n\n .ax-conversation-msg--flush ::ng-deep .ax-conversation-video {\n border-radius: 0;\n }\n\n .ax-conversation-msg__card {\n border-radius: var(--ax-sys-border-radius, 0.5rem);\n border: 1px solid rgb(var(--ax-sys-color-border-light-surface));\n background: rgb(var(--ax-sys-color-surface));\n overflow: hidden;\n }\n";
5755
+
5756
+ declare class AXConversationVideoAttachmentComponent {
5757
+ readonly item: _angular_core.InputSignal<AXConversationVideoMediaItem>;
5758
+ readonly playingChange: _angular_core.OutputEmitterRef<boolean>;
5759
+ readonly timeUpdate: _angular_core.OutputEmitterRef<number>;
5760
+ readonly durationChange: _angular_core.OutputEmitterRef<number>;
5761
+ readonly playbackEnded: _angular_core.OutputEmitterRef<void>;
5762
+ readonly playbackError: _angular_core.OutputEmitterRef<void>;
5763
+ private readonly videoElementRef;
5764
+ private readonly playbackReference;
5765
+ private readonly resolvedPlaybackUrl;
5766
+ readonly playbackUrl: _angular_core.Signal<string>;
5767
+ readonly duration: _angular_core.Signal<number>;
5768
+ readonly durationLabel: _angular_core.Signal<string>;
5769
+ togglePlay(): void;
5770
+ pause(): void;
5771
+ onLoadedMetadata(): void;
5772
+ onTimeUpdate(): void;
5773
+ onPlay(): void;
5774
+ onPause(): void;
5775
+ onEnded(): void;
5776
+ onError(): void;
5777
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoAttachmentComponent, never>;
5778
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoAttachmentComponent, "ax-conversation-video-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
5779
+ }
5780
+
5781
+ declare class AXConversationAudioRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5782
+ private readonly fileTypes;
5783
+ private readonly translation;
5784
+ private readonly destroyRef;
5785
+ private readonly infoBarService;
5786
+ private readonly attachments;
5787
+ private readonly _contentState;
5788
+ private readonly activeTrackIndex;
5789
+ private readonly isPlaying;
5790
+ private readonly currentTime;
5791
+ private readonly duration;
5792
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5793
+ readonly rendererState: _angular_core.Signal<{
5794
+ deliveryStatus: AXConversationMessageStatus;
5795
+ contentState: AXConversationMessageRendererContentState;
5796
+ }>;
5797
+ readonly payload: _angular_core.Signal<AXConversationAudioPayload>;
5798
+ readonly audios: _angular_core.Signal<AXConversationAudioMediaItem[]>;
5799
+ readonly caption: _angular_core.Signal<string>;
5800
+ readonly audioLoadErrorLabel: _angular_core.Signal<string>;
5801
+ copy(): Promise<string>;
5802
+ constructor();
5803
+ onPlayingChange(index: number, playing: boolean): void;
5804
+ onTimeUpdate(index: number, time: number): void;
5805
+ onDurationChange(index: number, duration: number): void;
5806
+ onPlaybackEnded(index: number): void;
5807
+ onPlaybackError(): void;
5808
+ togglePlay(): void;
5809
+ private pauseOtherTracks;
5810
+ private pausePlayback;
5811
+ private syncInfoBarBanner;
5812
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioRendererComponent, never>;
5813
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5814
+ }
5815
+
5816
+ declare function normalizeAudioPayload(payload: AXConversationAudioPayload): AXConversationAudioPayload;
5817
+
5818
+ declare class AXConversationFileRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5819
+ private readonly fileTypes;
5820
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5821
+ readonly rendererState: _angular_core.Signal<{
5822
+ deliveryStatus: AXConversationMessageStatus;
5823
+ contentState: "ready";
5824
+ }>;
5825
+ readonly payload: _angular_core.Signal<AXConversationFilePayload>;
5826
+ readonly files: _angular_core.Signal<AXConversationFileMediaItem[]>;
5827
+ readonly caption: _angular_core.Signal<string>;
5828
+ copy(): Promise<string>;
5829
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileRendererComponent, never>;
5830
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5831
+ }
5832
+
5833
+ declare function normalizeFilePayload(payload: AXConversationFilePayload): AXConversationFilePayload;
5834
+
5835
+ declare class AXConversationImageRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5836
+ private readonly fileTypes;
5837
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5838
+ readonly rendererState: _angular_core.Signal<{
5839
+ deliveryStatus: AXConversationMessageStatus;
5840
+ contentState: "ready";
5841
+ }>;
5842
+ readonly payload: _angular_core.Signal<AXConversationImagePayload>;
5843
+ readonly images: _angular_core.Signal<AXConversationImageMediaItem[]>;
5844
+ readonly caption: _angular_core.Signal<string>;
5845
+ copy(): Promise<string>;
5846
+ readonly gridModeClass: _angular_core.Signal<"ax-conversation-msg__grid--single" | "ax-conversation-msg__grid--dual" | "ax-conversation-msg__grid--multi">;
5847
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageRendererComponent, never>;
5848
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5849
+ }
5850
+
5851
+ /** Format image message payload for rendering (array shape, safe thumbnails). */
5852
+ declare function normalizeImagePayload(payload: AXConversationImagePayload): AXConversationImagePayload;
5853
+ /** Preferred URL for grid / lightbox (never inline base64 thumbnails). */
5854
+ declare function resolveImageDisplayUrl(image: AXConversationImageMediaItem): string | undefined;
5855
+
5856
+ declare class AXConversationLocationRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5857
+ private readonly _contentState;
5858
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5859
+ readonly rendererState: _angular_core.Signal<{
5860
+ deliveryStatus: AXConversationMessageStatus;
5861
+ contentState: AXConversationMessageRendererContentState;
5862
+ }>;
5863
+ readonly payload: _angular_core.Signal<AXConversationLocationPayload>;
5864
+ readonly latitude: _angular_core.Signal<number>;
5865
+ readonly longitude: _angular_core.Signal<number>;
5866
+ readonly locationName: _angular_core.Signal<string>;
5867
+ readonly address: _angular_core.Signal<string>;
5868
+ readonly coordinatesText: _angular_core.Signal<string>;
5869
+ readonly mapsUrl: _angular_core.Signal<string>;
5870
+ copy(): string;
5871
+ readonly markers: _angular_core.Signal<{
5872
+ latitude: number;
5873
+ longitude: number;
5874
+ popup: string;
5875
+ popupOpen: boolean;
5876
+ popupCloseButton: boolean;
5877
+ }[]>;
5878
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationRendererComponent, never>;
5879
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5880
+ }
5881
+
5882
+ declare class AXConversationStickerRendererComponent implements AXConversationMessageRendererComponent {
5883
+ private readonly _contentState;
5884
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5885
+ readonly rendererState: _angular_core.Signal<{
5886
+ deliveryStatus: AXConversationMessageStatus;
5887
+ contentState: AXConversationMessageRendererContentState;
5888
+ }>;
5889
+ readonly payload: _angular_core.Signal<AXConversationStickerPayload>;
5890
+ private readonly mediaReference;
5891
+ private readonly resolvedUrl;
5892
+ readonly stickerUrl: _angular_core.Signal<string>;
5893
+ readonly alt: _angular_core.Signal<string>;
5894
+ constructor();
5895
+ onLoad(): void;
5896
+ onError(): void;
5897
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationStickerRendererComponent, never>;
5898
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5899
+ }
5900
+
5901
+ declare class AXConversationSystemRendererComponent implements AXConversationMessageRendererComponent {
5902
+ private readonly _contentState;
5903
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5904
+ readonly rendererState: _angular_core.Signal<{
5905
+ deliveryStatus: AXConversationMessageStatus;
5906
+ contentState: AXConversationMessageRendererContentState;
5907
+ }>;
5908
+ readonly payload: _angular_core.Signal<AXConversationSystemPayload>;
5909
+ readonly iconClass: _angular_core.Signal<string>;
5910
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSystemRendererComponent, never>;
5911
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5912
+ }
5913
+
5914
+ declare class AXConversationTextRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5915
+ private readonly infoBarService;
5916
+ private readonly sanitizer;
5917
+ private readonly _contentState;
5918
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5919
+ readonly rendererState: _angular_core.Signal<{
5920
+ deliveryStatus: AXConversationMessageStatus;
5921
+ contentState: AXConversationMessageRendererContentState;
5922
+ }>;
5923
+ readonly searchQuery: _angular_core.Signal<string>;
5924
+ copy(): string;
5925
+ readonly formattedText: _angular_core.Signal<SafeHtml>;
5926
+ private linkify;
5927
+ private highlightSearch;
5928
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationTextRendererComponent, never>;
5929
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5930
+ }
5931
+
5932
+ declare class AXConversationVideoRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5933
+ private readonly fileTypes;
5934
+ private readonly translation;
5935
+ private readonly platformId;
5936
+ private readonly destroyRef;
5937
+ private readonly infoBarService;
5938
+ private readonly attachments;
5939
+ private readonly _contentState;
5940
+ private readonly activeVideoIndex;
5941
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5942
+ readonly rendererState: _angular_core.Signal<{
5943
+ deliveryStatus: AXConversationMessageStatus;
5944
+ contentState: AXConversationMessageRendererContentState;
5945
+ }>;
5946
+ readonly isPlaying: _angular_core.WritableSignal<boolean>;
5947
+ readonly currentTime: _angular_core.WritableSignal<number>;
5948
+ readonly duration: _angular_core.WritableSignal<number>;
5949
+ readonly payload: _angular_core.Signal<AXConversationVideoPayload>;
5950
+ readonly videos: _angular_core.Signal<AXConversationVideoMediaItem[]>;
5951
+ readonly caption: _angular_core.Signal<string>;
5952
+ readonly videoLoadErrorLabel: _angular_core.Signal<string>;
5953
+ copy(): Promise<string>;
5954
+ constructor();
5955
+ onPlayingChange(index: number, playing: boolean): void;
5956
+ onTimeUpdate(index: number, time: number): void;
5957
+ onDurationChange(index: number, duration: number): void;
5958
+ onPlaybackEnded(index: number): void;
5959
+ onPlaybackError(): void;
5960
+ togglePlay(): void;
5961
+ private pauseOtherVideos;
5962
+ private pausePlayback;
5963
+ private syncInfoBarBanner;
5964
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoRendererComponent, never>;
5965
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
5966
+ }
5967
+
5968
+ declare function normalizeVideoPayload(payload: AXConversationVideoPayload): AXConversationVideoPayload;
5969
+
5970
+ declare class AXConversationVoiceRendererComponent extends AXConversationMessageRendererCopyHostComponent {
5971
+ private readonly fileTypes;
5972
+ private readonly translation;
5973
+ private readonly platformId;
5974
+ private readonly destroyRef;
5975
+ private readonly infoBarService;
5976
+ private readonly audioElementRef;
5977
+ private readonly _contentState;
5978
+ readonly message: _angular_core.InputSignal<AXConversationMessage>;
5979
+ readonly rendererState: _angular_core.Signal<{
5980
+ deliveryStatus: AXConversationMessageStatus;
5981
+ contentState: AXConversationMessageRendererContentState;
5982
+ }>;
5983
+ readonly isPlaying: _angular_core.WritableSignal<boolean>;
5984
+ readonly currentTime: _angular_core.WritableSignal<number>;
5985
+ readonly duration: _angular_core.WritableSignal<number>;
5986
+ readonly playbackSpeed: _angular_core.WritableSignal<number>;
5987
+ private readonly speeds;
5988
+ readonly payload: _angular_core.Signal<AXConversationVoicePayload>;
5989
+ private readonly mediaReference;
5990
+ private readonly resolvedUrl;
5991
+ readonly voiceUrl: _angular_core.Signal<string>;
5992
+ readonly waveformBars: _angular_core.Signal<number[]>;
5993
+ readonly activeBarIndex: _angular_core.Signal<number>;
5994
+ readonly timeLabel: _angular_core.Signal<string>;
5995
+ readonly voiceLoadErrorLabel: _angular_core.Signal<string>;
5996
+ copy(): Promise<string>;
5997
+ constructor();
5998
+ togglePlay(): void;
5999
+ cyclePlaybackSpeed(): void;
6000
+ onTimeUpdate(): void;
6001
+ onEnded(): void;
6002
+ onError(): void;
6003
+ private pausePlayback;
6004
+ private syncInfoBarBanner;
6005
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRendererComponent, never>;
6006
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
6007
+ }
6008
+
4810
6009
  /**
4811
6010
  * Default Message Actions Plugin
4812
6011
  * Individual message action constants
@@ -4829,6 +6028,14 @@ declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXConversationMessageAction
4829
6028
  */
4830
6029
  declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXConversationMessageAction;
4831
6030
 
6031
+ /** Normalize payload; loads media normalizers on demand. */
6032
+ declare function normalizeMessagePayloadAsync(payload: AXConversationMessagePayload): Promise<AXConversationMessagePayload>;
6033
+ /**
6034
+ * Sync normalize — uses cached normalizers when available.
6035
+ * Media payloads pass through until a normalizer chunk has loaded (renderers normalize on display).
6036
+ */
6037
+ declare function normalizeMessagePayload(payload: AXConversationMessagePayload): AXConversationMessagePayload;
6038
+
4832
6039
  declare const AX_CONVERSATION_TEXT_RENDERER: AXConversationMessageRenderer;
4833
6040
 
4834
6041
  declare const AX_CONVERSATION_IMAGE_RENDERER: AXConversationMessageRenderer;
@@ -5179,14 +6386,6 @@ declare function validateLatitude(latitude: number | undefined | null): AXConver
5179
6386
  */
5180
6387
  declare function validateLongitude(longitude: number | undefined | null): AXConversationValidationResult;
5181
6388
 
5182
- /** Normalize payload; loads media normalizers on demand. */
5183
- declare function normalizeMessagePayloadAsync(payload: AXConversationMessagePayload): Promise<AXConversationMessagePayload>;
5184
- /**
5185
- * Sync normalize — uses cached normalizers when available.
5186
- * Media payloads pass through until a normalizer chunk has loaded (renderers normalize on display).
5187
- */
5188
- declare function normalizeMessagePayload(payload: AXConversationMessagePayload): AXConversationMessagePayload;
5189
-
5190
6389
  /** Infer extension/MIME hints from a persisted message payload. */
5191
6390
  declare function inferFileExtensionHintFromMessage(message: AXConversationMessage): AXFileTypeExtensionHint;
5192
6391
  /** Use file-type `copy` on the message when `message.fileType` is set; otherwise fallback. */
@@ -5194,25 +6393,6 @@ declare function copyWithFileTypeFallback(message: AXConversationMessage, regist
5194
6393
  /** Use file-type `open` on the message when `message.fileType` is set. */
5195
6394
  declare function openWithFileType(message: AXConversationMessage, registry: AXFileTypeRegistryService, ctx: AXFileTypeOpenContext): Promise<boolean>;
5196
6395
 
5197
- /** First non-empty URL for img/video/audio at runtime (includes resolved blob: URLs). */
5198
- declare function pickDisplayMediaUrl(...candidates: (string | null | undefined)[]): string;
5199
-
5200
- /** Format image message payload for rendering (array shape, safe thumbnails). */
5201
- declare function normalizeImagePayload(payload: AXConversationImagePayload): AXConversationImagePayload;
5202
- /** Preferred URL for grid / lightbox (never inline base64 thumbnails). */
5203
- declare function resolveImageDisplayUrl(image: AXConversationImageMediaItem): string | undefined;
5204
-
5205
- declare function toUploaderReference(item: AXConversationMediaItemFields): AXConversationUploaderReference;
5206
-
5207
- /**
5208
- * Resolves multimedia payload URLs for renderers (direct url or mediaId via uploader).
5209
- */
5210
-
5211
- /**
5212
- * Creates a signal of the resolved playback URL for a media reference.
5213
- */
5214
- declare function createResolvedMediaUrlSignal(reference: Signal<AXConversationUploaderReference | undefined>): Signal<string | null>;
5215
-
5216
6396
  /**
5217
6397
  * Error Message Constants
5218
6398
  * Centralized error messages with i18n support structure
@@ -5605,5 +6785,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
5605
6785
  */
5606
6786
  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'];
5607
6787
 
5608
- export { AXConversationAiResponderService, AXConversationApi, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationErrorHandlerService, AXConversationForwardMessageDialogComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererRegistry, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationTabRegistry, AXConversationUserApi, AX_ALL_CONVERSATION_COMPOSER_TABS, AX_ALL_CONVERSATION_MEDIA_PICKERS, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_REGISTRY_CONFIG, 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_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, applyConversationFilters, axConversationIndexedDbStorage, axConversationSharedStorage, copyWithFileTypeFallback, createResolvedMediaUrlSignal, encodeConversationCursor, encodeMessageCursor, formatErrorMessage, getConversationLastActivity, getConversationMessagesNewestFirst, getErrorMessage, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isComposerTabEnabled, isGenericPrivateConversationTitle, isMediaPickerEnabled, mergeWithDefaults, normalizeAllConversationMessageIndexes, normalizeImagePayload, normalizeMessagePayload, normalizeMessagePayloadAsync, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMediaPickers, resolveConversationMessageFileType, resolveConversationTitleForViewer, resolveImageDisplayUrl, resolveParticipantProfile, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, sanitizeInput, shouldUseUserAvatarForConversation, sortConversationMessageIds, toUploaderReference as toMediaItemUploaderReference, unregisterChatMessage, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
5609
- export type { AXConversation, AXConversationAiResponderConfig, AXConversationApiError, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationChatCursorKind, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerActiveComponent, 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, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaItemFields, AXConversationMediaPickerFeature, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListEmptyComponent, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParsedChatCursor, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, 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 };
6788
+ export { AXConversationAiResponderService, AXConversationApi, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_ALL_CONVERSATION_COMPOSER_TABS, AX_ALL_CONVERSATION_MEDIA_PICKERS, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PICKER_SHARED_STYLES, AX_CONVERSATION_PICKER_SHELL_STYLES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_RENDERER_SHARED_STYLES, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchAllConversationMessages, fileItemFromUpload, filterMessagesByMediaCategory, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMediaPickerEnabled, isMessageDeliveryPending, isNonPersistableMediaUrl, isPickerItemReadyToSend, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMediaPickers, resolveConversationMessageFileType, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6789
+ export type { AXConversation, AXConversationAiResponderConfig, AXConversationApiError, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationChatCursorKind, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerActiveComponent, AXConversationComposerPickerUploadItem, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationIndexedDbMediaRecord, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPickerFeature, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListEmptyComponent, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParsedChatCursor, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantStatus, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUserAvatarComponent, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserRole, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };