@acorex/components 22.0.0-next.36 → 22.0.0-next.39

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.
@@ -161,6 +161,7 @@ const AX_CONVERSATION_ERROR_HANDLER_CONFIG = new InjectionToken('AX_CONVERSATION
161
161
  /**
162
162
  * Pluggable avatar components for the conversation UI.
163
163
  * Register via `provideConversation({ avatarComponents: { user, conversation } })`.
164
+ * When only `user` is registered, a built-in conversation avatar host is wired automatically.
164
165
  */
165
166
  const AX_CONVERSATION_USER_AVATAR_COMPONENT = new InjectionToken('AX_CONVERSATION_USER_AVATAR_COMPONENT');
166
167
  const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT = new InjectionToken('AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT');
@@ -509,7 +510,30 @@ class AXConversationMessageUtilsService {
509
510
  if (AXConversationMessageUtilsService.getConversationAvatar(conversation)) {
510
511
  return undefined;
511
512
  }
512
- return AXConversationMessageUtilsService.normalizeOptionalMediaValue(conversation.icon);
513
+ const explicit = AXConversationMessageUtilsService.normalizeOptionalMediaValue(conversation.icon);
514
+ if (explicit) {
515
+ return explicit;
516
+ }
517
+ if (conversation.type === 'group') {
518
+ return AX_CONVERSATION_DEFAULT_GROUP_ICON;
519
+ }
520
+ if (conversation.type === 'private' || conversation.type === 'bot') {
521
+ return AX_CONVERSATION_DEFAULT_USER_ICON;
522
+ }
523
+ return undefined;
524
+ }
525
+ /**
526
+ * Font Awesome icon for a participant when there is no avatar image.
527
+ */
528
+ static getParticipantAvatarIcon(participant) {
529
+ if (AXConversationMessageUtilsService.normalizeOptionalMediaValue(participant?.avatar)) {
530
+ return undefined;
531
+ }
532
+ const explicit = AXConversationMessageUtilsService.normalizeOptionalMediaValue(participant?.icon);
533
+ if (explicit) {
534
+ return explicit;
535
+ }
536
+ return AX_CONVERSATION_DEFAULT_USER_ICON;
513
537
  }
514
538
  /**
515
539
  * Get sender name from message
@@ -534,7 +558,7 @@ class AXConversationMessageUtilsService {
534
558
  if (AXConversationMessageUtilsService.normalizeOptionalMediaValue(participant?.avatar)) {
535
559
  return undefined;
536
560
  }
537
- return (AXConversationMessageUtilsService.normalizeOptionalMediaValue(participant?.icon) ??
561
+ return (AXConversationMessageUtilsService.getParticipantAvatarIcon(participant) ??
538
562
  AXConversationMessageUtilsService.getConversationAvatarIcon(conversation));
539
563
  }
540
564
  /**
@@ -791,17 +815,51 @@ class AXConversationMessageUtilsService {
791
815
  }
792
816
  }
793
817
 
818
+ /** Conversation types that resolve a single peer participant for viewer-scoped avatar/title. */
819
+ const AX_CONVERSATION_PEER_AVATAR_TYPES = new Set([
820
+ 'private',
821
+ 'bot',
822
+ ]);
823
+ function normalizeOptionalMediaValue(value) {
824
+ if (typeof value !== 'string') {
825
+ return undefined;
826
+ }
827
+ const normalized = value.trim();
828
+ return normalized.length > 0 ? normalized : undefined;
829
+ }
830
+ /**
831
+ * Other participant in a peer-scoped conversation (excludes the current viewer).
832
+ * Applies to private 1:1 and bot assist chats with exactly one non-viewer participant.
833
+ */
834
+ function resolveConversationPeerUserId(conversation, currentUserId) {
835
+ if (!AX_CONVERSATION_PEER_AVATAR_TYPES.has(conversation.type)) {
836
+ return undefined;
837
+ }
838
+ const currentId = currentUserId ?? 'current-user';
839
+ const peers = conversation.participants.filter((participant) => participant.id !== currentId);
840
+ if (peers.length !== 1) {
841
+ return undefined;
842
+ }
843
+ return peers[0].id;
844
+ }
794
845
  /** Other participant in a private chat (excludes the current user). */
795
846
  function resolvePrivatePeerUserId(conversation, currentUserId) {
796
847
  if (conversation.type !== 'private') {
797
848
  return undefined;
798
849
  }
799
- const currentId = currentUserId ?? 'current-user';
800
- return conversation.participants.find((participant) => participant.id !== currentId)?.id;
850
+ return resolveConversationPeerUserId(conversation, currentUserId);
801
851
  }
802
- /** Whether `auto` kind should render a user avatar for this conversation. */
852
+ /** Peer participant for private and bot conversations. */
853
+ function resolveConversationPeerParticipant(conversation, currentUserId) {
854
+ const peerId = resolveConversationPeerUserId(conversation, currentUserId);
855
+ if (!peerId) {
856
+ return undefined;
857
+ }
858
+ return conversation.participants.find((participant) => participant.id === peerId);
859
+ }
860
+ /** Whether `auto` kind should render a registered user avatar for this conversation. */
803
861
  function shouldUseUserAvatarForConversation(conversation, currentUserId) {
804
- return conversation.type === 'private' && !!resolvePrivatePeerUserId(conversation, currentUserId);
862
+ return !!resolveConversationPeerUserId(conversation, currentUserId);
805
863
  }
806
864
  function resolveUserAvatarDisplay(userId, conversation, message) {
807
865
  if (message && conversation) {
@@ -822,14 +880,23 @@ function resolveConversationAvatarDisplay(conversation, currentUserId) {
822
880
  const title = currentUserId !== undefined
823
881
  ? resolveConversationTitleForViewer(conversation, currentUserId)
824
882
  : conversation.title;
883
+ const peer = resolveConversationPeerParticipant(conversation, currentUserId);
884
+ const conversationAvatar = AXConversationMessageUtilsService.getConversationAvatar(conversation);
885
+ const conversationIcon = AXConversationMessageUtilsService.getConversationAvatarIcon(conversation);
886
+ const peerAvatar = normalizeOptionalMediaValue(peer?.avatar);
887
+ const peerIcon = normalizeOptionalMediaValue(peer?.icon);
825
888
  return {
826
889
  name: title,
827
- avatar: AXConversationMessageUtilsService.getConversationAvatar(conversation),
828
- icon: AXConversationMessageUtilsService.getConversationAvatarIcon(conversation),
890
+ avatar: conversationAvatar ?? peerAvatar,
891
+ icon: conversationIcon ?? (conversationAvatar ? undefined : peerIcon),
829
892
  };
830
893
  }
831
894
 
832
895
  const AX_CONVERSATION_GENERIC_PRIVATE_TITLES = new Set(['', 'new chat', 'new conversation']);
896
+ /** Default Font Awesome icon for group conversations without a custom avatar image. */
897
+ const AX_CONVERSATION_DEFAULT_GROUP_ICON = 'fa-light fa-users';
898
+ /** Default Font Awesome icon for private/bot conversations without a custom avatar image. */
899
+ const AX_CONVERSATION_DEFAULT_USER_ICON = 'fa-light fa-user';
833
900
  /** True when the stored title is a placeholder, not a user-defined name. */
834
901
  function isGenericPrivateConversationTitle(title) {
835
902
  return AX_CONVERSATION_GENERIC_PRIVATE_TITLES.has((title ?? '').trim().toLowerCase());
@@ -852,38 +919,34 @@ function resolvePrivatePeerParticipant(conversation, currentUserId) {
852
919
  if (conversation.type !== 'private') {
853
920
  return undefined;
854
921
  }
855
- const peerId = resolvePrivatePeerUserId(conversation, currentUserId);
856
- if (!peerId) {
857
- return undefined;
858
- }
859
- return conversation.participants.find((participant) => participant.id === peerId);
922
+ return resolveConversationPeerParticipant(conversation, currentUserId);
860
923
  }
861
924
  /**
862
925
  * Resolves the display title for the current viewer.
863
- * Private 1v1 chats show the other participant's name when no custom title is set.
926
+ * Private and bot peer-scoped chats show the other participant's name when no custom title is set.
864
927
  */
865
928
  function resolveConversationTitleForViewer(conversation, currentUserId) {
866
- if (conversation.type !== 'private') {
929
+ if (!AX_CONVERSATION_PEER_AVATAR_TYPES.has(conversation.type)) {
867
930
  return conversation.title;
868
931
  }
869
- const peer = resolvePrivatePeerParticipant(conversation, currentUserId);
932
+ const peer = resolveConversationPeerParticipant(conversation, currentUserId);
870
933
  if (peer?.name) {
871
934
  return peer.name;
872
935
  }
873
- if (isGenericPrivateConversationTitle(conversation.title)) {
936
+ if (conversation.type === 'private' && isGenericPrivateConversationTitle(conversation.title)) {
874
937
  return conversation.title || 'New Chat';
875
938
  }
876
939
  return conversation.title;
877
940
  }
878
941
  /**
879
- * Returns a viewer-scoped copy of a conversation with dynamic private title/avatar/icon.
942
+ * Returns a viewer-scoped copy of a conversation with dynamic peer title/avatar/icon.
880
943
  * Does not mutate the source object.
881
944
  */
882
945
  function resolveConversationForViewer(conversation, currentUserId) {
883
- if (conversation.type !== 'private' || !currentUserId) {
946
+ if (!AX_CONVERSATION_PEER_AVATAR_TYPES.has(conversation.type) || !currentUserId) {
884
947
  return conversation;
885
948
  }
886
- const peer = resolvePrivatePeerParticipant(conversation, currentUserId);
949
+ const peer = resolveConversationPeerParticipant(conversation, currentUserId);
887
950
  if (!peer) {
888
951
  return conversation;
889
952
  }
@@ -1999,15 +2062,22 @@ async function loadConversationFileTypes(catalogNames) {
1999
2062
  }
2000
2063
  return types;
2001
2064
  }
2002
- /** Lazy-loads conversation file catalogs referenced by registered composer actions. */
2065
+ /** Built-in conversation catalogs (lazy-loaded on first registry resolve). */
2066
+ const AX_CONVERSATION_BUILTIN_FILE_CATALOGS = [
2067
+ AX_CONVERSATION_IMAGE_CATALOG,
2068
+ AX_CONVERSATION_VIDEO_CATALOG,
2069
+ AX_CONVERSATION_AUDIO_CATALOG,
2070
+ AX_CONVERSATION_FILE_CATALOG,
2071
+ AX_CONVERSATION_VOICE_CATALOG,
2072
+ ];
2073
+ /**
2074
+ * Lazy-loads conversation file catalogs for the root file-type registry.
2075
+ * Must not inject {@link AXConversationComposerActionRegistry} — that registry
2076
+ * depends on {@link AXFileTypeRegistryService}, which would create a circular DI cycle.
2077
+ */
2003
2078
  class AXConversationComposerFileTypesProvider extends AXFileTypeInfoProvider {
2004
- constructor() {
2005
- super(...arguments);
2006
- this.composerActions = inject(AXConversationComposerActionRegistry, { optional: true });
2007
- }
2008
2079
  async items() {
2009
- const catalogNames = this.composerActions?.actions().map((action) => action.fileType).filter((name) => !!name) ?? [];
2010
- return loadConversationFileTypes(catalogNames);
2080
+ return loadConversationFileTypes([...AX_CONVERSATION_BUILTIN_FILE_CATALOGS]);
2011
2081
  }
2012
2082
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXConversationComposerFileTypesProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2013
2083
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXConversationComposerFileTypesProvider }); }
@@ -2163,7 +2233,6 @@ class AXConversationComposerActionRegistry {
2163
2233
  ...(ngDevMode ? [{ debugName: "_actions" }] : /* istanbul ignore next */ []));
2164
2234
  this.translation = inject(AXTranslationService);
2165
2235
  this.injector = inject(Injector);
2166
- this.fileTypeRegistry = inject(AXFileTypeRegistryService);
2167
2236
  this.composerTabRegistry = inject(AXConversationComposerTabRegistry);
2168
2237
  /** All registered actions */
2169
2238
  this.actions = this._actions.asReadonly();
@@ -2222,12 +2291,16 @@ class AXConversationComposerActionRegistry {
2222
2291
  // Add to registry
2223
2292
  this._actions.update((actions) => [...actions, action]);
2224
2293
  if (action.fileType) {
2225
- this.fileTypeRegistry.invalidateCache();
2294
+ this.fileTypeRegistry().invalidateCache();
2226
2295
  void this.ensureFileTypeExists(action.fileType);
2227
2296
  }
2228
2297
  }
2298
+ /** Resolved lazily to avoid a DI cycle with {@link AXConversationComposerFileTypesProvider}. */
2299
+ fileTypeRegistry() {
2300
+ return this.injector.get(AXFileTypeRegistryService);
2301
+ }
2229
2302
  async ensureFileTypeExists(fileType) {
2230
- const match = await this.fileTypeRegistry.get(fileType);
2303
+ const match = await this.fileTypeRegistry().get(fileType);
2231
2304
  if (!match) {
2232
2305
  console.warn(`[AXConversationComposerActionRegistry] Unknown fileType "${fileType}". ` +
2233
2306
  'Register its AXFileTypeInfoProvider in app providers before using this action.');
@@ -4049,7 +4122,10 @@ class AXConversationService {
4049
4122
  title: isPrivate ? undefined : metadata?.['title'],
4050
4123
  description: metadata?.['description'],
4051
4124
  avatar: isPrivate ? undefined : AXConversationService.normalizeOptionalString(metadata?.['avatar']),
4052
- icon: isPrivate ? undefined : AXConversationService.normalizeOptionalString(metadata?.['icon']),
4125
+ icon: isPrivate
4126
+ ? undefined
4127
+ : (AXConversationService.normalizeOptionalString(metadata?.['icon']) ??
4128
+ (type === 'group' ? AX_CONVERSATION_DEFAULT_GROUP_ICON : undefined)),
4053
4129
  metadata: isPrivate ? undefined : metadata,
4054
4130
  forceCreate,
4055
4131
  };
@@ -6123,7 +6199,7 @@ class AXConversationAvatarComponent {
6123
6199
  if (!conversation || this.resolvedKind() !== 'user') {
6124
6200
  return undefined;
6125
6201
  }
6126
- return resolvePrivatePeerUserId(conversation, this.currentUserId());
6202
+ return resolveConversationPeerUserId(conversation, this.currentUserId());
6127
6203
  }, /* @ts-ignore */
6128
6204
  ...(ngDevMode ? [{ debugName: "resolvedUserId" }] : /* istanbul ignore next */ []));
6129
6205
  this.customComponent = computed(() => {
@@ -6136,9 +6212,17 @@ class AXConversationAvatarComponent {
6136
6212
  ...(ngDevMode ? [{ debugName: "customComponent" }] : /* istanbul ignore next */ []));
6137
6213
  this.customInputs = computed(() => {
6138
6214
  if (this.resolvedKind() === 'user') {
6215
+ const userId = this.resolvedUserId() ?? '';
6216
+ const resolved = resolveUserAvatarDisplay(userId, this.conversation(), this.message());
6217
+ const explicitName = this.name();
6218
+ const explicitAvatar = this.avatar();
6219
+ const explicitIcon = this.icon();
6139
6220
  return {
6140
- userId: this.resolvedUserId() ?? '',
6221
+ userId,
6141
6222
  size: this.size(),
6223
+ displayName: explicitName ?? resolved.name,
6224
+ displayAvatar: explicitAvatar ?? resolved.avatar,
6225
+ displayIcon: explicitIcon ?? resolved.icon,
6142
6226
  };
6143
6227
  }
6144
6228
  return {
@@ -8399,6 +8483,7 @@ class AXConversationNewDialogComponent extends AXBasePageComponent {
8399
8483
  const metadata = {
8400
8484
  title: this.groupTitle().trim(),
8401
8485
  avatar: this.groupAvatar() || undefined,
8486
+ icon: AX_CONVERSATION_DEFAULT_GROUP_ICON,
8402
8487
  };
8403
8488
  conversation = await this.conversationService.createConversation(selectedIds, 'group', metadata);
8404
8489
  }
@@ -8792,7 +8877,7 @@ function normalizeAllConversationMessageIndexes() {
8792
8877
  }
8793
8878
 
8794
8879
  /** Bump when demo seed shape changes so IndexedDB is reset on next connect. */
8795
- const AX_CONVERSATION_DEMO_SEED_VERSION = 2;
8880
+ const AX_CONVERSATION_DEMO_SEED_VERSION = 3;
8796
8881
 
8797
8882
  /**
8798
8883
  * Shared In-Memory Storage
@@ -9254,7 +9339,7 @@ async function seedSharedStorageInitialData(storage) {
9254
9339
  type: 'group',
9255
9340
  title: 'ACoreX Platform Team',
9256
9341
  description: 'Sprint planning, releases, and blockers',
9257
- avatar: 'https://i.pravatar.cc/150?img=50',
9342
+ icon: AX_CONVERSATION_DEFAULT_GROUP_ICON,
9258
9343
  participants: [
9259
9344
  { ...me, role: 'admin' },
9260
9345
  { ...alice, role: 'member' },
@@ -9806,6 +9891,7 @@ class AXConversationIndexedDbConversationApi extends AXConversationApi {
9806
9891
  title: data.title ||
9807
9892
  (data.type === 'private' ? 'New Chat' : data.type === 'group' ? 'New Group' : 'New Channel'),
9808
9893
  avatar: data.avatar,
9894
+ icon: data.icon ?? (data.type === 'group' ? AX_CONVERSATION_DEFAULT_GROUP_ICON : undefined),
9809
9895
  description: data.description,
9810
9896
  participants: [...participantIds].map((id) => {
9811
9897
  const participant = axConversationSharedStorage.participants.get(id);
@@ -16909,6 +16995,76 @@ const AX_CONVERSATION_TAB_ARCHIVED = {
16909
16995
  * Conversation Tabs Plugins
16910
16996
  */
16911
16997
 
16998
+ /**
16999
+ * Default conversation avatar host when apps register only a user avatar component.
17000
+ * Routes private 1:1 chats through the user avatar; other types use built-in fallback display.
17001
+ */
17002
+ class AXConversationDefaultConversationAvatarComponent {
17003
+ constructor() {
17004
+ this.conversationService = inject(AXConversationService, { optional: true });
17005
+ this.userAvatarComponent = inject(AX_CONVERSATION_USER_AVATAR_COMPONENT, { optional: true });
17006
+ this.conversationId = input.required(/* @ts-ignore */
17007
+ ...(ngDevMode ? [{ debugName: "conversationId" }] : /* istanbul ignore next */ []));
17008
+ this.size = input(40, /* @ts-ignore */
17009
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
17010
+ this.currentUserId = computed(() => this.conversationService?.currentUser()?.id, /* @ts-ignore */
17011
+ ...(ngDevMode ? [{ debugName: "currentUserId" }] : /* istanbul ignore next */ []));
17012
+ this.conversation = computed(() => {
17013
+ const conversationId = this.conversationId();
17014
+ if (!conversationId) {
17015
+ return undefined;
17016
+ }
17017
+ return this.conversationService?.getConversation(conversationId) ?? undefined;
17018
+ }, /* @ts-ignore */
17019
+ ...(ngDevMode ? [{ debugName: "conversation" }] : /* istanbul ignore next */ []));
17020
+ this.peerUserId = computed(() => {
17021
+ const conversation = this.conversation();
17022
+ if (!conversation || conversation.type !== 'private') {
17023
+ return undefined;
17024
+ }
17025
+ return resolveConversationPeerUserId(conversation, this.currentUserId());
17026
+ }, /* @ts-ignore */
17027
+ ...(ngDevMode ? [{ debugName: "peerUserId" }] : /* istanbul ignore next */ []));
17028
+ this.useUserAvatar = computed(() => {
17029
+ const component = this.userAvatarComponent;
17030
+ const peerId = this.peerUserId();
17031
+ return component && peerId ? component : null;
17032
+ }, /* @ts-ignore */
17033
+ ...(ngDevMode ? [{ debugName: "useUserAvatar" }] : /* istanbul ignore next */ []));
17034
+ this.userAvatarInputs = computed(() => {
17035
+ const userId = this.peerUserId() ?? '';
17036
+ const conversation = this.conversation();
17037
+ const resolved = resolveUserAvatarDisplay(userId, conversation);
17038
+ return {
17039
+ userId,
17040
+ size: this.size(),
17041
+ displayName: resolved.name,
17042
+ displayAvatar: resolved.avatar,
17043
+ displayIcon: resolved.icon,
17044
+ };
17045
+ }, /* @ts-ignore */
17046
+ ...(ngDevMode ? [{ debugName: "userAvatarInputs" }] : /* istanbul ignore next */ []));
17047
+ this.fallbackDisplay = computed(() => {
17048
+ const conversation = this.conversation();
17049
+ if (!conversation) {
17050
+ return { name: '?', avatar: undefined, icon: undefined };
17051
+ }
17052
+ return resolveConversationAvatarDisplay(conversation, this.currentUserId());
17053
+ }, /* @ts-ignore */
17054
+ ...(ngDevMode ? [{ debugName: "fallbackDisplay" }] : /* istanbul ignore next */ []));
17055
+ this.fallbackInitials = computed(() => AXConversationMessageUtilsService.getInitials(this.fallbackDisplay().name), /* @ts-ignore */
17056
+ ...(ngDevMode ? [{ debugName: "fallbackInitials" }] : /* istanbul ignore next */ []));
17057
+ }
17058
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXConversationDefaultConversationAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17059
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXConversationDefaultConversationAvatarComponent, isStandalone: true, selector: "ax-conversation-default-conversation-avatar", inputs: { conversationId: { classPropertyName: "conversationId", publicName: "conversationId", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--ax-conversation-avatar-size.px": "size()" } }, ngImport: i0, template: "@if (useUserAvatar(); as userAvatar) {\n <ng-container *ngComponentOutlet=\"userAvatar; inputs: userAvatarInputs()\" />\n} @else {\n <ax-avatar [size]=\"size()\">\n @if (fallbackDisplay().avatar; as avatarSrc) {\n <ax-image [src]=\"avatarSrc\" [alt]=\"fallbackDisplay().name\"></ax-image>\n } @else if (fallbackDisplay().icon; as iconClass) {\n <ax-icon><i [class]=\"iconClass\" aria-hidden=\"true\"></i></ax-icon>\n } @else {\n <ax-label>{{ fallbackInitials() }}</ax-label>\n }\n </ax-avatar>\n}\n", dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "shape", "look"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "component", type: AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
17060
+ }
17061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXConversationDefaultConversationAvatarComponent, decorators: [{
17062
+ type: Component,
17063
+ args: [{ selector: 'ax-conversation-default-conversation-avatar', encapsulation: ViewEncapsulation.None, imports: [NgComponentOutlet, AXAvatarComponent, AXDecoratorModule, AXImageComponent, AXLabelComponent], host: {
17064
+ '[style.--ax-conversation-avatar-size.px]': 'size()',
17065
+ }, template: "@if (useUserAvatar(); as userAvatar) {\n <ng-container *ngComponentOutlet=\"userAvatar; inputs: userAvatarInputs()\" />\n} @else {\n <ax-avatar [size]=\"size()\">\n @if (fallbackDisplay().avatar; as avatarSrc) {\n <ax-image [src]=\"avatarSrc\" [alt]=\"fallbackDisplay().name\"></ax-image>\n } @else if (fallbackDisplay().icon; as iconClass) {\n <ax-icon><i [class]=\"iconClass\" aria-hidden=\"true\"></i></ax-icon>\n } @else {\n <ax-label>{{ fallbackInitials() }}</ax-label>\n }\n </ax-avatar>\n}\n" }]
17066
+ }], propDecorators: { conversationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "conversationId", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
17067
+
16912
17068
  /**
16913
17069
  * AXConversationModule
16914
17070
  * Legacy NgModule wrapper for backward compatibility.
@@ -16922,6 +17078,8 @@ const DECLARATIONS = [
16922
17078
  AXConversationComposerComponent,
16923
17079
  AXConversationInfiniteScrollDirective,
16924
17080
  ];
17081
+ /** Internal default conversation avatar host; not part of the public module API. */
17082
+ const INTERNAL_IMPORTS = [AXConversationDefaultConversationAvatarComponent];
16925
17083
  /**
16926
17084
  * Creates providers array for conversation module
16927
17085
  */
@@ -16963,6 +17121,12 @@ function createProviders(options, includeServices) {
16963
17121
  useValue: avatarComponents.conversation,
16964
17122
  });
16965
17123
  }
17124
+ else if (avatarComponents?.user) {
17125
+ providers.push({
17126
+ provide: AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT,
17127
+ useValue: AXConversationDefaultConversationAvatarComponent,
17128
+ });
17129
+ }
16966
17130
  if (includeServices) {
16967
17131
  providers.push(AXConversationMessageRendererRegistry, AXConversationMessageActionRegistry, AXConversationComposerActionRegistry, AXConversationComposerTabRegistry, AXConversationTabRegistry, AXConversationInfoBarActionRegistry, AXConversationItemActionRegistry, AXConversationRegistryService);
16968
17132
  }
@@ -16995,7 +17159,7 @@ class AXConversationModule {
16995
17159
  AXConversationInfoBarComponent,
16996
17160
  AXConversationMessageListComponent,
16997
17161
  AXConversationComposerComponent,
16998
- AXConversationInfiniteScrollDirective], exports: [AXConversationContainerComponent,
17162
+ AXConversationInfiniteScrollDirective, AXConversationDefaultConversationAvatarComponent], exports: [AXConversationContainerComponent,
16999
17163
  AXConversationSidebarComponent,
17000
17164
  AXConversationInfoBarComponent,
17001
17165
  AXConversationMessageListComponent,
@@ -17005,12 +17169,12 @@ class AXConversationModule {
17005
17169
  AXConversationSidebarComponent,
17006
17170
  AXConversationInfoBarComponent,
17007
17171
  AXConversationMessageListComponent,
17008
- AXConversationComposerComponent] }); }
17172
+ AXConversationComposerComponent, INTERNAL_IMPORTS] }); }
17009
17173
  }
17010
17174
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXConversationModule, decorators: [{
17011
17175
  type: NgModule,
17012
17176
  args: [{
17013
- imports: [CommonModule, FormsModule, ...DECLARATIONS],
17177
+ imports: [CommonModule, FormsModule, ...DECLARATIONS, ...INTERNAL_IMPORTS],
17014
17178
  exports: [...DECLARATIONS],
17015
17179
  providers: [],
17016
17180
  }]
@@ -17320,5 +17484,5 @@ function getErrorMessage(code, params) {
17320
17484
  * Generated bundle index. Do not edit.
17321
17485
  */
17322
17486
 
17323
- export { AXConversationAiResponderService, AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEMO_CONVERSATION_IDS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_MESSAGE_PAGINATION_CONVERSATION_ID, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchConversationMediaMessages, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
17487
+ export { AXConversationAiResponderService, AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryService, AXConversationService, AXConversationSharedStorage, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AI_API_KEY, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_DEMO_CONVERSATION_IDS, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_CURSOR_PREFIX, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_MESSAGE_PAGINATION_CONVERSATION_ID, abortPickerUploads, applyAudioLocalPreview, applyConversationFilters, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, axConversationIndexedDbStorage, axConversationSharedStorage, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, encodeConversationCursor, encodeMessageCursor, ensurePaginationDemoData, fetchConversationMediaMessages, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationLastActivity, getConversationMediaCategories, getConversationMessagesNewestFirst, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, getSortedConversationsForInbox, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAllConversationMessageIndexes, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeMessagePayload, normalizeMessagePayloadAsync, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, seedPickerInitialFiles, seedSharedStorageInitialData, shouldUseUserAvatarForConversation, sortConversationMessageIds, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, unregisterChatMessage, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
17324
17488
  //# sourceMappingURL=acorex-components-conversation.mjs.map