@acorex/components 22.1.0-next.2 → 22.1.0-next.21
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.
- package/fesm2022/acorex-components-accordion.mjs +2 -2
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +2 -2
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-combo-box.mjs +114 -20
- package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs → acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs} +6 -19
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +7299 -9510
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +33 -18
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +2 -2
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +21 -5
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +2 -2
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +2 -2
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +59 -42
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-lookup.mjs +765 -98
- package/fesm2022/acorex-components-lookup.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +4 -6
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +2 -2
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +22 -0
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +2 -2
- package/fesm2022/acorex-components-radio.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +2 -2
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +38 -11
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +2 -2
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +2 -2
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +2 -2
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +2 -2
- package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
- package/lookup/README.md +29 -7
- package/package.json +4 -7
- package/types/acorex-components-combo-box.d.ts +38 -8
- package/types/acorex-components-conversation.d.ts +543 -1019
- package/types/acorex-components-data-table.d.ts +3 -2
- package/types/acorex-components-loading-dialog.d.ts +12 -4
- package/types/acorex-components-lookup.d.ts +181 -21
- package/types/acorex-components-popover.d.ts +6 -0
- package/types/acorex-components-select-box.d.ts +11 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map +0 -1
- package/fesm2022/acorex-components-selection-list-2.mjs +0 -168
- package/fesm2022/acorex-components-selection-list-2.mjs.map +0 -1
- package/selection-list-2/README.md +0 -3
- package/types/acorex-components-selection-list-2.d.ts +0 -52
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import * as _acorex_components_conversation from '@acorex/components/conversation';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
4
|
-
import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXPlacement
|
|
3
|
+
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, ElementRef, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
4
|
+
import { AXComponentCloseEvent, AXHtmlEvent, AXClickEvent, AXDataSource, AXPlacement } from '@acorex/cdk/common';
|
|
5
|
+
import * as _acorex_components_action_sheet from '@acorex/components/action-sheet';
|
|
6
|
+
import { AXActionSheetRef } from '@acorex/components/action-sheet';
|
|
5
7
|
import * as _acorex_components_popup from '@acorex/components/popup';
|
|
6
8
|
import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
|
|
7
9
|
import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
|
|
8
10
|
import { AXListComponent } from '@acorex/components/list';
|
|
9
11
|
import * as rxjs from 'rxjs';
|
|
10
|
-
import { Observable
|
|
12
|
+
import { Observable } from 'rxjs';
|
|
11
13
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
12
14
|
import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
|
|
13
15
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
14
16
|
import * as _acorex_core_file from '@acorex/core/file';
|
|
15
|
-
import { AXFileTypeInfoProvider, AXFileType,
|
|
17
|
+
import { AXFileTypeInfoProvider, AXFileType, AXFileTypeRegistryService, AXFileService, AXFileTypeExtensionHint, AXFileTypeOpenContext } from '@acorex/core/file';
|
|
16
18
|
import { AXTranslationService } from '@acorex/core/translation';
|
|
17
19
|
import { AXToastService } from '@acorex/components/toast';
|
|
18
20
|
import { AXValidationRuleResult } from '@acorex/core/validation';
|
|
@@ -375,12 +377,31 @@ interface AXConversationDeleteMessageCommand {
|
|
|
375
377
|
forEveryone?: boolean;
|
|
376
378
|
}
|
|
377
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Per-user preferences for a specific conversation (mute, notifications, etc.).
|
|
382
|
+
* Stored on the user account, keyed by conversation ID — not on the room entity.
|
|
383
|
+
*/
|
|
384
|
+
interface AXConversationRoomPreferences {
|
|
385
|
+
/** Muted until timestamp */
|
|
386
|
+
mutedUntil?: Date;
|
|
387
|
+
/** Show notifications for this conversation */
|
|
388
|
+
notifications: boolean;
|
|
389
|
+
/** Custom notification sound */
|
|
390
|
+
notificationSound?: string;
|
|
391
|
+
/** Show message preview in notifications */
|
|
392
|
+
showPreview: boolean;
|
|
393
|
+
/** Custom settings */
|
|
394
|
+
custom?: Record<string, unknown>;
|
|
395
|
+
}
|
|
396
|
+
declare const AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES: AXConversationRoomPreferences;
|
|
397
|
+
/** Map of conversation ID → user-specific room preferences. */
|
|
398
|
+
type AXConversationRoomPreferencesMap = Record<string, AXConversationRoomPreferences>;
|
|
399
|
+
|
|
378
400
|
/**
|
|
379
401
|
* Participant Model
|
|
380
|
-
*
|
|
402
|
+
* Membership in a conversation (identity fields are snapshots; live presence is on the user store).
|
|
381
403
|
*/
|
|
382
|
-
type AXConversationParticipantRole = 'admin' | 'moderator' | 'member';
|
|
383
|
-
type AXConversationParticipantStatus = 'online' | 'offline' | 'away';
|
|
404
|
+
type AXConversationParticipantRole = 'owner' | 'admin' | 'moderator' | 'member' | 'guest';
|
|
384
405
|
/** Extended profile fields shown in private-chat info panels. */
|
|
385
406
|
interface AXConversationUserProfile {
|
|
386
407
|
bio?: string;
|
|
@@ -391,6 +412,18 @@ interface AXConversationUserProfile {
|
|
|
391
412
|
company?: string;
|
|
392
413
|
title?: string;
|
|
393
414
|
}
|
|
415
|
+
/** Authenticated user profile (includes per-room preferences). */
|
|
416
|
+
interface AXConversationUser {
|
|
417
|
+
id: string;
|
|
418
|
+
name: string;
|
|
419
|
+
description?: string;
|
|
420
|
+
profile?: AXConversationUserProfile;
|
|
421
|
+
avatar?: string;
|
|
422
|
+
icon?: string;
|
|
423
|
+
metadata?: Record<string, unknown>;
|
|
424
|
+
/** User-specific settings per conversation (key = conversationId). */
|
|
425
|
+
conversationPreferences?: AXConversationRoomPreferencesMap;
|
|
426
|
+
}
|
|
394
427
|
interface AXConversationParticipant {
|
|
395
428
|
/** Unique identifier for the participant */
|
|
396
429
|
id: string;
|
|
@@ -411,10 +444,6 @@ interface AXConversationParticipant {
|
|
|
411
444
|
icon?: string;
|
|
412
445
|
/** Role in the conversation (for groups/channels) */
|
|
413
446
|
role?: AXConversationParticipantRole;
|
|
414
|
-
/** Current online status */
|
|
415
|
-
status?: AXConversationParticipantStatus;
|
|
416
|
-
/** Last seen timestamp (when offline/away) */
|
|
417
|
-
lastSeen?: Date;
|
|
418
447
|
/** Custom metadata */
|
|
419
448
|
metadata?: Record<string, unknown>;
|
|
420
449
|
}
|
|
@@ -425,34 +454,6 @@ interface AXConversationParticipant {
|
|
|
425
454
|
*/
|
|
426
455
|
|
|
427
456
|
type AXConversationType = 'private' | 'group' | 'channel' | 'bot';
|
|
428
|
-
/**
|
|
429
|
-
* Conversation status information
|
|
430
|
-
*/
|
|
431
|
-
interface AXConversationStatus {
|
|
432
|
-
/** Whether someone is typing */
|
|
433
|
-
isTyping: boolean;
|
|
434
|
-
/** User IDs currently typing */
|
|
435
|
-
typingUsers: string[];
|
|
436
|
-
/** Online presence (for private chats) */
|
|
437
|
-
presence?: 'online' | 'offline' | 'away';
|
|
438
|
-
/** Last seen timestamp (for private chats when offline) */
|
|
439
|
-
lastSeen?: Date;
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Conversation settings
|
|
443
|
-
*/
|
|
444
|
-
interface AXConversationSettings {
|
|
445
|
-
/** Muted until timestamp */
|
|
446
|
-
mutedUntil?: Date;
|
|
447
|
-
/** Show notifications */
|
|
448
|
-
notifications: boolean;
|
|
449
|
-
/** Custom notification sound */
|
|
450
|
-
notificationSound?: string;
|
|
451
|
-
/** Show message preview in notifications */
|
|
452
|
-
showPreview: boolean;
|
|
453
|
-
/** Custom settings */
|
|
454
|
-
custom?: Record<string, unknown>;
|
|
455
|
-
}
|
|
456
457
|
/** Theme-specific CSS `background` values for the message list area. */
|
|
457
458
|
interface AXConversationMessageListThemeBackground {
|
|
458
459
|
light: string;
|
|
@@ -510,10 +511,6 @@ interface AXConversation {
|
|
|
510
511
|
unreadCount: number;
|
|
511
512
|
/** Number of unread mentions */
|
|
512
513
|
unreadMentions?: number;
|
|
513
|
-
/** Current status (typing, presence, etc.) */
|
|
514
|
-
status: AXConversationStatus;
|
|
515
|
-
/** User-specific settings */
|
|
516
|
-
settings: AXConversationSettings;
|
|
517
514
|
/** Pinned messages IDs */
|
|
518
515
|
pinnedMessageIds?: string[];
|
|
519
516
|
/** Conversation creation timestamp */
|
|
@@ -526,13 +523,11 @@ interface AXConversation {
|
|
|
526
523
|
pinned?: boolean;
|
|
527
524
|
/** Whether conversation is archived */
|
|
528
525
|
archived?: boolean;
|
|
529
|
-
/** Draft message text */
|
|
530
|
-
draft?: string;
|
|
531
526
|
/** Custom metadata */
|
|
532
527
|
metadata?: AXConversationMetadata;
|
|
533
528
|
}
|
|
534
529
|
/**
|
|
535
|
-
* Typing indicator
|
|
530
|
+
* Typing indicator (realtime event — ephemeral, not stored on the room entity).
|
|
536
531
|
*/
|
|
537
532
|
interface AXConversationTypingIndicator {
|
|
538
533
|
/** Conversation ID */
|
|
@@ -543,19 +538,8 @@ interface AXConversationTypingIndicator {
|
|
|
543
538
|
userName?: string;
|
|
544
539
|
/** Timestamp */
|
|
545
540
|
timestamp: Date;
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
* Presence update
|
|
549
|
-
*/
|
|
550
|
-
interface AXConversationPresenceUpdate {
|
|
551
|
-
/** User ID */
|
|
552
|
-
userId: string;
|
|
553
|
-
/** Presence status */
|
|
554
|
-
status: 'online' | 'offline' | 'away';
|
|
555
|
-
/** Last seen timestamp */
|
|
556
|
-
lastSeen?: Date;
|
|
557
|
-
/** Custom status text */
|
|
558
|
-
statusText?: string;
|
|
541
|
+
/** When false, user stopped typing */
|
|
542
|
+
isTyping?: boolean;
|
|
559
543
|
}
|
|
560
544
|
/**
|
|
561
545
|
* Conversation filter options
|
|
@@ -595,6 +579,26 @@ declare const AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE: Partial<Record<AXConversat
|
|
|
595
579
|
/** Resolves {@link AXConversationMessage.fileType} from command or message type. */
|
|
596
580
|
declare function resolveConversationMessageFileType(type: AXConversationMessageType, fileType?: string): string | undefined;
|
|
597
581
|
|
|
582
|
+
/**
|
|
583
|
+
* User presence — global per-user live state (not room-scoped).
|
|
584
|
+
*/
|
|
585
|
+
type AXConversationPresenceStatus = 'online' | 'offline' | 'away' | 'busy';
|
|
586
|
+
/** Live presence for a single user. */
|
|
587
|
+
interface AXConversationUserPresence {
|
|
588
|
+
userId: string;
|
|
589
|
+
status: AXConversationPresenceStatus;
|
|
590
|
+
lastSeen?: Date;
|
|
591
|
+
statusText?: string;
|
|
592
|
+
updatedAt?: Date;
|
|
593
|
+
}
|
|
594
|
+
/** Realtime / API presence event payload. */
|
|
595
|
+
interface AXConversationPresenceUpdate {
|
|
596
|
+
userId: string;
|
|
597
|
+
status: AXConversationPresenceStatus;
|
|
598
|
+
lastSeen?: Date;
|
|
599
|
+
statusText?: string;
|
|
600
|
+
}
|
|
601
|
+
|
|
598
602
|
/**
|
|
599
603
|
* Abstract Base Registry
|
|
600
604
|
* Base class for all registries with common functionality
|
|
@@ -673,22 +677,17 @@ declare abstract class AXConversationBaseRegistry<T extends AXConversationRegist
|
|
|
673
677
|
protected abstract getRegistryName(): string;
|
|
674
678
|
}
|
|
675
679
|
|
|
676
|
-
/**
|
|
677
|
-
|
|
678
|
-
*/
|
|
679
|
-
interface AXConversationComposerActiveComponent {
|
|
680
|
-
/** Action that triggered this component */
|
|
681
|
-
action: AXConversationComposerAction;
|
|
682
|
-
/** Component to render */
|
|
683
|
-
component?: Type<unknown>;
|
|
684
|
-
/** Lazy loader for the component */
|
|
685
|
-
componentLoader?: () => Promise<Type<unknown>>;
|
|
686
|
-
/** Component inputs */
|
|
687
|
-
inputs?: Record<string, unknown>;
|
|
688
|
-
}
|
|
680
|
+
/** Primary composer button mode (send / cancel / stopping / default action / locked). */
|
|
681
|
+
type AXConversationComposerPrimaryButtonMode = 'send' | 'cancel' | 'stopping' | 'default-action' | 'locked';
|
|
689
682
|
declare class AXConversationComposerService {
|
|
690
683
|
private readonly conversationService;
|
|
684
|
+
private readonly generationState;
|
|
691
685
|
private readonly translation;
|
|
686
|
+
private readonly popupService;
|
|
687
|
+
private readonly actionSheetService;
|
|
688
|
+
private readonly platform;
|
|
689
|
+
private readonly config;
|
|
690
|
+
private readonly _activeActionOverlay;
|
|
692
691
|
private get registry();
|
|
693
692
|
private readonly _replyMessage;
|
|
694
693
|
private readonly _editMessage;
|
|
@@ -696,15 +695,10 @@ declare class AXConversationComposerService {
|
|
|
696
695
|
readonly editMessage: _angular_core.Signal<AXConversationMessage>;
|
|
697
696
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
698
697
|
readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
|
|
699
|
-
/** Active component being shown in composer (full-width mode) */
|
|
700
|
-
private readonly _activeComponent;
|
|
701
|
-
readonly activeComponent: _angular_core.Signal<AXConversationComposerActiveComponent>;
|
|
702
698
|
/** Draft text */
|
|
703
699
|
readonly draftText: _angular_core.WritableSignal<string>;
|
|
704
700
|
/** Attachments */
|
|
705
701
|
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
706
|
-
/** Show typing indicator */
|
|
707
|
-
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
708
702
|
/** Incremented to request focus on the composer text area (handled by AXConversationComposerComponent). */
|
|
709
703
|
private readonly _focusRequest;
|
|
710
704
|
readonly focusRequest: _angular_core.Signal<number>;
|
|
@@ -712,22 +706,31 @@ declare class AXConversationComposerService {
|
|
|
712
706
|
readonly placeholder: _angular_core.Signal<string>;
|
|
713
707
|
/** Number of input rows */
|
|
714
708
|
readonly inputRows: _angular_core.Signal<number>;
|
|
715
|
-
/** Can send message */
|
|
709
|
+
/** Can send message (draft has content; does not include generation state). */
|
|
716
710
|
readonly canSend: _angular_core.Signal<boolean>;
|
|
711
|
+
/** Whether a background generation (e.g. AI response) is in progress. */
|
|
712
|
+
readonly isGenerating: _angular_core.Signal<boolean>;
|
|
713
|
+
/** Whether cancel cleanup is in progress (spinner on primary button). */
|
|
714
|
+
readonly isStopping: _angular_core.Signal<boolean>;
|
|
715
|
+
/** Primary end-button mode for send / cancel / stopping / voice / locked. */
|
|
716
|
+
readonly primaryButtonMode: _angular_core.Signal<AXConversationComposerPrimaryButtonMode>;
|
|
717
717
|
/** Composer action context */
|
|
718
718
|
readonly actionContext: _angular_core.Signal<AXConversationComposerActionContext>;
|
|
719
|
-
/**
|
|
720
|
-
readonly
|
|
721
|
-
/**
|
|
722
|
-
readonly
|
|
723
|
-
/**
|
|
724
|
-
readonly
|
|
725
|
-
/**
|
|
726
|
-
readonly
|
|
727
|
-
/**
|
|
728
|
-
readonly
|
|
729
|
-
/**
|
|
730
|
-
readonly
|
|
719
|
+
/** Start actions from registry */
|
|
720
|
+
readonly startActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
721
|
+
/** End actions from registry */
|
|
722
|
+
readonly endActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
723
|
+
/** Start inline actions (location = 'inline' or undefined) */
|
|
724
|
+
readonly startInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
725
|
+
/** Start menu actions — shown in the attachment popup */
|
|
726
|
+
readonly startMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
727
|
+
/** End inline actions inside the input pill (excludes default action) */
|
|
728
|
+
readonly endInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
729
|
+
/** End menu actions (location = 'menu') */
|
|
730
|
+
readonly endMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
731
|
+
/** Default end action (voice/send morph button) */
|
|
732
|
+
readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
|
|
733
|
+
cancelGeneration(): void;
|
|
731
734
|
startReply(message: AXConversationMessage): void;
|
|
732
735
|
startEdit(message: AXConversationMessage): void;
|
|
733
736
|
/** Focus the composer text area when the composer component is mounted. */
|
|
@@ -744,21 +747,20 @@ declare class AXConversationComposerService {
|
|
|
744
747
|
*/
|
|
745
748
|
clearComposerInput(conversationId?: string): void;
|
|
746
749
|
/**
|
|
747
|
-
*
|
|
750
|
+
* Open a composer action component in a popup (desktop) or action sheet (mobile).
|
|
748
751
|
*/
|
|
749
|
-
|
|
752
|
+
openActionComponent(action: AXConversationComposerAction, inputs?: Record<string, unknown>, options?: {
|
|
753
|
+
toggleable?: boolean;
|
|
754
|
+
initialFiles?: File[];
|
|
755
|
+
}): Promise<void>;
|
|
750
756
|
/**
|
|
751
|
-
* Hide the active
|
|
757
|
+
* Hide the active action overlay.
|
|
752
758
|
*/
|
|
753
759
|
hideComponent(): void;
|
|
754
|
-
/**
|
|
755
|
-
* Toggle component visibility
|
|
756
|
-
*/
|
|
757
|
-
toggleComponent(action: AXConversationComposerAction, inputs?: Record<string, unknown>): void;
|
|
758
760
|
/**
|
|
759
761
|
* Get actions for the active conversation
|
|
760
762
|
*/
|
|
761
|
-
getActionsForPosition(position: '
|
|
763
|
+
getActionsForPosition(position: 'start' | 'end', context: AXConversationComposerActionContext): AXConversationComposerAction[];
|
|
762
764
|
/**
|
|
763
765
|
* Execute an action
|
|
764
766
|
*/
|
|
@@ -795,6 +797,10 @@ interface AXConversationComposerActionContext {
|
|
|
795
797
|
isReplying: boolean;
|
|
796
798
|
/** Message being replied to (if any) */
|
|
797
799
|
replyingToMessageId?: string;
|
|
800
|
+
/** Whether a background generation (e.g. AI response) is in progress */
|
|
801
|
+
isGenerating?: boolean;
|
|
802
|
+
/** Whether cancel cleanup is in progress */
|
|
803
|
+
isStopping?: boolean;
|
|
798
804
|
/** Custom context data */
|
|
799
805
|
custom?: Record<string, unknown>;
|
|
800
806
|
}
|
|
@@ -811,6 +817,15 @@ interface AXConversationComposerActionComponent {
|
|
|
811
817
|
readonly initialFiles?: InputSignal<File[]>;
|
|
812
818
|
/** Set by {@link AXPopupService} when the picker is shown in a popup. */
|
|
813
819
|
readonly __popup__?: InputSignal<_acorex_components_popup.AXPopupRef | undefined>;
|
|
820
|
+
/** Set by {@link AXActionSheetService} when the picker is shown in an action sheet. */
|
|
821
|
+
readonly __actionSheet__?: InputSignal<_acorex_components_action_sheet.AXActionSheetRef | undefined>;
|
|
822
|
+
/**
|
|
823
|
+
* When true (from action {@link AXConversationComposerAction.autoRun}), runs {@link activate}
|
|
824
|
+
* once after the component is mounted.
|
|
825
|
+
*/
|
|
826
|
+
readonly autoRun?: InputSignal<boolean>;
|
|
827
|
+
/** Primary action when opened from the composer (record, browse files, etc.). */
|
|
828
|
+
activate?(): void | Promise<void>;
|
|
814
829
|
/** Cancel in-flight uploads when the picker is closed or replaced. */
|
|
815
830
|
abortInProgressUploads?(): void;
|
|
816
831
|
}
|
|
@@ -822,10 +837,15 @@ interface AXConversationComposerAction extends Omit<AXConversationRegistryItem,
|
|
|
822
837
|
label: string;
|
|
823
838
|
/** Icon name/class */
|
|
824
839
|
icon: string;
|
|
825
|
-
/** Position:
|
|
826
|
-
position: '
|
|
827
|
-
/** Location: inline (show as button) or menu (show in
|
|
840
|
+
/** Position: start or end of the composer */
|
|
841
|
+
position: 'start' | 'end';
|
|
842
|
+
/** Location: inline (show as button) or menu (show in attachment popup menu) */
|
|
828
843
|
location?: 'inline' | 'menu';
|
|
844
|
+
/**
|
|
845
|
+
* Primary end action (e.g. voice record). Only one action may be default.
|
|
846
|
+
* Renders as the circular send-style button and morphs into send when the draft has content.
|
|
847
|
+
*/
|
|
848
|
+
default?: boolean;
|
|
829
849
|
/** Visibility condition */
|
|
830
850
|
visible: (context: AXConversationComposerActionContext) => boolean;
|
|
831
851
|
/** Enabled condition */
|
|
@@ -841,6 +861,11 @@ interface AXConversationComposerAction extends Omit<AXConversationRegistryItem,
|
|
|
841
861
|
* Whether this action is toggleable (shows/hides component)
|
|
842
862
|
*/
|
|
843
863
|
toggleable?: boolean;
|
|
864
|
+
/**
|
|
865
|
+
* When true, runs {@link AXConversationComposerActionComponent.activate} in
|
|
866
|
+
* {@link afterNextRender} after the upload panel is mounted.
|
|
867
|
+
*/
|
|
868
|
+
autoRun?: boolean;
|
|
844
869
|
/** Action handler (optional if component is provided) */
|
|
845
870
|
handler?: (context: AXConversationComposerActionContext) => void | Promise<void>;
|
|
846
871
|
/** Tooltip text */
|
|
@@ -869,18 +894,20 @@ declare class AXConversationComposerActionRegistry {
|
|
|
869
894
|
constructor();
|
|
870
895
|
/** All registered actions */
|
|
871
896
|
readonly actions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
872
|
-
/**
|
|
873
|
-
readonly
|
|
874
|
-
/**
|
|
875
|
-
readonly
|
|
876
|
-
/**
|
|
877
|
-
readonly
|
|
878
|
-
/**
|
|
879
|
-
readonly
|
|
880
|
-
/**
|
|
881
|
-
readonly
|
|
882
|
-
/**
|
|
883
|
-
readonly
|
|
897
|
+
/** Start-side actions sorted by priority */
|
|
898
|
+
readonly startActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
899
|
+
/** End-side actions sorted by priority */
|
|
900
|
+
readonly endActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
901
|
+
/** Start-side inline actions (location = 'inline' or undefined) */
|
|
902
|
+
readonly startInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
903
|
+
/** Start-side menu actions (location = 'menu') — shown in the attachment popup */
|
|
904
|
+
readonly startMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
905
|
+
/** End-side inline actions inside the input pill (excludes default action) */
|
|
906
|
+
readonly endInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
907
|
+
/** End-side menu actions (location = 'menu') */
|
|
908
|
+
readonly endMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
909
|
+
/** The single default end action (voice/send morph button) */
|
|
910
|
+
readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
|
|
884
911
|
/**
|
|
885
912
|
* Register a composer action
|
|
886
913
|
*/
|
|
@@ -895,11 +922,11 @@ declare class AXConversationComposerActionRegistry {
|
|
|
895
922
|
/**
|
|
896
923
|
* Get visible actions for a position
|
|
897
924
|
*/
|
|
898
|
-
getVisibleActions(position: '
|
|
925
|
+
getVisibleActions(position: 'start' | 'end', context: AXConversationComposerActionContext): AXConversationComposerAction[];
|
|
899
926
|
/**
|
|
900
927
|
* Get enabled actions for a position
|
|
901
928
|
*/
|
|
902
|
-
getEnabledActions(position: '
|
|
929
|
+
getEnabledActions(position: 'start' | 'end', context: AXConversationComposerActionContext): AXConversationComposerAction[];
|
|
903
930
|
isActionEnabled(action: AXConversationComposerAction, context: AXConversationComposerActionContext): boolean;
|
|
904
931
|
/**
|
|
905
932
|
* Picker actions for a file catalog (by priority), when visible and enabled.
|
|
@@ -1317,10 +1344,6 @@ declare class AXConversationInfoBarService {
|
|
|
1317
1344
|
* Reset info-bar overlays when the active conversation changes.
|
|
1318
1345
|
*/
|
|
1319
1346
|
onConversationChanged(): void;
|
|
1320
|
-
/**
|
|
1321
|
-
* Open the Telegram-style conversation info panel for the active (or given) conversation.
|
|
1322
|
-
*/
|
|
1323
|
-
openConversationInfoPanel(conversation?: AXConversation): Promise<void>;
|
|
1324
1347
|
/**
|
|
1325
1348
|
* Get actions for the active conversation
|
|
1326
1349
|
*/
|
|
@@ -1424,7 +1447,7 @@ interface AXConversationInfoBarAction extends AXConversationRegistryItem {
|
|
|
1424
1447
|
/** Whether this is a divider */
|
|
1425
1448
|
divider?: boolean;
|
|
1426
1449
|
/** Display location: 'inline' for toolbar buttons, 'menu' for dropdown menu */
|
|
1427
|
-
location?: 'inline' | 'menu';
|
|
1450
|
+
location?: 'inline' | 'menu' | ((context: AXConversationInfoBarActionContext) => 'inline' | 'menu');
|
|
1428
1451
|
/**
|
|
1429
1452
|
* Component to show when action is activated (for inline actions)
|
|
1430
1453
|
* If provided, clicking the action will show this component in the info-bar
|
|
@@ -1474,6 +1497,10 @@ declare class AXConversationInfoBarActionRegistry extends AXConversationBaseRegi
|
|
|
1474
1497
|
* Get actions for a specific conversation
|
|
1475
1498
|
*/
|
|
1476
1499
|
getActionsForConversation(conversation: AXConversation, location?: 'inline' | 'menu'): AXConversationInfoBarAction[];
|
|
1500
|
+
/**
|
|
1501
|
+
* Resolve the display location for an action (supports dynamic location factories).
|
|
1502
|
+
*/
|
|
1503
|
+
getActionLocation(action: AXConversationInfoBarAction, conversation: AXConversation): 'inline' | 'menu' | undefined;
|
|
1477
1504
|
/**
|
|
1478
1505
|
* Get inline actions (toolbar buttons)
|
|
1479
1506
|
*/
|
|
@@ -1598,7 +1625,7 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1598
1625
|
private readonly config;
|
|
1599
1626
|
private readonly translation;
|
|
1600
1627
|
/** Access registry through conversation service */
|
|
1601
|
-
|
|
1628
|
+
protected get composerActionRegistry(): _acorex_components_conversation.AXConversationComposerActionRegistry;
|
|
1602
1629
|
/** Composer text area reference */
|
|
1603
1630
|
private readonly textAreaRef;
|
|
1604
1631
|
/** Draft text - use service */
|
|
@@ -1609,10 +1636,10 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1609
1636
|
readonly editingMessage: _angular_core.WritableSignal<any>;
|
|
1610
1637
|
/** Replying to message */
|
|
1611
1638
|
readonly replyingToMessage: _angular_core.WritableSignal<AXConversationMessage>;
|
|
1612
|
-
/** Show typing indicator - use service */
|
|
1613
|
-
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1614
1639
|
/** Message sent event */
|
|
1615
1640
|
readonly messageSent: _angular_core.OutputEmitterRef<AXConversationSendMessageCommand>;
|
|
1641
|
+
/** Emitted when the user cancels an in-progress generation from the composer. */
|
|
1642
|
+
readonly generationCancelled: _angular_core.OutputEmitterRef<void>;
|
|
1616
1643
|
/** Emoji clicked event */
|
|
1617
1644
|
readonly emojiClick: _angular_core.OutputEmitterRef<void>;
|
|
1618
1645
|
/** Attach clicked event */
|
|
@@ -1622,11 +1649,12 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1622
1649
|
/** Active conversation */
|
|
1623
1650
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
1624
1651
|
readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
|
|
1625
|
-
/** Active component from service */
|
|
1626
|
-
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation.AXConversationComposerActiveComponent>;
|
|
1627
1652
|
/** Emoji popover state */
|
|
1628
1653
|
private readonly emojiPopoverRef;
|
|
1629
1654
|
readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1655
|
+
/** Attachment menu popover state */
|
|
1656
|
+
private readonly attachPopoverRef;
|
|
1657
|
+
readonly attachPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1630
1658
|
readonly composerPopupLoader: () => Promise<typeof _acorex_components_conversation.AXConversationComposerPopupComponent>;
|
|
1631
1659
|
/** Input placeholder - use service */
|
|
1632
1660
|
readonly placeholder: _angular_core.Signal<string>;
|
|
@@ -1638,30 +1666,40 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1638
1666
|
readonly inputRows: _angular_core.Signal<number>;
|
|
1639
1667
|
/** Can send message - use service */
|
|
1640
1668
|
readonly canSend: _angular_core.Signal<boolean>;
|
|
1641
|
-
/**
|
|
1642
|
-
readonly
|
|
1643
|
-
/**
|
|
1644
|
-
readonly
|
|
1645
|
-
/**
|
|
1646
|
-
readonly
|
|
1647
|
-
/**
|
|
1648
|
-
readonly
|
|
1649
|
-
/**
|
|
1650
|
-
readonly
|
|
1651
|
-
/**
|
|
1652
|
-
readonly
|
|
1669
|
+
/** Whether AI/generation is in progress */
|
|
1670
|
+
readonly isGenerating: _angular_core.Signal<boolean>;
|
|
1671
|
+
/** Whether cancel cleanup is in progress */
|
|
1672
|
+
readonly isStopping: _angular_core.Signal<boolean>;
|
|
1673
|
+
/** Primary button mode */
|
|
1674
|
+
readonly primaryButtonMode: _angular_core.Signal<_acorex_components_conversation.AXConversationComposerPrimaryButtonMode>;
|
|
1675
|
+
/** Start actions from registry - use service */
|
|
1676
|
+
readonly startActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1677
|
+
/** End actions from registry - use service */
|
|
1678
|
+
readonly endActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1679
|
+
/** Start inline actions */
|
|
1680
|
+
readonly startInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1681
|
+
/** Start menu actions (attachment popup) */
|
|
1682
|
+
readonly startMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1683
|
+
/** End inline actions inside input pill */
|
|
1684
|
+
readonly endInlineActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1685
|
+
/** End menu actions */
|
|
1686
|
+
readonly endMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
|
|
1687
|
+
/** Default end action (voice/send morph) */
|
|
1688
|
+
readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
|
|
1653
1689
|
/** Handle key down */
|
|
1654
1690
|
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
1655
1691
|
/** Handle input */
|
|
1656
1692
|
onInput(): void;
|
|
1657
1693
|
/** Send typing indicator (throttled via RxJS) */
|
|
1658
1694
|
private sendTypingIndicator;
|
|
1695
|
+
private stopTypingIndicator;
|
|
1696
|
+
private typingStopHandle?;
|
|
1659
1697
|
/** Cleanup on destroy */
|
|
1660
1698
|
ngOnDestroy(): void;
|
|
1661
1699
|
/** Handle send click */
|
|
1662
1700
|
onSendClick(): Promise<void>;
|
|
1663
1701
|
/** Handle emoji click */
|
|
1664
|
-
onEmojiClick(event?: MouseEvent): Promise<void>;
|
|
1702
|
+
onEmojiClick(event?: AXClickEvent | MouseEvent): Promise<void>;
|
|
1665
1703
|
/** Handle emoji popover closed */
|
|
1666
1704
|
onEmojiPopoverClosed(): void;
|
|
1667
1705
|
/** Handle emoji/sticker selection from popup */
|
|
@@ -1670,8 +1708,21 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1670
1708
|
private sendSticker;
|
|
1671
1709
|
/** Get inputs for emoji popup component */
|
|
1672
1710
|
getEmojiPopupInputs(): Record<string, unknown>;
|
|
1673
|
-
/** Handle attach click */
|
|
1674
|
-
|
|
1711
|
+
/** Handle attach menu click */
|
|
1712
|
+
onAttachMenuClick(event: AXClickEvent): void;
|
|
1713
|
+
/** Handle attachment popover closed */
|
|
1714
|
+
onAttachPopoverClosed(): void;
|
|
1715
|
+
/** Handle attachment menu action selection */
|
|
1716
|
+
onAttachMenuAction(actionId: string): Promise<void>;
|
|
1717
|
+
/** Handle primary button click (send / cancel / stopping / voice / locked). */
|
|
1718
|
+
onPrimaryButtonClick(): Promise<void>;
|
|
1719
|
+
/** @deprecated Use onPrimaryButtonClick */
|
|
1720
|
+
onDefaultActionClick(): Promise<void>;
|
|
1721
|
+
getPrimaryButtonIcon(): string;
|
|
1722
|
+
getPrimaryButtonLabel(): string;
|
|
1723
|
+
isPrimaryButtonDisabled(): boolean;
|
|
1724
|
+
/** @deprecated Use getPrimaryButtonIcon */
|
|
1725
|
+
getDefaultActionIcon(): string;
|
|
1675
1726
|
/** Handle voice click */
|
|
1676
1727
|
onVoiceClick(): void;
|
|
1677
1728
|
/** Remove attachment */
|
|
@@ -1684,8 +1735,9 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1684
1735
|
startReply(message: AXConversationMessage): void;
|
|
1685
1736
|
/** Focus the native textarea inside ax-text-area */
|
|
1686
1737
|
private focusTextArea;
|
|
1738
|
+
private getClickTarget;
|
|
1687
1739
|
/** Handle action click */
|
|
1688
|
-
onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
|
|
1740
|
+
onActionClick(actionId: string, event?: AXClickEvent | MouseEvent, initialFiles?: File[]): Promise<void>;
|
|
1689
1741
|
/** Check if action is enabled */
|
|
1690
1742
|
isActionEnabled(action: any): boolean;
|
|
1691
1743
|
/** Get replying sender name */
|
|
@@ -1693,6 +1745,9 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1693
1745
|
getActionLabel(action: {
|
|
1694
1746
|
label: string;
|
|
1695
1747
|
}): string;
|
|
1748
|
+
getActionButtonClass(action: {
|
|
1749
|
+
className?: string;
|
|
1750
|
+
}): string;
|
|
1696
1751
|
/** Get replying message text */
|
|
1697
1752
|
getReplyingMessageText(): string;
|
|
1698
1753
|
/** Preview object for replying banner (type, icon, value) */
|
|
@@ -1713,13 +1768,11 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1713
1768
|
}): string;
|
|
1714
1769
|
/** Handle reply preview click - scroll to original message */
|
|
1715
1770
|
onReplyPreviewClick(): void;
|
|
1716
|
-
/** Inputs for picker /
|
|
1771
|
+
/** Inputs for picker components opened in popup / action sheet */
|
|
1717
1772
|
private buildPickerInputs;
|
|
1718
|
-
/** Get inputs for dynamic component */
|
|
1719
|
-
getComponentInputs(): Record<string, unknown>;
|
|
1720
1773
|
onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
|
|
1721
1774
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerComponent, never>;
|
|
1722
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
1775
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "generationCancelled": "generationCancelled"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
1723
1776
|
}
|
|
1724
1777
|
|
|
1725
1778
|
declare class AXConversationContainerComponent {
|
|
@@ -1728,6 +1781,8 @@ declare class AXConversationContainerComponent {
|
|
|
1728
1781
|
private readonly fileService;
|
|
1729
1782
|
private readonly translation;
|
|
1730
1783
|
private readonly toast;
|
|
1784
|
+
private readonly platform;
|
|
1785
|
+
private readonly actionSheetService;
|
|
1731
1786
|
private readonly hostRef;
|
|
1732
1787
|
private readonly platformId;
|
|
1733
1788
|
protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
|
|
@@ -1761,6 +1816,8 @@ declare class AXConversationContainerDirective {
|
|
|
1761
1816
|
private readonly platformId;
|
|
1762
1817
|
private readonly translation;
|
|
1763
1818
|
private readonly toast;
|
|
1819
|
+
private readonly platform;
|
|
1820
|
+
private readonly actionSheetService;
|
|
1764
1821
|
private readonly config;
|
|
1765
1822
|
constructor();
|
|
1766
1823
|
private get registry();
|
|
@@ -1788,59 +1845,51 @@ interface AXConversationDropdownMenuItem {
|
|
|
1788
1845
|
declare class AXConversationInfoBarComponent {
|
|
1789
1846
|
private readonly conversationService;
|
|
1790
1847
|
private readonly infoBar;
|
|
1848
|
+
private readonly platform;
|
|
1849
|
+
private readonly destroyRef;
|
|
1850
|
+
private readonly customUserAvatarComponent;
|
|
1851
|
+
private readonly layoutTick;
|
|
1852
|
+
constructor();
|
|
1791
1853
|
protected get registry(): _acorex_components_conversation.AXConversationRegistryService;
|
|
1792
|
-
|
|
1854
|
+
readonly hasCustomUserAvatar: _angular_core.Signal<boolean>;
|
|
1793
1855
|
readonly activeConversation: _angular_core.Signal<AXConversation>;
|
|
1794
|
-
/** Active component from service */
|
|
1795
1856
|
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveComponent>;
|
|
1796
|
-
/** Active banner from service */
|
|
1797
1857
|
readonly activeBanner: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveBanner>;
|
|
1798
|
-
/** Members popover target element — retained for API compatibility */
|
|
1799
1858
|
readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1800
|
-
/** Loading state for async actions */
|
|
1801
1859
|
readonly actionLoading: _angular_core.WritableSignal<boolean>;
|
|
1802
|
-
/** Info area clicked — opens conversation profile panel */
|
|
1803
1860
|
readonly infoClick: _angular_core.OutputEmitterRef<void>;
|
|
1804
|
-
/** @deprecated Use infoClick — kept for backward compatibility */
|
|
1805
|
-
readonly avatarClick: _angular_core.OutputEmitterRef<void>;
|
|
1806
|
-
/** Search clicked event */
|
|
1807
1861
|
readonly searchClick: _angular_core.OutputEmitterRef<void>;
|
|
1808
|
-
/** Search query changed event */
|
|
1809
1862
|
readonly searchQuery: _angular_core.OutputEmitterRef<string>;
|
|
1810
|
-
/** Menu item clicked event */
|
|
1811
1863
|
readonly menuItemAction: _angular_core.OutputEmitterRef<string>;
|
|
1812
|
-
|
|
1813
|
-
readonly inlineActions: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarAction[]>;
|
|
1814
|
-
/** Dropdown menu items from registry */
|
|
1864
|
+
readonly inlineActions: _angular_core.Signal<AXConversationInfoBarAction[]>;
|
|
1815
1865
|
readonly menuItems: _angular_core.Signal<AXConversationDropdownMenuItem[]>;
|
|
1816
|
-
|
|
1817
|
-
getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
|
|
1818
|
-
/** Get subtitle text - delegate to utils */
|
|
1866
|
+
getStatus(conversation: AXConversation): _acorex_components_conversation.AXConversationPresenceStatus;
|
|
1819
1867
|
getSubtitle(conversation: AXConversation): string;
|
|
1820
|
-
/** Open conversation info panel when the left info area is clicked */
|
|
1821
1868
|
onInfoLeftClick(): void;
|
|
1822
|
-
/** Handle inline action click */
|
|
1823
1869
|
onInlineActionClick(actionId: string): Promise<void>;
|
|
1824
|
-
|
|
1870
|
+
private activateAction;
|
|
1825
1871
|
getComponentInputs(): Record<string, unknown>;
|
|
1826
1872
|
getInlineComponentInputs(): Record<string, unknown>;
|
|
1827
1873
|
isActiveComponentFullWidth(): boolean;
|
|
1828
|
-
/** Handle close component */
|
|
1829
1874
|
onCloseComponent(): void;
|
|
1830
1875
|
getBannerInputs(): Record<string, unknown>;
|
|
1831
1876
|
onCloseBanner(): void;
|
|
1832
|
-
/** Handle menu item click */
|
|
1833
1877
|
onMenuItemClick(item: AXConversationDropdownMenuItem): Promise<void>;
|
|
1834
1878
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarComponent, never>;
|
|
1835
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "
|
|
1879
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
|
|
1836
1880
|
}
|
|
1837
1881
|
|
|
1838
1882
|
/**
|
|
1883
|
+
|
|
1839
1884
|
* Shared API Types
|
|
1885
|
+
|
|
1840
1886
|
* Common types used across all API services
|
|
1887
|
+
|
|
1841
1888
|
*/
|
|
1842
1889
|
/**
|
|
1890
|
+
|
|
1843
1891
|
* Pagination parameters
|
|
1892
|
+
|
|
1844
1893
|
*/
|
|
1845
1894
|
interface AXConversationPagination {
|
|
1846
1895
|
/** Page number (0-based) */
|
|
@@ -1855,7 +1904,9 @@ interface AXConversationPagination {
|
|
|
1855
1904
|
sortDirection?: 'asc' | 'desc';
|
|
1856
1905
|
}
|
|
1857
1906
|
/**
|
|
1907
|
+
|
|
1858
1908
|
* Paginated response
|
|
1909
|
+
|
|
1859
1910
|
*/
|
|
1860
1911
|
interface AXConversationPaginatedResult<T> {
|
|
1861
1912
|
/** Result items */
|
|
@@ -1874,7 +1925,9 @@ interface AXConversationPaginatedResult<T> {
|
|
|
1874
1925
|
totalPages?: number;
|
|
1875
1926
|
}
|
|
1876
1927
|
/**
|
|
1928
|
+
|
|
1877
1929
|
* Pagination cursor state for a single list (conversations or messages).
|
|
1930
|
+
|
|
1878
1931
|
*/
|
|
1879
1932
|
interface AXConversationPaginationState {
|
|
1880
1933
|
page: number;
|
|
@@ -1882,11 +1935,15 @@ interface AXConversationPaginationState {
|
|
|
1882
1935
|
nextCursor?: string;
|
|
1883
1936
|
}
|
|
1884
1937
|
/**
|
|
1938
|
+
|
|
1885
1939
|
* Connection status
|
|
1940
|
+
|
|
1886
1941
|
*/
|
|
1887
1942
|
type AXConversationConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';
|
|
1888
1943
|
/**
|
|
1944
|
+
|
|
1889
1945
|
* API Error with details
|
|
1946
|
+
|
|
1890
1947
|
*/
|
|
1891
1948
|
interface AXConversationApiError {
|
|
1892
1949
|
/** Error code */
|
|
@@ -1900,14 +1957,6 @@ interface AXConversationApiError {
|
|
|
1900
1957
|
/** Timestamp */
|
|
1901
1958
|
timestamp?: Date;
|
|
1902
1959
|
}
|
|
1903
|
-
/**
|
|
1904
|
-
* User presence status
|
|
1905
|
-
*/
|
|
1906
|
-
type AXConversationPresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'invisible';
|
|
1907
|
-
/**
|
|
1908
|
-
* User role in conversation
|
|
1909
|
-
*/
|
|
1910
|
-
type AXConversationUserRole = 'owner' | 'admin' | 'member' | 'guest';
|
|
1911
1960
|
|
|
1912
1961
|
type AXConversationApiName = 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi';
|
|
1913
1962
|
interface AXConversationApiLogEntry {
|
|
@@ -1927,11 +1976,6 @@ declare class AXConversationApiLoggerService {
|
|
|
1927
1976
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationApiLoggerService>;
|
|
1928
1977
|
}
|
|
1929
1978
|
|
|
1930
|
-
/**
|
|
1931
|
-
* Abstract Conversation Management API
|
|
1932
|
-
* Handle conversation CRUD operations, participants, and settings
|
|
1933
|
-
*/
|
|
1934
|
-
|
|
1935
1979
|
/**
|
|
1936
1980
|
* Conversation creation data
|
|
1937
1981
|
*/
|
|
@@ -1999,20 +2043,9 @@ interface AXConversationFilters {
|
|
|
1999
2043
|
custom?: Record<string, unknown>;
|
|
2000
2044
|
}
|
|
2001
2045
|
/**
|
|
2002
|
-
*
|
|
2046
|
+
* @deprecated Use {@link AXConversationRoomPreferences} on the user API instead.
|
|
2003
2047
|
*/
|
|
2004
|
-
|
|
2005
|
-
/** Muted until timestamp */
|
|
2006
|
-
mutedUntil?: Date;
|
|
2007
|
-
/** Show notifications */
|
|
2008
|
-
notifications?: boolean;
|
|
2009
|
-
/** Custom notification sound */
|
|
2010
|
-
notificationSound?: string;
|
|
2011
|
-
/** Show message preview in notifications */
|
|
2012
|
-
showPreview?: boolean;
|
|
2013
|
-
/** Custom settings */
|
|
2014
|
-
custom?: Record<string, unknown>;
|
|
2015
|
-
}
|
|
2048
|
+
type AXConversationSettingsUpdate = AXConversationRoomPreferences;
|
|
2016
2049
|
/**
|
|
2017
2050
|
* Participant update data
|
|
2018
2051
|
*/
|
|
@@ -2020,7 +2053,7 @@ interface AXConversationParticipantUpdate {
|
|
|
2020
2053
|
/** User ID */
|
|
2021
2054
|
userId: string;
|
|
2022
2055
|
/** New role */
|
|
2023
|
-
role?:
|
|
2056
|
+
role?: AXConversationParticipantRole;
|
|
2024
2057
|
}
|
|
2025
2058
|
/**
|
|
2026
2059
|
* Abstract Conversation Management API
|
|
@@ -2121,13 +2154,6 @@ declare abstract class AXConversationApi {
|
|
|
2121
2154
|
* @throws {AXConversationApiError} If marking fails
|
|
2122
2155
|
*/
|
|
2123
2156
|
abstract markConversationAsRead(conversationId: string): Promise<void>;
|
|
2124
|
-
/**
|
|
2125
|
-
* Mark conversation as unread
|
|
2126
|
-
*
|
|
2127
|
-
* @param conversationId - Conversation ID
|
|
2128
|
-
* @throws {AXConversationApiError} If marking fails
|
|
2129
|
-
*/
|
|
2130
|
-
abstract markConversationAsUnread(conversationId: string): Promise<void>;
|
|
2131
2157
|
/**
|
|
2132
2158
|
* Search conversations
|
|
2133
2159
|
*
|
|
@@ -2187,37 +2213,6 @@ declare abstract class AXConversationApi {
|
|
|
2187
2213
|
* @throws {AXConversationApiError} If update fails
|
|
2188
2214
|
*/
|
|
2189
2215
|
abstract updateParticipant(conversationId: string, update: AXConversationParticipantUpdate): Promise<AXConversation>;
|
|
2190
|
-
/**
|
|
2191
|
-
* Get conversation settings
|
|
2192
|
-
*
|
|
2193
|
-
* @param conversationId - Conversation ID
|
|
2194
|
-
* @returns Conversation settings
|
|
2195
|
-
* @throws {AXConversationApiError} If request fails
|
|
2196
|
-
*/
|
|
2197
|
-
abstract getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
|
|
2198
|
-
/**
|
|
2199
|
-
* Update conversation settings
|
|
2200
|
-
*
|
|
2201
|
-
* @param conversationId - Conversation ID
|
|
2202
|
-
* @param settings - Settings to update
|
|
2203
|
-
* @throws {AXConversationApiError} If update fails
|
|
2204
|
-
*/
|
|
2205
|
-
abstract updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
|
|
2206
|
-
/**
|
|
2207
|
-
* Mute conversation
|
|
2208
|
-
*
|
|
2209
|
-
* @param conversationId - Conversation ID
|
|
2210
|
-
* @param duration - Mute duration in milliseconds (undefined = forever)
|
|
2211
|
-
* @throws {AXConversationApiError} If muting fails
|
|
2212
|
-
*/
|
|
2213
|
-
abstract muteConversation(conversationId: string, duration?: number): Promise<void>;
|
|
2214
|
-
/**
|
|
2215
|
-
* Unmute conversation
|
|
2216
|
-
*
|
|
2217
|
-
* @param conversationId - Conversation ID
|
|
2218
|
-
* @throws {AXConversationApiError} If unmuting fails
|
|
2219
|
-
*/
|
|
2220
|
-
abstract unmuteConversation(conversationId: string): Promise<void>;
|
|
2221
2216
|
/**
|
|
2222
2217
|
* Upload conversation avatar
|
|
2223
2218
|
*
|
|
@@ -3016,7 +3011,7 @@ declare abstract class AXConversationUserApi {
|
|
|
3016
3011
|
* @returns Current user information
|
|
3017
3012
|
* @throws {AXConversationApiError} If user is not authenticated
|
|
3018
3013
|
*/
|
|
3019
|
-
abstract getCurrentUser(): Promise<
|
|
3014
|
+
abstract getCurrentUser(): Promise<AXConversationUser>;
|
|
3020
3015
|
/**
|
|
3021
3016
|
* Update current user profile
|
|
3022
3017
|
*
|
|
@@ -3024,7 +3019,7 @@ declare abstract class AXConversationUserApi {
|
|
|
3024
3019
|
* @returns Updated user information
|
|
3025
3020
|
* @throws {AXConversationApiError} If update fails
|
|
3026
3021
|
*/
|
|
3027
|
-
abstract updateProfile(updates: AXConversationUserProfileUpdate): Promise<
|
|
3022
|
+
abstract updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationUser>;
|
|
3028
3023
|
/**
|
|
3029
3024
|
* Upload user avatar
|
|
3030
3025
|
*
|
|
@@ -3074,6 +3069,10 @@ declare abstract class AXConversationUserApi {
|
|
|
3074
3069
|
* @throws {AXConversationApiError} If request fails
|
|
3075
3070
|
*/
|
|
3076
3071
|
abstract getUserPresence(userId: string): Promise<AXConversationPresenceUpdate>;
|
|
3072
|
+
/**
|
|
3073
|
+
* Get presence for multiple users (bulk hydration).
|
|
3074
|
+
*/
|
|
3075
|
+
abstract getUsersPresence(userIds: string[]): Promise<AXConversationPresenceUpdate[]>;
|
|
3077
3076
|
/**
|
|
3078
3077
|
* Update current user presence
|
|
3079
3078
|
*
|
|
@@ -3126,6 +3125,18 @@ declare abstract class AXConversationUserApi {
|
|
|
3126
3125
|
* @throws {AXConversationApiError} If update fails
|
|
3127
3126
|
*/
|
|
3128
3127
|
abstract updateUserSettings(settings: Record<string, unknown>): Promise<void>;
|
|
3128
|
+
/**
|
|
3129
|
+
* Get all conversation preferences for the current user.
|
|
3130
|
+
*/
|
|
3131
|
+
abstract getConversationPreferences(): Promise<AXConversationRoomPreferencesMap>;
|
|
3132
|
+
/**
|
|
3133
|
+
* Get preferences for a single conversation.
|
|
3134
|
+
*/
|
|
3135
|
+
abstract getConversationPreferencesForRoom(conversationId: string): Promise<AXConversationRoomPreferences>;
|
|
3136
|
+
/**
|
|
3137
|
+
* Update preferences for a conversation (current user's view).
|
|
3138
|
+
*/
|
|
3139
|
+
abstract updateConversationPreferences(conversationId: string, preferences: Partial<AXConversationRoomPreferences>): Promise<AXConversationRoomPreferences>;
|
|
3129
3140
|
/**
|
|
3130
3141
|
* Create an API error
|
|
3131
3142
|
* Helper method for consistent error creation
|
|
@@ -3139,6 +3150,27 @@ declare abstract class AXConversationUserApi {
|
|
|
3139
3150
|
protected createError(code: string, message: string, statusCode?: number, details?: unknown): AXConversationApiError;
|
|
3140
3151
|
}
|
|
3141
3152
|
|
|
3153
|
+
type AXConversationComposerGenerationPhase = 'idle' | 'generating' | 'stopping';
|
|
3154
|
+
declare class AXConversationComposerGenerationStateService {
|
|
3155
|
+
private readonly _phase;
|
|
3156
|
+
private readonly _cancelled$;
|
|
3157
|
+
/** Current generation lifecycle phase. */
|
|
3158
|
+
readonly phase: _angular_core.Signal<AXConversationComposerGenerationPhase>;
|
|
3159
|
+
/** Whether a background generation (e.g. AI response) is in progress. */
|
|
3160
|
+
readonly isGenerating: _angular_core.Signal<boolean>;
|
|
3161
|
+
/** Whether generation is being cancelled (spinner / locked until API finishes). */
|
|
3162
|
+
readonly isStopping: _angular_core.Signal<boolean>;
|
|
3163
|
+
/** Whether generation or stop-cleanup is in progress. */
|
|
3164
|
+
readonly isBusy: _angular_core.Signal<boolean>;
|
|
3165
|
+
/** Emits when the user presses the composer cancel/stop button. */
|
|
3166
|
+
readonly onCancelled: rxjs.Observable<void>;
|
|
3167
|
+
setGenerating(value: boolean): void;
|
|
3168
|
+
/** User requested cancel — enters `stopping` until {@link setGenerating}(false) is called. */
|
|
3169
|
+
cancel(): void;
|
|
3170
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerGenerationStateService, never>;
|
|
3171
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationComposerGenerationStateService>;
|
|
3172
|
+
}
|
|
3173
|
+
|
|
3142
3174
|
/**
|
|
3143
3175
|
* Central Registry Service
|
|
3144
3176
|
* Provides unified access to all registries
|
|
@@ -3205,9 +3237,17 @@ declare class AXConversationService {
|
|
|
3205
3237
|
private readonly destroy$;
|
|
3206
3238
|
/** Registry service - exposed for child services */
|
|
3207
3239
|
readonly registry: AXConversationRegistryService;
|
|
3240
|
+
private readonly composerGenerationState;
|
|
3241
|
+
/** Whether the composer primary button is in cancel (generation) mode. */
|
|
3242
|
+
readonly isGenerating: _angular_core.Signal<boolean>;
|
|
3243
|
+
/** Whether cancel cleanup is in progress. */
|
|
3244
|
+
readonly isStopping: _angular_core.Signal<boolean>;
|
|
3245
|
+
/** Emits when the user cancels an in-progress generation from the composer. */
|
|
3246
|
+
readonly onGenerationCancelled: rxjs.Observable<void>;
|
|
3208
3247
|
private readonly _activeConversationId;
|
|
3209
3248
|
private readonly _loading;
|
|
3210
3249
|
private readonly _loadingActiveMessages;
|
|
3250
|
+
private readonly _isForwardingMessage;
|
|
3211
3251
|
private readonly _error;
|
|
3212
3252
|
private readonly _conversationsPagination;
|
|
3213
3253
|
private readonly _messagesPaginationByConversation;
|
|
@@ -3230,6 +3270,8 @@ declare class AXConversationService {
|
|
|
3230
3270
|
readonly loading: _angular_core.Signal<boolean>;
|
|
3231
3271
|
/** Loading state for the active conversation's message history */
|
|
3232
3272
|
readonly loadingActiveMessages: _angular_core.Signal<boolean>;
|
|
3273
|
+
/** Whether a message forward operation is in progress. */
|
|
3274
|
+
readonly isForwardingMessage: _angular_core.Signal<boolean>;
|
|
3233
3275
|
/** Sidebar conversation list pagination */
|
|
3234
3276
|
readonly conversationsPagination: _angular_core.Signal<AXConversationPaginationState>;
|
|
3235
3277
|
/** Active conversation message pagination */
|
|
@@ -3246,7 +3288,10 @@ declare class AXConversationService {
|
|
|
3246
3288
|
readonly onTypingIndicator: rxjs.Observable<AXConversationTypingIndicator>;
|
|
3247
3289
|
readonly onPresenceChange: rxjs.Observable<AXConversationPresenceUpdate>;
|
|
3248
3290
|
private _currentUser;
|
|
3249
|
-
readonly currentUser: _angular_core.Signal<
|
|
3291
|
+
readonly currentUser: _angular_core.Signal<AXConversationUser>;
|
|
3292
|
+
readonly userPresenceMap: _angular_core.Signal<Map<string, AXConversationUserPresence>>;
|
|
3293
|
+
readonly presenceTimeTick: _angular_core.Signal<Map<string, AXConversationUserPresence>>;
|
|
3294
|
+
readonly typingRevision: _angular_core.Signal<Map<string, Map<string, number>>>;
|
|
3250
3295
|
/** One-time async initialization (connect, user, conversations, realtime). */
|
|
3251
3296
|
private initPromise;
|
|
3252
3297
|
/** Generation counter — stale page-0 loads are ignored after conversation switches. */
|
|
@@ -3256,6 +3301,10 @@ declare class AXConversationService {
|
|
|
3256
3301
|
/** Batched read-receipt queue keyed by conversation ID. */
|
|
3257
3302
|
private readonly readQueue;
|
|
3258
3303
|
private readFlushHandle;
|
|
3304
|
+
private presenceTickHandle?;
|
|
3305
|
+
private typingPruneHandle?;
|
|
3306
|
+
private isTypingActiveForConversation;
|
|
3307
|
+
private typingStopHandle?;
|
|
3259
3308
|
/** Session cache for available reaction emojis. */
|
|
3260
3309
|
private availableReactionsCache;
|
|
3261
3310
|
private availableReactionsPromise;
|
|
@@ -3279,6 +3328,13 @@ declare class AXConversationService {
|
|
|
3279
3328
|
* All subscriptions include error handling to prevent stream termination
|
|
3280
3329
|
*/
|
|
3281
3330
|
private subscribeToEvents;
|
|
3331
|
+
getUserPresence(userId: string): AXConversationUserPresence | undefined;
|
|
3332
|
+
getRoomPreferences(conversationId: string): AXConversationRoomPreferences;
|
|
3333
|
+
isAnyoneTyping(conversationId: string): boolean;
|
|
3334
|
+
getActiveTypingUserIds(conversationId: string): string[];
|
|
3335
|
+
getPeerPresence(conversation: AXConversation): AXConversationUserPresence | undefined;
|
|
3336
|
+
private hydrateUserPresence;
|
|
3337
|
+
private loadRoomPreferences;
|
|
3282
3338
|
/**
|
|
3283
3339
|
* Load conversations from server
|
|
3284
3340
|
* Includes comprehensive error handling
|
|
@@ -3311,6 +3367,7 @@ declare class AXConversationService {
|
|
|
3311
3367
|
* Resolve a media reference to a playback/download URL.
|
|
3312
3368
|
*/
|
|
3313
3369
|
resolveMediaUrl(reference: AXConversationUploaderReference, signal?: AbortSignal): Promise<string>;
|
|
3370
|
+
private resolveReplyTo;
|
|
3314
3371
|
/**
|
|
3315
3372
|
* Send a message
|
|
3316
3373
|
* Uses optimistic UI updates - message appears immediately
|
|
@@ -3361,11 +3418,21 @@ declare class AXConversationService {
|
|
|
3361
3418
|
* Marks messages locally and syncs with server
|
|
3362
3419
|
*/
|
|
3363
3420
|
markAsRead(conversationId: string): Promise<void>;
|
|
3421
|
+
/**
|
|
3422
|
+
* Set composer generation mode (shows cancel button instead of send/voice).
|
|
3423
|
+
* Call from message APIs while an AI or async response is in progress.
|
|
3424
|
+
*/
|
|
3425
|
+
setGenerating(value: boolean): void;
|
|
3426
|
+
/**
|
|
3427
|
+
* Cancel an in-progress generation from the composer UI or programmatically.
|
|
3428
|
+
*/
|
|
3429
|
+
cancelGeneration(): void;
|
|
3364
3430
|
/**
|
|
3365
3431
|
* Send typing indicator
|
|
3366
3432
|
* Non-critical operation, doesn't throw on failure
|
|
3367
3433
|
*/
|
|
3368
3434
|
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
3435
|
+
stopTypingIndicator(conversationId: string): Promise<void>;
|
|
3369
3436
|
/**
|
|
3370
3437
|
* Search conversations
|
|
3371
3438
|
* Returns empty array on failure
|
|
@@ -3401,11 +3468,17 @@ declare class AXConversationService {
|
|
|
3401
3468
|
* Updates conversation metadata including unread count, last message, etc.
|
|
3402
3469
|
*/
|
|
3403
3470
|
private handleConversationUpdate;
|
|
3471
|
+
private handleConversationCreated;
|
|
3472
|
+
private handleConversationDeleted;
|
|
3473
|
+
private handleReadReceipt;
|
|
3474
|
+
private handleMessageStatusChange;
|
|
3475
|
+
private handleRoomPreferencesChange;
|
|
3404
3476
|
/**
|
|
3405
3477
|
* Insert or refresh a conversation in the in-memory inbox.
|
|
3406
3478
|
* @param promote When true, bumps activity so the chat sorts to the top (create / reopen).
|
|
3407
3479
|
*/
|
|
3408
3480
|
private syncConversationToInbox;
|
|
3481
|
+
private finalizeSentMessage;
|
|
3409
3482
|
/**
|
|
3410
3483
|
* Update conversation's last message
|
|
3411
3484
|
*/
|
|
@@ -3421,7 +3494,7 @@ declare class AXConversationService {
|
|
|
3421
3494
|
* @param conversationId - Conversation ID
|
|
3422
3495
|
* @param settings - Partial settings to update
|
|
3423
3496
|
*/
|
|
3424
|
-
updateConversationSettings(conversationId: string, settings: Partial<
|
|
3497
|
+
updateConversationSettings(conversationId: string, settings: Partial<AXConversationRoomPreferences>): Promise<void>;
|
|
3425
3498
|
/**
|
|
3426
3499
|
* Update conversation title
|
|
3427
3500
|
* @param conversationId - Conversation ID
|
|
@@ -3564,6 +3637,10 @@ declare class AXConversationService {
|
|
|
3564
3637
|
* @param caption - Optional caption
|
|
3565
3638
|
*/
|
|
3566
3639
|
forwardMessage(messageId: string, conversationIds: string[], caption?: string): Promise<void>;
|
|
3640
|
+
/**
|
|
3641
|
+
* Runs a forward operation while locking all forward actions until it completes.
|
|
3642
|
+
*/
|
|
3643
|
+
runWithForwardingLock<T>(task: () => Promise<T>): Promise<T>;
|
|
3567
3644
|
/**
|
|
3568
3645
|
* Search messages in conversation
|
|
3569
3646
|
* @param conversationId - Conversation ID
|
|
@@ -3618,7 +3695,7 @@ declare class AXConversationService {
|
|
|
3618
3695
|
* @param status - Presence status
|
|
3619
3696
|
* @param statusText - Optional status text
|
|
3620
3697
|
*/
|
|
3621
|
-
updatePresence(status:
|
|
3698
|
+
updatePresence(status: AXConversationPresenceStatus, statusText?: string): Promise<void>;
|
|
3622
3699
|
/**
|
|
3623
3700
|
* Validate message content before sending
|
|
3624
3701
|
* Uses centralized validation utilities for consistency
|
|
@@ -3766,6 +3843,7 @@ declare class AXConversationForwardMessageDialogComponent implements OnInit {
|
|
|
3766
3843
|
readonly forwardListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
3767
3844
|
readonly forwardList: _angular_core.Signal<AXListComponent>;
|
|
3768
3845
|
readonly forwardListDataSource: AXDataSource<unknown>;
|
|
3846
|
+
readonly isForwarding: _angular_core.Signal<boolean>;
|
|
3769
3847
|
readonly canForward: _angular_core.Signal<boolean>;
|
|
3770
3848
|
private readonly _syncPopupTitleEffect;
|
|
3771
3849
|
ngOnInit(): void;
|
|
@@ -3800,6 +3878,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
|
|
|
3800
3878
|
private readonly translation;
|
|
3801
3879
|
private readonly document;
|
|
3802
3880
|
private readonly platform;
|
|
3881
|
+
private readonly actionSheetService;
|
|
3803
3882
|
protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
|
|
3804
3883
|
/**
|
|
3805
3884
|
* Background for the message list scroll area from config, or the built-in soft wash when unset/empty.
|
|
@@ -3838,6 +3917,9 @@ declare class AXConversationMessageListComponent implements OnDestroy {
|
|
|
3838
3917
|
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3839
3918
|
/** Active conversation */
|
|
3840
3919
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
3920
|
+
readonly isGroupConversation: _angular_core.Signal<boolean>;
|
|
3921
|
+
/** Placeholder indices for the initial message list skeleton. */
|
|
3922
|
+
protected readonly loadingSkeletonItems: readonly [0, 1, 2, 3, 4, 5];
|
|
3841
3923
|
/** Whether the active conversation allows message reactions. */
|
|
3842
3924
|
readonly reactionsEnabled: _angular_core.Signal<boolean>;
|
|
3843
3925
|
/** Messages */
|
|
@@ -3848,7 +3930,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
|
|
|
3848
3930
|
action: string;
|
|
3849
3931
|
}>;
|
|
3850
3932
|
/** Current user from service */
|
|
3851
|
-
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.
|
|
3933
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
|
|
3852
3934
|
/** Message grouped by date - use service */
|
|
3853
3935
|
readonly messageGroups: _angular_core.Signal<{
|
|
3854
3936
|
date: string;
|
|
@@ -3885,6 +3967,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
|
|
|
3885
3967
|
/** Resolve renderer component for message */
|
|
3886
3968
|
getRendererComponent(message: AXConversationMessage): Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
|
|
3887
3969
|
/** Resolve lazy renderer loader for message */
|
|
3970
|
+
private static readonly fallbackRendererLoader;
|
|
3888
3971
|
getRendererComponentLoader(message: AXConversationMessage): (() => Promise<Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof _acorex_components_conversation.AXConversationFallbackRendererComponent>);
|
|
3889
3972
|
/** Provide inputs for the dynamic renderer */
|
|
3890
3973
|
getRendererInputs(message: AXConversationMessage): {
|
|
@@ -3979,7 +4062,7 @@ declare class AXConversationMessageListComponent implements OnDestroy {
|
|
|
3979
4062
|
handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXConversationMessage): void;
|
|
3980
4063
|
/**
|
|
3981
4064
|
* TrackBy function for message groups.
|
|
3982
|
-
*
|
|
4065
|
+
* Track by date only — new messages in the same day are handled by the inner message @for.
|
|
3983
4066
|
*/
|
|
3984
4067
|
trackMessageGroup(index: number, group: {
|
|
3985
4068
|
date: string;
|
|
@@ -3999,7 +4082,7 @@ declare class AXConversationMessageListService {
|
|
|
3999
4082
|
private get registry();
|
|
4000
4083
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
4001
4084
|
readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
|
|
4002
|
-
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.
|
|
4085
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
|
|
4003
4086
|
/** Initial message history load (conversation switch) */
|
|
4004
4087
|
readonly loading: _angular_core.Signal<boolean>;
|
|
4005
4088
|
/** Loading older messages (scroll-up pagination) */
|
|
@@ -4049,6 +4132,104 @@ declare class AXConversationMessageListService {
|
|
|
4049
4132
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationMessageListService>;
|
|
4050
4133
|
}
|
|
4051
4134
|
|
|
4135
|
+
declare class AXConversationAvatarPickerComponent {
|
|
4136
|
+
readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
4137
|
+
readonly showClearButton: _angular_core.InputSignal<boolean>;
|
|
4138
|
+
readonly avatarUrl: _angular_core.ModelSignal<string>;
|
|
4139
|
+
readonly onFileSelected: _angular_core.OutputEmitterRef<string>;
|
|
4140
|
+
triggerFileInput(): void;
|
|
4141
|
+
onFileInputChange(event: Event): Promise<void>;
|
|
4142
|
+
clearAvatar(): void;
|
|
4143
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarPickerComponent, never>;
|
|
4144
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarPickerComponent, "ax-conversation-avatar-picker", never, { "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, { "avatarUrl": "avatarUrlChange"; "onFileSelected": "onFileSelected"; }, never, never, true, never>;
|
|
4145
|
+
}
|
|
4146
|
+
|
|
4147
|
+
/**
|
|
4148
|
+
* Pluggable avatar components for the conversation UI.
|
|
4149
|
+
* Register via `provideConversation({ avatarComponents: { user, conversation } })`.
|
|
4150
|
+
* When only `user` is registered, a built-in conversation avatar host is wired automatically.
|
|
4151
|
+
*/
|
|
4152
|
+
|
|
4153
|
+
/** Custom user avatar (e.g. platform `axp-user-avatar`). */
|
|
4154
|
+
interface AXConversationUserAvatarComponent {
|
|
4155
|
+
readonly userId: InputSignal<string>;
|
|
4156
|
+
readonly size: InputSignal<number>;
|
|
4157
|
+
/** Optional resolved display name (e.g. bot/assist peer title). */
|
|
4158
|
+
readonly displayName?: InputSignal<string | undefined>;
|
|
4159
|
+
/** Optional resolved avatar URL when `userId` is not a platform user row. */
|
|
4160
|
+
readonly displayAvatar?: InputSignal<string | undefined>;
|
|
4161
|
+
/** Optional icon class when no avatar image is available. */
|
|
4162
|
+
readonly displayIcon?: InputSignal<string | undefined>;
|
|
4163
|
+
}
|
|
4164
|
+
/** Optional custom group/channel conversation avatar. */
|
|
4165
|
+
interface AXConversationConversationAvatarComponent {
|
|
4166
|
+
readonly conversationId: InputSignal<string>;
|
|
4167
|
+
readonly size: InputSignal<number>;
|
|
4168
|
+
/** Optional resolved display name for the conversation. */
|
|
4169
|
+
readonly displayName?: InputSignal<string | undefined>;
|
|
4170
|
+
/** Optional resolved avatar URL when no platform conversation row exists. */
|
|
4171
|
+
readonly displayAvatar?: InputSignal<string | undefined>;
|
|
4172
|
+
/** Optional icon class when no avatar image is available. */
|
|
4173
|
+
readonly displayIcon?: InputSignal<string | undefined>;
|
|
4174
|
+
}
|
|
4175
|
+
type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
|
|
4176
|
+
declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
|
|
4177
|
+
declare const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT: InjectionToken<Type<AXConversationConversationAvatarComponent>>;
|
|
4178
|
+
interface AXConversationAvatarComponents {
|
|
4179
|
+
user?: Type<AXConversationUserAvatarComponent>;
|
|
4180
|
+
conversation?: Type<AXConversationConversationAvatarComponent>;
|
|
4181
|
+
}
|
|
4182
|
+
|
|
4183
|
+
declare class AXConversationAvatarComponent {
|
|
4184
|
+
private readonly conversationService;
|
|
4185
|
+
private readonly userAvatarComponent;
|
|
4186
|
+
private readonly conversationAvatarComponent;
|
|
4187
|
+
readonly kind: _angular_core.InputSignal<AXConversationAvatarKind>;
|
|
4188
|
+
readonly userId: _angular_core.InputSignal<string>;
|
|
4189
|
+
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4190
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
4191
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
4192
|
+
readonly showStatus: _angular_core.InputSignal<boolean>;
|
|
4193
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
4194
|
+
readonly avatar: _angular_core.InputSignal<string>;
|
|
4195
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
4196
|
+
private readonly currentUserId;
|
|
4197
|
+
readonly resolvedKind: _angular_core.Signal<"user" | "conversation">;
|
|
4198
|
+
readonly resolvedUserId: _angular_core.Signal<string>;
|
|
4199
|
+
readonly customComponent: _angular_core.Signal<Type<unknown>>;
|
|
4200
|
+
readonly customInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4201
|
+
readonly filteredCustomInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4202
|
+
readonly fallbackDisplay: _angular_core.Signal<{
|
|
4203
|
+
name: string;
|
|
4204
|
+
avatar: string;
|
|
4205
|
+
icon: string;
|
|
4206
|
+
}>;
|
|
4207
|
+
readonly fallbackInitials: _angular_core.Signal<string>;
|
|
4208
|
+
readonly resolvedStatus: _angular_core.Signal<_acorex_components_conversation.AXConversationPresenceStatus>;
|
|
4209
|
+
readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away" | "busy">;
|
|
4210
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarComponent, never>;
|
|
4211
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarComponent, "ax-conversation-avatar", never, { "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4212
|
+
}
|
|
4213
|
+
|
|
4214
|
+
interface AXConversationRegistryComponentRef {
|
|
4215
|
+
component?: Type<unknown>;
|
|
4216
|
+
componentLoader?: () => Promise<Type<unknown>>;
|
|
4217
|
+
}
|
|
4218
|
+
declare class AXConversationRegistryComponentOutletComponent {
|
|
4219
|
+
readonly component: _angular_core.InputSignal<Type<unknown>>;
|
|
4220
|
+
readonly componentLoader: _angular_core.InputSignal<() => Promise<Type<unknown>>>;
|
|
4221
|
+
readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
|
|
4222
|
+
readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
|
|
4223
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
4224
|
+
/** Avoid re-loading when the parent re-binds the same lazy loader reference. */
|
|
4225
|
+
private activeLoader;
|
|
4226
|
+
constructor();
|
|
4227
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryComponentOutletComponent, never>;
|
|
4228
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationRegistryComponentOutletComponent, "ax-conversation-registry-component-outlet", never, { "component": { "alias": "component"; "required": false; "isSignal": true; }; "componentLoader": { "alias": "componentLoader"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4229
|
+
}
|
|
4230
|
+
/** Resolve a registry component reference, preferring lazy loaders when provided. */
|
|
4231
|
+
declare function hasRegistryComponent(ref?: AXConversationRegistryComponentRef): boolean;
|
|
4232
|
+
|
|
4052
4233
|
declare class AXConversationSidebarService {
|
|
4053
4234
|
private readonly conversationService;
|
|
4054
4235
|
constructor();
|
|
@@ -4233,8 +4414,10 @@ interface AXConversationConfig {
|
|
|
4233
4414
|
infiniteScrollThreshold?: number;
|
|
4234
4415
|
/** Typing indicator timeout in milliseconds */
|
|
4235
4416
|
typingIndicatorTimeout?: number;
|
|
4236
|
-
/** Typing indicator throttle in milliseconds (
|
|
4417
|
+
/** Typing indicator emit throttle in milliseconds while composing (default: 3000) */
|
|
4237
4418
|
typingIndicatorThrottle?: number;
|
|
4419
|
+
/** How long to show received typing indicators in the UI (default: 4000) */
|
|
4420
|
+
typingDisplayDuration?: number;
|
|
4238
4421
|
/** Message highlight duration in milliseconds */
|
|
4239
4422
|
messageHighlightDuration?: number;
|
|
4240
4423
|
/** Search debounce delay in milliseconds */
|
|
@@ -4283,31 +4466,20 @@ interface AXConversationConfig {
|
|
|
4283
4466
|
}
|
|
4284
4467
|
|
|
4285
4468
|
/**
|
|
4286
|
-
|
|
4287
4469
|
* Default Configuration Values
|
|
4288
|
-
|
|
4289
4470
|
* Centralized defaults to avoid magic numbers throughout the codebase
|
|
4290
|
-
|
|
4291
4471
|
*/
|
|
4292
4472
|
|
|
4293
4473
|
/**
|
|
4294
|
-
|
|
4295
4474
|
* Default conversation configuration
|
|
4296
|
-
|
|
4297
4475
|
* All values are explicitly defined here for easy maintenance and documentation
|
|
4298
|
-
|
|
4299
4476
|
*/
|
|
4300
4477
|
declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
|
|
4301
4478
|
/**
|
|
4302
|
-
|
|
4303
4479
|
* Helper function to merge user config with defaults
|
|
4304
|
-
|
|
4305
4480
|
* Properly handles array merging to avoid reference issues
|
|
4306
|
-
|
|
4307
4481
|
* @param userConfig - User-provided configuration
|
|
4308
|
-
|
|
4309
4482
|
* @returns Merged configuration with all required fields
|
|
4310
|
-
|
|
4311
4483
|
*/
|
|
4312
4484
|
declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
|
|
4313
4485
|
|
|
@@ -4327,38 +4499,8 @@ declare const AX_CONVERSATION_CONFIG: InjectionToken<Required<AXConversationConf
|
|
|
4327
4499
|
declare const AX_CONVERSATION_ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXConversationErrorHandlerConfig>>;
|
|
4328
4500
|
|
|
4329
4501
|
/**
|
|
4330
|
-
*
|
|
4331
|
-
*
|
|
4332
|
-
* When only `user` is registered, a built-in conversation avatar host is wired automatically.
|
|
4333
|
-
*/
|
|
4334
|
-
|
|
4335
|
-
/** Custom user avatar (e.g. platform `axp-user-avatar`). */
|
|
4336
|
-
interface AXConversationUserAvatarComponent {
|
|
4337
|
-
readonly userId: InputSignal<string>;
|
|
4338
|
-
readonly size: InputSignal<number>;
|
|
4339
|
-
/** Optional resolved display name (e.g. bot/assist peer title). */
|
|
4340
|
-
readonly displayName?: InputSignal<string | undefined>;
|
|
4341
|
-
/** Optional resolved avatar URL when `userId` is not a platform user row. */
|
|
4342
|
-
readonly displayAvatar?: InputSignal<string | undefined>;
|
|
4343
|
-
/** Optional icon class when no avatar image is available. */
|
|
4344
|
-
readonly displayIcon?: InputSignal<string | undefined>;
|
|
4345
|
-
}
|
|
4346
|
-
/** Optional custom group/channel conversation avatar. */
|
|
4347
|
-
interface AXConversationConversationAvatarComponent {
|
|
4348
|
-
readonly conversationId: InputSignal<string>;
|
|
4349
|
-
readonly size: InputSignal<number>;
|
|
4350
|
-
}
|
|
4351
|
-
type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
|
|
4352
|
-
declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
|
|
4353
|
-
declare const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT: InjectionToken<Type<AXConversationConversationAvatarComponent>>;
|
|
4354
|
-
interface AXConversationAvatarComponents {
|
|
4355
|
-
user?: Type<AXConversationUserAvatarComponent>;
|
|
4356
|
-
conversation?: Type<AXConversationConversationAvatarComponent>;
|
|
4357
|
-
}
|
|
4358
|
-
|
|
4359
|
-
/**
|
|
4360
|
-
* Registry Configuration Tokens
|
|
4361
|
-
* Injection tokens for configuring default registry values
|
|
4502
|
+
* Registry Configuration Tokens
|
|
4503
|
+
* Injection tokens for configuring default registry values
|
|
4362
4504
|
*/
|
|
4363
4505
|
|
|
4364
4506
|
/**
|
|
@@ -4425,472 +4567,6 @@ interface AXConversationRegistryConfiguration {
|
|
|
4425
4567
|
*/
|
|
4426
4568
|
declare const AX_CONVERSATION_REGISTRY_CONFIG: InjectionToken<AXConversationRegistryConfiguration>;
|
|
4427
4569
|
|
|
4428
|
-
/**
|
|
4429
|
-
* IndexedDB Storage Wrapper
|
|
4430
|
-
* Provides persistent storage for conversation data
|
|
4431
|
-
*/
|
|
4432
|
-
|
|
4433
|
-
declare const AXConversationIndexedDbStores: {
|
|
4434
|
-
readonly PARTICIPANTS: "participants";
|
|
4435
|
-
readonly CONVERSATIONS: "conversations";
|
|
4436
|
-
readonly MESSAGES: "messages";
|
|
4437
|
-
readonly MEDIA: "media";
|
|
4438
|
-
readonly SETTINGS: "settings";
|
|
4439
|
-
};
|
|
4440
|
-
/** Blob stored for demo multimedia uploads */
|
|
4441
|
-
interface AXConversationIndexedDbMediaRecord {
|
|
4442
|
-
id: string;
|
|
4443
|
-
conversationId: string;
|
|
4444
|
-
mimeType: string;
|
|
4445
|
-
size: number;
|
|
4446
|
-
fileName?: string;
|
|
4447
|
-
blob: Blob;
|
|
4448
|
-
createdAt: string;
|
|
4449
|
-
}
|
|
4450
|
-
declare class AXConversationIndexedDbStorage {
|
|
4451
|
-
private db;
|
|
4452
|
-
private initPromise;
|
|
4453
|
-
/**
|
|
4454
|
-
* Initialize IndexedDB
|
|
4455
|
-
*/
|
|
4456
|
-
init(): Promise<void>;
|
|
4457
|
-
/**
|
|
4458
|
-
* Get a value from a store
|
|
4459
|
-
*/
|
|
4460
|
-
get<T>(storeName: string, key: string): Promise<T | undefined>;
|
|
4461
|
-
/**
|
|
4462
|
-
* Get all values from a store
|
|
4463
|
-
*/
|
|
4464
|
-
getAll<T>(storeName: string): Promise<T[]>;
|
|
4465
|
-
/**
|
|
4466
|
-
* Get values by index
|
|
4467
|
-
*/
|
|
4468
|
-
getAllByIndex<T>(storeName: string, indexName: string, query: IDBValidKey): Promise<T[]>;
|
|
4469
|
-
/**
|
|
4470
|
-
* Put a value into a store
|
|
4471
|
-
*/
|
|
4472
|
-
put<T>(storeName: string, value: T): Promise<void>;
|
|
4473
|
-
/**
|
|
4474
|
-
* Delete a value from a store
|
|
4475
|
-
*/
|
|
4476
|
-
delete(storeName: string, key: string): Promise<void>;
|
|
4477
|
-
/**
|
|
4478
|
-
* Clear all data from a store
|
|
4479
|
-
*/
|
|
4480
|
-
clear(storeName: string): Promise<void>;
|
|
4481
|
-
getParticipant(id: string): Promise<AXConversationParticipant | undefined>;
|
|
4482
|
-
getAllParticipants(): Promise<AXConversationParticipant[]>;
|
|
4483
|
-
putParticipant(participant: AXConversationParticipant): Promise<void>;
|
|
4484
|
-
getConversation(id: string): Promise<AXConversation | undefined>;
|
|
4485
|
-
getAllConversations(): Promise<AXConversation[]>;
|
|
4486
|
-
putConversation(conversation: AXConversation): Promise<void>;
|
|
4487
|
-
deleteConversation(id: string): Promise<void>;
|
|
4488
|
-
getMessage(id: string): Promise<AXConversationMessage | undefined>;
|
|
4489
|
-
getAllMessages(): Promise<AXConversationMessage[]>;
|
|
4490
|
-
getMessagesByConversation(conversationId: string): Promise<AXConversationMessage[]>;
|
|
4491
|
-
putMessage(message: AXConversationMessage): Promise<void>;
|
|
4492
|
-
deleteMessage(id: string): Promise<void>;
|
|
4493
|
-
getSetting(key: string): Promise<unknown>;
|
|
4494
|
-
putSetting(key: string, value: unknown): Promise<void>;
|
|
4495
|
-
getMedia(id: string): Promise<AXConversationIndexedDbMediaRecord | undefined>;
|
|
4496
|
-
putMedia(record: AXConversationIndexedDbMediaRecord): Promise<void>;
|
|
4497
|
-
deleteMedia(id: string): Promise<void>;
|
|
4498
|
-
}
|
|
4499
|
-
declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
|
|
4500
|
-
|
|
4501
|
-
/**
|
|
4502
|
-
* Shared In-Memory Storage
|
|
4503
|
-
* Internal storage shared between all IndexedDB API implementations
|
|
4504
|
-
* This is NOT a service - just a shared data structure
|
|
4505
|
-
*/
|
|
4506
|
-
|
|
4507
|
-
declare class AXConversationSharedStorage {
|
|
4508
|
-
readonly connectionStatus$: BehaviorSubject<AXConversationConnectionStatus>;
|
|
4509
|
-
readonly participants: Map<string, AXConversationParticipant>;
|
|
4510
|
-
readonly conversations: Map<string, AXConversation>;
|
|
4511
|
-
readonly messages: Map<string, AXConversationMessage>;
|
|
4512
|
-
readonly messagesByConversation: Map<string, string[]>;
|
|
4513
|
-
readonly messageStream$: Subject<AXConversationMessage>;
|
|
4514
|
-
readonly messageUpdates$: Subject<AXConversationMessage>;
|
|
4515
|
-
readonly messageDeletions$: Subject<string>;
|
|
4516
|
-
readonly typingIndicators$: Subject<AXConversationTypingIndicator>;
|
|
4517
|
-
readonly presenceUpdates$: Subject<AXConversationPresenceUpdate>;
|
|
4518
|
-
readonly conversationUpdates$: Subject<AXConversation>;
|
|
4519
|
-
readonly currentUserId = "current-user";
|
|
4520
|
-
private isSeeded;
|
|
4521
|
-
private presenceInterval?;
|
|
4522
|
-
private messageSimulationInterval?;
|
|
4523
|
-
private isLoadedFromDB;
|
|
4524
|
-
/**
|
|
4525
|
-
* Load data from IndexedDB
|
|
4526
|
-
*/
|
|
4527
|
-
loadFromIndexedDB(): Promise<void>;
|
|
4528
|
-
/**
|
|
4529
|
-
* Seed initial data if not already seeded
|
|
4530
|
-
*/
|
|
4531
|
-
seedIfEmpty(): Promise<void>;
|
|
4532
|
-
/** Wipe in-memory and persisted demo data (used when seed version changes). */
|
|
4533
|
-
private clearAllData;
|
|
4534
|
-
/** @internal Used by demo seed module */
|
|
4535
|
-
markSeeded(): void;
|
|
4536
|
-
/** @internal Starts demo presence and message simulations */
|
|
4537
|
-
startDemoSimulations(): void;
|
|
4538
|
-
/**
|
|
4539
|
-
* Simulate user presence changes (online/offline/away)
|
|
4540
|
-
*/
|
|
4541
|
-
private startPresenceSimulation;
|
|
4542
|
-
/**
|
|
4543
|
-
* Simulate random messages from users
|
|
4544
|
-
*/
|
|
4545
|
-
private startMessageSimulation;
|
|
4546
|
-
/**
|
|
4547
|
-
* Stop presence simulation
|
|
4548
|
-
*/
|
|
4549
|
-
stopPresenceSimulation(): void;
|
|
4550
|
-
/**
|
|
4551
|
-
* Stop message simulation
|
|
4552
|
-
*/
|
|
4553
|
-
stopMessageSimulation(): void;
|
|
4554
|
-
}
|
|
4555
|
-
declare const axConversationSharedStorage: AXConversationSharedStorage;
|
|
4556
|
-
|
|
4557
|
-
declare const AX_CONVERSATION_DEMO_CONVERSATION_IDS: {
|
|
4558
|
-
readonly private: "conv-demo-private";
|
|
4559
|
-
readonly group: "conv-demo-group";
|
|
4560
|
-
readonly channel: "conv-demo-channel";
|
|
4561
|
-
};
|
|
4562
|
-
declare function seedSharedStorageInitialData(storage: AXConversationSharedStorage): Promise<void>;
|
|
4563
|
-
|
|
4564
|
-
/**
|
|
4565
|
-
* Chat-oriented pagination helpers for IndexedDB demo APIs.
|
|
4566
|
-
*
|
|
4567
|
-
* Convention (matches {@link AXConversationService}):
|
|
4568
|
-
* - Page 0: newest items (sidebar: recent chats; messages: latest history window).
|
|
4569
|
-
* - Page 1+ or `cursor`: older items before the previous window.
|
|
4570
|
-
* - `hasMore`: true when older items remain.
|
|
4571
|
-
* - `nextCursor`: id of the oldest item in the current page (use as `pagination.cursor` for the next request).
|
|
4572
|
-
*/
|
|
4573
|
-
|
|
4574
|
-
declare const AX_CONVERSATION_MESSAGE_CURSOR_PREFIX = "msg:";
|
|
4575
|
-
declare const AX_CONVERSATION_CURSOR_PREFIX = "conv:";
|
|
4576
|
-
type AXConversationChatCursorKind = 'message' | 'conversation';
|
|
4577
|
-
interface AXConversationParsedChatCursor {
|
|
4578
|
-
kind: AXConversationChatCursorKind;
|
|
4579
|
-
id: string;
|
|
4580
|
-
}
|
|
4581
|
-
declare function encodeMessageCursor(messageId: string): string;
|
|
4582
|
-
declare function encodeConversationCursor(conversationId: string): string;
|
|
4583
|
-
/** Decode cursor from API pagination (supports prefixed or legacy raw message id). */
|
|
4584
|
-
declare function parseChatCursor(cursor?: string): AXConversationParsedChatCursor | null;
|
|
4585
|
-
/**
|
|
4586
|
-
* Paginate a list sorted newest-first (chats, message history windows).
|
|
4587
|
-
*/
|
|
4588
|
-
declare function paginateChatNewestFirst<T extends {
|
|
4589
|
-
id: string;
|
|
4590
|
-
}>(sortedNewestFirst: T[], pagination: AXConversationPagination, cursorKind: AXConversationChatCursorKind): AXConversationPaginatedResult<T>;
|
|
4591
|
-
/**
|
|
4592
|
-
* Paginate a list sorted oldest-first (replies, forward history).
|
|
4593
|
-
*/
|
|
4594
|
-
declare function paginateChatOldestFirst<T extends {
|
|
4595
|
-
id: string;
|
|
4596
|
-
}>(sortedOldestFirst: T[], pagination: AXConversationPagination): AXConversationPaginatedResult<T>;
|
|
4597
|
-
|
|
4598
|
-
/**
|
|
4599
|
-
* Pagination demo data — disabled for the minimal 3-chat showcase seed.
|
|
4600
|
-
* Kept as a no-op so existing imports remain valid.
|
|
4601
|
-
*/
|
|
4602
|
-
/** @deprecated Pagination demo chat removed from default seed. */
|
|
4603
|
-
declare const AX_MESSAGE_PAGINATION_CONVERSATION_ID = "conv-pag-msgs";
|
|
4604
|
-
/** No-op: showcase uses a fixed 3-conversation seed (private, group, channel). */
|
|
4605
|
-
declare function ensurePaginationDemoData(): Promise<void>;
|
|
4606
|
-
|
|
4607
|
-
/**
|
|
4608
|
-
* Shared read/write helpers for IndexedDB chat storage (in-memory + persistence).
|
|
4609
|
-
*/
|
|
4610
|
-
|
|
4611
|
-
declare function getConversationLastActivity(conv: AXConversation): number;
|
|
4612
|
-
/** Messages for a conversation, newest first (API / pagination order). */
|
|
4613
|
-
declare function getConversationMessagesNewestFirst(conversationId: string): AXConversationMessage[];
|
|
4614
|
-
/** Keep per-conversation id list sorted ascending by timestamp (store order). */
|
|
4615
|
-
declare function sortConversationMessageIds(conversationId: string): void;
|
|
4616
|
-
/** Register a message in maps and keep the conversation index sorted. */
|
|
4617
|
-
declare function registerChatMessage(message: AXConversationMessage): void;
|
|
4618
|
-
/** Remove a message from conversation index and global map. */
|
|
4619
|
-
declare function unregisterChatMessage(messageId: string, conversationId: string): void;
|
|
4620
|
-
declare function applyConversationFilters(conversations: AXConversation[], filters?: AXConversationFilters): AXConversation[];
|
|
4621
|
-
/** Sidebar list order: pinned first, then by last activity (newest first). */
|
|
4622
|
-
declare function getSortedConversationsForInbox(filters?: AXConversationFilters): AXConversation[];
|
|
4623
|
-
/** Sort all loaded conversation message indexes (after IndexedDB hydration). */
|
|
4624
|
-
declare function normalizeAllConversationMessageIndexes(): void;
|
|
4625
|
-
|
|
4626
|
-
declare class AXConversationIndexedDbUserApi extends AXConversationUserApi {
|
|
4627
|
-
private readonly API_DELAY_MS;
|
|
4628
|
-
getCurrentUser(): Promise<AXConversationParticipant>;
|
|
4629
|
-
updateProfile(updates: AXConversationUserProfileUpdate): Promise<AXConversationParticipant>;
|
|
4630
|
-
uploadAvatar(file: File): Promise<string>;
|
|
4631
|
-
getUsers(pagination?: AXConversationPagination, filters?: AXConversationUserSearchFilters): Promise<AXConversationPaginatedResult<AXConversationParticipant>>;
|
|
4632
|
-
searchUsers(query: string): Promise<AXConversationParticipant[]>;
|
|
4633
|
-
getUserById(userId: string): Promise<AXConversationParticipant>;
|
|
4634
|
-
getUsersByIds(userIds: string[]): Promise<AXConversationParticipant[]>;
|
|
4635
|
-
getUserPresence(userId: string): Promise<AXConversationPresenceUpdate>;
|
|
4636
|
-
updatePresence(_status: AXConversationPresenceStatus, _statusText?: string): Promise<void>;
|
|
4637
|
-
blockUser(_userId: string, _reason?: AXConversationBlockReportReason): Promise<void>;
|
|
4638
|
-
unblockUser(_userId: string): Promise<void>;
|
|
4639
|
-
getBlockedUsers(): Promise<string[]>;
|
|
4640
|
-
reportUser(_userId: string, _reason: AXConversationBlockReportReason): Promise<void>;
|
|
4641
|
-
getUserSettings(): Promise<Record<string, unknown>>;
|
|
4642
|
-
updateUserSettings(_settings: Record<string, unknown>): Promise<void>;
|
|
4643
|
-
private getCurrentUserWithoutDelay;
|
|
4644
|
-
private fetchUsers;
|
|
4645
|
-
private delay;
|
|
4646
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbUserApi, never>;
|
|
4647
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbUserApi>;
|
|
4648
|
-
}
|
|
4649
|
-
|
|
4650
|
-
declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
4651
|
-
createConversation(data: AXConversationCreateData): Promise<AXConversation>;
|
|
4652
|
-
getConversation(conversationId: string): Promise<AXConversation>;
|
|
4653
|
-
/**
|
|
4654
|
-
* Inbox page (pinned + recent activity, newest first).
|
|
4655
|
-
* Page 0 / cursor align with {@link AXConversationService.loadConversations} and sidebar infinite scroll.
|
|
4656
|
-
*/
|
|
4657
|
-
getConversations(pagination: AXConversationPagination, filters?: AXConversationFilters): Promise<AXConversationPaginatedResult<AXConversation>>;
|
|
4658
|
-
updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
|
|
4659
|
-
deleteConversation(conversationId: string): Promise<boolean>;
|
|
4660
|
-
archiveConversation(conversationId: string): Promise<void>;
|
|
4661
|
-
unarchiveConversation(conversationId: string): Promise<void>;
|
|
4662
|
-
pinConversation(conversationId: string): Promise<void>;
|
|
4663
|
-
unpinConversation(conversationId: string): Promise<void>;
|
|
4664
|
-
markConversationAsRead(conversationId: string): Promise<void>;
|
|
4665
|
-
markConversationAsUnread(conversationId: string): Promise<void>;
|
|
4666
|
-
searchConversations(query: string): Promise<AXConversation[]>;
|
|
4667
|
-
filterConversations(filters: AXConversationFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversation>>;
|
|
4668
|
-
getParticipants(conversationId: string): Promise<AXConversationParticipant[]>;
|
|
4669
|
-
addParticipants(_conversationId: string, _userIds: string[]): Promise<AXConversation>;
|
|
4670
|
-
removeParticipant(conversationId: string, _userId: string): Promise<AXConversation>;
|
|
4671
|
-
leaveConversation(_conversationId: string): Promise<void>;
|
|
4672
|
-
updateParticipant(conversationId: string, _update: AXConversationParticipantUpdate): Promise<AXConversation>;
|
|
4673
|
-
getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
|
|
4674
|
-
updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
|
|
4675
|
-
muteConversation(conversationId: string, duration?: number): Promise<void>;
|
|
4676
|
-
unmuteConversation(conversationId: string): Promise<void>;
|
|
4677
|
-
uploadConversationAvatar(_conversationId: string, file: File): Promise<string>;
|
|
4678
|
-
getConversationMedia(conversationId: string, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<unknown>>;
|
|
4679
|
-
addConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4680
|
-
removeConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4681
|
-
getConversationTags(conversationId: string): Promise<string[]>;
|
|
4682
|
-
saveDraft(conversationId: string, draft: string): Promise<void>;
|
|
4683
|
-
getDraft(conversationId: string): Promise<string | null>;
|
|
4684
|
-
clearDraft(conversationId: string): Promise<void>;
|
|
4685
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
|
|
4686
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
|
|
4687
|
-
}
|
|
4688
|
-
|
|
4689
|
-
declare class AXConversationIndexedDbMessageApi extends AXConversationMessageApi {
|
|
4690
|
-
sendMessage(command: AXConversationSendMessageCommand): Promise<AXConversationMessage>;
|
|
4691
|
-
getMessage(messageId: string): Promise<AXConversationMessage>;
|
|
4692
|
-
/**
|
|
4693
|
-
* Message history for a chat (newest-first pages).
|
|
4694
|
-
* - Page 0: latest `pageSize` messages.
|
|
4695
|
-
* - Page 1+ or `pagination.cursor`: older messages before the previous window.
|
|
4696
|
-
*/
|
|
4697
|
-
getMessages(conversationId: string, pagination: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
|
|
4698
|
-
editMessage(messageId: string, payload: AXConversationMessagePayload): Promise<AXConversationMessage>;
|
|
4699
|
-
deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
|
|
4700
|
-
deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4701
|
-
searchMessages(conversationId: string, filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
|
|
4702
|
-
searchAllMessages(filters: AXConversationMessageSearchFilters, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
|
|
4703
|
-
addReaction(messageId: string, emoji: string): Promise<void>;
|
|
4704
|
-
removeReaction(messageId: string, emoji: string): Promise<void>;
|
|
4705
|
-
getAvailableReactions(): Promise<string[]>;
|
|
4706
|
-
markAsRead(conversationId: string, messageIds: string[]): Promise<void>;
|
|
4707
|
-
markAsUnread(conversationId: string): Promise<void>;
|
|
4708
|
-
getReadReceipts(_messageId: string): Promise<AXConversationReadReceipt[]>;
|
|
4709
|
-
forwardMessage(_data: AXConversationMessageForwardData): Promise<AXConversationMessage[]>;
|
|
4710
|
-
pinMessage(_conversationId: string, _messageId: string): Promise<void>;
|
|
4711
|
-
unpinMessage(_conversationId: string, _messageId: string): Promise<void>;
|
|
4712
|
-
getPinnedMessages(_conversationId: string): Promise<AXConversationPinnedMessage[]>;
|
|
4713
|
-
getMessageReplies(messageId: string, pagination?: AXConversationPagination): Promise<AXConversationPaginatedResult<AXConversationMessage>>;
|
|
4714
|
-
getReplyCount(messageId: string): Promise<number>;
|
|
4715
|
-
getForwardCount(messageId: string): Promise<number>;
|
|
4716
|
-
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
4717
|
-
stopTypingIndicator(conversationId: string): Promise<void>;
|
|
4718
|
-
updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
|
|
4719
|
-
getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
|
|
4720
|
-
updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
|
|
4721
|
-
getMessageDeliveryStatus(_messageId: string): Promise<{
|
|
4722
|
-
delivered: number;
|
|
4723
|
-
read: number;
|
|
4724
|
-
total: number;
|
|
4725
|
-
}>;
|
|
4726
|
-
markMessagesAsRead(messageIds: string[]): Promise<void>;
|
|
4727
|
-
bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4728
|
-
exportMessages(conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
|
|
4729
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
|
|
4730
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
|
|
4731
|
-
}
|
|
4732
|
-
|
|
4733
|
-
declare class AXConversationIndexedDbRealtimeApi extends AXConversationRealtimeApi {
|
|
4734
|
-
readonly connectionStatus$: Observable<AXConversationConnectionStatus>;
|
|
4735
|
-
connect(_options?: AXConversationConnectionOptions): Promise<void>;
|
|
4736
|
-
disconnect(): Promise<void>;
|
|
4737
|
-
isConnected(): boolean;
|
|
4738
|
-
reconnect(): Promise<void>;
|
|
4739
|
-
subscribeToConnectionEvents(): Observable<AXConversationConnectionEvent>;
|
|
4740
|
-
subscribeToMessages(conversationId: string): Observable<AXConversationMessage>;
|
|
4741
|
-
subscribeToMessageUpdates(_conversationId?: string): Observable<AXConversationMessage>;
|
|
4742
|
-
subscribeToMessageDeletions(_conversationId?: string): Observable<string>;
|
|
4743
|
-
subscribeToMessageReactions(_conversationId?: string): Observable<AXConversationMessage>;
|
|
4744
|
-
subscribeToConversationUpdates(): Observable<AXConversation>;
|
|
4745
|
-
subscribeToConversationCreated(): Observable<AXConversation>;
|
|
4746
|
-
subscribeToConversationDeleted(): Observable<string>;
|
|
4747
|
-
subscribeToTypingIndicators(conversationId: string): Observable<AXConversationTypingIndicator>;
|
|
4748
|
-
subscribeToPresenceUpdates(_userIds?: string[]): Observable<AXConversationPresenceUpdate>;
|
|
4749
|
-
subscribeToReadReceipts(_conversationId?: string): Observable<{
|
|
4750
|
-
messageId: string;
|
|
4751
|
-
userId: string;
|
|
4752
|
-
readAt: Date;
|
|
4753
|
-
}>;
|
|
4754
|
-
subscribeToNotifications(): Observable<AXConversationNotificationEvent>;
|
|
4755
|
-
subscribeToCallEvents(): Observable<AXConversationCallEvent>;
|
|
4756
|
-
subscribeToUserBlockEvents(): Observable<{
|
|
4757
|
-
userId: string;
|
|
4758
|
-
blocked: boolean;
|
|
4759
|
-
}>;
|
|
4760
|
-
subscribeToParticipantEvents(_conversationId?: string): Observable<{
|
|
4761
|
-
conversationId: string;
|
|
4762
|
-
userId: string;
|
|
4763
|
-
action: 'added' | 'removed';
|
|
4764
|
-
}>;
|
|
4765
|
-
subscribeToSystemEvents(): Observable<{
|
|
4766
|
-
type: string;
|
|
4767
|
-
message: string;
|
|
4768
|
-
data?: any;
|
|
4769
|
-
}>;
|
|
4770
|
-
subscribeToMessageStatusChanges(_conversationId?: string): Observable<{
|
|
4771
|
-
messageId: string;
|
|
4772
|
-
status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
|
|
4773
|
-
timestamp: Date;
|
|
4774
|
-
}>;
|
|
4775
|
-
subscribeToConversationSettingsChanges(_conversationId?: string): Observable<{
|
|
4776
|
-
conversationId: string;
|
|
4777
|
-
settings: Record<string, unknown>;
|
|
4778
|
-
}>;
|
|
4779
|
-
subscribeToDraftChanges(_conversationId?: string): Observable<{
|
|
4780
|
-
conversationId: string;
|
|
4781
|
-
draft: string | null;
|
|
4782
|
-
}>;
|
|
4783
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbRealtimeApi, never>;
|
|
4784
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbRealtimeApi>;
|
|
4785
|
-
}
|
|
4786
|
-
|
|
4787
|
-
/**
|
|
4788
|
-
* AI Responder Service
|
|
4789
|
-
* Provides AI-powered automatic responses using Google Gemini API
|
|
4790
|
-
*
|
|
4791
|
-
* @security API key should be provided via injection token in production
|
|
4792
|
-
* @example
|
|
4793
|
-
* ```typescript
|
|
4794
|
-
* export const AX_CONVERSATION_AI_API_KEY = new InjectionToken<string>('AX_CONVERSATION_AI_API_KEY');
|
|
4795
|
-
*
|
|
4796
|
-
* providers: [
|
|
4797
|
-
* { provide: AX_CONVERSATION_AI_API_KEY, useValue: environment.geminiApiKey }
|
|
4798
|
-
* ]
|
|
4799
|
-
* ```
|
|
4800
|
-
*/
|
|
4801
|
-
|
|
4802
|
-
/**
|
|
4803
|
-
* Injection token for AI API key
|
|
4804
|
-
* Provide this in your app config to avoid hardcoding the API key
|
|
4805
|
-
*/
|
|
4806
|
-
declare const AX_CONVERSATION_AI_API_KEY: InjectionToken<string>;
|
|
4807
|
-
/**
|
|
4808
|
-
* Configuration for AI Responder
|
|
4809
|
-
*/
|
|
4810
|
-
interface AXConversationAiResponderConfig {
|
|
4811
|
-
/** Maximum retry attempts for failed requests */
|
|
4812
|
-
maxRetries?: number;
|
|
4813
|
-
/** Timeout for API requests in milliseconds */
|
|
4814
|
-
timeout?: number;
|
|
4815
|
-
/** Enable fallback to random replies on error */
|
|
4816
|
-
useFallbackReplies?: boolean;
|
|
4817
|
-
}
|
|
4818
|
-
declare class AXConversationAiResponderService {
|
|
4819
|
-
private readonly injectedApiKey;
|
|
4820
|
-
private readonly config;
|
|
4821
|
-
/**
|
|
4822
|
-
* Get API key from injection token
|
|
4823
|
-
* Returns undefined if not configured - service will use fallback responses
|
|
4824
|
-
*/
|
|
4825
|
-
private getApiKey;
|
|
4826
|
-
/**
|
|
4827
|
-
* Get AI-powered response for a given prompt
|
|
4828
|
-
* @param prompt - The user's message to respond to
|
|
4829
|
-
* @param retryCount - Current retry attempt (internal use)
|
|
4830
|
-
* @returns AI-generated response or fallback message
|
|
4831
|
-
*/
|
|
4832
|
-
getAIResponse(prompt: string, retryCount?: number): Promise<string>;
|
|
4833
|
-
/**
|
|
4834
|
-
* Fetch with timeout
|
|
4835
|
-
*/
|
|
4836
|
-
private fetchWithTimeout;
|
|
4837
|
-
/**
|
|
4838
|
-
* Delay helper for retry logic
|
|
4839
|
-
*/
|
|
4840
|
-
private delay;
|
|
4841
|
-
/**
|
|
4842
|
-
* Get a random fallback reply when AI is unavailable
|
|
4843
|
-
*/
|
|
4844
|
-
private getFallbackReply;
|
|
4845
|
-
/**
|
|
4846
|
-
* Check if AI service is available
|
|
4847
|
-
* @returns true if API key is configured
|
|
4848
|
-
*/
|
|
4849
|
-
isAvailable(): boolean;
|
|
4850
|
-
/**
|
|
4851
|
-
* Update configuration
|
|
4852
|
-
*/
|
|
4853
|
-
configure(config: Partial<AXConversationAiResponderConfig>): void;
|
|
4854
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAiResponderService, never>;
|
|
4855
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAiResponderService>;
|
|
4856
|
-
}
|
|
4857
|
-
|
|
4858
|
-
declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedDbMessageApi {
|
|
4859
|
-
private readonly aiResponder;
|
|
4860
|
-
private readonly AI_TYPING_INDICATOR_DELAY;
|
|
4861
|
-
private readonly AI_RESPONSE_DELAY;
|
|
4862
|
-
/**
|
|
4863
|
-
* Override sendMessage to trigger AI auto-response
|
|
4864
|
-
*/
|
|
4865
|
-
sendMessage(command: AXConversationSendMessageCommand): Promise<AXConversationMessage>;
|
|
4866
|
-
/**
|
|
4867
|
-
* Extract context from different message types for AI processing
|
|
4868
|
-
*/
|
|
4869
|
-
private extractMessageContext;
|
|
4870
|
-
/**
|
|
4871
|
-
* Generate AI response to user message
|
|
4872
|
-
*/
|
|
4873
|
-
private generateAIResponse;
|
|
4874
|
-
/**
|
|
4875
|
-
* Get conversation for AI response
|
|
4876
|
-
*/
|
|
4877
|
-
private getConversationForAI;
|
|
4878
|
-
/**
|
|
4879
|
-
* Get conversation history (last N messages)
|
|
4880
|
-
*/
|
|
4881
|
-
private getConversationHistory;
|
|
4882
|
-
/**
|
|
4883
|
-
* Create AI message directly in storage
|
|
4884
|
-
*/
|
|
4885
|
-
private createAIMessage;
|
|
4886
|
-
/**
|
|
4887
|
-
* Delay helper
|
|
4888
|
-
*/
|
|
4889
|
-
private delay;
|
|
4890
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageAiApi, never>;
|
|
4891
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
|
|
4892
|
-
}
|
|
4893
|
-
|
|
4894
4570
|
declare const AX_CONVERSATION_AUDIO_PRESENTATION: {
|
|
4895
4571
|
readonly icon: "fa-light fa-music text-amber-500";
|
|
4896
4572
|
readonly title: "Audio";
|
|
@@ -4963,16 +4639,14 @@ declare function notifyPickerValidationErrors(toast: AXToastService, translation
|
|
|
4963
4639
|
file: File;
|
|
4964
4640
|
errors: AXValidationRuleResult[];
|
|
4965
4641
|
}[]): void;
|
|
4966
|
-
/**
|
|
4967
|
-
declare function
|
|
4968
|
-
/** Close inline composer shell or popup host after send/cancel. */
|
|
4969
|
-
declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null): void;
|
|
4642
|
+
/** Close popup/action-sheet host or inline composer shell after send/cancel. */
|
|
4643
|
+
declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null, actionSheetRef?: AXActionSheetRef | null): void;
|
|
4970
4644
|
|
|
4971
4645
|
interface AXConversationAudioFile extends AXConversationComposerPickerUploadItem {
|
|
4972
4646
|
duration?: number;
|
|
4973
4647
|
dataUrl?: string;
|
|
4974
4648
|
}
|
|
4975
|
-
declare class AXConversationAudioPickerComponent implements OnDestroy {
|
|
4649
|
+
declare class AXConversationAudioPickerComponent implements OnDestroy, AXConversationComposerActionComponent {
|
|
4976
4650
|
private uploadsDismissed;
|
|
4977
4651
|
private retainUploadedOnDismiss;
|
|
4978
4652
|
readonly service: _angular_core.InputSignal<AXConversationComposerService>;
|
|
@@ -4987,7 +4661,9 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
|
|
|
4987
4661
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4988
4662
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
4989
4663
|
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
4664
|
+
readonly autoRun: _angular_core.InputSignal<boolean>;
|
|
4990
4665
|
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4666
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
4991
4667
|
readonly catalogFileType: "conversation-audio";
|
|
4992
4668
|
readonly audioFiles: _angular_core.WritableSignal<AXConversationAudioFile[]>;
|
|
4993
4669
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
@@ -4997,6 +4673,7 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
|
|
|
4997
4673
|
caption: string;
|
|
4998
4674
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
4999
4675
|
constructor();
|
|
4676
|
+
activate(): Promise<void>;
|
|
5000
4677
|
private createUtilityContext;
|
|
5001
4678
|
private getCatalogFileTypeDef;
|
|
5002
4679
|
private runUtility;
|
|
@@ -5018,7 +4695,7 @@ declare class AXConversationAudioPickerComponent implements OnDestroy {
|
|
|
5018
4695
|
getSelectedCountText(): string;
|
|
5019
4696
|
getSendText(): string;
|
|
5020
4697
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioPickerComponent, never>;
|
|
5021
|
-
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>;
|
|
4698
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioPickerComponent, "ax-conversation-audio-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5022
4699
|
}
|
|
5023
4700
|
|
|
5024
4701
|
declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXConversationComposerTab;
|
|
@@ -5093,7 +4770,7 @@ interface AXConversationAttachedFile {
|
|
|
5093
4770
|
error?: string;
|
|
5094
4771
|
abortController?: AbortController;
|
|
5095
4772
|
}
|
|
5096
|
-
declare class AXConversationFilePickerComponent implements OnDestroy {
|
|
4773
|
+
declare class AXConversationFilePickerComponent implements OnDestroy, AXConversationComposerActionComponent {
|
|
5097
4774
|
private uploadsDismissed;
|
|
5098
4775
|
private retainUploadedOnDismiss;
|
|
5099
4776
|
private readonly uploader;
|
|
@@ -5108,7 +4785,9 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
|
|
|
5108
4785
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5109
4786
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5110
4787
|
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
4788
|
+
readonly autoRun: _angular_core.InputSignal<boolean>;
|
|
5111
4789
|
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4790
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
5112
4791
|
readonly catalogFileType: "conversation-file";
|
|
5113
4792
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5114
4793
|
readonly files: _angular_core.WritableSignal<AXConversationAttachedFile[]>;
|
|
@@ -5118,6 +4797,7 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
|
|
|
5118
4797
|
private catalogFileTypeDef?;
|
|
5119
4798
|
caption: string;
|
|
5120
4799
|
constructor();
|
|
4800
|
+
activate(): Promise<void>;
|
|
5121
4801
|
private createUtilityContext;
|
|
5122
4802
|
private getCatalogFileTypeDef;
|
|
5123
4803
|
private pickerKind;
|
|
@@ -5139,7 +4819,7 @@ declare class AXConversationFilePickerComponent implements OnDestroy {
|
|
|
5139
4819
|
getSelectedCountText(): string;
|
|
5140
4820
|
getUploadingLabel(progress: number): string;
|
|
5141
4821
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFilePickerComponent, never>;
|
|
5142
|
-
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>;
|
|
4822
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFilePickerComponent, "ax-conversation-file-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5143
4823
|
}
|
|
5144
4824
|
|
|
5145
4825
|
declare const AX_CONVERSATION_IMAGE_PRESENTATION: {
|
|
@@ -5159,7 +4839,7 @@ declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
5159
4839
|
interface AXConversationImageFile extends AXConversationComposerPickerUploadItem {
|
|
5160
4840
|
preview: string;
|
|
5161
4841
|
}
|
|
5162
|
-
declare class AXConversationImagePickerComponent implements OnDestroy {
|
|
4842
|
+
declare class AXConversationImagePickerComponent implements OnDestroy, AXConversationComposerActionComponent {
|
|
5163
4843
|
private uploadsDismissed;
|
|
5164
4844
|
/** Uploaded blobs are referenced by the sent message — do not delete on dismiss. */
|
|
5165
4845
|
private retainUploadedOnDismiss;
|
|
@@ -5176,7 +4856,9 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
|
|
|
5176
4856
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5177
4857
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5178
4858
|
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
4859
|
+
readonly autoRun: _angular_core.InputSignal<boolean>;
|
|
5179
4860
|
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4861
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
5180
4862
|
readonly images: _angular_core.WritableSignal<AXConversationImageFile[]>;
|
|
5181
4863
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
5182
4864
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image text-purple-500" | "fa-light fa-cloud-arrow-up">;
|
|
@@ -5184,6 +4866,7 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
|
|
|
5184
4866
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5185
4867
|
private imageFileType?;
|
|
5186
4868
|
constructor();
|
|
4869
|
+
activate(): Promise<void>;
|
|
5187
4870
|
private createUtilityContext;
|
|
5188
4871
|
private loadImageFileType;
|
|
5189
4872
|
handleFiles(files: File[]): Promise<void>;
|
|
@@ -5202,20 +4885,23 @@ declare class AXConversationImagePickerComponent implements OnDestroy {
|
|
|
5202
4885
|
getSelectedCountText(): string;
|
|
5203
4886
|
getSendText(): string;
|
|
5204
4887
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImagePickerComponent, never>;
|
|
5205
|
-
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>;
|
|
4888
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImagePickerComponent, "ax-conversation-image-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5206
4889
|
}
|
|
5207
4890
|
|
|
5208
4891
|
declare class AXConversationLocationPickerComponent {
|
|
5209
|
-
|
|
5210
|
-
private readonly
|
|
4892
|
+
readonly service: _angular_core.InputSignal<AXConversationComposerService>;
|
|
4893
|
+
private readonly composerServiceFromInjector;
|
|
4894
|
+
private get composerService();
|
|
5211
4895
|
readonly translation: AXTranslationService;
|
|
5212
4896
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4897
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4898
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
5213
4899
|
readonly currentLocation: _angular_core.WritableSignal<AXConversationLocationPayload>;
|
|
5214
4900
|
onMarkerAdded(event: AXMapMarker): void;
|
|
5215
4901
|
sendLocation(): Promise<void>;
|
|
5216
4902
|
cancel(): void;
|
|
5217
4903
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationPickerComponent, never>;
|
|
5218
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationPickerComponent, "ax-conversation-location-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4904
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationPickerComponent, "ax-conversation-location-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5219
4905
|
}
|
|
5220
4906
|
|
|
5221
4907
|
declare class AXConversationPickerFooterComponent {
|
|
@@ -5279,12 +4965,15 @@ declare class AXConversationPickerEmptyComponent {
|
|
|
5279
4965
|
declare class AXConversationPickerShellComponent {
|
|
5280
4966
|
private readonly toast;
|
|
5281
4967
|
private readonly translation;
|
|
4968
|
+
private readonly zone;
|
|
5282
4969
|
readonly fileType: _angular_core.InputSignal<string>;
|
|
5283
4970
|
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
5284
4971
|
readonly filesSelected: _angular_core.OutputEmitterRef<File[]>;
|
|
5285
4972
|
readonly dragEnter: _angular_core.OutputEmitterRef<DragEvent>;
|
|
5286
4973
|
readonly dragLeave: _angular_core.OutputEmitterRef<DragEvent>;
|
|
5287
4974
|
readonly dragOver: _angular_core.OutputEmitterRef<DragEvent>;
|
|
4975
|
+
/** Open the OS file picker for this shell's catalog. */
|
|
4976
|
+
browse(): Promise<void>;
|
|
5288
4977
|
protected onZoneFileChange(event: AXUploaderFileChangeEvent): void;
|
|
5289
4978
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerShellComponent, never>;
|
|
5290
4979
|
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>;
|
|
@@ -5354,7 +5043,7 @@ interface AXConversationVideoFile extends AXConversationComposerPickerUploadItem
|
|
|
5354
5043
|
preview?: string;
|
|
5355
5044
|
duration?: number;
|
|
5356
5045
|
}
|
|
5357
|
-
declare class AXConversationVideoPickerComponent implements OnDestroy {
|
|
5046
|
+
declare class AXConversationVideoPickerComponent implements OnDestroy, AXConversationComposerActionComponent {
|
|
5358
5047
|
private uploadsDismissed;
|
|
5359
5048
|
private retainUploadedOnDismiss;
|
|
5360
5049
|
readonly service: _angular_core.InputSignal<AXConversationComposerService>;
|
|
@@ -5369,7 +5058,9 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
|
|
|
5369
5058
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5370
5059
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5371
5060
|
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5061
|
+
readonly autoRun: _angular_core.InputSignal<boolean>;
|
|
5372
5062
|
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5063
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
5373
5064
|
readonly catalogFileType: "conversation-video";
|
|
5374
5065
|
readonly videos: _angular_core.WritableSignal<AXConversationVideoFile[]>;
|
|
5375
5066
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
@@ -5379,6 +5070,7 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
|
|
|
5379
5070
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
|
|
5380
5071
|
private catalogFileTypeDef?;
|
|
5381
5072
|
constructor();
|
|
5073
|
+
activate(): Promise<void>;
|
|
5382
5074
|
private createUtilityContext;
|
|
5383
5075
|
private getCatalogFileTypeDef;
|
|
5384
5076
|
private runUtility;
|
|
@@ -5400,7 +5092,7 @@ declare class AXConversationVideoPickerComponent implements OnDestroy {
|
|
|
5400
5092
|
getSelectedCountText(): string;
|
|
5401
5093
|
getSendText(): string;
|
|
5402
5094
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoPickerComponent, never>;
|
|
5403
|
-
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>;
|
|
5095
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoPickerComponent, "ax-conversation-video-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5404
5096
|
}
|
|
5405
5097
|
|
|
5406
5098
|
declare const AX_CONVERSATION_VOICE_PRESENTATION: {
|
|
@@ -5420,14 +5112,21 @@ declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
5420
5112
|
declare function mergeVoiceUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
|
|
5421
5113
|
declare function applyVoiceLocalPreview(payload: AXConversationMessagePayload, localUrl: string): AXConversationMessagePayload;
|
|
5422
5114
|
|
|
5423
|
-
declare class AXConversationVoiceRecorderComponent {
|
|
5115
|
+
declare class AXConversationVoiceRecorderComponent implements AXConversationComposerActionComponent {
|
|
5424
5116
|
private readonly platformId;
|
|
5425
5117
|
private readonly destroyRef;
|
|
5426
|
-
|
|
5118
|
+
readonly service: _angular_core.InputSignal<AXConversationComposerService>;
|
|
5119
|
+
private readonly composerServiceFromInjector;
|
|
5120
|
+
private get composerService();
|
|
5427
5121
|
private readonly uploader;
|
|
5122
|
+
private readonly fileTypeRegistry;
|
|
5428
5123
|
private readonly toast;
|
|
5429
5124
|
readonly translation: AXTranslationService;
|
|
5430
5125
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5126
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5127
|
+
readonly autoRun: _angular_core.InputSignal<boolean>;
|
|
5128
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5129
|
+
readonly __actionSheet__: _angular_core.InputSignal<AXActionSheetRef<unknown>>;
|
|
5431
5130
|
readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
|
|
5432
5131
|
readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
|
|
5433
5132
|
readonly isRecording: _angular_core.WritableSignal<boolean>;
|
|
@@ -5443,7 +5142,9 @@ declare class AXConversationVoiceRecorderComponent {
|
|
|
5443
5142
|
private uploadAbortController?;
|
|
5444
5143
|
readonly formattedTime: _angular_core.Signal<string>;
|
|
5445
5144
|
constructor();
|
|
5145
|
+
activate(): Promise<void>;
|
|
5446
5146
|
startRecording(): Promise<void>;
|
|
5147
|
+
private dismissHost;
|
|
5447
5148
|
/** Stop recording and send */
|
|
5448
5149
|
stopRecording(): void;
|
|
5449
5150
|
cancelRecording(): void;
|
|
@@ -5457,7 +5158,7 @@ declare class AXConversationVoiceRecorderComponent {
|
|
|
5457
5158
|
private sendVoiceMessage;
|
|
5458
5159
|
private stopAndCleanup;
|
|
5459
5160
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRecorderComponent, never>;
|
|
5460
|
-
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>;
|
|
5161
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVoiceRecorderComponent, "ax-conversation-voice-recorder", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "autoRun": { "alias": "autoRun"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; "__actionSheet__": { "alias": "__actionSheet__"; "required": false; "isSignal": true; }; }, { "recordingComplete": "recordingComplete"; "recordingCancelled": "recordingCancelled"; }, never, never, true, never>;
|
|
5461
5162
|
}
|
|
5462
5163
|
|
|
5463
5164
|
declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXConversationComposerAction;
|
|
@@ -5479,6 +5180,8 @@ declare const AX_CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
|
|
|
5479
5180
|
/** Registers validation rules and lazy conversation file-type catalogs for composer actions. */
|
|
5480
5181
|
declare function provideConversationComposerFileTypes(): Provider[];
|
|
5481
5182
|
|
|
5183
|
+
/** Ensure a built-in conversation catalog is registered before pre-overlay file selection. */
|
|
5184
|
+
declare function ensureConversationFileCatalogRegistered(registry: AXFileTypeRegistryService, catalogName: string): Promise<void>;
|
|
5482
5185
|
/**
|
|
5483
5186
|
* Lazy-loads conversation file catalogs for the root file-type registry.
|
|
5484
5187
|
* Must not inject {@link AXConversationComposerActionRegistry} — that registry
|
|
@@ -5499,170 +5202,6 @@ declare function createLocalPreviewUrl(fileService: AXFileService, platformId: o
|
|
|
5499
5202
|
|
|
5500
5203
|
declare function resolveComposerMaxFiles(action: Pick<AXConversationComposerAction, 'maxFiles'> | undefined, config: Pick<Required<AXConversationConfig>, 'maxFilesPerMessage'>): number;
|
|
5501
5204
|
|
|
5502
|
-
interface AXConversationInfoProfileField {
|
|
5503
|
-
id: string;
|
|
5504
|
-
labelKey: string;
|
|
5505
|
-
value: string;
|
|
5506
|
-
icon: string;
|
|
5507
|
-
}
|
|
5508
|
-
type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
|
|
5509
|
-
interface AXConversationMediaCategory {
|
|
5510
|
-
id: AXConversationMediaCategoryId;
|
|
5511
|
-
labelKey: string;
|
|
5512
|
-
countLabelKey: string;
|
|
5513
|
-
icon: string;
|
|
5514
|
-
count: number;
|
|
5515
|
-
}
|
|
5516
|
-
declare function messageContainsLink(message: AXConversationMessage): boolean;
|
|
5517
|
-
declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
5518
|
-
declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
|
|
5519
|
-
declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
|
|
5520
|
-
declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
|
|
5521
|
-
declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
5522
|
-
declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
5523
|
-
interface AXConversationMediaGalleryTile {
|
|
5524
|
-
key: string;
|
|
5525
|
-
message: AXConversationMessage;
|
|
5526
|
-
kind: 'image' | 'video' | 'sticker';
|
|
5527
|
-
image?: AXConversationImageMediaItem;
|
|
5528
|
-
video?: AXConversationVideoMediaItem;
|
|
5529
|
-
stickerUrl?: string;
|
|
5530
|
-
stickerAlt?: string;
|
|
5531
|
-
}
|
|
5532
|
-
declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
|
|
5533
|
-
declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
|
|
5534
|
-
declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
|
|
5535
|
-
declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
|
|
5536
|
-
declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
|
|
5537
|
-
interface AXConversationMediaPageResult {
|
|
5538
|
-
items: AXConversationMessage[];
|
|
5539
|
-
hasMore: boolean;
|
|
5540
|
-
nextCursor?: string;
|
|
5541
|
-
page: number;
|
|
5542
|
-
}
|
|
5543
|
-
declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
|
|
5544
|
-
/** @deprecated Use {@link fetchConversationMediaPage} — loads only the first page. */
|
|
5545
|
-
declare function fetchConversationMediaMessages(conversationApi: AXConversationApi, conversationId: string, pageSize: number): Promise<AXConversationMessage[]>;
|
|
5546
|
-
/** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
|
|
5547
|
-
declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
|
|
5548
|
-
declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
|
|
5549
|
-
|
|
5550
|
-
interface AXInfoPanelQuickAction {
|
|
5551
|
-
id: string;
|
|
5552
|
-
labelKey: string;
|
|
5553
|
-
icon: string;
|
|
5554
|
-
danger?: boolean;
|
|
5555
|
-
}
|
|
5556
|
-
declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
|
|
5557
|
-
private readonly toastService;
|
|
5558
|
-
readonly translation: AXTranslationService;
|
|
5559
|
-
private readonly platform;
|
|
5560
|
-
private readonly injectedConversationService;
|
|
5561
|
-
readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
|
|
5562
|
-
conversation: AXConversation;
|
|
5563
|
-
conversationService: AXConversationService;
|
|
5564
|
-
readonly activeTab: _angular_core.WritableSignal<"profile" | "manage">;
|
|
5565
|
-
readonly showMemberSearch: _angular_core.WritableSignal<boolean>;
|
|
5566
|
-
readonly panelView: _angular_core.WritableSignal<"main" | "media">;
|
|
5567
|
-
readonly selectedMediaCategory: _angular_core.WritableSignal<AXConversationMediaCategory>;
|
|
5568
|
-
readonly mediaViewLoader: () => Promise<typeof _acorex_components_conversation.AXConversationInfoMediaViewComponent>;
|
|
5569
|
-
readonly conversationMessages: _angular_core.WritableSignal<AXConversationMessage[]>;
|
|
5570
|
-
readonly loadingMessages: _angular_core.WritableSignal<boolean>;
|
|
5571
|
-
readonly loadingMoreMedia: _angular_core.WritableSignal<boolean>;
|
|
5572
|
-
readonly mediaHasMore: _angular_core.WritableSignal<boolean>;
|
|
5573
|
-
private mediaNextPage;
|
|
5574
|
-
private mediaNextCursor;
|
|
5575
|
-
readonly memberSearchQuery: _angular_core.WritableSignal<string>;
|
|
5576
|
-
archived: boolean;
|
|
5577
|
-
private initialNotifications;
|
|
5578
|
-
private initialArchived;
|
|
5579
|
-
editTitle: string;
|
|
5580
|
-
editAvatar: string;
|
|
5581
|
-
private groupTitleSaveTimer;
|
|
5582
|
-
private groupDetailsSaveInFlight;
|
|
5583
|
-
readonly backgroundPresets: {
|
|
5584
|
-
label: string;
|
|
5585
|
-
id: string;
|
|
5586
|
-
value: AXConversationMessageListThemeBackground;
|
|
5587
|
-
}[];
|
|
5588
|
-
readonly heroSubtitle: _angular_core.Signal<string>;
|
|
5589
|
-
readonly liveConversation: _angular_core.Signal<AXConversation>;
|
|
5590
|
-
readonly isConversationMuted: _angular_core.Signal<boolean>;
|
|
5591
|
-
readonly profileFields: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoProfileField[]>;
|
|
5592
|
-
readonly mediaCategories: _angular_core.Signal<AXConversationMediaCategory[]>;
|
|
5593
|
-
readonly quickActions: _angular_core.Signal<AXInfoPanelQuickAction[]>;
|
|
5594
|
-
readonly filteredMembers: _angular_core.Signal<AXConversationParticipant[]>;
|
|
5595
|
-
ngOnInit(): void;
|
|
5596
|
-
private loadConversationMessages;
|
|
5597
|
-
loadMoreMedia(): Promise<void>;
|
|
5598
|
-
isPrivateConversation(): boolean;
|
|
5599
|
-
isGroupConversation(): boolean;
|
|
5600
|
-
membersSectionTitle(): string;
|
|
5601
|
-
getMemberRoleLabel(participant: AXConversationParticipant): string | null;
|
|
5602
|
-
onMemberSearchChange(value: string | null | undefined): void;
|
|
5603
|
-
setActiveTab(tab: 'profile' | 'manage'): void;
|
|
5604
|
-
toggleMemberSearch(): void;
|
|
5605
|
-
openMediaCategory(category: AXConversationMediaCategory): void;
|
|
5606
|
-
closeMediaView(): void;
|
|
5607
|
-
getMediaViewInputs(category: AXConversationMediaCategory): Record<string, unknown>;
|
|
5608
|
-
getMediaRowLabel(category: AXConversationMediaCategory): string;
|
|
5609
|
-
getMemberSubtitle(participant: AXConversationParticipant): string;
|
|
5610
|
-
onQuickAction(actionId: string): void;
|
|
5611
|
-
toggleConversationMute(): Promise<void>;
|
|
5612
|
-
onNotificationsChange(value: boolean): Promise<void>;
|
|
5613
|
-
onArchivedChange(value: boolean): Promise<void>;
|
|
5614
|
-
close(data?: unknown): void;
|
|
5615
|
-
closeAll(): void;
|
|
5616
|
-
onLeave(): Promise<void>;
|
|
5617
|
-
onGroupTitleChange(value: string): void;
|
|
5618
|
-
onGroupAvatarChange(value: string): void;
|
|
5619
|
-
private persistGroupDetails;
|
|
5620
|
-
isBackgroundSelected(preset: {
|
|
5621
|
-
id: string;
|
|
5622
|
-
value: AXConversationMessageListThemeBackground;
|
|
5623
|
-
}): boolean;
|
|
5624
|
-
presetBackgroundPreview(preset: AXConversationMessageListThemeBackground): string;
|
|
5625
|
-
applyMessageListBackground(value: AXConversationMessageListBackground): Promise<void>;
|
|
5626
|
-
getBackgroundAriaLabel(label: string): string;
|
|
5627
|
-
private translateBackgroundPresetLabel;
|
|
5628
|
-
ngOnDestroy(): void;
|
|
5629
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
|
|
5630
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
|
|
5631
|
-
}
|
|
5632
|
-
|
|
5633
|
-
declare class AXConversationInfoMediaViewComponent {
|
|
5634
|
-
private readonly translation;
|
|
5635
|
-
private readonly parentInjector;
|
|
5636
|
-
readonly category: _angular_core.InputSignal<AXConversationMediaCategory>;
|
|
5637
|
-
readonly messages: _angular_core.InputSignal<AXConversationMessage[]>;
|
|
5638
|
-
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5639
|
-
readonly conversationServiceInput: _angular_core.InputSignal<AXConversationService>;
|
|
5640
|
-
readonly hasMoreMedia: _angular_core.InputSignal<boolean>;
|
|
5641
|
-
readonly loadingMoreMedia: _angular_core.InputSignal<boolean>;
|
|
5642
|
-
readonly onLoadMoreMedia: _angular_core.InputSignal<() => void | Promise<void>>;
|
|
5643
|
-
/** Callback for lazy outlet wiring (alternative to the `back` output). */
|
|
5644
|
-
readonly onBack: _angular_core.InputSignal<() => void>;
|
|
5645
|
-
readonly back: _angular_core.OutputEmitterRef<void>;
|
|
5646
|
-
readonly items: _angular_core.Signal<AXConversationMessage[]>;
|
|
5647
|
-
readonly isGrid: _angular_core.Signal<boolean>;
|
|
5648
|
-
readonly isAttachmentList: _angular_core.Signal<boolean>;
|
|
5649
|
-
readonly galleryTiles: _angular_core.Signal<_acorex_components_conversation.AXConversationMediaGalleryTile[]>;
|
|
5650
|
-
readonly rendererInjector: _angular_core.Signal<_angular_core.DestroyableInjector>;
|
|
5651
|
-
readonly titleLabel: _angular_core.Signal<string>;
|
|
5652
|
-
readonly getMessageVideoItems: typeof getMessageVideoItems;
|
|
5653
|
-
readonly getMessageAudioItems: typeof getMessageAudioItems;
|
|
5654
|
-
getRendererComponent(message: AXConversationMessage): _angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
|
|
5655
|
-
getRendererComponentLoader(message: AXConversationMessage): (() => Promise<_angular_core.Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof _acorex_components_conversation.AXConversationFallbackRendererComponent>);
|
|
5656
|
-
getRendererInputs(message: AXConversationMessage): {
|
|
5657
|
-
message: AXConversationMessage;
|
|
5658
|
-
};
|
|
5659
|
-
formatTimestamp(message: AXConversationMessage): string;
|
|
5660
|
-
handleBack(): void;
|
|
5661
|
-
onScrollThreshold(edge: 'top' | 'bottom'): void;
|
|
5662
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoMediaViewComponent, never>;
|
|
5663
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; "hasMoreMedia": { "alias": "hasMoreMedia"; "required": false; "isSignal": true; }; "loadingMoreMedia": { "alias": "loadingMoreMedia"; "required": false; "isSignal": true; }; "onLoadMoreMedia": { "alias": "onLoadMoreMedia"; "required": false; "isSignal": true; }; "onBack": { "alias": "onBack"; "required": false; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
|
|
5664
|
-
}
|
|
5665
|
-
|
|
5666
5205
|
declare class AXConversationInfoBarSearchComponent {
|
|
5667
5206
|
private readonly platformId;
|
|
5668
5207
|
private readonly destroyRef;
|
|
@@ -5705,7 +5244,7 @@ declare class AXConversationInfoBarSearchComponent {
|
|
|
5705
5244
|
*/
|
|
5706
5245
|
|
|
5707
5246
|
/**
|
|
5708
|
-
* Search in conversation action (inline)
|
|
5247
|
+
* Search in conversation action (inline on desktop, menu on mobile)
|
|
5709
5248
|
*/
|
|
5710
5249
|
declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXConversationInfoBarAction;
|
|
5711
5250
|
/**
|
|
@@ -6180,14 +5719,6 @@ declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXConversationMessageAction
|
|
|
6180
5719
|
*/
|
|
6181
5720
|
declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXConversationMessageAction;
|
|
6182
5721
|
|
|
6183
|
-
/** Normalize payload; loads media normalizers on demand. */
|
|
6184
|
-
declare function normalizeMessagePayloadAsync(payload: AXConversationMessagePayload): Promise<AXConversationMessagePayload>;
|
|
6185
|
-
/**
|
|
6186
|
-
* Sync normalize — uses cached normalizers when available.
|
|
6187
|
-
* Media payloads pass through until a normalizer chunk has loaded (renderers normalize on display).
|
|
6188
|
-
*/
|
|
6189
|
-
declare function normalizeMessagePayload(payload: AXConversationMessagePayload): AXConversationMessagePayload;
|
|
6190
|
-
|
|
6191
5722
|
declare const AX_CONVERSATION_TEXT_RENDERER: AXConversationMessageRenderer;
|
|
6192
5723
|
|
|
6193
5724
|
declare const AX_CONVERSATION_IMAGE_RENDERER: AXConversationMessageRenderer;
|
|
@@ -6269,6 +5800,7 @@ declare class AXConversationDefaultConversationAvatarComponent {
|
|
|
6269
5800
|
displayAvatar: string;
|
|
6270
5801
|
displayIcon: string;
|
|
6271
5802
|
}>;
|
|
5803
|
+
readonly filteredUserAvatarInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
6272
5804
|
readonly fallbackDisplay: _angular_core.Signal<_acorex_components_conversation.AXConversationAvatarDisplay>;
|
|
6273
5805
|
readonly fallbackInitials: _angular_core.Signal<string>;
|
|
6274
5806
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationDefaultConversationAvatarComponent, never>;
|
|
@@ -6433,92 +5965,38 @@ declare class AXConversationDateUtilsService {
|
|
|
6433
5965
|
static formatTime(date: Date): string;
|
|
6434
5966
|
}
|
|
6435
5967
|
|
|
5968
|
+
/**
|
|
5969
|
+
* Message Utilities Service
|
|
5970
|
+
* Helper functions for message formatting and display
|
|
5971
|
+
*/
|
|
5972
|
+
|
|
6436
5973
|
declare class AXConversationMessageUtilsService {
|
|
6437
|
-
/**
|
|
6438
|
-
* Normalize optional avatar/icon values so empty or whitespace-only strings
|
|
6439
|
-
* are treated as missing data.
|
|
6440
|
-
*/
|
|
6441
|
-
private static normalizeOptionalMediaValue;
|
|
6442
|
-
/**
|
|
6443
|
-
* Get conversation avatar image URL.
|
|
6444
|
-
*/
|
|
6445
|
-
static getConversationAvatar(conversation: AXConversation): string | undefined;
|
|
6446
|
-
/**
|
|
6447
|
-
* Font Awesome icon class(es) for a conversation when there is no avatar image.
|
|
6448
|
-
*/
|
|
6449
|
-
static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
|
|
6450
|
-
/**
|
|
6451
|
-
* Font Awesome icon for a participant when there is no avatar image.
|
|
6452
|
-
*/
|
|
6453
|
-
static getParticipantAvatarIcon(participant?: {
|
|
6454
|
-
avatar?: string;
|
|
6455
|
-
icon?: string;
|
|
6456
|
-
}): string | undefined;
|
|
6457
|
-
/**
|
|
6458
|
-
* Get sender name from message
|
|
6459
|
-
*/
|
|
6460
|
-
static getSenderName(message: AXConversationMessage, conversation: AXConversation): string;
|
|
6461
|
-
/**
|
|
6462
|
-
* Get sender avatar image URL (takes precedence over {@link getSenderAvatarIcon}).
|
|
6463
|
-
*/
|
|
6464
|
-
static getSenderAvatar(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
6465
|
-
/**
|
|
6466
|
-
* Font Awesome icon class(es) for the sender when there is no avatar image:
|
|
6467
|
-
* participant `icon` first, then conversation-level `icon`.
|
|
6468
|
-
*/
|
|
6469
|
-
static getSenderAvatarIcon(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
6470
|
-
/**
|
|
6471
|
-
* Get initials from name
|
|
6472
|
-
*/
|
|
6473
5974
|
static getInitials(name: string): string;
|
|
6474
|
-
/**
|
|
6475
|
-
* Type guard for text payload
|
|
6476
|
-
*/
|
|
6477
|
-
static isTextPayload(payload: AXConversationMessagePayload): payload is AXConversationTextPayload;
|
|
6478
|
-
/**
|
|
6479
|
-
* Get message text content
|
|
6480
|
-
*/
|
|
6481
5975
|
static getMessageText(message: AXConversationMessage): string;
|
|
6482
|
-
/**
|
|
6483
|
-
* Format message preview text
|
|
6484
|
-
*/
|
|
6485
5976
|
static getPreviewText(message: AXConversationMessage, maxLength?: number): {
|
|
6486
5977
|
value: string;
|
|
6487
5978
|
type: string;
|
|
6488
5979
|
icon: string;
|
|
6489
5980
|
};
|
|
6490
|
-
/**
|
|
6491
|
-
* Check if message is from current user
|
|
6492
|
-
*/
|
|
6493
5981
|
static isOwnMessage(message: AXConversationMessage, currentUserId: string): boolean;
|
|
6494
|
-
|
|
6495
|
-
|
|
6496
|
-
|
|
5982
|
+
static getSenderName(message: AXConversationMessage, conversation: AXConversation): string;
|
|
5983
|
+
static getSenderAvatar(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
5984
|
+
static getSenderAvatarIcon(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
5985
|
+
static getConversationAvatar(conversation: AXConversation): string | undefined;
|
|
5986
|
+
static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
|
|
6497
5987
|
static getStatusIcon(message: AXConversationMessage): string;
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
static
|
|
6502
|
-
|
|
6503
|
-
* Group messages by sender for consecutive messages
|
|
6504
|
-
*/
|
|
6505
|
-
static shouldGroupWithPrevious(message: AXConversationMessage, previousMessage: AXConversationMessage | undefined): boolean;
|
|
6506
|
-
/**
|
|
6507
|
-
* Get conversation status for avatar (private conversations only)
|
|
6508
|
-
*/
|
|
6509
|
-
static getConversationStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
|
|
6510
|
-
/**
|
|
6511
|
-
* Get typing indicator text for conversation
|
|
6512
|
-
*/
|
|
6513
|
-
static getTypingText(conversation: AXConversation): string;
|
|
6514
|
-
/**
|
|
6515
|
-
* Format last seen time
|
|
6516
|
-
*/
|
|
5988
|
+
static getConversationStatus(conversation: AXConversation, presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
|
|
5989
|
+
static getDeliveryStatusIcon(status: AXConversationMessage['status']): string;
|
|
5990
|
+
static shouldGroupMessages(message: AXConversationMessage, previousMessage?: AXConversationMessage): boolean;
|
|
5991
|
+
static getUserPresenceStatus(presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
|
|
5992
|
+
static getTypingText(conversation: AXConversation, typingUserIds: string[]): string;
|
|
6517
5993
|
static formatLastSeen(date: Date): string;
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
5994
|
+
static getPrivateChatSubtitle(conversation: AXConversation, presence?: AXConversationUserPresence, currentUserId?: string): string;
|
|
5995
|
+
static getConversationSubtitle(conversation: AXConversation, options?: {
|
|
5996
|
+
typingUserIds?: string[];
|
|
5997
|
+
peerPresence?: AXConversationUserPresence;
|
|
5998
|
+
currentUserId?: string;
|
|
5999
|
+
}): string;
|
|
6522
6000
|
}
|
|
6523
6001
|
|
|
6524
6002
|
/**
|
|
@@ -6616,6 +6094,52 @@ declare function copyWithFileTypeFallback(message: AXConversationMessage, regist
|
|
|
6616
6094
|
/** Use file-type `open` on the message when `message.fileType` is set. */
|
|
6617
6095
|
declare function openWithFileType(message: AXConversationMessage, registry: AXFileTypeRegistryService, ctx: AXFileTypeOpenContext): Promise<boolean>;
|
|
6618
6096
|
|
|
6097
|
+
interface AXConversationInfoProfileField {
|
|
6098
|
+
id: string;
|
|
6099
|
+
labelKey: string;
|
|
6100
|
+
value: string;
|
|
6101
|
+
icon: string;
|
|
6102
|
+
}
|
|
6103
|
+
type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
|
|
6104
|
+
interface AXConversationMediaCategory {
|
|
6105
|
+
id: AXConversationMediaCategoryId;
|
|
6106
|
+
labelKey: string;
|
|
6107
|
+
countLabelKey: string;
|
|
6108
|
+
icon: string;
|
|
6109
|
+
count: number;
|
|
6110
|
+
}
|
|
6111
|
+
declare function messageContainsLink(message: AXConversationMessage): boolean;
|
|
6112
|
+
declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
6113
|
+
declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
|
|
6114
|
+
declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
|
|
6115
|
+
declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
|
|
6116
|
+
declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
6117
|
+
declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
6118
|
+
interface AXConversationMediaGalleryTile {
|
|
6119
|
+
key: string;
|
|
6120
|
+
message: AXConversationMessage;
|
|
6121
|
+
kind: 'image' | 'video' | 'sticker';
|
|
6122
|
+
image?: AXConversationImageMediaItem;
|
|
6123
|
+
video?: AXConversationVideoMediaItem;
|
|
6124
|
+
stickerUrl?: string;
|
|
6125
|
+
stickerAlt?: string;
|
|
6126
|
+
}
|
|
6127
|
+
declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
|
|
6128
|
+
declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
|
|
6129
|
+
declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
|
|
6130
|
+
declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
|
|
6131
|
+
declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
|
|
6132
|
+
interface AXConversationMediaPageResult {
|
|
6133
|
+
items: AXConversationMessage[];
|
|
6134
|
+
hasMore: boolean;
|
|
6135
|
+
nextCursor?: string;
|
|
6136
|
+
page: number;
|
|
6137
|
+
}
|
|
6138
|
+
declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
|
|
6139
|
+
/** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
|
|
6140
|
+
declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
|
|
6141
|
+
declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
|
|
6142
|
+
|
|
6619
6143
|
/**
|
|
6620
6144
|
* Error Message Constants
|
|
6621
6145
|
* Centralized error messages with i18n support structure
|
|
@@ -7008,5 +6532,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
|
|
|
7008
6532
|
*/
|
|
7009
6533
|
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'];
|
|
7010
6534
|
|
|
7011
|
-
export {
|
|
7012
|
-
export type { AXConversation,
|
|
6535
|
+
export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
|
|
6536
|
+
export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
|