@acorex/components 21.0.1-next.53 → 21.0.1-next.56
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/fab/README.md +3 -0
- package/fesm2022/acorex-components-accordion.mjs +4 -4
- package/fesm2022/acorex-components-action-sheet.mjs +2 -2
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +2 -2
- package/fesm2022/acorex-components-audio-wave.mjs +2 -2
- package/fesm2022/acorex-components-avatar.mjs +2 -2
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +2 -2
- package/fesm2022/acorex-components-bottom-navigation.mjs +2 -2
- package/fesm2022/acorex-components-breadcrumbs.mjs +2 -2
- package/fesm2022/acorex-components-button-group.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs +4 -4
- package/fesm2022/acorex-components-calendar.mjs +4 -4
- package/fesm2022/acorex-components-check-box.mjs +2 -2
- package/fesm2022/acorex-components-chips.mjs +2 -2
- package/fesm2022/acorex-components-circular-progress.mjs +2 -2
- package/fesm2022/acorex-components-code-editor.mjs +2 -2
- package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +2 -2
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +2 -2
- package/fesm2022/acorex-components-command.mjs +2 -2
- package/fesm2022/acorex-components-command.mjs.map +1 -1
- package/fesm2022/acorex-components-comment.mjs +6 -6
- package/fesm2022/acorex-components-comment.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +1 -1
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation2.mjs +3817 -2952
- package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +2 -2
- package/fesm2022/acorex-components-data-table.mjs +2 -2
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +2 -2
- package/fesm2022/acorex-components-datetime-input.mjs +2 -2
- package/fesm2022/acorex-components-datetime-picker.mjs +2 -2
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +8 -8
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +2 -2
- package/fesm2022/acorex-components-drawer.mjs +4 -4
- package/fesm2022/acorex-components-dropdown-button.mjs +2 -2
- package/fesm2022/acorex-components-dropdown.mjs +3 -3
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-editor.mjs +2 -2
- package/fesm2022/acorex-components-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-fab.mjs +114 -0
- package/fesm2022/acorex-components-fab.mjs.map +1 -0
- package/fesm2022/acorex-components-file-explorer.mjs +1 -1
- package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +2 -2
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +14 -14
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +2 -2
- package/fesm2022/acorex-components-json-viewer.mjs +2 -2
- package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-kanban.mjs +2 -2
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +2 -2
- package/fesm2022/acorex-components-label.mjs +2 -2
- package/fesm2022/acorex-components-list.mjs +62 -14
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +2 -2
- package/fesm2022/acorex-components-loading.mjs +76 -36
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +2 -2
- package/fesm2022/acorex-components-media-viewer.mjs +10 -10
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +33 -13
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-B03hJbP8.mjs → acorex-components-modal-acorex-components-modal-Bjw8EpLk.mjs} +4 -4
- package/fesm2022/{acorex-components-modal-acorex-components-modal-B03hJbP8.mjs.map → acorex-components-modal-acorex-components-modal-Bjw8EpLk.mjs.map} +1 -1
- package/fesm2022/{acorex-components-modal-modal-content.component-DrHm0mZ4.mjs → acorex-components-modal-modal-content.component-A2h_OC6e.mjs} +4 -4
- package/fesm2022/{acorex-components-modal-modal-content.component-DrHm0mZ4.mjs.map → acorex-components-modal-modal-content.component-A2h_OC6e.mjs.map} +1 -1
- package/fesm2022/acorex-components-modal.mjs +1 -1
- package/fesm2022/acorex-components-navbar.mjs +2 -2
- package/fesm2022/acorex-components-notification.mjs +2 -2
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +2 -2
- package/fesm2022/acorex-components-otp.mjs +2 -2
- package/fesm2022/acorex-components-paint.mjs +4 -4
- package/fesm2022/acorex-components-password-box.mjs +2 -2
- package/fesm2022/acorex-components-pdf-reader.mjs +2 -2
- package/fesm2022/acorex-components-phone-box.mjs +2 -2
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +6 -6
- package/fesm2022/acorex-components-popover.mjs +4 -3
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +3 -2
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +2 -2
- package/fesm2022/acorex-components-qrcode.mjs +2 -2
- package/fesm2022/acorex-components-query-builder.mjs +2 -2
- package/fesm2022/acorex-components-radio.mjs +2 -2
- package/fesm2022/acorex-components-rail-navigation.mjs +2 -2
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +2 -2
- package/fesm2022/acorex-components-rate-picker.mjs +2 -2
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +2 -2
- package/fesm2022/acorex-components-routing-progress.mjs +2 -2
- package/fesm2022/acorex-components-scheduler.mjs +18 -18
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +2 -2
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list-2.mjs +2 -2
- package/fesm2022/acorex-components-selection-list.mjs +2 -2
- package/fesm2022/acorex-components-side-menu.mjs +2 -2
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +2 -2
- package/fesm2022/acorex-components-sliding-item.mjs +2 -2
- package/fesm2022/acorex-components-step-wizard.mjs +2 -2
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +2 -2
- package/fesm2022/acorex-components-tabs.mjs +2 -2
- package/fesm2022/acorex-components-tag-box.mjs +2 -2
- package/fesm2022/acorex-components-tag.mjs +2 -2
- package/fesm2022/acorex-components-text-area.mjs +2 -2
- package/fesm2022/acorex-components-text-box.mjs +2 -2
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-duration.mjs +5 -0
- package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +4 -4
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +2 -2
- package/fesm2022/acorex-components-toolbar.mjs +2 -2
- package/fesm2022/acorex-components-tooltip.mjs +26 -15
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +6 -6
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +6 -6
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/package.json +7 -6
- package/types/acorex-components-action-sheet.d.ts +1 -1
- package/types/acorex-components-conversation2.d.ts +1106 -863
- package/types/acorex-components-fab.d.ts +50 -0
- package/types/acorex-components-list.d.ts +23 -1
- package/types/acorex-components-loading.d.ts +3 -1
- package/types/acorex-components-menu.d.ts +3 -1
- package/types/acorex-components-popover.d.ts +2 -1
- package/types/acorex-components-select-box.d.ts +6 -6
- package/types/acorex-components-tooltip.d.ts +2 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import * as _acorex_components_conversation2 from '@acorex/components/conversation2';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { OnDestroy, ViewContainerRef,
|
|
4
|
-
import { AXComponentCloseEvent, AXHtmlEvent, AXClosableComponent } from '@acorex/cdk/common';
|
|
3
|
+
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, OnInit, EventEmitter, TemplateRef, InjectionToken, ElementRef, ModuleWithProviders, Provider } from '@angular/core';
|
|
4
|
+
import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXClosableComponent } from '@acorex/cdk/common';
|
|
5
5
|
import { AXUploaderChangedEvent } from '@acorex/cdk/uploader';
|
|
6
6
|
import * as rxjs from 'rxjs';
|
|
7
|
-
import { Observable } from 'rxjs';
|
|
7
|
+
import { Observable, BehaviorSubject, Subject } from 'rxjs';
|
|
8
8
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
9
|
-
import { AXPopupService } from '@acorex/components/popup';
|
|
9
|
+
import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
|
|
10
10
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
11
|
+
import { AXListComponent } from '@acorex/components/list';
|
|
11
12
|
import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
|
|
13
|
+
import { AXBasePageComponent } from '@acorex/components/page';
|
|
12
14
|
import { AXMapMarker } from '@acorex/components/map';
|
|
13
15
|
import { SafeHtml } from '@angular/platform-browser';
|
|
14
16
|
import * as i1 from '@angular/common';
|
|
@@ -267,25 +269,6 @@ interface AXStickerPayload {
|
|
|
267
269
|
/** Emoji representation */
|
|
268
270
|
emoji?: string;
|
|
269
271
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Contact message payload
|
|
272
|
-
*/
|
|
273
|
-
interface AXContactPayload {
|
|
274
|
-
/** Message type */
|
|
275
|
-
type: 'contact';
|
|
276
|
-
/** Contact ID */
|
|
277
|
-
id: string;
|
|
278
|
-
/** Contact name */
|
|
279
|
-
name: string;
|
|
280
|
-
/** Phone number */
|
|
281
|
-
phoneNumber?: string;
|
|
282
|
-
/** Email address */
|
|
283
|
-
email?: string;
|
|
284
|
-
/** URL address */
|
|
285
|
-
url?: string;
|
|
286
|
-
/** Avatar URL */
|
|
287
|
-
avatar?: string;
|
|
288
|
-
}
|
|
289
272
|
/**
|
|
290
273
|
* Poll message payload
|
|
291
274
|
*/
|
|
@@ -331,12 +314,12 @@ interface AXSystemPayload {
|
|
|
331
314
|
/** Related user IDs */
|
|
332
315
|
userIds?: string[];
|
|
333
316
|
/** Additional data */
|
|
334
|
-
data?: Record<string,
|
|
317
|
+
data?: Record<string, unknown>;
|
|
335
318
|
}
|
|
336
319
|
/**
|
|
337
320
|
* Union type of all message payloads
|
|
338
321
|
*/
|
|
339
|
-
type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload |
|
|
322
|
+
type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload | AXPollPayload | AXSystemPayload;
|
|
340
323
|
|
|
341
324
|
/**
|
|
342
325
|
* Message Model
|
|
@@ -344,7 +327,7 @@ type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudi
|
|
|
344
327
|
*/
|
|
345
328
|
|
|
346
329
|
type AXMessageStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
|
|
347
|
-
type AXMessageType = 'text' | 'image' | 'video' | 'audio' | 'voice' | 'file' | 'location' | 'sticker' | '
|
|
330
|
+
type AXMessageType = 'text' | 'image' | 'video' | 'audio' | 'voice' | 'file' | 'location' | 'sticker' | 'poll' | 'system' | string;
|
|
348
331
|
/**
|
|
349
332
|
* Reaction on a message
|
|
350
333
|
*/
|
|
@@ -481,8 +464,17 @@ interface AXParticipant {
|
|
|
481
464
|
id: string;
|
|
482
465
|
/** Display name of the participant */
|
|
483
466
|
name: string;
|
|
467
|
+
/**
|
|
468
|
+
* Short line shown under the name in lists (e.g. job title, status line).
|
|
469
|
+
* Distinct from long-form bio in optional `metadata` (e.g. profile fields).
|
|
470
|
+
*/
|
|
471
|
+
description?: string;
|
|
484
472
|
/** Avatar/profile image URL */
|
|
485
473
|
avatar?: string;
|
|
474
|
+
/**
|
|
475
|
+
* Font Awesome icon class(es) used when `avatar` is not set (e.g. `'fa-light fa-user'`).
|
|
476
|
+
*/
|
|
477
|
+
icon?: string;
|
|
486
478
|
/** Role in the conversation (for groups/channels) */
|
|
487
479
|
role?: AXParticipantRole;
|
|
488
480
|
/** Current online status */
|
|
@@ -498,7 +490,7 @@ interface AXParticipant {
|
|
|
498
490
|
* Represents a chat conversation (private, group, or channel)
|
|
499
491
|
*/
|
|
500
492
|
|
|
501
|
-
type AXConversationType = 'private' | 'group' | 'channel';
|
|
493
|
+
type AXConversationType = 'private' | 'group' | 'channel' | 'bot';
|
|
502
494
|
/**
|
|
503
495
|
* Conversation status information
|
|
504
496
|
*/
|
|
@@ -548,6 +540,20 @@ interface AXConversationSettings {
|
|
|
548
540
|
/** Custom settings */
|
|
549
541
|
custom?: Record<string, unknown>;
|
|
550
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Conversation metadata
|
|
545
|
+
* Extensible map for app-specific conversation data.
|
|
546
|
+
*/
|
|
547
|
+
interface AXConversationMetadata extends Record<string, unknown> {
|
|
548
|
+
/** Optional custom background CSS for message list */
|
|
549
|
+
messageListBackground?: string;
|
|
550
|
+
/** Optional custom empty-state component for the message list. */
|
|
551
|
+
messageListEmptyComponent?: Type<AXMessageListEmptyComponent>;
|
|
552
|
+
}
|
|
553
|
+
/** Contract for custom empty-state components rendered by message list. */
|
|
554
|
+
interface AXMessageListEmptyComponent {
|
|
555
|
+
readonly conversation: InputSignal<AXConversation>;
|
|
556
|
+
}
|
|
551
557
|
/**
|
|
552
558
|
* Main Conversation interface
|
|
553
559
|
*/
|
|
@@ -560,6 +566,11 @@ interface AXConversation {
|
|
|
560
566
|
title: string;
|
|
561
567
|
/** Conversation avatar/image URL */
|
|
562
568
|
avatar?: string;
|
|
569
|
+
/**
|
|
570
|
+
* Font Awesome icon class(es) for this conversation when no image avatar is used
|
|
571
|
+
* (e.g. default placeholder for senders without a participant avatar/icon).
|
|
572
|
+
*/
|
|
573
|
+
icon?: string;
|
|
563
574
|
/** Conversation description (for groups/channels) */
|
|
564
575
|
description?: string;
|
|
565
576
|
/** List of participants */
|
|
@@ -593,7 +604,7 @@ interface AXConversation {
|
|
|
593
604
|
/** Draft message text */
|
|
594
605
|
draft?: string;
|
|
595
606
|
/** Custom metadata */
|
|
596
|
-
metadata?:
|
|
607
|
+
metadata?: AXConversationMetadata;
|
|
597
608
|
}
|
|
598
609
|
/**
|
|
599
610
|
* Typing indicator
|
|
@@ -730,7 +741,7 @@ declare class AXComposerComponent implements OnDestroy {
|
|
|
730
741
|
/** Send sticker message */
|
|
731
742
|
private sendSticker;
|
|
732
743
|
/** Get inputs for emoji popup component */
|
|
733
|
-
getEmojiPopupInputs(): Record<string,
|
|
744
|
+
getEmojiPopupInputs(): Record<string, unknown>;
|
|
734
745
|
/** Handle attach click */
|
|
735
746
|
onAttachClick(): void;
|
|
736
747
|
/** Handle voice click */
|
|
@@ -776,7 +787,7 @@ declare class AXComposerComponent implements OnDestroy {
|
|
|
776
787
|
/** Handle reply preview click - scroll to original message */
|
|
777
788
|
onReplyPreviewClick(): void;
|
|
778
789
|
/** Get inputs for dynamic component */
|
|
779
|
-
getComponentInputs(): Record<string,
|
|
790
|
+
getComponentInputs(): Record<string, unknown>;
|
|
780
791
|
onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
|
|
781
792
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
|
|
782
793
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
@@ -926,201 +937,6 @@ type AXPresenceStatus = 'online' | 'offline' | 'away' | 'busy' | 'invisible';
|
|
|
926
937
|
*/
|
|
927
938
|
type AXUserRole = 'owner' | 'admin' | 'member' | 'guest';
|
|
928
939
|
|
|
929
|
-
/**
|
|
930
|
-
* Abstract User Management API
|
|
931
|
-
* Handle user profile management and user operations for conversations
|
|
932
|
-
*/
|
|
933
|
-
|
|
934
|
-
/**
|
|
935
|
-
* User profile update data
|
|
936
|
-
*/
|
|
937
|
-
interface AXUserProfileUpdate {
|
|
938
|
-
/** Display name */
|
|
939
|
-
name?: string;
|
|
940
|
-
/** Avatar URL */
|
|
941
|
-
avatar?: string;
|
|
942
|
-
/** Bio/status text */
|
|
943
|
-
bio?: string;
|
|
944
|
-
/** Phone number */
|
|
945
|
-
phone?: string;
|
|
946
|
-
/** Email */
|
|
947
|
-
email?: string;
|
|
948
|
-
/** Custom fields */
|
|
949
|
-
custom?: Record<string, any>;
|
|
950
|
-
}
|
|
951
|
-
/**
|
|
952
|
-
* User search filters
|
|
953
|
-
*/
|
|
954
|
-
interface AXUserSearchFilters {
|
|
955
|
-
/** Search query */
|
|
956
|
-
query?: string;
|
|
957
|
-
/** Filter by online status */
|
|
958
|
-
onlineOnly?: boolean;
|
|
959
|
-
/** Exclude blocked users */
|
|
960
|
-
excludeBlocked?: boolean;
|
|
961
|
-
/** Limit results */
|
|
962
|
-
limit?: number;
|
|
963
|
-
}
|
|
964
|
-
/**
|
|
965
|
-
* Block/Report reason
|
|
966
|
-
*/
|
|
967
|
-
interface AXBlockReportReason {
|
|
968
|
-
/** Reason code */
|
|
969
|
-
code: string;
|
|
970
|
-
/** Description */
|
|
971
|
-
description?: string;
|
|
972
|
-
}
|
|
973
|
-
/**
|
|
974
|
-
* Abstract User Management API
|
|
975
|
-
*
|
|
976
|
-
* Implement this abstract class to handle user management for conversations.
|
|
977
|
-
*
|
|
978
|
-
* @example
|
|
979
|
-
* ```typescript
|
|
980
|
-
* @Injectable()
|
|
981
|
-
* export class MyUserApi extends AXUserApi {
|
|
982
|
-
* constructor(private http: HttpClient) {
|
|
983
|
-
* super();
|
|
984
|
-
* }
|
|
985
|
-
*
|
|
986
|
-
* async getCurrentUser(): Promise<AXParticipant> {
|
|
987
|
-
* const response = await this.http.get('/api/users/me').toPromise();
|
|
988
|
-
* return response;
|
|
989
|
-
* }
|
|
990
|
-
*
|
|
991
|
-
* // ... implement other methods
|
|
992
|
-
* }
|
|
993
|
-
* ```
|
|
994
|
-
*/
|
|
995
|
-
declare abstract class AXUserApi {
|
|
996
|
-
/**
|
|
997
|
-
* Get current authenticated user
|
|
998
|
-
*
|
|
999
|
-
* @returns Current user information
|
|
1000
|
-
* @throws {AXApiError} If user is not authenticated
|
|
1001
|
-
*/
|
|
1002
|
-
abstract getCurrentUser(): Promise<AXParticipant>;
|
|
1003
|
-
/**
|
|
1004
|
-
* Update current user profile
|
|
1005
|
-
*
|
|
1006
|
-
* @param updates - Profile updates
|
|
1007
|
-
* @returns Updated user information
|
|
1008
|
-
* @throws {AXApiError} If update fails
|
|
1009
|
-
*/
|
|
1010
|
-
abstract updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
|
|
1011
|
-
/**
|
|
1012
|
-
* Upload user avatar
|
|
1013
|
-
*
|
|
1014
|
-
* @param file - Avatar image file
|
|
1015
|
-
* @returns Avatar URL
|
|
1016
|
-
* @throws {AXApiError} If upload fails
|
|
1017
|
-
*/
|
|
1018
|
-
abstract uploadAvatar(file: File): Promise<string>;
|
|
1019
|
-
/**
|
|
1020
|
-
* Get available users for conversation creation
|
|
1021
|
-
*
|
|
1022
|
-
* @param filters - Search filters
|
|
1023
|
-
* @returns List of users
|
|
1024
|
-
* @throws {AXApiError} If request fails
|
|
1025
|
-
*/
|
|
1026
|
-
abstract getUsers(filters?: AXUserSearchFilters): Promise<AXParticipant[]>;
|
|
1027
|
-
/**
|
|
1028
|
-
* Search users by query
|
|
1029
|
-
*
|
|
1030
|
-
* @param query - Search query
|
|
1031
|
-
* @returns Matching users
|
|
1032
|
-
* @throws {AXApiError} If search fails
|
|
1033
|
-
*/
|
|
1034
|
-
abstract searchUsers(query: string): Promise<AXParticipant[]>;
|
|
1035
|
-
/**
|
|
1036
|
-
* Get user by ID
|
|
1037
|
-
*
|
|
1038
|
-
* @param userId - User ID
|
|
1039
|
-
* @returns User information
|
|
1040
|
-
* @throws {AXApiError} If user not found
|
|
1041
|
-
*/
|
|
1042
|
-
abstract getUserById(userId: string): Promise<AXParticipant>;
|
|
1043
|
-
/**
|
|
1044
|
-
* Get multiple users by IDs
|
|
1045
|
-
*
|
|
1046
|
-
* @param userIds - Array of user IDs
|
|
1047
|
-
* @returns Array of users
|
|
1048
|
-
* @throws {AXApiError} If request fails
|
|
1049
|
-
*/
|
|
1050
|
-
abstract getUsersByIds(userIds: string[]): Promise<AXParticipant[]>;
|
|
1051
|
-
/**
|
|
1052
|
-
* Get user presence status
|
|
1053
|
-
*
|
|
1054
|
-
* @param userId - User ID
|
|
1055
|
-
* @returns Presence information
|
|
1056
|
-
* @throws {AXApiError} If request fails
|
|
1057
|
-
*/
|
|
1058
|
-
abstract getUserPresence(userId: string): Promise<AXPresenceUpdate>;
|
|
1059
|
-
/**
|
|
1060
|
-
* Update current user presence
|
|
1061
|
-
*
|
|
1062
|
-
* @param status - Presence status
|
|
1063
|
-
* @param statusText - Optional status text
|
|
1064
|
-
* @throws {AXApiError} If update fails
|
|
1065
|
-
*/
|
|
1066
|
-
abstract updatePresence(status: AXPresenceStatus, statusText?: string): Promise<void>;
|
|
1067
|
-
/**
|
|
1068
|
-
* Block a user
|
|
1069
|
-
*
|
|
1070
|
-
* @param userId - User ID to block
|
|
1071
|
-
* @param reason - Optional reason
|
|
1072
|
-
* @throws {AXApiError} If blocking fails
|
|
1073
|
-
*/
|
|
1074
|
-
abstract blockUser(userId: string, reason?: AXBlockReportReason): Promise<void>;
|
|
1075
|
-
/**
|
|
1076
|
-
* Unblock a user
|
|
1077
|
-
*
|
|
1078
|
-
* @param userId - User ID to unblock
|
|
1079
|
-
* @throws {AXApiError} If unblocking fails
|
|
1080
|
-
*/
|
|
1081
|
-
abstract unblockUser(userId: string): Promise<void>;
|
|
1082
|
-
/**
|
|
1083
|
-
* Get list of blocked users
|
|
1084
|
-
*
|
|
1085
|
-
* @returns Array of blocked user IDs
|
|
1086
|
-
* @throws {AXApiError} If request fails
|
|
1087
|
-
*/
|
|
1088
|
-
abstract getBlockedUsers(): Promise<string[]>;
|
|
1089
|
-
/**
|
|
1090
|
-
* Report a user
|
|
1091
|
-
*
|
|
1092
|
-
* @param userId - User ID to report
|
|
1093
|
-
* @param reason - Report reason
|
|
1094
|
-
* @throws {AXApiError} If reporting fails
|
|
1095
|
-
*/
|
|
1096
|
-
abstract reportUser(userId: string, reason: AXBlockReportReason): Promise<void>;
|
|
1097
|
-
/**
|
|
1098
|
-
* Get user settings
|
|
1099
|
-
*
|
|
1100
|
-
* @returns User settings
|
|
1101
|
-
* @throws {AXApiError} If request fails
|
|
1102
|
-
*/
|
|
1103
|
-
abstract getUserSettings(): Promise<Record<string, any>>;
|
|
1104
|
-
/**
|
|
1105
|
-
* Update user settings
|
|
1106
|
-
*
|
|
1107
|
-
* @param settings - Settings to update
|
|
1108
|
-
* @throws {AXApiError} If update fails
|
|
1109
|
-
*/
|
|
1110
|
-
abstract updateUserSettings(settings: Record<string, any>): Promise<void>;
|
|
1111
|
-
/**
|
|
1112
|
-
* Create an API error
|
|
1113
|
-
* Helper method for consistent error creation
|
|
1114
|
-
*
|
|
1115
|
-
* @param code - Error code
|
|
1116
|
-
* @param message - Error message
|
|
1117
|
-
* @param statusCode - HTTP status code
|
|
1118
|
-
* @param details - Additional details
|
|
1119
|
-
* @returns API error object
|
|
1120
|
-
*/
|
|
1121
|
-
protected createError(code: string, message: string, statusCode?: number, details?: unknown): AXApiError;
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
940
|
/**
|
|
1125
941
|
* Abstract Conversation Management API
|
|
1126
942
|
* Handle conversation CRUD operations, participants, and settings
|
|
@@ -1141,7 +957,7 @@ interface AXConversationCreateData {
|
|
|
1141
957
|
/** Avatar URL */
|
|
1142
958
|
avatar?: string;
|
|
1143
959
|
/** Custom metadata */
|
|
1144
|
-
metadata?: Record<string,
|
|
960
|
+
metadata?: Record<string, unknown>;
|
|
1145
961
|
}
|
|
1146
962
|
/**
|
|
1147
963
|
* Conversation update data
|
|
@@ -1154,7 +970,7 @@ interface AXConversationUpdateData {
|
|
|
1154
970
|
/** Avatar URL */
|
|
1155
971
|
avatar?: string;
|
|
1156
972
|
/** Custom metadata */
|
|
1157
|
-
metadata?: Record<string,
|
|
973
|
+
metadata?: Record<string, unknown>;
|
|
1158
974
|
}
|
|
1159
975
|
/**
|
|
1160
976
|
* Conversation filter options
|
|
@@ -1173,7 +989,7 @@ interface AXConversationFilters {
|
|
|
1173
989
|
/** Filter by tags */
|
|
1174
990
|
tags?: string[];
|
|
1175
991
|
/** Custom filters */
|
|
1176
|
-
custom?: Record<string,
|
|
992
|
+
custom?: Record<string, unknown>;
|
|
1177
993
|
}
|
|
1178
994
|
/**
|
|
1179
995
|
* Conversation settings update
|
|
@@ -1188,7 +1004,7 @@ interface AXConversationSettingsUpdate {
|
|
|
1188
1004
|
/** Show message preview in notifications */
|
|
1189
1005
|
showPreview?: boolean;
|
|
1190
1006
|
/** Custom settings */
|
|
1191
|
-
custom?: Record<string,
|
|
1007
|
+
custom?: Record<string, unknown>;
|
|
1192
1008
|
}
|
|
1193
1009
|
/**
|
|
1194
1010
|
* Participant update data
|
|
@@ -1414,7 +1230,7 @@ declare abstract class AXConversationApi {
|
|
|
1414
1230
|
* @returns Paginated media items
|
|
1415
1231
|
* @throws {AXApiError} If request fails
|
|
1416
1232
|
*/
|
|
1417
|
-
abstract getConversationMedia(conversationId: string, pagination?: AXPagination): Promise<AXPaginatedResult<
|
|
1233
|
+
abstract getConversationMedia(conversationId: string, pagination?: AXPagination): Promise<AXPaginatedResult<unknown>>;
|
|
1418
1234
|
/**
|
|
1419
1235
|
* Add tags to conversation
|
|
1420
1236
|
*
|
|
@@ -1768,7 +1584,7 @@ declare abstract class AXMessageApi {
|
|
|
1768
1584
|
thumbnailUrl?: string;
|
|
1769
1585
|
size: number;
|
|
1770
1586
|
mimeType: string;
|
|
1771
|
-
metadata?: Record<string,
|
|
1587
|
+
metadata?: Record<string, unknown>;
|
|
1772
1588
|
}>;
|
|
1773
1589
|
/**
|
|
1774
1590
|
* Update message metadata
|
|
@@ -1777,7 +1593,7 @@ declare abstract class AXMessageApi {
|
|
|
1777
1593
|
* @param metadata - Metadata to update
|
|
1778
1594
|
* @throws {AXApiError} If update fails
|
|
1779
1595
|
*/
|
|
1780
|
-
abstract updateMessageMetadata(messageId: string, metadata: Record<string,
|
|
1596
|
+
abstract updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
|
|
1781
1597
|
/**
|
|
1782
1598
|
* Get message metadata
|
|
1783
1599
|
*
|
|
@@ -1785,7 +1601,7 @@ declare abstract class AXMessageApi {
|
|
|
1785
1601
|
* @returns Message metadata
|
|
1786
1602
|
* @throws {AXApiError} If request fails
|
|
1787
1603
|
*/
|
|
1788
|
-
abstract getMessageMetadata(messageId: string): Promise<Record<string,
|
|
1604
|
+
abstract getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
|
|
1789
1605
|
/**
|
|
1790
1606
|
* Update message status
|
|
1791
1607
|
*
|
|
@@ -1902,7 +1718,7 @@ interface AXNotificationEvent {
|
|
|
1902
1718
|
/** Timestamp */
|
|
1903
1719
|
timestamp: Date;
|
|
1904
1720
|
/** Custom data */
|
|
1905
|
-
data?: Record<string,
|
|
1721
|
+
data?: Record<string, unknown>;
|
|
1906
1722
|
}
|
|
1907
1723
|
/**
|
|
1908
1724
|
* Call event
|
|
@@ -2134,7 +1950,7 @@ declare abstract class AXRealtimeApi {
|
|
|
2134
1950
|
*/
|
|
2135
1951
|
abstract subscribeToConversationSettingsChanges(conversationId?: string): Observable<{
|
|
2136
1952
|
conversationId: string;
|
|
2137
|
-
settings: Record<string,
|
|
1953
|
+
settings: Record<string, unknown>;
|
|
2138
1954
|
}>;
|
|
2139
1955
|
/**
|
|
2140
1956
|
* Subscribe to draft changes
|
|
@@ -2150,45 +1966,236 @@ declare abstract class AXRealtimeApi {
|
|
|
2150
1966
|
}
|
|
2151
1967
|
|
|
2152
1968
|
/**
|
|
2153
|
-
*
|
|
1969
|
+
* Abstract User Management API
|
|
1970
|
+
* Handle user profile management and user operations for conversations
|
|
2154
1971
|
*/
|
|
2155
|
-
|
|
2156
|
-
/** Unique tab identifier */
|
|
2157
|
-
id: string;
|
|
2158
|
-
/** Display title */
|
|
2159
|
-
title: string;
|
|
2160
|
-
/** Icon name/class */
|
|
2161
|
-
icon?: string;
|
|
2162
|
-
/** Display order priority (higher = earlier) */
|
|
2163
|
-
priority?: number;
|
|
2164
|
-
/** Angular component for tab content */
|
|
2165
|
-
component: Type<any>;
|
|
2166
|
-
/** Default data provider (optional) */
|
|
2167
|
-
dataProvider?: () => Observable<any>;
|
|
2168
|
-
/** Whether tab is enabled */
|
|
2169
|
-
enabled?: boolean;
|
|
2170
|
-
/** Custom class for styling */
|
|
2171
|
-
className?: string;
|
|
2172
|
-
/** Badge text/count */
|
|
2173
|
-
badge?: string | number;
|
|
2174
|
-
}
|
|
1972
|
+
|
|
2175
1973
|
/**
|
|
2176
|
-
*
|
|
1974
|
+
* User profile update data
|
|
2177
1975
|
*/
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
/**
|
|
2182
|
-
|
|
2183
|
-
/**
|
|
2184
|
-
|
|
2185
|
-
/**
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
/**
|
|
2190
|
-
|
|
2191
|
-
|
|
1976
|
+
interface AXUserProfileUpdate {
|
|
1977
|
+
/** Display name */
|
|
1978
|
+
name?: string;
|
|
1979
|
+
/** Avatar URL */
|
|
1980
|
+
avatar?: string;
|
|
1981
|
+
/** Short line under the name in lists (e.g. job title) */
|
|
1982
|
+
description?: string;
|
|
1983
|
+
/** Bio/status text */
|
|
1984
|
+
bio?: string;
|
|
1985
|
+
/** Phone number */
|
|
1986
|
+
phone?: string;
|
|
1987
|
+
/** Email */
|
|
1988
|
+
email?: string;
|
|
1989
|
+
/** Custom fields */
|
|
1990
|
+
custom?: Record<string, unknown>;
|
|
1991
|
+
}
|
|
1992
|
+
/**
|
|
1993
|
+
* User search filters
|
|
1994
|
+
*/
|
|
1995
|
+
interface AXUserSearchFilters {
|
|
1996
|
+
/** Search query */
|
|
1997
|
+
query?: string;
|
|
1998
|
+
/** Filter by online status */
|
|
1999
|
+
onlineOnly?: boolean;
|
|
2000
|
+
/** Exclude blocked users */
|
|
2001
|
+
excludeBlocked?: boolean;
|
|
2002
|
+
/** Limit results */
|
|
2003
|
+
limit?: number;
|
|
2004
|
+
}
|
|
2005
|
+
/**
|
|
2006
|
+
* Block/Report reason
|
|
2007
|
+
*/
|
|
2008
|
+
interface AXBlockReportReason {
|
|
2009
|
+
/** Reason code */
|
|
2010
|
+
code: string;
|
|
2011
|
+
/** Description */
|
|
2012
|
+
description?: string;
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Abstract User Management API
|
|
2016
|
+
*
|
|
2017
|
+
* Implement this abstract class to handle user management for conversations.
|
|
2018
|
+
*
|
|
2019
|
+
* @example
|
|
2020
|
+
* ```typescript
|
|
2021
|
+
* @Injectable()
|
|
2022
|
+
* export class MyUserApi extends AXUserApi {
|
|
2023
|
+
* constructor(private http: HttpClient) {
|
|
2024
|
+
* super();
|
|
2025
|
+
* }
|
|
2026
|
+
*
|
|
2027
|
+
* async getCurrentUser(): Promise<AXParticipant> {
|
|
2028
|
+
* const response = await this.http.get('/api/users/me').toPromise();
|
|
2029
|
+
* return response;
|
|
2030
|
+
* }
|
|
2031
|
+
*
|
|
2032
|
+
* // ... implement other methods
|
|
2033
|
+
* }
|
|
2034
|
+
* ```
|
|
2035
|
+
*/
|
|
2036
|
+
declare abstract class AXUserApi {
|
|
2037
|
+
/**
|
|
2038
|
+
* Get current authenticated user
|
|
2039
|
+
*
|
|
2040
|
+
* @returns Current user information
|
|
2041
|
+
* @throws {AXApiError} If user is not authenticated
|
|
2042
|
+
*/
|
|
2043
|
+
abstract getCurrentUser(): Promise<AXParticipant>;
|
|
2044
|
+
/**
|
|
2045
|
+
* Update current user profile
|
|
2046
|
+
*
|
|
2047
|
+
* @param updates - Profile updates
|
|
2048
|
+
* @returns Updated user information
|
|
2049
|
+
* @throws {AXApiError} If update fails
|
|
2050
|
+
*/
|
|
2051
|
+
abstract updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
|
|
2052
|
+
/**
|
|
2053
|
+
* Upload user avatar
|
|
2054
|
+
*
|
|
2055
|
+
* @param file - Avatar image file
|
|
2056
|
+
* @returns Avatar URL
|
|
2057
|
+
* @throws {AXApiError} If upload fails
|
|
2058
|
+
*/
|
|
2059
|
+
abstract uploadAvatar(file: File): Promise<string>;
|
|
2060
|
+
/**
|
|
2061
|
+
* Get available users for conversation creation
|
|
2062
|
+
*
|
|
2063
|
+
* @param filters - Search filters
|
|
2064
|
+
* @returns List of users
|
|
2065
|
+
* @throws {AXApiError} If request fails
|
|
2066
|
+
*/
|
|
2067
|
+
abstract getUsers(filters?: AXUserSearchFilters): Promise<AXParticipant[]>;
|
|
2068
|
+
/**
|
|
2069
|
+
* Search users by query
|
|
2070
|
+
*
|
|
2071
|
+
* @param query - Search query
|
|
2072
|
+
* @returns Matching users
|
|
2073
|
+
* @throws {AXApiError} If search fails
|
|
2074
|
+
*/
|
|
2075
|
+
abstract searchUsers(query: string): Promise<AXParticipant[]>;
|
|
2076
|
+
/**
|
|
2077
|
+
* Get user by ID
|
|
2078
|
+
*
|
|
2079
|
+
* @param userId - User ID
|
|
2080
|
+
* @returns User information
|
|
2081
|
+
* @throws {AXApiError} If user not found
|
|
2082
|
+
*/
|
|
2083
|
+
abstract getUserById(userId: string): Promise<AXParticipant>;
|
|
2084
|
+
/**
|
|
2085
|
+
* Get multiple users by IDs
|
|
2086
|
+
*
|
|
2087
|
+
* @param userIds - Array of user IDs
|
|
2088
|
+
* @returns Array of users
|
|
2089
|
+
* @throws {AXApiError} If request fails
|
|
2090
|
+
*/
|
|
2091
|
+
abstract getUsersByIds(userIds: string[]): Promise<AXParticipant[]>;
|
|
2092
|
+
/**
|
|
2093
|
+
* Get user presence status
|
|
2094
|
+
*
|
|
2095
|
+
* @param userId - User ID
|
|
2096
|
+
* @returns Presence information
|
|
2097
|
+
* @throws {AXApiError} If request fails
|
|
2098
|
+
*/
|
|
2099
|
+
abstract getUserPresence(userId: string): Promise<AXPresenceUpdate>;
|
|
2100
|
+
/**
|
|
2101
|
+
* Update current user presence
|
|
2102
|
+
*
|
|
2103
|
+
* @param status - Presence status
|
|
2104
|
+
* @param statusText - Optional status text
|
|
2105
|
+
* @throws {AXApiError} If update fails
|
|
2106
|
+
*/
|
|
2107
|
+
abstract updatePresence(status: AXPresenceStatus, statusText?: string): Promise<void>;
|
|
2108
|
+
/**
|
|
2109
|
+
* Block a user
|
|
2110
|
+
*
|
|
2111
|
+
* @param userId - User ID to block
|
|
2112
|
+
* @param reason - Optional reason
|
|
2113
|
+
* @throws {AXApiError} If blocking fails
|
|
2114
|
+
*/
|
|
2115
|
+
abstract blockUser(userId: string, reason?: AXBlockReportReason): Promise<void>;
|
|
2116
|
+
/**
|
|
2117
|
+
* Unblock a user
|
|
2118
|
+
*
|
|
2119
|
+
* @param userId - User ID to unblock
|
|
2120
|
+
* @throws {AXApiError} If unblocking fails
|
|
2121
|
+
*/
|
|
2122
|
+
abstract unblockUser(userId: string): Promise<void>;
|
|
2123
|
+
/**
|
|
2124
|
+
* Get list of blocked users
|
|
2125
|
+
*
|
|
2126
|
+
* @returns Array of blocked user IDs
|
|
2127
|
+
* @throws {AXApiError} If request fails
|
|
2128
|
+
*/
|
|
2129
|
+
abstract getBlockedUsers(): Promise<string[]>;
|
|
2130
|
+
/**
|
|
2131
|
+
* Report a user
|
|
2132
|
+
*
|
|
2133
|
+
* @param userId - User ID to report
|
|
2134
|
+
* @param reason - Report reason
|
|
2135
|
+
* @throws {AXApiError} If reporting fails
|
|
2136
|
+
*/
|
|
2137
|
+
abstract reportUser(userId: string, reason: AXBlockReportReason): Promise<void>;
|
|
2138
|
+
/**
|
|
2139
|
+
* Get user settings
|
|
2140
|
+
*
|
|
2141
|
+
* @returns User settings
|
|
2142
|
+
* @throws {AXApiError} If request fails
|
|
2143
|
+
*/
|
|
2144
|
+
abstract getUserSettings(): Promise<Record<string, unknown>>;
|
|
2145
|
+
/**
|
|
2146
|
+
* Update user settings
|
|
2147
|
+
*
|
|
2148
|
+
* @param settings - Settings to update
|
|
2149
|
+
* @throws {AXApiError} If update fails
|
|
2150
|
+
*/
|
|
2151
|
+
abstract updateUserSettings(settings: Record<string, unknown>): Promise<void>;
|
|
2152
|
+
/**
|
|
2153
|
+
* Create an API error
|
|
2154
|
+
* Helper method for consistent error creation
|
|
2155
|
+
*
|
|
2156
|
+
* @param code - Error code
|
|
2157
|
+
* @param message - Error message
|
|
2158
|
+
* @param statusCode - HTTP status code
|
|
2159
|
+
* @param details - Additional details
|
|
2160
|
+
* @returns API error object
|
|
2161
|
+
*/
|
|
2162
|
+
protected createError(code: string, message: string, statusCode?: number, details?: unknown): AXApiError;
|
|
2163
|
+
}
|
|
2164
|
+
|
|
2165
|
+
/**
|
|
2166
|
+
* Composer tab registration
|
|
2167
|
+
*/
|
|
2168
|
+
interface AXComposerTab extends AXRegistryItem {
|
|
2169
|
+
/** Display title */
|
|
2170
|
+
title: string;
|
|
2171
|
+
/** Icon name/class */
|
|
2172
|
+
icon?: string;
|
|
2173
|
+
/** Angular component for tab content */
|
|
2174
|
+
component: Type<unknown>;
|
|
2175
|
+
/** Default data provider (optional) */
|
|
2176
|
+
dataProvider?: () => Observable<unknown>;
|
|
2177
|
+
/** Custom class for styling */
|
|
2178
|
+
className?: string;
|
|
2179
|
+
/** Badge text/count */
|
|
2180
|
+
badge?: string | number;
|
|
2181
|
+
}
|
|
2182
|
+
/**
|
|
2183
|
+
* Composer Tab Registry Service
|
|
2184
|
+
*/
|
|
2185
|
+
declare class AXComposerTabRegistry {
|
|
2186
|
+
private readonly _tabs;
|
|
2187
|
+
constructor();
|
|
2188
|
+
/** All registered tabs */
|
|
2189
|
+
readonly tabs: _angular_core.Signal<AXComposerTab[]>;
|
|
2190
|
+
/** Enabled tabs sorted by priority */
|
|
2191
|
+
readonly enabledTabs: _angular_core.Signal<AXComposerTab[]>;
|
|
2192
|
+
/**
|
|
2193
|
+
* Register a composer tab
|
|
2194
|
+
*/
|
|
2195
|
+
register(tab: AXComposerTab): void;
|
|
2196
|
+
/**
|
|
2197
|
+
* Unregister a composer tab
|
|
2198
|
+
*/
|
|
2192
2199
|
unregister(id: string): void;
|
|
2193
2200
|
/**
|
|
2194
2201
|
* Get tab by ID
|
|
@@ -2219,7 +2226,7 @@ interface AXConversationItemActionContext {
|
|
|
2219
2226
|
/** Conversation service for conversation operations */
|
|
2220
2227
|
conversationService?: AXConversationService;
|
|
2221
2228
|
/** Additional context data */
|
|
2222
|
-
data?: Record<string,
|
|
2229
|
+
data?: Record<string, unknown>;
|
|
2223
2230
|
}
|
|
2224
2231
|
/**
|
|
2225
2232
|
* Conversation item action configuration
|
|
@@ -2285,21 +2292,15 @@ declare class AXConversationItemActionRegistry extends AXBaseRegistry<AXConversa
|
|
|
2285
2292
|
/**
|
|
2286
2293
|
* Conversation tab registration
|
|
2287
2294
|
*/
|
|
2288
|
-
interface AXConversationTab {
|
|
2289
|
-
/** Unique tab identifier */
|
|
2290
|
-
id: string;
|
|
2295
|
+
interface AXConversationTab extends AXRegistryItem {
|
|
2291
2296
|
/** Display label */
|
|
2292
2297
|
label: string;
|
|
2293
2298
|
/** Icon name/class */
|
|
2294
2299
|
icon?: string;
|
|
2295
|
-
/** Display order priority (higher = earlier) */
|
|
2296
|
-
priority?: number;
|
|
2297
2300
|
/** Filter function to determine which conversations to show */
|
|
2298
2301
|
filter: (conversations: AXConversation[]) => AXConversation[];
|
|
2299
2302
|
/** Badge function to compute badge count/text */
|
|
2300
2303
|
badge?: (conversations: AXConversation[]) => number | string | undefined;
|
|
2301
|
-
/** Whether tab is enabled */
|
|
2302
|
-
enabled?: boolean;
|
|
2303
2304
|
/** Custom class for styling */
|
|
2304
2305
|
className?: string;
|
|
2305
2306
|
/** Whether this is the default active tab */
|
|
@@ -2369,7 +2370,15 @@ interface AXInfoBarActionContext {
|
|
|
2369
2370
|
/** Info bar service for UI operations */
|
|
2370
2371
|
infoBarService?: AXInfoBarService;
|
|
2371
2372
|
/** Additional context data */
|
|
2372
|
-
data?: Record<string,
|
|
2373
|
+
data?: Record<string, unknown>;
|
|
2374
|
+
}
|
|
2375
|
+
/**
|
|
2376
|
+
* Contract for components used as {@link AXInfoBarAction.component}.
|
|
2377
|
+
* Info-bar shell passes at least `{ conversation, service }`.
|
|
2378
|
+
*/
|
|
2379
|
+
interface AXInfoBarActionComponent {
|
|
2380
|
+
readonly conversation: InputSignal<AXConversation>;
|
|
2381
|
+
readonly service?: InputSignal<AXInfoBarService | undefined>;
|
|
2373
2382
|
}
|
|
2374
2383
|
/**
|
|
2375
2384
|
* Info bar action configuration
|
|
@@ -2391,11 +2400,16 @@ interface AXInfoBarAction extends AXRegistryItem {
|
|
|
2391
2400
|
* Component to show when action is activated (for inline actions)
|
|
2392
2401
|
* If provided, clicking the action will show this component in the info-bar
|
|
2393
2402
|
*/
|
|
2394
|
-
component?: Type<
|
|
2403
|
+
component?: Type<AXInfoBarActionComponent>;
|
|
2395
2404
|
/**
|
|
2396
2405
|
* Whether this action is toggleable (shows/hides component)
|
|
2397
2406
|
*/
|
|
2398
2407
|
toggleable?: boolean;
|
|
2408
|
+
/**
|
|
2409
|
+
* Whether action component should take full width of the info-bar.
|
|
2410
|
+
* Defaults to `true` when omitted.
|
|
2411
|
+
*/
|
|
2412
|
+
fullWidthComponent?: boolean;
|
|
2399
2413
|
/**
|
|
2400
2414
|
* Visibility condition
|
|
2401
2415
|
* @returns true if action should be visible
|
|
@@ -2468,20 +2482,16 @@ interface AXMessageActionContext {
|
|
|
2468
2482
|
/** Message list service for UI operations */
|
|
2469
2483
|
messageListService: AXMessageListService;
|
|
2470
2484
|
/** Custom context data */
|
|
2471
|
-
custom?: Record<string,
|
|
2485
|
+
custom?: Record<string, unknown>;
|
|
2472
2486
|
}
|
|
2473
2487
|
/**
|
|
2474
2488
|
* Message action registration
|
|
2475
2489
|
*/
|
|
2476
|
-
interface AXMessageAction {
|
|
2477
|
-
/** Unique action identifier */
|
|
2478
|
-
id: string;
|
|
2490
|
+
interface AXMessageAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
2479
2491
|
/** Display label */
|
|
2480
2492
|
label: string;
|
|
2481
2493
|
/** Icon name/class */
|
|
2482
2494
|
icon?: string;
|
|
2483
|
-
/** Display order priority (higher = earlier) */
|
|
2484
|
-
priority?: number;
|
|
2485
2495
|
/** Show as inline button */
|
|
2486
2496
|
showInline?: boolean;
|
|
2487
2497
|
/** Visibility condition */
|
|
@@ -2545,6 +2555,11 @@ declare class AXMessageActionRegistry {
|
|
|
2545
2555
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageActionRegistry>;
|
|
2546
2556
|
}
|
|
2547
2557
|
|
|
2558
|
+
/**
|
|
2559
|
+
* Message Renderer Registry
|
|
2560
|
+
* Register custom message renderers for different message types
|
|
2561
|
+
*/
|
|
2562
|
+
|
|
2548
2563
|
/**
|
|
2549
2564
|
* Message renderer capabilities
|
|
2550
2565
|
*/
|
|
@@ -2562,6 +2577,35 @@ interface AXMessageRendererCapabilities {
|
|
|
2562
2577
|
/** Custom capabilities */
|
|
2563
2578
|
custom?: Record<string, boolean>;
|
|
2564
2579
|
}
|
|
2580
|
+
/**
|
|
2581
|
+
* Remote or binary content lifecycle inside a message renderer (image load, audio decode, etc.).
|
|
2582
|
+
* Use `none` when the renderer has no separate load phase (text, file row, etc.).
|
|
2583
|
+
*/
|
|
2584
|
+
type AXMessageRendererContentState = 'none' | 'loading' | 'ready' | 'error';
|
|
2585
|
+
/**
|
|
2586
|
+
* Combined state for a chat message renderer: delivery pipeline plus optional content load.
|
|
2587
|
+
*/
|
|
2588
|
+
interface AXMessageRendererState {
|
|
2589
|
+
/** Mirrors `message.status` (sending, sent, delivered, read, failed). */
|
|
2590
|
+
deliveryStatus: AXMessageStatus;
|
|
2591
|
+
/** Media / rich content load; set to `error` from `(error)` handlers on img, audio, video, etc. */
|
|
2592
|
+
contentState: AXMessageRendererContentState;
|
|
2593
|
+
}
|
|
2594
|
+
/**
|
|
2595
|
+
* Contract for components used as {@link AXMessageRenderer.component}.
|
|
2596
|
+
* The message list passes `{ message }`; each view exposes `rendererState` for templates and tooling.
|
|
2597
|
+
*/
|
|
2598
|
+
interface AXMessageRendererComponent {
|
|
2599
|
+
readonly message: InputSignal<AXMessage>;
|
|
2600
|
+
readonly rendererState: Signal<AXMessageRendererState>;
|
|
2601
|
+
}
|
|
2602
|
+
/**
|
|
2603
|
+
* Contract for components used as {@link AXMessageRenderer.infoBarBanner}.
|
|
2604
|
+
* Conversation shell passes at least `{ message }`; renderers can pass additional inputs.
|
|
2605
|
+
*/
|
|
2606
|
+
interface AXMessageInfoBarBannerComponent {
|
|
2607
|
+
readonly message: InputSignal<AXMessage>;
|
|
2608
|
+
}
|
|
2565
2609
|
/**
|
|
2566
2610
|
* Message renderer registration
|
|
2567
2611
|
*/
|
|
@@ -2569,7 +2613,12 @@ interface AXMessageRenderer {
|
|
|
2569
2613
|
/** Unique type identifier */
|
|
2570
2614
|
type: string;
|
|
2571
2615
|
/** Angular component to render this message type */
|
|
2572
|
-
component: Type<
|
|
2616
|
+
component: Type<AXMessageRendererComponent>;
|
|
2617
|
+
/**
|
|
2618
|
+
* Optional component rendered as a dismissible banner under info-bar.
|
|
2619
|
+
* Useful for active/interactive message states (e.g. voice playback progress).
|
|
2620
|
+
*/
|
|
2621
|
+
infoBarBanner?: Type<AXMessageInfoBarBannerComponent>;
|
|
2573
2622
|
/** Function to determine if this renderer can handle a message */
|
|
2574
2623
|
canHandle: (message: AXMessage) => boolean;
|
|
2575
2624
|
/** Renderer capabilities */
|
|
@@ -2578,17 +2627,24 @@ interface AXMessageRenderer {
|
|
|
2578
2627
|
displayName?: string;
|
|
2579
2628
|
/** Icon name/class */
|
|
2580
2629
|
icon?: string;
|
|
2630
|
+
/**
|
|
2631
|
+
* Optional composer actions co-located with this message type (e.g. pickers that produce this message).
|
|
2632
|
+
* Registered with {@link AXComposerActionRegistry} when the renderer is registered.
|
|
2633
|
+
* Use `AXRegistryConfiguration.composerActions` for actions not tied to a single message renderer.
|
|
2634
|
+
*/
|
|
2635
|
+
composerActions?: AXComposerAction[];
|
|
2581
2636
|
}
|
|
2582
2637
|
/**
|
|
2583
2638
|
* Message Renderer Registry Service
|
|
2584
2639
|
*/
|
|
2585
2640
|
declare class AXMessageRendererRegistry {
|
|
2586
2641
|
private readonly _renderers;
|
|
2642
|
+
private readonly _composerActions;
|
|
2587
2643
|
constructor();
|
|
2588
2644
|
/** All registered renderers */
|
|
2589
|
-
readonly renderers:
|
|
2645
|
+
readonly renderers: Signal<AXMessageRenderer[]>;
|
|
2590
2646
|
/** Renderers sorted by priority (highest first) */
|
|
2591
|
-
readonly sortedRenderers:
|
|
2647
|
+
readonly sortedRenderers: Signal<AXMessageRenderer[]>;
|
|
2592
2648
|
/**
|
|
2593
2649
|
* Register a message renderer
|
|
2594
2650
|
*/
|
|
@@ -2677,9 +2733,8 @@ declare class AXConversationService {
|
|
|
2677
2733
|
private readonly _activeConversationId;
|
|
2678
2734
|
private readonly _loading;
|
|
2679
2735
|
private readonly _error;
|
|
2680
|
-
|
|
2681
|
-
private readonly
|
|
2682
|
-
private processingQueue;
|
|
2736
|
+
/** Emits when the active conversation changes, cancelling per-conversation subscriptions. */
|
|
2737
|
+
private readonly _conversationSwitch$;
|
|
2683
2738
|
private readonly _messageReceived$;
|
|
2684
2739
|
private readonly _messageUpdated$;
|
|
2685
2740
|
private readonly _messageDeleted$;
|
|
@@ -2853,7 +2908,7 @@ declare class AXConversationService {
|
|
|
2853
2908
|
* @param conversationId - Conversation ID
|
|
2854
2909
|
* @param metadata - Metadata to merge
|
|
2855
2910
|
*/
|
|
2856
|
-
updateConversationMetadata(conversationId: string, metadata:
|
|
2911
|
+
updateConversationMetadata(conversationId: string, metadata: AXConversationMetadata): Promise<void>;
|
|
2857
2912
|
/**
|
|
2858
2913
|
* Get conversation by ID
|
|
2859
2914
|
* @param conversationId - Conversation ID
|
|
@@ -2867,7 +2922,7 @@ declare class AXConversationService {
|
|
|
2867
2922
|
* @param metadata - Optional metadata (title, avatar, etc.)
|
|
2868
2923
|
* @returns Created conversation
|
|
2869
2924
|
*/
|
|
2870
|
-
createConversation(participantIds: string[], type:
|
|
2925
|
+
createConversation(participantIds: string[], type: AXConversationType, metadata?: AXConversationMetadata): Promise<AXConversation>;
|
|
2871
2926
|
/**
|
|
2872
2927
|
* Get available users for conversation creation
|
|
2873
2928
|
* @param query - Optional search query
|
|
@@ -3067,14 +3122,20 @@ interface AXComposerActionContext {
|
|
|
3067
3122
|
/** Conversation service for conversation operations */
|
|
3068
3123
|
conversationService?: AXConversationService;
|
|
3069
3124
|
/** Custom context data */
|
|
3070
|
-
custom?: Record<string,
|
|
3125
|
+
custom?: Record<string, unknown>;
|
|
3126
|
+
}
|
|
3127
|
+
/**
|
|
3128
|
+
* Contract for components used as {@link AXComposerAction.component}.
|
|
3129
|
+
* Composer shell passes at least `{ conversation, service }`.
|
|
3130
|
+
*/
|
|
3131
|
+
interface AXComposerActionComponent {
|
|
3132
|
+
readonly conversation: InputSignal<AXConversation>;
|
|
3133
|
+
readonly service?: InputSignal<AXComposerService | undefined>;
|
|
3071
3134
|
}
|
|
3072
3135
|
/**
|
|
3073
3136
|
* Composer action registration
|
|
3074
3137
|
*/
|
|
3075
|
-
interface AXComposerAction {
|
|
3076
|
-
/** Unique action identifier */
|
|
3077
|
-
id: string;
|
|
3138
|
+
interface AXComposerAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
3078
3139
|
/** Display label (for accessibility) */
|
|
3079
3140
|
label: string;
|
|
3080
3141
|
/** Icon name/class */
|
|
@@ -3083,8 +3144,6 @@ interface AXComposerAction {
|
|
|
3083
3144
|
position: 'left' | 'right';
|
|
3084
3145
|
/** Location: inline (show as button) or menu (show in dropdown menu) */
|
|
3085
3146
|
location?: 'inline' | 'menu';
|
|
3086
|
-
/** Display order priority (higher = earlier) */
|
|
3087
|
-
priority?: number;
|
|
3088
3147
|
/** Visibility condition */
|
|
3089
3148
|
visible: (context: AXComposerActionContext) => boolean;
|
|
3090
3149
|
/** Enabled condition */
|
|
@@ -3093,7 +3152,7 @@ interface AXComposerAction {
|
|
|
3093
3152
|
* Component to show when action is activated
|
|
3094
3153
|
* If provided, clicking the action will show this component in full-width mode
|
|
3095
3154
|
*/
|
|
3096
|
-
component?: Type<
|
|
3155
|
+
component?: Type<AXComposerActionComponent>;
|
|
3097
3156
|
/**
|
|
3098
3157
|
* Whether this action is toggleable (shows/hides component)
|
|
3099
3158
|
*/
|
|
@@ -3257,7 +3316,7 @@ declare class AXComposerService {
|
|
|
3257
3316
|
|
|
3258
3317
|
declare class AXConversationContainerComponent {
|
|
3259
3318
|
private readonly conversationService;
|
|
3260
|
-
protected readonly config: _acorex_components_conversation2.AXConversationConfig
|
|
3319
|
+
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
3261
3320
|
/** Custom CSS class */
|
|
3262
3321
|
readonly customClass: _angular_core.InputSignal<string>;
|
|
3263
3322
|
/** Loading state */
|
|
@@ -3303,6 +3362,8 @@ declare class AXInfoBarComponent {
|
|
|
3303
3362
|
readonly activeConversation: _angular_core.Signal<AXConversation>;
|
|
3304
3363
|
/** Active component from service */
|
|
3305
3364
|
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarActiveComponent>;
|
|
3365
|
+
/** Active banner from service */
|
|
3366
|
+
readonly activeBanner: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarActiveBanner>;
|
|
3306
3367
|
/** Members popover reference */
|
|
3307
3368
|
readonly membersPopoverRef: _angular_core.Signal<AXPopoverComponent>;
|
|
3308
3369
|
/** Members popover target element */
|
|
@@ -3334,9 +3395,13 @@ declare class AXInfoBarComponent {
|
|
|
3334
3395
|
/** Handle inline action click */
|
|
3335
3396
|
onInlineActionClick(actionId: string): Promise<void>;
|
|
3336
3397
|
/** Get inputs for dynamic component */
|
|
3337
|
-
getComponentInputs(): Record<string,
|
|
3398
|
+
getComponentInputs(): Record<string, unknown>;
|
|
3399
|
+
getInlineComponentInputs(): Record<string, unknown>;
|
|
3400
|
+
isActiveComponentFullWidth(): boolean;
|
|
3338
3401
|
/** Handle close component */
|
|
3339
3402
|
onCloseComponent(): void;
|
|
3403
|
+
getBannerInputs(): Record<string, unknown>;
|
|
3404
|
+
onCloseBanner(): void;
|
|
3340
3405
|
/** Handle menu item click */
|
|
3341
3406
|
onMenuItemClick(item: DropdownMenuItem): Promise<void>;
|
|
3342
3407
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarComponent, never>;
|
|
@@ -3354,6 +3419,16 @@ interface AXInfoBarActiveComponent {
|
|
|
3354
3419
|
/** Component inputs */
|
|
3355
3420
|
inputs?: Record<string, unknown>;
|
|
3356
3421
|
}
|
|
3422
|
+
interface AXInfoBarActiveBanner {
|
|
3423
|
+
/** Message that owns this banner */
|
|
3424
|
+
message: AXMessage;
|
|
3425
|
+
/** Banner component */
|
|
3426
|
+
component: Type<AXMessageInfoBarBannerComponent>;
|
|
3427
|
+
/** Additional component inputs (only keys that match declared `input()` on the banner) */
|
|
3428
|
+
inputs?: Record<string, unknown>;
|
|
3429
|
+
/** Callback invoked when the banner is dismissed (e.g. pause playback) */
|
|
3430
|
+
onClose?: () => void;
|
|
3431
|
+
}
|
|
3357
3432
|
/**
|
|
3358
3433
|
* Info Bar Service
|
|
3359
3434
|
* Manages info bar state and actions
|
|
@@ -3366,6 +3441,9 @@ declare class AXInfoBarService {
|
|
|
3366
3441
|
/** Active component being shown in info-bar */
|
|
3367
3442
|
private readonly _activeComponent;
|
|
3368
3443
|
readonly activeComponent: _angular_core.Signal<AXInfoBarActiveComponent>;
|
|
3444
|
+
/** Active banner shown under info-bar */
|
|
3445
|
+
private readonly _activeBanner;
|
|
3446
|
+
readonly activeBanner: _angular_core.Signal<AXInfoBarActiveBanner>;
|
|
3369
3447
|
/** Search query signal */
|
|
3370
3448
|
private readonly _searchQuery;
|
|
3371
3449
|
readonly searchQuery: _angular_core.Signal<string>;
|
|
@@ -3374,6 +3452,7 @@ declare class AXInfoBarService {
|
|
|
3374
3452
|
/** Current search result index */
|
|
3375
3453
|
private readonly _currentSearchIndex;
|
|
3376
3454
|
readonly currentSearchIndex: _angular_core.Signal<number>;
|
|
3455
|
+
constructor();
|
|
3377
3456
|
/**
|
|
3378
3457
|
* Get actions for the active conversation
|
|
3379
3458
|
*/
|
|
@@ -3398,6 +3477,19 @@ declare class AXInfoBarService {
|
|
|
3398
3477
|
* Hide the active component
|
|
3399
3478
|
*/
|
|
3400
3479
|
hideComponent(): void;
|
|
3480
|
+
/**
|
|
3481
|
+
* Show message-owned banner under info-bar if renderer provides one
|
|
3482
|
+
*/
|
|
3483
|
+
showMessageBanner(message: AXMessage, inputs?: Record<string, unknown>): void;
|
|
3484
|
+
/**
|
|
3485
|
+
* Update active banner inputs for a specific message
|
|
3486
|
+
*/
|
|
3487
|
+
updateMessageBannerInputs(messageId: string, inputs: Record<string, unknown>): void;
|
|
3488
|
+
/**
|
|
3489
|
+
* Hide active banner. If messageId is provided, hide only when it matches.
|
|
3490
|
+
*/
|
|
3491
|
+
hideMessageBanner(messageId?: string): void;
|
|
3492
|
+
isMessageBannerActive(messageId: string): boolean;
|
|
3401
3493
|
/**
|
|
3402
3494
|
* Toggle component visibility
|
|
3403
3495
|
*/
|
|
@@ -3422,232 +3514,11 @@ declare class AXInfoBarService {
|
|
|
3422
3514
|
* Clear search
|
|
3423
3515
|
*/
|
|
3424
3516
|
clearSearch(): void;
|
|
3517
|
+
private _extractOnClose;
|
|
3425
3518
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarService, never>;
|
|
3426
3519
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXInfoBarService>;
|
|
3427
3520
|
}
|
|
3428
3521
|
|
|
3429
|
-
declare class AXMessageListComponent implements OnDestroy {
|
|
3430
|
-
private readonly conversationService;
|
|
3431
|
-
private readonly messageListService;
|
|
3432
|
-
protected readonly config: _acorex_components_conversation2.AXConversationConfig;
|
|
3433
|
-
/** Custom avatar template for message list items */
|
|
3434
|
-
readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
|
|
3435
|
-
private readonly timeouts;
|
|
3436
|
-
private readonly replyCounts;
|
|
3437
|
-
private readonly forwardCounts;
|
|
3438
|
-
readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
|
|
3439
|
-
readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
|
|
3440
|
-
readonly reactionPopover: _angular_core.Signal<any>;
|
|
3441
|
-
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
3442
|
-
private get registry();
|
|
3443
|
-
/** Message list element reference */
|
|
3444
|
-
private readonly messageListRef;
|
|
3445
|
-
/** Messages container element reference */
|
|
3446
|
-
private readonly messagesContainerRef;
|
|
3447
|
-
/** Loading state - use service */
|
|
3448
|
-
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
3449
|
-
/** Loading more messages state - use service */
|
|
3450
|
-
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3451
|
-
/** Show scroll to bottom button - use service */
|
|
3452
|
-
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3453
|
-
/** Active conversation */
|
|
3454
|
-
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
3455
|
-
/** Messages */
|
|
3456
|
-
readonly messages: _angular_core.Signal<AXMessage[]>;
|
|
3457
|
-
/** Message action event */
|
|
3458
|
-
readonly messageAction: _angular_core.OutputEmitterRef<{
|
|
3459
|
-
message: AXMessage;
|
|
3460
|
-
action: string;
|
|
3461
|
-
}>;
|
|
3462
|
-
/** Current user from service */
|
|
3463
|
-
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
3464
|
-
/** Message grouped by date - use service */
|
|
3465
|
-
readonly messageGroups: _angular_core.Signal<{
|
|
3466
|
-
date: string;
|
|
3467
|
-
dateLabel: string;
|
|
3468
|
-
messages: AXMessage[];
|
|
3469
|
-
}[]>;
|
|
3470
|
-
constructor();
|
|
3471
|
-
private intersectionObserver?;
|
|
3472
|
-
/**
|
|
3473
|
-
* Setup intersection observer to mark messages as read when visible
|
|
3474
|
-
*/
|
|
3475
|
-
private setupIntersectionObserver;
|
|
3476
|
-
/**
|
|
3477
|
-
* Mark message as read
|
|
3478
|
-
*/
|
|
3479
|
-
private markMessageAsRead;
|
|
3480
|
-
/** Get message CSS classes */
|
|
3481
|
-
getMessageClasses(message: AXMessage): string;
|
|
3482
|
-
/** Get bubble CSS classes */
|
|
3483
|
-
getBubbleClasses(message: AXMessage): string;
|
|
3484
|
-
/** Check if message is from current user */
|
|
3485
|
-
isOwnMessage(message: AXMessage): boolean;
|
|
3486
|
-
/** Should show avatar */
|
|
3487
|
-
shouldShowAvatar(message: AXMessage): boolean;
|
|
3488
|
-
/** Should show sender name */
|
|
3489
|
-
shouldShowSenderName(message: AXMessage): boolean;
|
|
3490
|
-
/** Get sender name */
|
|
3491
|
-
getSenderName(message: AXMessage): string;
|
|
3492
|
-
/** Get sender avatar */
|
|
3493
|
-
getSenderAvatar(message: AXMessage): string | undefined;
|
|
3494
|
-
/** Get original sender name for forwarded messages */
|
|
3495
|
-
getOriginalSenderName(message: AXMessage): string;
|
|
3496
|
-
/** Get forwarded text with sender and conversation info */
|
|
3497
|
-
getForwardedText(message: AXMessage): string;
|
|
3498
|
-
/** Resolve renderer component for message */
|
|
3499
|
-
getRendererComponent(message: AXMessage): _angular_core.Type<any>;
|
|
3500
|
-
/** Provide inputs for the dynamic renderer */
|
|
3501
|
-
getRendererInputs(message: AXMessage): {
|
|
3502
|
-
message: AXMessage;
|
|
3503
|
-
};
|
|
3504
|
-
/** Get status icon */
|
|
3505
|
-
getStatusIcon(message: AXMessage): string;
|
|
3506
|
-
/** Get status icon CSS classes */
|
|
3507
|
-
getStatusIconClasses(message: AXMessage): string;
|
|
3508
|
-
/** Get status tooltip text */
|
|
3509
|
-
getStatusTooltip(message: AXMessage): string;
|
|
3510
|
-
/** Get first unread message ID */
|
|
3511
|
-
readonly firstUnreadMessageId: _angular_core.Signal<string>;
|
|
3512
|
-
/** Get grouped reactions */
|
|
3513
|
-
getGroupedReactions(message: AXMessage): Array<{
|
|
3514
|
-
emoji: string;
|
|
3515
|
-
count: number;
|
|
3516
|
-
userIds: string[];
|
|
3517
|
-
hasReacted: boolean;
|
|
3518
|
-
}>;
|
|
3519
|
-
/** Get reaction tooltip text */
|
|
3520
|
-
getReactionTooltip(reaction: {
|
|
3521
|
-
emoji: string;
|
|
3522
|
-
count: number;
|
|
3523
|
-
userIds: string[];
|
|
3524
|
-
hasReacted: boolean;
|
|
3525
|
-
}): string;
|
|
3526
|
-
/** Toggle reaction picker */
|
|
3527
|
-
toggleReactionPicker(messageId: string, event: MouseEvent): void;
|
|
3528
|
-
/** Close reaction picker */
|
|
3529
|
-
closeReactionPicker(): void;
|
|
3530
|
-
/** Check if current user has reacted with specific emoji */
|
|
3531
|
-
hasUserReacted(message: AXMessage, emoji: string): boolean;
|
|
3532
|
-
/** Check if current user has reacted with specific emoji by message ID */
|
|
3533
|
-
hasUserReactedById(messageId: string, emoji: string): boolean;
|
|
3534
|
-
/** Handle reaction click by message ID */
|
|
3535
|
-
onReactionClickById(messageId: string, emoji: string): void;
|
|
3536
|
-
/** Get message by ID */
|
|
3537
|
-
getMessageById(messageId: string): AXMessage | undefined;
|
|
3538
|
-
/** Load available reactions from API */
|
|
3539
|
-
private loadAvailableReactions;
|
|
3540
|
-
/** Get message actions from registry */
|
|
3541
|
-
getMessageActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
3542
|
-
/** Get initials from name */
|
|
3543
|
-
getInitials(name: string): string;
|
|
3544
|
-
/** Handle reaction click */
|
|
3545
|
-
onReactionClick(message: AXMessage, emoji: string): void;
|
|
3546
|
-
/** Handle message action */
|
|
3547
|
-
onMessageAction(message: AXMessage, action: any): Promise<void>;
|
|
3548
|
-
/** Handle scroll events */
|
|
3549
|
-
onScroll(event: Event): void;
|
|
3550
|
-
/** Handle infinite scroll threshold */
|
|
3551
|
-
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
3552
|
-
/** Load older messages - delegate to service */
|
|
3553
|
-
private loadOlderMessages;
|
|
3554
|
-
/** Check if user is near bottom of scroll */
|
|
3555
|
-
private isUserNearBottom;
|
|
3556
|
-
/** Scroll to bottom */
|
|
3557
|
-
scrollToBottom(smooth?: boolean): void;
|
|
3558
|
-
/** Scroll to specific message */
|
|
3559
|
-
scrollToMessage(messageId: string): void;
|
|
3560
|
-
/** Cleanup timeouts and observers on destroy */
|
|
3561
|
-
ngOnDestroy(): void;
|
|
3562
|
-
/** Get message preview text for reply */
|
|
3563
|
-
getMessagePreviewText(message: AXMessage): {
|
|
3564
|
-
value: string;
|
|
3565
|
-
type: string;
|
|
3566
|
-
icon: string;
|
|
3567
|
-
};
|
|
3568
|
-
/** Get ARIA label for message */
|
|
3569
|
-
getMessageAriaLabel(message: AXMessage): string;
|
|
3570
|
-
/** Get reply count for a message (fetches from API across all conversations) */
|
|
3571
|
-
getReplyCount(message: AXMessage): number;
|
|
3572
|
-
/** Get forward count for a message (fetches from API across all conversations) */
|
|
3573
|
-
getForwardCount(message: AXMessage): number;
|
|
3574
|
-
/**
|
|
3575
|
-
* Refresh count for a specific message from API
|
|
3576
|
-
* This is called when a new reply or forward is detected globally
|
|
3577
|
-
*/
|
|
3578
|
-
private refreshCount;
|
|
3579
|
-
/** Show thread view for a message */
|
|
3580
|
-
showThread(message: AXMessage): void;
|
|
3581
|
-
/** Handle context menu opening for messages */
|
|
3582
|
-
handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
|
|
3583
|
-
/** Handle context menu item click for messages */
|
|
3584
|
-
handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXMessage): void;
|
|
3585
|
-
/**
|
|
3586
|
-
* TrackBy function for message groups
|
|
3587
|
-
* Tracks by date only to prevent re-rendering when messages are added
|
|
3588
|
-
*/
|
|
3589
|
-
trackMessageGroup(index: number, group: {
|
|
3590
|
-
date: string;
|
|
3591
|
-
messages: AXMessage[];
|
|
3592
|
-
}): string;
|
|
3593
|
-
/**
|
|
3594
|
-
* TrackBy function for messages
|
|
3595
|
-
* Tracks by ID only to prevent unnecessary re-renders
|
|
3596
|
-
*/
|
|
3597
|
-
trackMessage(index: number, message: AXMessage): string;
|
|
3598
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListComponent, never>;
|
|
3599
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, { "avatarTemplate": { "alias": "avatarTemplate"; "required": false; "isSignal": true; }; }, { "messageAction": "messageAction"; }, never, never, true, never>;
|
|
3600
|
-
}
|
|
3601
|
-
interface AXMessageAvatarTemplateContext {
|
|
3602
|
-
$implicit: AXMessage;
|
|
3603
|
-
size: number;
|
|
3604
|
-
senderName: string;
|
|
3605
|
-
senderAvatar?: string;
|
|
3606
|
-
}
|
|
3607
|
-
|
|
3608
|
-
declare class AXMessageListService {
|
|
3609
|
-
private readonly conversationService;
|
|
3610
|
-
private readonly composerService;
|
|
3611
|
-
private readonly config;
|
|
3612
|
-
private get registry();
|
|
3613
|
-
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
3614
|
-
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
3615
|
-
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
3616
|
-
/** Loading state */
|
|
3617
|
-
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
3618
|
-
/** Loading more messages state */
|
|
3619
|
-
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3620
|
-
/** Show scroll to bottom button */
|
|
3621
|
-
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3622
|
-
/** Scroll requests counter */
|
|
3623
|
-
readonly scrollRequests: _angular_core.WritableSignal<number>;
|
|
3624
|
-
/** Current page for pagination */
|
|
3625
|
-
private readonly currentPage;
|
|
3626
|
-
/** Has more messages to load */
|
|
3627
|
-
private readonly hasMoreMessages;
|
|
3628
|
-
/** Message grouped by date */
|
|
3629
|
-
readonly messageGroups: _angular_core.Signal<{
|
|
3630
|
-
date: string;
|
|
3631
|
-
dateLabel: string;
|
|
3632
|
-
messages: AXMessage[];
|
|
3633
|
-
}[]>;
|
|
3634
|
-
/**
|
|
3635
|
-
* Load more messages (pagination)
|
|
3636
|
-
*/
|
|
3637
|
-
loadMoreMessages(): Promise<void>;
|
|
3638
|
-
/**
|
|
3639
|
-
* Reset pagination (call when conversation changes)
|
|
3640
|
-
*/
|
|
3641
|
-
resetPagination(): void;
|
|
3642
|
-
getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
3643
|
-
executeAction(message: AXMessage, actionId: string): Promise<void>;
|
|
3644
|
-
reactToMessage(messageId: string, emoji: string): Promise<void>;
|
|
3645
|
-
/** Request message list to scroll to bottom */
|
|
3646
|
-
requestScrollToBottom(): void;
|
|
3647
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListService, never>;
|
|
3648
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
|
|
3649
|
-
}
|
|
3650
|
-
|
|
3651
3522
|
/**
|
|
3652
3523
|
* Conversation Store Service
|
|
3653
3524
|
* Unified signal-based store for conversations and messages
|
|
@@ -3952,6 +3823,7 @@ interface FilePreview {
|
|
|
3952
3823
|
}
|
|
3953
3824
|
declare class AXFileUploadService {
|
|
3954
3825
|
private readonly config;
|
|
3826
|
+
private readonly platformId;
|
|
3955
3827
|
private uploadProgress$;
|
|
3956
3828
|
/**
|
|
3957
3829
|
* Get upload progress observable
|
|
@@ -4004,80 +3876,301 @@ declare class AXFileUploadService {
|
|
|
4004
3876
|
/**
|
|
4005
3877
|
* Validate file type against conversation config
|
|
4006
3878
|
*/
|
|
4007
|
-
isFileTypeAllowed(file: File): boolean;
|
|
3879
|
+
isFileTypeAllowed(file: File): boolean;
|
|
3880
|
+
/**
|
|
3881
|
+
* Validate file size against conversation config
|
|
3882
|
+
*/
|
|
3883
|
+
isFileSizeAllowed(file: File): boolean;
|
|
3884
|
+
/**
|
|
3885
|
+
* Validate a set of files using conversation config
|
|
3886
|
+
*/
|
|
3887
|
+
validateFilesWithConfig(files: File[]): {
|
|
3888
|
+
accepted: File[];
|
|
3889
|
+
rejected: {
|
|
3890
|
+
file: File;
|
|
3891
|
+
reason: string;
|
|
3892
|
+
}[];
|
|
3893
|
+
};
|
|
3894
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
|
|
3895
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
|
|
3896
|
+
}
|
|
3897
|
+
|
|
3898
|
+
declare class AXForwardMessageDialogComponent implements OnInit {
|
|
3899
|
+
private readonly toastService;
|
|
3900
|
+
/**
|
|
3901
|
+
* Set by {@link AXPopupComponent} when opened via {@link AXPopupService} so the shell title can update.
|
|
3902
|
+
*/
|
|
3903
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
3904
|
+
conversationService: AXConversationService;
|
|
3905
|
+
message: AXMessage;
|
|
3906
|
+
readonly onClosed: EventEmitter<AXComponentCloseEvent>;
|
|
3907
|
+
readonly allConversations: _angular_core.WritableSignal<AXConversation[]>;
|
|
3908
|
+
readonly forwardSearchQuery: _angular_core.WritableSignal<string>;
|
|
3909
|
+
readonly selectedConversationIds: _angular_core.WritableSignal<string[]>;
|
|
3910
|
+
readonly forwardListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
3911
|
+
readonly forwardList: _angular_core.Signal<AXListComponent>;
|
|
3912
|
+
readonly forwardListDataSource: AXDataSource<unknown>;
|
|
3913
|
+
readonly canForward: _angular_core.Signal<boolean>;
|
|
3914
|
+
private readonly _syncPopupTitleEffect;
|
|
3915
|
+
ngOnInit(): void;
|
|
3916
|
+
onForwardSearchChange(value: string): void;
|
|
3917
|
+
conversationFromItem(item: unknown): AXConversation | null;
|
|
3918
|
+
isSelected(conversationId: string): boolean;
|
|
3919
|
+
getInitials(name: string): string;
|
|
3920
|
+
private getFilteredConversationsForForward;
|
|
3921
|
+
onCancel(): void;
|
|
3922
|
+
onForward(): Promise<void>;
|
|
3923
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXForwardMessageDialogComponent, never>;
|
|
3924
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3925
|
+
}
|
|
3926
|
+
|
|
3927
|
+
/** Default message list surface when no conversation is selected and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3928
|
+
declare class AXMessageListNoActiveDefaultComponent {
|
|
3929
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListNoActiveDefaultComponent, never>;
|
|
3930
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListNoActiveDefaultComponent, "ax-conversation-message-list-no-active-default", never, {}, {}, never, never, true, never>;
|
|
3931
|
+
}
|
|
3932
|
+
|
|
3933
|
+
declare class AXMessageListComponent implements OnDestroy {
|
|
3934
|
+
private readonly conversationService;
|
|
3935
|
+
private readonly messageListService;
|
|
3936
|
+
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
3937
|
+
/**
|
|
3938
|
+
* Background for the message list scroll area from config, or the built-in soft gradient when unset/empty.
|
|
3939
|
+
* Set `messageListBackground` to `transparent` or `none` for a flat look.
|
|
3940
|
+
*/
|
|
3941
|
+
messageListBackgroundStyle(): string;
|
|
3942
|
+
resolvedEmptyStateComponent(): Type<AXMessageListEmptyComponent>;
|
|
3943
|
+
/** Fallback when no conversation is active and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3944
|
+
protected readonly noActiveFallbackComponent: typeof AXMessageListNoActiveDefaultComponent;
|
|
3945
|
+
/** Custom avatar template for message list items */
|
|
3946
|
+
readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
|
|
3947
|
+
private readonly timeouts;
|
|
3948
|
+
private readonly replyCounts;
|
|
3949
|
+
private readonly forwardCounts;
|
|
3950
|
+
readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
|
|
3951
|
+
readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
|
|
3952
|
+
readonly reactionPopover: _angular_core.Signal<any>;
|
|
3953
|
+
/** Message id whose context menu is open (for active row styling). */
|
|
3954
|
+
readonly contextMenuMessageId: _angular_core.WritableSignal<string>;
|
|
3955
|
+
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
3956
|
+
private get registry();
|
|
3957
|
+
/** Message list element reference */
|
|
3958
|
+
private readonly messageListRef;
|
|
3959
|
+
/** Messages container element reference */
|
|
3960
|
+
private readonly messagesContainerRef;
|
|
3961
|
+
/** Loading state - use service */
|
|
3962
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
3963
|
+
/** Loading more messages state - use service */
|
|
3964
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3965
|
+
/** Show scroll to bottom button - use service */
|
|
3966
|
+
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3967
|
+
/** Active conversation */
|
|
3968
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
3969
|
+
/** Messages */
|
|
3970
|
+
readonly messages: _angular_core.Signal<AXMessage[]>;
|
|
3971
|
+
/** Message action event */
|
|
3972
|
+
readonly messageAction: _angular_core.OutputEmitterRef<{
|
|
3973
|
+
message: AXMessage;
|
|
3974
|
+
action: string;
|
|
3975
|
+
}>;
|
|
3976
|
+
/** Current user from service */
|
|
3977
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
3978
|
+
/** Message grouped by date - use service */
|
|
3979
|
+
readonly messageGroups: _angular_core.Signal<{
|
|
3980
|
+
date: string;
|
|
3981
|
+
dateLabel: string;
|
|
3982
|
+
messages: AXMessage[];
|
|
3983
|
+
}[]>;
|
|
3984
|
+
constructor();
|
|
3985
|
+
private intersectionObserver?;
|
|
3986
|
+
/**
|
|
3987
|
+
* Setup intersection observer to mark messages as read when visible
|
|
3988
|
+
*/
|
|
3989
|
+
private setupIntersectionObserver;
|
|
3990
|
+
/**
|
|
3991
|
+
* Mark message as read
|
|
3992
|
+
*/
|
|
3993
|
+
private markMessageAsRead;
|
|
3994
|
+
/** Get message CSS classes */
|
|
3995
|
+
getMessageClasses(message: AXMessage): string;
|
|
3996
|
+
/** Get bubble CSS classes */
|
|
3997
|
+
getBubbleClasses(message: AXMessage): string;
|
|
3998
|
+
/** Check if message is from current user */
|
|
3999
|
+
isOwnMessage(message: AXMessage): boolean;
|
|
4000
|
+
/** Should show avatar */
|
|
4001
|
+
shouldShowAvatar(message: AXMessage): boolean;
|
|
4002
|
+
/** Should show sender name */
|
|
4003
|
+
shouldShowSenderName(message: AXMessage): boolean;
|
|
4004
|
+
/** Get sender name */
|
|
4005
|
+
getSenderName(message: AXMessage): string;
|
|
4006
|
+
/** Get sender avatar */
|
|
4007
|
+
getSenderAvatar(message: AXMessage): string | undefined;
|
|
4008
|
+
/** Font Awesome icon for sender when no avatar image (participant or conversation icon). */
|
|
4009
|
+
getSenderAvatarIcon(message: AXMessage): string | undefined;
|
|
4010
|
+
/** Get original sender name for forwarded messages */
|
|
4011
|
+
getOriginalSenderName(message: AXMessage): string;
|
|
4012
|
+
/** Get forwarded text with sender and conversation info */
|
|
4013
|
+
getForwardedText(message: AXMessage): string;
|
|
4014
|
+
/** Resolve renderer component for message */
|
|
4015
|
+
getRendererComponent(message: AXMessage): Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
4016
|
+
/** Provide inputs for the dynamic renderer */
|
|
4017
|
+
getRendererInputs(message: AXMessage): {
|
|
4018
|
+
message: AXMessage;
|
|
4019
|
+
};
|
|
4020
|
+
/** Get status icon */
|
|
4021
|
+
getStatusIcon(message: AXMessage): string;
|
|
4022
|
+
/** Get status icon CSS classes */
|
|
4023
|
+
getStatusIconClasses(message: AXMessage): string;
|
|
4024
|
+
/** Get status tooltip text */
|
|
4025
|
+
getStatusTooltip(message: AXMessage): string;
|
|
4026
|
+
/** Get first unread message ID */
|
|
4027
|
+
readonly firstUnreadMessageId: _angular_core.Signal<string>;
|
|
4028
|
+
/** Get grouped reactions */
|
|
4029
|
+
getGroupedReactions(message: AXMessage): Array<{
|
|
4030
|
+
emoji: string;
|
|
4031
|
+
count: number;
|
|
4032
|
+
userIds: string[];
|
|
4033
|
+
hasReacted: boolean;
|
|
4034
|
+
}>;
|
|
4035
|
+
/** Get reaction tooltip text */
|
|
4036
|
+
getReactionTooltip(reaction: {
|
|
4037
|
+
emoji: string;
|
|
4038
|
+
count: number;
|
|
4039
|
+
userIds: string[];
|
|
4040
|
+
hasReacted: boolean;
|
|
4041
|
+
}): string;
|
|
4042
|
+
/** Toggle reaction picker */
|
|
4043
|
+
toggleReactionPicker(messageId: string, event: MouseEvent): void;
|
|
4044
|
+
/** Close reaction picker */
|
|
4045
|
+
closeReactionPicker(): void;
|
|
4046
|
+
/** Check if current user has reacted with specific emoji */
|
|
4047
|
+
hasUserReacted(message: AXMessage, emoji: string): boolean;
|
|
4048
|
+
/** Check if current user has reacted with specific emoji by message ID */
|
|
4049
|
+
hasUserReactedById(messageId: string, emoji: string): boolean;
|
|
4050
|
+
/** Handle reaction click by message ID */
|
|
4051
|
+
onReactionClickById(messageId: string, emoji: string): void;
|
|
4052
|
+
/** Get message by ID */
|
|
4053
|
+
getMessageById(messageId: string): AXMessage | undefined;
|
|
4054
|
+
/** Load available reactions from API */
|
|
4055
|
+
private loadAvailableReactions;
|
|
4056
|
+
/** Get message actions from registry */
|
|
4057
|
+
getMessageActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
4058
|
+
/** Get initials from name */
|
|
4059
|
+
getInitials(name: string): string;
|
|
4060
|
+
/** Handle reaction click */
|
|
4061
|
+
onReactionClick(message: AXMessage, emoji: string): void;
|
|
4062
|
+
/** Handle message action */
|
|
4063
|
+
onMessageAction(message: AXMessage, action: any): Promise<void>;
|
|
4064
|
+
/** Handle scroll events */
|
|
4065
|
+
onScroll(event: Event): void;
|
|
4066
|
+
/** Handle infinite scroll threshold */
|
|
4067
|
+
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4068
|
+
/** Load older messages - delegate to service */
|
|
4069
|
+
private loadOlderMessages;
|
|
4070
|
+
/** Check if user is near bottom of scroll */
|
|
4071
|
+
private isUserNearBottom;
|
|
4072
|
+
/**
|
|
4073
|
+
* After switching chats, the template may still show loading (no #messagesContainer).
|
|
4074
|
+
* Poll with rAF until the feed exists, then scroll after double rAF so scrollHeight is stable.
|
|
4075
|
+
*/
|
|
4076
|
+
private scrollToBottomWhenContainerReady;
|
|
4077
|
+
/** Scroll to bottom */
|
|
4078
|
+
scrollToBottom(smooth?: boolean): void;
|
|
4079
|
+
/** Scroll to specific message */
|
|
4080
|
+
scrollToMessage(messageId: string): void;
|
|
4081
|
+
/** Cleanup timeouts and observers on destroy */
|
|
4082
|
+
ngOnDestroy(): void;
|
|
4083
|
+
/** Get message preview text for reply */
|
|
4084
|
+
getMessagePreviewText(message: AXMessage): {
|
|
4085
|
+
value: string;
|
|
4086
|
+
type: string;
|
|
4087
|
+
icon: string;
|
|
4088
|
+
};
|
|
4089
|
+
/** Get ARIA label for message */
|
|
4090
|
+
getMessageAriaLabel(message: AXMessage): string;
|
|
4091
|
+
/** Get reply count for a message (fetches from API across all conversations) */
|
|
4092
|
+
getReplyCount(message: AXMessage): number;
|
|
4093
|
+
/** Get forward count for a message (fetches from API across all conversations) */
|
|
4094
|
+
getForwardCount(message: AXMessage): number;
|
|
4095
|
+
/**
|
|
4096
|
+
* Refresh count for a specific message from API
|
|
4097
|
+
* This is called when a new reply or forward is detected globally
|
|
4098
|
+
*/
|
|
4099
|
+
private refreshCount;
|
|
4100
|
+
/** Handle context menu opening for messages */
|
|
4101
|
+
handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
|
|
4102
|
+
/** Handle context menu item click for messages */
|
|
4103
|
+
handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent, message: AXMessage): void;
|
|
4008
4104
|
/**
|
|
4009
|
-
*
|
|
4105
|
+
* TrackBy function for message groups
|
|
4106
|
+
* Tracks by date only to prevent re-rendering when messages are added
|
|
4010
4107
|
*/
|
|
4011
|
-
|
|
4108
|
+
trackMessageGroup(index: number, group: {
|
|
4109
|
+
date: string;
|
|
4110
|
+
messages: AXMessage[];
|
|
4111
|
+
}): string;
|
|
4012
4112
|
/**
|
|
4013
|
-
*
|
|
4113
|
+
* TrackBy function for messages
|
|
4114
|
+
* Tracks by ID only to prevent unnecessary re-renders
|
|
4014
4115
|
*/
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
|
|
4018
|
-
file: File;
|
|
4019
|
-
reason: string;
|
|
4020
|
-
}[];
|
|
4021
|
-
};
|
|
4022
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
|
|
4023
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
|
|
4116
|
+
trackMessage(index: number, message: AXMessage): string;
|
|
4117
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListComponent, never>;
|
|
4118
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, { "avatarTemplate": { "alias": "avatarTemplate"; "required": false; "isSignal": true; }; }, { "messageAction": "messageAction"; }, never, ["ax-conversation-message-list-empty, [ax-conversation-message-list-empty]", "ax-conversation-message-list-no-active, [ax-conversation-message-list-no-active]"], true, never>;
|
|
4024
4119
|
}
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
|
|
4032
|
-
message: AXMessage;
|
|
4033
|
-
/** Close event emitter for popup */
|
|
4034
|
-
readonly onClosed: EventEmitter<AXComponentCloseEvent>;
|
|
4035
|
-
/** Available conversations */
|
|
4036
|
-
readonly availableConversations: _angular_core.WritableSignal<AXConversation[]>;
|
|
4037
|
-
/** Selected conversation IDs */
|
|
4038
|
-
readonly selectedConversationIds: _angular_core.WritableSignal<string[]>;
|
|
4039
|
-
/** Can forward message */
|
|
4040
|
-
readonly canForward: _angular_core.Signal<boolean>;
|
|
4041
|
-
ngOnInit(): Promise<void>;
|
|
4042
|
-
/** Handle cancel */
|
|
4043
|
-
onCancel(): void;
|
|
4044
|
-
/** Handle forward */
|
|
4045
|
-
onForward(): Promise<void>;
|
|
4046
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXForwardMessageDialogComponent, never>;
|
|
4047
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, {}, {}, never, never, true, never>;
|
|
4120
|
+
interface AXMessageAvatarTemplateContext {
|
|
4121
|
+
$implicit: AXMessage;
|
|
4122
|
+
size: number;
|
|
4123
|
+
senderName: string;
|
|
4124
|
+
senderAvatar?: string;
|
|
4125
|
+
/** Font Awesome class string when there is no `senderAvatar` image. */
|
|
4126
|
+
senderIcon?: string;
|
|
4048
4127
|
}
|
|
4049
4128
|
|
|
4050
|
-
declare class
|
|
4051
|
-
|
|
4052
|
-
private readonly
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
readonly
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
/**
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4129
|
+
declare class AXMessageListService {
|
|
4130
|
+
private readonly conversationService;
|
|
4131
|
+
private readonly composerService;
|
|
4132
|
+
private readonly config;
|
|
4133
|
+
private get registry();
|
|
4134
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
4135
|
+
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
4136
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
4137
|
+
/** Loading state */
|
|
4138
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
4139
|
+
/** Loading more messages state */
|
|
4140
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4141
|
+
/** Show scroll to bottom button */
|
|
4142
|
+
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
4143
|
+
/** Scroll requests counter */
|
|
4144
|
+
readonly scrollRequests: _angular_core.WritableSignal<number>;
|
|
4145
|
+
/** Current page for pagination */
|
|
4146
|
+
private readonly currentPage;
|
|
4147
|
+
/** Has more messages to load */
|
|
4148
|
+
private readonly hasMoreMessages;
|
|
4149
|
+
/** Message grouped by date */
|
|
4150
|
+
readonly messageGroups: _angular_core.Signal<{
|
|
4151
|
+
date: string;
|
|
4152
|
+
dateLabel: string;
|
|
4153
|
+
messages: AXMessage[];
|
|
4154
|
+
}[]>;
|
|
4155
|
+
/**
|
|
4156
|
+
* Load more messages (pagination)
|
|
4157
|
+
*/
|
|
4158
|
+
loadMoreMessages(): Promise<void>;
|
|
4159
|
+
/**
|
|
4160
|
+
* Reset pagination (call when conversation changes)
|
|
4161
|
+
*/
|
|
4162
|
+
resetPagination(): void;
|
|
4163
|
+
getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
4164
|
+
executeAction(message: AXMessage, actionId: string): Promise<void>;
|
|
4165
|
+
reactToMessage(messageId: string, emoji: string): Promise<void>;
|
|
4166
|
+
/** Request message list to scroll to bottom */
|
|
4167
|
+
requestScrollToBottom(): void;
|
|
4168
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListService, never>;
|
|
4169
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageListService>;
|
|
4076
4170
|
}
|
|
4077
4171
|
|
|
4078
4172
|
declare class AXSidebarService {
|
|
4079
4173
|
private readonly conversationService;
|
|
4080
|
-
private readonly popupService;
|
|
4081
4174
|
private readonly config;
|
|
4082
4175
|
private get registry();
|
|
4083
4176
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
@@ -4098,7 +4191,6 @@ declare class AXSidebarService {
|
|
|
4098
4191
|
setActiveTab(tabId: string): void;
|
|
4099
4192
|
selectConversation(conversation: AXConversation): void;
|
|
4100
4193
|
getBadgeValue(tabId: string): string | undefined;
|
|
4101
|
-
openNewConversationDialog(): Promise<AXConversation | null>;
|
|
4102
4194
|
/**
|
|
4103
4195
|
* Load more conversations (pagination)
|
|
4104
4196
|
*/
|
|
@@ -4117,7 +4209,9 @@ declare class AXSidebarService {
|
|
|
4117
4209
|
|
|
4118
4210
|
declare class AXSidebarComponent implements OnDestroy {
|
|
4119
4211
|
readonly sidebar: AXSidebarService;
|
|
4120
|
-
protected readonly config: _acorex_components_conversation2.AXConversationConfig
|
|
4212
|
+
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
4213
|
+
private readonly conversationService;
|
|
4214
|
+
private readonly popupService;
|
|
4121
4215
|
/** Conversation selected event */
|
|
4122
4216
|
readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
|
|
4123
4217
|
/** Search debouncing */
|
|
@@ -4140,14 +4234,55 @@ declare class AXSidebarComponent implements OnDestroy {
|
|
|
4140
4234
|
selectConversation(conversation: AXConversation): void;
|
|
4141
4235
|
/** Get badge value for tab */
|
|
4142
4236
|
getBadgeValue(tabId: string): string | undefined;
|
|
4143
|
-
|
|
4144
|
-
onNewConversation(): Promise<void>;
|
|
4237
|
+
openNewConversationPopup(): Promise<void>;
|
|
4145
4238
|
/** Handle infinite scroll threshold - delegate to service */
|
|
4146
4239
|
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4147
4240
|
/** Cleanup on destroy */
|
|
4148
4241
|
ngOnDestroy(): void;
|
|
4149
4242
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSidebarComponent, never>;
|
|
4150
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never,
|
|
4243
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never, ["ax-suffix"], true, never>;
|
|
4244
|
+
}
|
|
4245
|
+
|
|
4246
|
+
type NewConversationWizardStep = 'selectUsers' | 'groupDetails';
|
|
4247
|
+
declare class AXNewConversationDialogComponent extends AXBasePageComponent {
|
|
4248
|
+
conversationService: AXConversationService;
|
|
4249
|
+
private readonly toastService;
|
|
4250
|
+
/**
|
|
4251
|
+
* Injected by {@link AXPopupComponent} when this dialog is opened via {@link AXPopupService}.
|
|
4252
|
+
* Required for `setTitle` / dynamic header — {@link AXBasePageComponent#setTitle} is otherwise unset.
|
|
4253
|
+
*/
|
|
4254
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4255
|
+
readonly availableUsers: _angular_core.WritableSignal<AXParticipant[]>;
|
|
4256
|
+
readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
|
|
4257
|
+
readonly groupTitle: _angular_core.WritableSignal<string>;
|
|
4258
|
+
readonly groupAvatar: _angular_core.WritableSignal<string>;
|
|
4259
|
+
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4260
|
+
/** For 2+ users: step 1 = pick users, step 2 = title + avatar. */
|
|
4261
|
+
readonly wizardStep: _angular_core.WritableSignal<NewConversationWizardStep>;
|
|
4262
|
+
readonly showUserPickerStep: _angular_core.Signal<boolean>;
|
|
4263
|
+
readonly showGroupDetailsStep: _angular_core.Signal<boolean>;
|
|
4264
|
+
readonly showNextButton: _angular_core.Signal<boolean>;
|
|
4265
|
+
readonly showGroupBackButton: _angular_core.Signal<boolean>;
|
|
4266
|
+
readonly showCreateButton: _angular_core.Signal<boolean>;
|
|
4267
|
+
readonly canGoNextToGroupDetails: _angular_core.Signal<boolean>;
|
|
4268
|
+
readonly canCreate: _angular_core.Signal<boolean>;
|
|
4269
|
+
private readonly _resetWizardWhenSingleEffect;
|
|
4270
|
+
private readonly _syncPopupTitleEffect;
|
|
4271
|
+
readonly usersListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
4272
|
+
readonly usersList: _angular_core.Signal<AXListComponent>;
|
|
4273
|
+
readonly usersListDataSource: AXDataSource<unknown>;
|
|
4274
|
+
onCancel(): void;
|
|
4275
|
+
onSelectedUsersChange(ids: string[]): void;
|
|
4276
|
+
onNextToGroupDetails(): void;
|
|
4277
|
+
onBackFromGroupDetails(): void;
|
|
4278
|
+
onSearchChange(value: string): void;
|
|
4279
|
+
isUserSelected(id: string): boolean;
|
|
4280
|
+
userFromItem(item: unknown): AXParticipant | null;
|
|
4281
|
+
getInitials(name: string): string;
|
|
4282
|
+
private filteredUsers;
|
|
4283
|
+
onCreateConversation(): Promise<void>;
|
|
4284
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXNewConversationDialogComponent, never>;
|
|
4285
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXNewConversationDialogComponent, "ax-new-conversation-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4151
4286
|
}
|
|
4152
4287
|
|
|
4153
4288
|
declare class AXInfiniteScrollDirective {
|
|
@@ -4205,12 +4340,6 @@ interface AXConversationConfig {
|
|
|
4205
4340
|
maxSidebarWidth?: number;
|
|
4206
4341
|
/** Default sidebar width in pixels */
|
|
4207
4342
|
defaultSidebarWidth?: number;
|
|
4208
|
-
/** Virtual scroll item size in pixels */
|
|
4209
|
-
virtualScrollItemSize?: number;
|
|
4210
|
-
/** Virtual scroll minimum buffer in pixels */
|
|
4211
|
-
virtualScrollMinBuffer?: number;
|
|
4212
|
-
/** Virtual scroll maximum buffer in pixels */
|
|
4213
|
-
virtualScrollMaxBuffer?: number;
|
|
4214
4343
|
/** Filter cache size */
|
|
4215
4344
|
filterCacheSize?: number;
|
|
4216
4345
|
/** Maximum file size in bytes */
|
|
@@ -4223,6 +4352,12 @@ interface AXConversationConfig {
|
|
|
4223
4352
|
minMessageLength?: number;
|
|
4224
4353
|
/** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
|
|
4225
4354
|
messageReadThreshold?: number;
|
|
4355
|
+
/**
|
|
4356
|
+
* CSS `background` for the message list (`ax-conversation-message-list` area, all states: loading, empty, messages).
|
|
4357
|
+
* Use full shorthand, or a bare `https://...` / `/path/to.png` (wrapped as `url(...)` with `center/cover`).
|
|
4358
|
+
* Empty string = library default soft gradient. `transparent` or `none` = flat background.
|
|
4359
|
+
*/
|
|
4360
|
+
messageListBackground?: string;
|
|
4226
4361
|
}
|
|
4227
4362
|
|
|
4228
4363
|
/**
|
|
@@ -4252,7 +4387,7 @@ declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>):
|
|
|
4252
4387
|
* Configuration token for conversation component
|
|
4253
4388
|
* Uses centralized defaults from AX_DEFAULT_CONVERSATION_CONFIG
|
|
4254
4389
|
*/
|
|
4255
|
-
declare const CONVERSATION_CONFIG: InjectionToken<AXConversationConfig
|
|
4390
|
+
declare const CONVERSATION_CONFIG: InjectionToken<Required<AXConversationConfig>>;
|
|
4256
4391
|
/**
|
|
4257
4392
|
* Token for configuring AXErrorHandlerService
|
|
4258
4393
|
*/
|
|
@@ -4266,7 +4401,7 @@ declare const ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXErrorHandlerConfig>
|
|
|
4266
4401
|
/**
|
|
4267
4402
|
* Additional message renderers configuration
|
|
4268
4403
|
* Provide this token to add custom message renderers in addition to built-in ones
|
|
4269
|
-
* Note: Built-in renderers (text,
|
|
4404
|
+
* Note: Built-in renderers (text, system, fallback) are registered by default; other types are provided via plugins/constants.
|
|
4270
4405
|
*/
|
|
4271
4406
|
declare const DEFAULT_MESSAGE_RENDERERS: InjectionToken<AXMessageRenderer[]>;
|
|
4272
4407
|
/**
|
|
@@ -4303,7 +4438,10 @@ declare const DEFAULT_CONVERSATION_ITEM_ACTIONS: InjectionToken<AXConversationIt
|
|
|
4303
4438
|
* Registry configuration interface
|
|
4304
4439
|
*/
|
|
4305
4440
|
interface AXRegistryConfiguration {
|
|
4306
|
-
/**
|
|
4441
|
+
/**
|
|
4442
|
+
* Additional message renderers to register (built-in renderers are automatic).
|
|
4443
|
+
* Each {@link AXMessageRenderer} may include optional `composerActions` for co-located send UX.
|
|
4444
|
+
*/
|
|
4307
4445
|
messageRenderers?: AXMessageRenderer[];
|
|
4308
4446
|
/** Message actions to register by default */
|
|
4309
4447
|
messageActions?: AXMessageAction[];
|
|
@@ -4324,7 +4462,116 @@ interface AXRegistryConfiguration {
|
|
|
4324
4462
|
*/
|
|
4325
4463
|
declare const REGISTRY_CONFIG: InjectionToken<AXRegistryConfiguration>;
|
|
4326
4464
|
|
|
4327
|
-
|
|
4465
|
+
/**
|
|
4466
|
+
* IndexedDB Storage Wrapper
|
|
4467
|
+
* Provides persistent storage for conversation data
|
|
4468
|
+
*/
|
|
4469
|
+
|
|
4470
|
+
declare const AXConversationIndexedDbStores: {
|
|
4471
|
+
readonly PARTICIPANTS: "participants";
|
|
4472
|
+
readonly CONVERSATIONS: "conversations";
|
|
4473
|
+
readonly MESSAGES: "messages";
|
|
4474
|
+
readonly SETTINGS: "settings";
|
|
4475
|
+
};
|
|
4476
|
+
declare class AXConversationIndexedDbStorage {
|
|
4477
|
+
private db;
|
|
4478
|
+
private initPromise;
|
|
4479
|
+
/**
|
|
4480
|
+
* Initialize IndexedDB
|
|
4481
|
+
*/
|
|
4482
|
+
init(): Promise<void>;
|
|
4483
|
+
/**
|
|
4484
|
+
* Get a value from a store
|
|
4485
|
+
*/
|
|
4486
|
+
get<T>(storeName: string, key: string): Promise<T | undefined>;
|
|
4487
|
+
/**
|
|
4488
|
+
* Get all values from a store
|
|
4489
|
+
*/
|
|
4490
|
+
getAll<T>(storeName: string): Promise<T[]>;
|
|
4491
|
+
/**
|
|
4492
|
+
* Get values by index
|
|
4493
|
+
*/
|
|
4494
|
+
getAllByIndex<T>(storeName: string, indexName: string, query: IDBValidKey): Promise<T[]>;
|
|
4495
|
+
/**
|
|
4496
|
+
* Put a value into a store
|
|
4497
|
+
*/
|
|
4498
|
+
put<T>(storeName: string, value: T): Promise<void>;
|
|
4499
|
+
/**
|
|
4500
|
+
* Delete a value from a store
|
|
4501
|
+
*/
|
|
4502
|
+
delete(storeName: string, key: string): Promise<void>;
|
|
4503
|
+
/**
|
|
4504
|
+
* Clear all data from a store
|
|
4505
|
+
*/
|
|
4506
|
+
clear(storeName: string): Promise<void>;
|
|
4507
|
+
getParticipant(id: string): Promise<AXParticipant | undefined>;
|
|
4508
|
+
getAllParticipants(): Promise<AXParticipant[]>;
|
|
4509
|
+
putParticipant(participant: AXParticipant): Promise<void>;
|
|
4510
|
+
getConversation(id: string): Promise<AXConversation | undefined>;
|
|
4511
|
+
getAllConversations(): Promise<AXConversation[]>;
|
|
4512
|
+
putConversation(conversation: AXConversation): Promise<void>;
|
|
4513
|
+
deleteConversation(id: string): Promise<void>;
|
|
4514
|
+
getMessage(id: string): Promise<AXMessage | undefined>;
|
|
4515
|
+
getAllMessages(): Promise<AXMessage[]>;
|
|
4516
|
+
getMessagesByConversation(conversationId: string): Promise<AXMessage[]>;
|
|
4517
|
+
putMessage(message: AXMessage): Promise<void>;
|
|
4518
|
+
deleteMessage(id: string): Promise<void>;
|
|
4519
|
+
getSetting(key: string): Promise<unknown>;
|
|
4520
|
+
putSetting(key: string, value: unknown): Promise<void>;
|
|
4521
|
+
}
|
|
4522
|
+
declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
|
|
4523
|
+
|
|
4524
|
+
/**
|
|
4525
|
+
* Shared In-Memory Storage
|
|
4526
|
+
* Internal storage shared between all IndexedDB API implementations
|
|
4527
|
+
* This is NOT a service - just a shared data structure
|
|
4528
|
+
*/
|
|
4529
|
+
|
|
4530
|
+
declare class AXConversationSharedStorage {
|
|
4531
|
+
readonly connectionStatus$: BehaviorSubject<AXConnectionStatus>;
|
|
4532
|
+
readonly participants: Map<string, AXParticipant>;
|
|
4533
|
+
readonly conversations: Map<string, AXConversation>;
|
|
4534
|
+
readonly messages: Map<string, AXMessage>;
|
|
4535
|
+
readonly messagesByConversation: Map<string, string[]>;
|
|
4536
|
+
readonly messageStream$: Subject<AXMessage>;
|
|
4537
|
+
readonly messageUpdates$: Subject<AXMessage>;
|
|
4538
|
+
readonly messageDeletions$: Subject<string>;
|
|
4539
|
+
readonly typingIndicators$: Subject<AXTypingIndicator>;
|
|
4540
|
+
readonly presenceUpdates$: Subject<AXPresenceUpdate>;
|
|
4541
|
+
readonly conversationUpdates$: Subject<AXConversation>;
|
|
4542
|
+
readonly currentUserId = "current-user";
|
|
4543
|
+
private isSeeded;
|
|
4544
|
+
private presenceInterval?;
|
|
4545
|
+
private messageSimulationInterval?;
|
|
4546
|
+
private isLoadedFromDB;
|
|
4547
|
+
/**
|
|
4548
|
+
* Load data from IndexedDB
|
|
4549
|
+
*/
|
|
4550
|
+
loadFromIndexedDB(): Promise<void>;
|
|
4551
|
+
/**
|
|
4552
|
+
* Seed initial data if not already seeded
|
|
4553
|
+
*/
|
|
4554
|
+
seedIfEmpty(): Promise<void>;
|
|
4555
|
+
/**
|
|
4556
|
+
* Simulate user presence changes (online/offline/away)
|
|
4557
|
+
*/
|
|
4558
|
+
private startPresenceSimulation;
|
|
4559
|
+
/**
|
|
4560
|
+
* Simulate random messages from users
|
|
4561
|
+
*/
|
|
4562
|
+
private startMessageSimulation;
|
|
4563
|
+
/**
|
|
4564
|
+
* Stop presence simulation
|
|
4565
|
+
*/
|
|
4566
|
+
stopPresenceSimulation(): void;
|
|
4567
|
+
/**
|
|
4568
|
+
* Stop message simulation
|
|
4569
|
+
*/
|
|
4570
|
+
stopMessageSimulation(): void;
|
|
4571
|
+
}
|
|
4572
|
+
declare const conversationSharedStorage: AXConversationSharedStorage;
|
|
4573
|
+
|
|
4574
|
+
declare class AXConversationIndexedDbUserApi extends AXUserApi {
|
|
4328
4575
|
getCurrentUser(): Promise<AXParticipant>;
|
|
4329
4576
|
updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
|
|
4330
4577
|
uploadAvatar(file: File): Promise<string>;
|
|
@@ -4338,13 +4585,13 @@ declare class AXIndexedDBUserApi extends AXUserApi {
|
|
|
4338
4585
|
unblockUser(_userId: string): Promise<void>;
|
|
4339
4586
|
getBlockedUsers(): Promise<string[]>;
|
|
4340
4587
|
reportUser(_userId: string, _reason: AXBlockReportReason): Promise<void>;
|
|
4341
|
-
getUserSettings(): Promise<Record<string,
|
|
4342
|
-
updateUserSettings(_settings: Record<string,
|
|
4343
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4344
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4588
|
+
getUserSettings(): Promise<Record<string, unknown>>;
|
|
4589
|
+
updateUserSettings(_settings: Record<string, unknown>): Promise<void>;
|
|
4590
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbUserApi, never>;
|
|
4591
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbUserApi>;
|
|
4345
4592
|
}
|
|
4346
4593
|
|
|
4347
|
-
declare class
|
|
4594
|
+
declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
4348
4595
|
createConversation(data: AXConversationCreateData): Promise<AXConversation>;
|
|
4349
4596
|
getConversation(conversationId: string): Promise<AXConversation>;
|
|
4350
4597
|
getConversations(pagination: AXPagination, _filters?: AXConversationFilters): Promise<AXPaginatedResult<AXConversation>>;
|
|
@@ -4368,7 +4615,7 @@ declare class AXIndexedDBConversationApi extends AXConversationApi {
|
|
|
4368
4615
|
muteConversation(_conversationId: string, _duration?: number): Promise<void>;
|
|
4369
4616
|
unmuteConversation(_conversationId: string): Promise<void>;
|
|
4370
4617
|
uploadConversationAvatar(_conversationId: string, file: File): Promise<string>;
|
|
4371
|
-
getConversationMedia(_conversationId: string, _pagination?: AXPagination): Promise<AXPaginatedResult<
|
|
4618
|
+
getConversationMedia(_conversationId: string, _pagination?: AXPagination): Promise<AXPaginatedResult<unknown>>;
|
|
4372
4619
|
addConversationTags(_conversationId: string, _tags: string[]): Promise<void>;
|
|
4373
4620
|
removeConversationTags(_conversationId: string, _tags: string[]): Promise<void>;
|
|
4374
4621
|
getConversationTags(_conversationId: string): Promise<string[]>;
|
|
@@ -4377,11 +4624,11 @@ declare class AXIndexedDBConversationApi extends AXConversationApi {
|
|
|
4377
4624
|
saveDraft(_conversationId: string, _draft: string): Promise<void>;
|
|
4378
4625
|
getDraft(_conversationId: string): Promise<string | null>;
|
|
4379
4626
|
clearDraft(_conversationId: string): Promise<void>;
|
|
4380
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4381
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4627
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
|
|
4628
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
|
|
4382
4629
|
}
|
|
4383
4630
|
|
|
4384
|
-
declare class
|
|
4631
|
+
declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
|
|
4385
4632
|
sendMessage(command: AXSendMessageCommand): Promise<AXMessage>;
|
|
4386
4633
|
getMessage(messageId: string): Promise<AXMessage>;
|
|
4387
4634
|
getMessages(conversationId: string, pagination: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
@@ -4410,10 +4657,10 @@ declare class AXIndexedDBMessageApi extends AXMessageApi {
|
|
|
4410
4657
|
thumbnailUrl?: string;
|
|
4411
4658
|
size: number;
|
|
4412
4659
|
mimeType: string;
|
|
4413
|
-
metadata?: Record<string,
|
|
4660
|
+
metadata?: Record<string, unknown>;
|
|
4414
4661
|
}>;
|
|
4415
|
-
updateMessageMetadata(_messageId: string, _metadata: Record<string,
|
|
4416
|
-
getMessageMetadata(_messageId: string): Promise<Record<string,
|
|
4662
|
+
updateMessageMetadata(_messageId: string, _metadata: Record<string, unknown>): Promise<void>;
|
|
4663
|
+
getMessageMetadata(_messageId: string): Promise<Record<string, unknown>>;
|
|
4417
4664
|
updateMessageStatus(_messageId: string, _status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
|
|
4418
4665
|
getMessageDeliveryStatus(_messageId: string): Promise<{
|
|
4419
4666
|
delivered: number;
|
|
@@ -4423,11 +4670,11 @@ declare class AXIndexedDBMessageApi extends AXMessageApi {
|
|
|
4423
4670
|
markMessagesAsRead(_messageIds: string[]): Promise<void>;
|
|
4424
4671
|
bulkDeleteMessages(_conversationId: string, _messageIds: string[], _forEveryone?: boolean): Promise<void>;
|
|
4425
4672
|
exportMessages(_conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
|
|
4426
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4427
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4673
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
|
|
4674
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
|
|
4428
4675
|
}
|
|
4429
4676
|
|
|
4430
|
-
declare class
|
|
4677
|
+
declare class AXConversationIndexedDbRealtimeApi extends AXRealtimeApi {
|
|
4431
4678
|
readonly connectionStatus$: Observable<AXConnectionStatus>;
|
|
4432
4679
|
connect(_options?: AXConnectionOptions): Promise<void>;
|
|
4433
4680
|
disconnect(): Promise<void>;
|
|
@@ -4471,14 +4718,14 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
|
|
|
4471
4718
|
}>;
|
|
4472
4719
|
subscribeToConversationSettingsChanges(_conversationId?: string): Observable<{
|
|
4473
4720
|
conversationId: string;
|
|
4474
|
-
settings: Record<string,
|
|
4721
|
+
settings: Record<string, unknown>;
|
|
4475
4722
|
}>;
|
|
4476
4723
|
subscribeToDraftChanges(_conversationId?: string): Observable<{
|
|
4477
4724
|
conversationId: string;
|
|
4478
4725
|
draft: string | null;
|
|
4479
4726
|
}>;
|
|
4480
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4481
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4727
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbRealtimeApi, never>;
|
|
4728
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbRealtimeApi>;
|
|
4482
4729
|
}
|
|
4483
4730
|
|
|
4484
4731
|
/**
|
|
@@ -4488,10 +4735,10 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
|
|
|
4488
4735
|
* @security API key should be provided via injection token in production
|
|
4489
4736
|
* @example
|
|
4490
4737
|
* ```typescript
|
|
4491
|
-
* export const
|
|
4738
|
+
* export const AXConversationAiApiKey = new InjectionToken<string>('AXConversationAiApiKey');
|
|
4492
4739
|
*
|
|
4493
4740
|
* providers: [
|
|
4494
|
-
* { provide:
|
|
4741
|
+
* { provide: AXConversationAiApiKey, useValue: environment.geminiApiKey }
|
|
4495
4742
|
* ]
|
|
4496
4743
|
* ```
|
|
4497
4744
|
*/
|
|
@@ -4500,11 +4747,11 @@ declare class AXIndexedDBRealtimeApi extends AXRealtimeApi {
|
|
|
4500
4747
|
* Injection token for AI API key
|
|
4501
4748
|
* Provide this in your app config to avoid hardcoding the API key
|
|
4502
4749
|
*/
|
|
4503
|
-
declare const
|
|
4750
|
+
declare const AXConversationAiApiKey: InjectionToken<string>;
|
|
4504
4751
|
/**
|
|
4505
4752
|
* Configuration for AI Responder
|
|
4506
4753
|
*/
|
|
4507
|
-
interface
|
|
4754
|
+
interface AXConversationAiResponderConfig {
|
|
4508
4755
|
/** Maximum retry attempts for failed requests */
|
|
4509
4756
|
maxRetries?: number;
|
|
4510
4757
|
/** Timeout for API requests in milliseconds */
|
|
@@ -4512,7 +4759,7 @@ interface AXAIResponderConfig {
|
|
|
4512
4759
|
/** Enable fallback to random replies on error */
|
|
4513
4760
|
useFallbackReplies?: boolean;
|
|
4514
4761
|
}
|
|
4515
|
-
declare class
|
|
4762
|
+
declare class AXConversationAiResponderService {
|
|
4516
4763
|
private readonly injectedApiKey;
|
|
4517
4764
|
private readonly config;
|
|
4518
4765
|
/**
|
|
@@ -4547,12 +4794,12 @@ declare class AXAIResponderService {
|
|
|
4547
4794
|
/**
|
|
4548
4795
|
* Update configuration
|
|
4549
4796
|
*/
|
|
4550
|
-
configure(config: Partial<
|
|
4551
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4552
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4797
|
+
configure(config: Partial<AXConversationAiResponderConfig>): void;
|
|
4798
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAiResponderService, never>;
|
|
4799
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAiResponderService>;
|
|
4553
4800
|
}
|
|
4554
4801
|
|
|
4555
|
-
declare class
|
|
4802
|
+
declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedDbMessageApi {
|
|
4556
4803
|
private readonly aiResponder;
|
|
4557
4804
|
private readonly AI_TYPING_INDICATOR_DELAY;
|
|
4558
4805
|
private readonly AI_RESPONSE_DELAY;
|
|
@@ -4584,8 +4831,8 @@ declare class AXIndexedDBMessageAIApi extends AXIndexedDBMessageApi {
|
|
|
4584
4831
|
* Delay helper
|
|
4585
4832
|
*/
|
|
4586
4833
|
private delay;
|
|
4587
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
4588
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
4834
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageAiApi, never>;
|
|
4835
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
|
|
4589
4836
|
}
|
|
4590
4837
|
|
|
4591
4838
|
interface AudioFile {
|
|
@@ -4621,31 +4868,6 @@ declare class AXAudioPickerComponent {
|
|
|
4621
4868
|
declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXComposerTab;
|
|
4622
4869
|
declare const AX_CONVERSATION_COMPOSER_STICKER_TAB: AXComposerTab;
|
|
4623
4870
|
|
|
4624
|
-
declare class AXContactPickerComponent {
|
|
4625
|
-
private readonly composerService;
|
|
4626
|
-
private readonly conversationService;
|
|
4627
|
-
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4628
|
-
readonly onClose: _angular_core.OutputEmitterRef<void>;
|
|
4629
|
-
contactName: string;
|
|
4630
|
-
contactPhone: string;
|
|
4631
|
-
contactEmail: string;
|
|
4632
|
-
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4633
|
-
readonly selectedContact: _angular_core.WritableSignal<AXContactPayload>;
|
|
4634
|
-
readonly allContacts: _angular_core.WritableSignal<AXContactPayload[]>;
|
|
4635
|
-
readonly filteredContacts: _angular_core.Signal<AXContactPayload[]>;
|
|
4636
|
-
readonly canSend: _angular_core.Signal<string | boolean>;
|
|
4637
|
-
selectContact(contact: AXContactPayload): void;
|
|
4638
|
-
sendContact(): Promise<void>;
|
|
4639
|
-
cancel(): void;
|
|
4640
|
-
getInitials(name: string): string;
|
|
4641
|
-
/** Check if Contact Picker API is supported */
|
|
4642
|
-
isContactPickerSupported(): boolean;
|
|
4643
|
-
/** Open device contacts using Contact Picker API */
|
|
4644
|
-
openDeviceContacts(): Promise<void>;
|
|
4645
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXContactPickerComponent, never>;
|
|
4646
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXContactPickerComponent, "ax-conversation-contact-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, { "onClose": "onClose"; }, never, never, true, never>;
|
|
4647
|
-
}
|
|
4648
|
-
|
|
4649
4871
|
interface Emoji {
|
|
4650
4872
|
char: string;
|
|
4651
4873
|
name: string;
|
|
@@ -4672,8 +4894,9 @@ declare class AXEmojiTabComponent {
|
|
|
4672
4894
|
selectCategory(categoryId: string): void;
|
|
4673
4895
|
/** Get category CSS classes */
|
|
4674
4896
|
getCategoryClasses(categoryId: string): string;
|
|
4675
|
-
|
|
4676
|
-
|
|
4897
|
+
onSearchChange(event: {
|
|
4898
|
+
value?: string;
|
|
4899
|
+
}): void;
|
|
4677
4900
|
/** Select emoji */
|
|
4678
4901
|
selectEmoji(emoji: string): void;
|
|
4679
4902
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXEmojiTabComponent, never>;
|
|
@@ -4694,10 +4917,9 @@ declare class AXFilePickerComponent {
|
|
|
4694
4917
|
private readonly conversationService;
|
|
4695
4918
|
private readonly fileUploadService;
|
|
4696
4919
|
private readonly messageApi;
|
|
4920
|
+
private readonly composerService;
|
|
4697
4921
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4698
|
-
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
4699
4922
|
readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
4700
|
-
private get composerService();
|
|
4701
4923
|
readonly files: _angular_core.WritableSignal<AttachedFile[]>;
|
|
4702
4924
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4703
4925
|
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
@@ -4718,7 +4940,7 @@ declare class AXFilePickerComponent {
|
|
|
4718
4940
|
canSend(): boolean;
|
|
4719
4941
|
getSendButtonText(): string;
|
|
4720
4942
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFilePickerComponent, never>;
|
|
4721
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFilePickerComponent, "ax-conversation-file-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; };
|
|
4943
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFilePickerComponent, "ax-conversation-file-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4722
4944
|
}
|
|
4723
4945
|
|
|
4724
4946
|
interface ImageFile {
|
|
@@ -4753,13 +4975,12 @@ declare class AXLocationPickerComponent {
|
|
|
4753
4975
|
private readonly composerService;
|
|
4754
4976
|
private readonly conversationService;
|
|
4755
4977
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4756
|
-
readonly onClose: _angular_core.OutputEmitterRef<void>;
|
|
4757
4978
|
readonly currentLocation: _angular_core.WritableSignal<AXLocationPayload>;
|
|
4758
4979
|
onMarkerAdded(event: AXMapMarker): void;
|
|
4759
4980
|
sendLocation(): Promise<void>;
|
|
4760
4981
|
cancel(): void;
|
|
4761
4982
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLocationPickerComponent, never>;
|
|
4762
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationPickerComponent, "ax-conversation-location-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {
|
|
4983
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationPickerComponent, "ax-conversation-location-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4763
4984
|
}
|
|
4764
4985
|
|
|
4765
4986
|
declare class AXPickerFooterComponent {
|
|
@@ -4778,6 +4999,7 @@ declare class AXPickerHeaderComponent {
|
|
|
4778
4999
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPickerHeaderComponent, "ax-picker-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; }, { "onClose": "onClose"; }, never, never, true, never>;
|
|
4779
5000
|
}
|
|
4780
5001
|
|
|
5002
|
+
declare const AX_STICKER_API_KEY: InjectionToken<string>;
|
|
4781
5003
|
interface StickerCategory {
|
|
4782
5004
|
id: string;
|
|
4783
5005
|
name: string;
|
|
@@ -4786,35 +5008,27 @@ interface StickerCategory {
|
|
|
4786
5008
|
}
|
|
4787
5009
|
declare class AXStickerTabComponent {
|
|
4788
5010
|
private readonly http;
|
|
4789
|
-
|
|
5011
|
+
private readonly destroyRef;
|
|
5012
|
+
private readonly apiKey;
|
|
4790
5013
|
readonly itemSelected: _angular_core.OutputEmitterRef<AXStickerPayload>;
|
|
4791
|
-
/** Search query */
|
|
4792
5014
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4793
|
-
/** Active category ID */
|
|
4794
|
-
private readonly activeCategoryId;
|
|
4795
|
-
/** Sticker categories */
|
|
4796
|
-
readonly stickerCategories: StickerCategory[];
|
|
4797
|
-
/** Active stickers */
|
|
4798
5015
|
readonly activeStickers: _angular_core.WritableSignal<AXStickerPayload[]>;
|
|
4799
|
-
/** Loading state */
|
|
4800
5016
|
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
4801
|
-
|
|
5017
|
+
readonly stickerCategories: StickerCategory[];
|
|
4802
5018
|
readonly skeletonItems: number[];
|
|
4803
|
-
private readonly
|
|
4804
|
-
/** Search debounce timeout */
|
|
5019
|
+
private readonly activeCategoryId;
|
|
4805
5020
|
private searchTimeout?;
|
|
4806
5021
|
constructor();
|
|
4807
|
-
/** Load stickers from Giphy API */
|
|
4808
5022
|
private loadStickers;
|
|
4809
5023
|
/** Select category */
|
|
4810
5024
|
selectPack(categoryId: string): void;
|
|
4811
|
-
/** Search stickers using Giphy API */
|
|
4812
5025
|
private searchStickers;
|
|
4813
|
-
|
|
4814
|
-
|
|
5026
|
+
onSearchChange(event: {
|
|
5027
|
+
value?: string;
|
|
5028
|
+
}): void;
|
|
4815
5029
|
/** Get category CSS classes */
|
|
4816
5030
|
getPackClasses(categoryId: string): string;
|
|
4817
|
-
|
|
5031
|
+
private mapGiphyStickers;
|
|
4818
5032
|
selectSticker(sticker: AXStickerPayload): void;
|
|
4819
5033
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerTabComponent, never>;
|
|
4820
5034
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerTabComponent, "ax-sticker-tab", never, {}, { "itemSelected": "itemSelected"; }, never, never, true, never>;
|
|
@@ -4851,36 +5065,27 @@ declare class AXVideoPickerComponent {
|
|
|
4851
5065
|
}
|
|
4852
5066
|
|
|
4853
5067
|
declare class AXVoiceRecorderComponent {
|
|
5068
|
+
private readonly platformId;
|
|
5069
|
+
private readonly destroyRef;
|
|
4854
5070
|
private readonly composerService;
|
|
4855
5071
|
private readonly conversationService;
|
|
4856
5072
|
private readonly messageApi;
|
|
4857
|
-
/** Conversation context */
|
|
4858
5073
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4859
|
-
/** Service reference */
|
|
4860
|
-
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
4861
|
-
/** Recording completed event */
|
|
4862
5074
|
readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
|
|
4863
|
-
/** Recording cancelled event */
|
|
4864
5075
|
readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
|
|
4865
|
-
/** Recording state */
|
|
4866
5076
|
readonly isRecording: _angular_core.WritableSignal<boolean>;
|
|
4867
|
-
/** Recording start time */
|
|
4868
|
-
private recordingStartTime;
|
|
4869
|
-
/** Recording duration in seconds */
|
|
4870
5077
|
readonly recordingDuration: _angular_core.WritableSignal<number>;
|
|
4871
|
-
|
|
5078
|
+
private recordingStartTime;
|
|
4872
5079
|
private timerInterval?;
|
|
4873
|
-
/** Media recorder instance */
|
|
4874
5080
|
private mediaRecorder?;
|
|
4875
|
-
/** Recorded audio chunks */
|
|
4876
5081
|
private audioChunks;
|
|
4877
|
-
|
|
5082
|
+
private activeStream?;
|
|
5083
|
+
private cancelled;
|
|
4878
5084
|
readonly formattedTime: _angular_core.Signal<string>;
|
|
4879
|
-
|
|
5085
|
+
constructor();
|
|
4880
5086
|
startRecording(): Promise<void>;
|
|
4881
5087
|
/** Stop recording and send */
|
|
4882
5088
|
stopRecording(): void;
|
|
4883
|
-
/** Cancel recording */
|
|
4884
5089
|
cancelRecording(): void;
|
|
4885
5090
|
/** Close the voice recorder */
|
|
4886
5091
|
cancel(): void;
|
|
@@ -4888,8 +5093,9 @@ declare class AXVoiceRecorderComponent {
|
|
|
4888
5093
|
private clearTimer;
|
|
4889
5094
|
/** Send voice message */
|
|
4890
5095
|
private sendVoiceMessage;
|
|
5096
|
+
private stopAndCleanup;
|
|
4891
5097
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRecorderComponent, never>;
|
|
4892
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRecorderComponent, "ax-conversation-voice-recorder", never, { "conversation": { "alias": "conversation"; "required": false; "isSignal": true; };
|
|
5098
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRecorderComponent, "ax-conversation-voice-recorder", never, { "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; }, { "recordingComplete": "recordingComplete"; "recordingCancelled": "recordingCancelled"; }, never, never, true, never>;
|
|
4893
5099
|
}
|
|
4894
5100
|
|
|
4895
5101
|
/**
|
|
@@ -4903,8 +5109,7 @@ declare class AXVoiceRecorderComponent {
|
|
|
4903
5109
|
* - 40: Image (media)
|
|
4904
5110
|
* - 50: Video (media)
|
|
4905
5111
|
* - 60: Audio (media)
|
|
4906
|
-
* - 70:
|
|
4907
|
-
* - 80: Location (special)
|
|
5112
|
+
* - 70: Location (special)
|
|
4908
5113
|
*/
|
|
4909
5114
|
|
|
4910
5115
|
/**
|
|
@@ -4931,10 +5136,6 @@ declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
|
|
|
4931
5136
|
* Audio file picker action
|
|
4932
5137
|
*/
|
|
4933
5138
|
declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
|
|
4934
|
-
/**
|
|
4935
|
-
* Contact picker action
|
|
4936
|
-
*/
|
|
4937
|
-
declare const AX_CONVERSATION_COMPOSER_CONTACT_ACTION: AXComposerAction;
|
|
4938
5139
|
/**
|
|
4939
5140
|
* Location picker action
|
|
4940
5141
|
*/
|
|
@@ -4958,6 +5159,11 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
|
|
|
4958
5159
|
activeTab: string;
|
|
4959
5160
|
editTitle: string;
|
|
4960
5161
|
editAvatar: string;
|
|
5162
|
+
readonly backgroundPresets: Array<{
|
|
5163
|
+
id: string;
|
|
5164
|
+
label: string;
|
|
5165
|
+
value: string;
|
|
5166
|
+
}>;
|
|
4961
5167
|
/** Get filtered members based on search */
|
|
4962
5168
|
get filteredMembers(): _acorex_components_conversation2.AXParticipant[];
|
|
4963
5169
|
/** Handle tab change */
|
|
@@ -4989,12 +5195,17 @@ declare class AXConversationInfoPanelComponent extends AXClosableComponent imple
|
|
|
4989
5195
|
canSaveEdit(): boolean;
|
|
4990
5196
|
/** Save edit */
|
|
4991
5197
|
saveEdit(): Promise<void>;
|
|
5198
|
+
currentBackground(): string;
|
|
5199
|
+
isBackgroundSelected(value: string): boolean;
|
|
5200
|
+
applyMessageListBackground(value: string): Promise<void>;
|
|
4992
5201
|
ngOnDestroy(): void;
|
|
4993
5202
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
|
|
4994
5203
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
|
|
4995
5204
|
}
|
|
4996
5205
|
|
|
4997
5206
|
declare class AXInfoBarSearchComponent {
|
|
5207
|
+
private readonly platformId;
|
|
5208
|
+
private readonly destroyRef;
|
|
4998
5209
|
private readonly infoBarService;
|
|
4999
5210
|
private readonly conversationService;
|
|
5000
5211
|
/** Conversation input */
|
|
@@ -5009,6 +5220,7 @@ declare class AXInfoBarSearchComponent {
|
|
|
5009
5220
|
readonly currentIndex: _angular_core.Signal<number>;
|
|
5010
5221
|
/** Messages from conversation */
|
|
5011
5222
|
readonly messages: _angular_core.Signal<_acorex_components_conversation2.AXMessage[]>;
|
|
5223
|
+
private scrollTimer?;
|
|
5012
5224
|
constructor();
|
|
5013
5225
|
/** Handle search input change */
|
|
5014
5226
|
onSearchChange(value: string): void;
|
|
@@ -5020,7 +5232,6 @@ declare class AXInfoBarSearchComponent {
|
|
|
5020
5232
|
onPrevious(): void;
|
|
5021
5233
|
/** Scroll to current search result */
|
|
5022
5234
|
private scrollToCurrentResult;
|
|
5023
|
-
/** Scroll to a specific message */
|
|
5024
5235
|
private scrollToResult;
|
|
5025
5236
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarSearchComponent, never>;
|
|
5026
5237
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarSearchComponent, "ax-info-bar-search", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "service": { "alias": "service"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
@@ -5062,155 +5273,158 @@ declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
|
|
|
5062
5273
|
*/
|
|
5063
5274
|
declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
|
|
5064
5275
|
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5276
|
+
/**
|
|
5277
|
+
* Shared UI for message bubble bodies: sending / failed (with retry) and content load errors,
|
|
5278
|
+
* driven by {@link AXMessageRendererState}.
|
|
5279
|
+
*/
|
|
5280
|
+
declare class AXConversationMessageRendererStateComponent {
|
|
5281
|
+
private readonly conversation;
|
|
5282
|
+
readonly rendererState: _angular_core.InputSignal<AXMessageRendererState>;
|
|
5068
5283
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5069
|
-
/**
|
|
5284
|
+
/** Overrides default text when {@link AXMessageRendererState.contentState} is `error`. */
|
|
5285
|
+
readonly contentErrorLabel: _angular_core.InputSignal<string>;
|
|
5286
|
+
/** Overrides default text when delivery failed. */
|
|
5287
|
+
readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
|
|
5288
|
+
/** Set false when the renderer shows content errors inline (e.g. inline media error state). */
|
|
5289
|
+
readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
|
|
5290
|
+
/** `inline` matches legacy media rows (e.g. audio): compact danger text under the player. */
|
|
5291
|
+
readonly contentErrorStyle: _angular_core.InputSignal<"inline" | "banner">;
|
|
5292
|
+
/** Icon class for content error (e.g. `fa-light fa-music` for audio). */
|
|
5293
|
+
readonly contentErrorIconClass: _angular_core.InputSignal<string>;
|
|
5294
|
+
/** `below`: render after main bubble body (typical for media). */
|
|
5295
|
+
readonly placement: _angular_core.InputSignal<"above" | "below">;
|
|
5296
|
+
readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
|
|
5297
|
+
readonly contentRetry: _angular_core.OutputEmitterRef<void>;
|
|
5298
|
+
readonly retryBusy: _angular_core.WritableSignal<boolean>;
|
|
5299
|
+
private readonly currentUser;
|
|
5300
|
+
private readonly isOwn;
|
|
5301
|
+
readonly showSending: _angular_core.Signal<boolean>;
|
|
5302
|
+
readonly showFailed: _angular_core.Signal<boolean>;
|
|
5303
|
+
readonly showContentError: _angular_core.Signal<boolean>;
|
|
5304
|
+
readonly hasVisibleChrome: _angular_core.Signal<boolean>;
|
|
5305
|
+
readonly showRetryButton: _angular_core.Signal<boolean>;
|
|
5306
|
+
readonly contentErrorText: _angular_core.Signal<string>;
|
|
5307
|
+
readonly deliveryFailedText: _angular_core.Signal<string>;
|
|
5308
|
+
onRetry(): Promise<void>;
|
|
5309
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererStateComponent, never>;
|
|
5310
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMessageRendererStateComponent, "ax-conversation-message-renderer-state", never, { "rendererState": { "alias": "rendererState"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": true; "isSignal": true; }; "contentErrorLabel": { "alias": "contentErrorLabel"; "required": false; "isSignal": true; }; "deliveryFailedLabel": { "alias": "deliveryFailedLabel"; "required": false; "isSignal": true; }; "showContentErrorChrome": { "alias": "showContentErrorChrome"; "required": false; "isSignal": true; }; "contentErrorStyle": { "alias": "contentErrorStyle"; "required": false; "isSignal": true; }; "contentErrorIconClass": { "alias": "contentErrorIconClass"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "contentRetryEnabled": { "alias": "contentRetryEnabled"; "required": false; "isSignal": true; }; }, { "contentRetry": "contentRetry"; }, never, never, true, never>;
|
|
5311
|
+
}
|
|
5312
|
+
|
|
5313
|
+
declare class AXAudioRendererComponent implements AXMessageRendererComponent {
|
|
5314
|
+
private readonly platformId;
|
|
5315
|
+
private readonly destroyRef;
|
|
5316
|
+
private readonly infoBarService;
|
|
5070
5317
|
private readonly audioElementRef;
|
|
5071
|
-
|
|
5318
|
+
private readonly _contentState;
|
|
5319
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5320
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5321
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5322
|
+
contentState: AXMessageRendererContentState;
|
|
5323
|
+
}>;
|
|
5072
5324
|
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5073
|
-
/** Muted state */
|
|
5074
5325
|
readonly isMuted: _angular_core.WritableSignal<boolean>;
|
|
5075
|
-
/** Current time in seconds */
|
|
5076
5326
|
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5077
|
-
/** Duration in seconds */
|
|
5078
5327
|
readonly duration: _angular_core.WritableSignal<number>;
|
|
5079
|
-
/** Error state */
|
|
5080
|
-
readonly error: _angular_core.WritableSignal<boolean>;
|
|
5081
|
-
/** Audio payload */
|
|
5082
5328
|
readonly payload: _angular_core.Signal<AXAudioPayload>;
|
|
5083
|
-
/** Audio URL */
|
|
5084
5329
|
readonly audioUrl: _angular_core.Signal<string>;
|
|
5085
|
-
/** Title */
|
|
5086
5330
|
readonly title: _angular_core.Signal<string>;
|
|
5087
|
-
/** Progress percentage */
|
|
5088
5331
|
readonly progress: _angular_core.Signal<number>;
|
|
5089
|
-
/** Formatted current time */
|
|
5090
5332
|
readonly currentTimeFormatted: _angular_core.Signal<string>;
|
|
5091
|
-
/** Formatted duration */
|
|
5092
5333
|
readonly durationFormatted: _angular_core.Signal<string>;
|
|
5093
5334
|
constructor();
|
|
5094
|
-
/** Toggle play/pause */
|
|
5095
5335
|
togglePlay(): void;
|
|
5096
|
-
/** Toggle mute */
|
|
5097
5336
|
toggleMute(): void;
|
|
5098
|
-
/** Handle time update */
|
|
5099
5337
|
onTimeUpdate(): void;
|
|
5100
|
-
/** Handle audio ended */
|
|
5101
5338
|
onEnded(): void;
|
|
5102
|
-
/** Handle audio error */
|
|
5103
5339
|
onError(): void;
|
|
5104
|
-
/** Handle progress bar click */
|
|
5105
5340
|
onProgressClick(event: MouseEvent): void;
|
|
5106
|
-
|
|
5107
|
-
private
|
|
5341
|
+
private pausePlayback;
|
|
5342
|
+
private syncInfoBarBanner;
|
|
5108
5343
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioRendererComponent, never>;
|
|
5109
5344
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5110
5345
|
}
|
|
5111
5346
|
|
|
5112
|
-
declare class
|
|
5113
|
-
private readonly toastService;
|
|
5114
|
-
/** Message to render */
|
|
5347
|
+
declare class AXAudioInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
|
|
5115
5348
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5116
|
-
|
|
5117
|
-
readonly
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
|
|
5121
|
-
|
|
5122
|
-
|
|
5123
|
-
|
|
5124
|
-
static
|
|
5125
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXContactRendererComponent, "ax-conversation-contact-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5349
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
5350
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
5351
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
5352
|
+
private readonly payload;
|
|
5353
|
+
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5354
|
+
readonly progressPercent: _angular_core.Signal<number>;
|
|
5355
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
5356
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioInfoBarBannerComponent, never>;
|
|
5357
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioInfoBarBannerComponent, "ax-conversation-audio-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5126
5358
|
}
|
|
5127
5359
|
|
|
5128
|
-
declare class AXFallbackRendererComponent {
|
|
5129
|
-
|
|
5360
|
+
declare class AXFallbackRendererComponent implements AXMessageRendererComponent {
|
|
5361
|
+
private readonly _contentState;
|
|
5130
5362
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5363
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5364
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5365
|
+
contentState: AXMessageRendererContentState;
|
|
5366
|
+
}>;
|
|
5134
5367
|
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
5135
|
-
/**
|
|
5136
|
-
readonly
|
|
5137
|
-
/** Raw payload as JSON string */
|
|
5138
|
-
readonly rawPayload: _angular_core.Signal<string>;
|
|
5139
|
-
/** Toggle raw data display */
|
|
5140
|
-
toggleRaw(): void;
|
|
5368
|
+
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
5369
|
+
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
5141
5370
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFallbackRendererComponent, never>;
|
|
5142
5371
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5143
5372
|
}
|
|
5144
5373
|
|
|
5145
|
-
declare class AXFileRendererComponent {
|
|
5146
|
-
|
|
5374
|
+
declare class AXFileRendererComponent implements AXMessageRendererComponent {
|
|
5375
|
+
private readonly _contentState;
|
|
5147
5376
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5148
|
-
|
|
5377
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5378
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5379
|
+
contentState: AXMessageRendererContentState;
|
|
5380
|
+
}>;
|
|
5149
5381
|
readonly payload: _angular_core.Signal<AXFilePayload>;
|
|
5150
|
-
/** File URL */
|
|
5151
5382
|
readonly fileUrl: _angular_core.Signal<string>;
|
|
5152
|
-
/** File name */
|
|
5153
5383
|
readonly fileName: _angular_core.Signal<string>;
|
|
5154
|
-
/** File size in bytes */
|
|
5155
5384
|
readonly fileSize: _angular_core.Signal<number>;
|
|
5156
|
-
/** MIME type */
|
|
5157
5385
|
readonly mimeType: _angular_core.Signal<string>;
|
|
5158
|
-
/** File extension */
|
|
5159
5386
|
readonly fileExtension: _angular_core.Signal<string>;
|
|
5160
|
-
|
|
5161
|
-
readonly fileIconColor: _angular_core.Signal<string>;
|
|
5162
|
-
/** Formatted file size */
|
|
5387
|
+
readonly swatchColor: _angular_core.Signal<string>;
|
|
5163
5388
|
readonly formattedSize: _angular_core.Signal<string>;
|
|
5164
5389
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileRendererComponent, never>;
|
|
5165
5390
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5166
5391
|
}
|
|
5167
5392
|
|
|
5168
|
-
declare class AXImageRendererComponent {
|
|
5393
|
+
declare class AXImageRendererComponent implements AXMessageRendererComponent {
|
|
5169
5394
|
private readonly platformId;
|
|
5170
|
-
|
|
5395
|
+
private readonly _contentState;
|
|
5171
5396
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
-
/** Image clicked event */
|
|
5397
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5398
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5399
|
+
contentState: AXMessageRendererContentState;
|
|
5400
|
+
}>;
|
|
5177
5401
|
readonly imageClick: _angular_core.OutputEmitterRef<string>;
|
|
5178
|
-
/** Image payload */
|
|
5179
5402
|
readonly payload: _angular_core.Signal<AXImagePayload>;
|
|
5180
|
-
/** Thumbnail URL */
|
|
5181
5403
|
readonly thumbnailUrl: _angular_core.Signal<string>;
|
|
5182
|
-
/** Alt text */
|
|
5183
5404
|
readonly alt: _angular_core.Signal<string>;
|
|
5184
|
-
/** Caption */
|
|
5185
5405
|
readonly caption: _angular_core.Signal<string>;
|
|
5186
|
-
|
|
5406
|
+
constructor();
|
|
5187
5407
|
onLoad(): void;
|
|
5188
|
-
/** Handle image error */
|
|
5189
5408
|
onError(): void;
|
|
5190
|
-
/** Handle image click */
|
|
5191
5409
|
onClick(): void;
|
|
5192
5410
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageRendererComponent, never>;
|
|
5193
5411
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, { "imageClick": "imageClick"; }, never, never, true, never>;
|
|
5194
5412
|
}
|
|
5195
5413
|
|
|
5196
|
-
declare class AXLocationRendererComponent {
|
|
5197
|
-
|
|
5414
|
+
declare class AXLocationRendererComponent implements AXMessageRendererComponent {
|
|
5415
|
+
private readonly _contentState;
|
|
5198
5416
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5199
|
-
|
|
5417
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5418
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5419
|
+
contentState: AXMessageRendererContentState;
|
|
5420
|
+
}>;
|
|
5200
5421
|
readonly payload: _angular_core.Signal<AXLocationPayload>;
|
|
5201
|
-
/** Latitude */
|
|
5202
5422
|
readonly latitude: _angular_core.Signal<number>;
|
|
5203
|
-
/** Longitude */
|
|
5204
5423
|
readonly longitude: _angular_core.Signal<number>;
|
|
5205
|
-
/** Location name */
|
|
5206
5424
|
readonly locationName: _angular_core.Signal<string>;
|
|
5207
|
-
/** Address */
|
|
5208
5425
|
readonly address: _angular_core.Signal<string>;
|
|
5209
|
-
/** Coordinates text */
|
|
5210
5426
|
readonly coordinatesText: _angular_core.Signal<string>;
|
|
5211
|
-
/** Google Maps URL */
|
|
5212
5427
|
readonly mapsUrl: _angular_core.Signal<string>;
|
|
5213
|
-
/** Markers for the map */
|
|
5214
5428
|
readonly markers: _angular_core.Signal<{
|
|
5215
5429
|
latitude: number;
|
|
5216
5430
|
longitude: number;
|
|
@@ -5222,130 +5436,154 @@ declare class AXLocationRendererComponent {
|
|
|
5222
5436
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5223
5437
|
}
|
|
5224
5438
|
|
|
5225
|
-
declare class AXStickerRendererComponent {
|
|
5226
|
-
|
|
5439
|
+
declare class AXStickerRendererComponent implements AXMessageRendererComponent {
|
|
5440
|
+
private readonly _contentState;
|
|
5227
5441
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
/** Sticker payload */
|
|
5442
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5443
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5444
|
+
contentState: AXMessageRendererContentState;
|
|
5445
|
+
}>;
|
|
5233
5446
|
readonly payload: _angular_core.Signal<AXStickerPayload>;
|
|
5234
|
-
/** Sticker URL */
|
|
5235
5447
|
readonly stickerUrl: _angular_core.Signal<string>;
|
|
5236
|
-
/** Alt text */
|
|
5237
5448
|
readonly alt: _angular_core.Signal<string>;
|
|
5238
|
-
|
|
5449
|
+
constructor();
|
|
5239
5450
|
onLoad(): void;
|
|
5240
|
-
/** Handle image error */
|
|
5241
5451
|
onError(): void;
|
|
5242
5452
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerRendererComponent, never>;
|
|
5243
5453
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5244
5454
|
}
|
|
5245
5455
|
|
|
5246
|
-
declare class AXSystemRendererComponent {
|
|
5247
|
-
|
|
5456
|
+
declare class AXSystemRendererComponent implements AXMessageRendererComponent {
|
|
5457
|
+
private readonly _contentState;
|
|
5248
5458
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5249
|
-
|
|
5459
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5460
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5461
|
+
contentState: AXMessageRendererContentState;
|
|
5462
|
+
}>;
|
|
5250
5463
|
readonly payload: _angular_core.Signal<AXSystemPayload>;
|
|
5251
|
-
|
|
5252
|
-
readonly iconClass: _angular_core.Signal<"fa-light fa-image" | "fa-light fa-user-plus" | "fa-light fa-user-minus" | "fa-light fa-pen" | "fa-light fa-info-circle">;
|
|
5464
|
+
readonly iconClass: _angular_core.Signal<string>;
|
|
5253
5465
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSystemRendererComponent, never>;
|
|
5254
5466
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5255
5467
|
}
|
|
5256
5468
|
|
|
5257
|
-
declare class AXTextRendererComponent {
|
|
5469
|
+
declare class AXTextRendererComponent implements AXMessageRendererComponent {
|
|
5258
5470
|
private readonly infoBarService;
|
|
5259
5471
|
private readonly sanitizer;
|
|
5260
|
-
|
|
5472
|
+
private readonly _contentState;
|
|
5261
5473
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5262
|
-
|
|
5474
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5475
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5476
|
+
contentState: AXMessageRendererContentState;
|
|
5477
|
+
}>;
|
|
5263
5478
|
readonly searchQuery: _angular_core.Signal<string>;
|
|
5264
|
-
/** Formatted text with links and search highlights */
|
|
5265
5479
|
readonly formattedText: _angular_core.Signal<SafeHtml>;
|
|
5266
|
-
/** Escape HTML to prevent XSS */
|
|
5267
|
-
private escapeHtml;
|
|
5268
|
-
/** Convert URLs to clickable links */
|
|
5269
5480
|
private linkify;
|
|
5270
|
-
/** Highlight search query in text */
|
|
5271
5481
|
private highlightSearch;
|
|
5272
5482
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTextRendererComponent, never>;
|
|
5273
5483
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5274
5484
|
}
|
|
5275
5485
|
|
|
5276
|
-
|
|
5486
|
+
/**
|
|
5487
|
+
* Video message: with thumbnail — tap poster to play inline; without thumbnail — native `<video>` only.
|
|
5488
|
+
*/
|
|
5489
|
+
declare class AXVideoRendererComponent implements AXMessageRendererComponent {
|
|
5277
5490
|
private readonly platformId;
|
|
5278
|
-
|
|
5491
|
+
private readonly destroyRef;
|
|
5492
|
+
private readonly infoBarService;
|
|
5493
|
+
private readonly videoElementRef;
|
|
5494
|
+
private readonly _contentState;
|
|
5279
5495
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5280
|
-
|
|
5496
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5497
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5498
|
+
contentState: AXMessageRendererContentState;
|
|
5499
|
+
}>;
|
|
5281
5500
|
readonly showPlayer: _angular_core.WritableSignal<boolean>;
|
|
5282
|
-
|
|
5283
|
-
readonly
|
|
5284
|
-
/** Video payload */
|
|
5501
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5502
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5285
5503
|
readonly payload: _angular_core.Signal<AXVideoPayload>;
|
|
5286
|
-
|
|
5287
|
-
readonly videoUrl: _angular_core.Signal<string>;
|
|
5288
|
-
/** Thumbnail URL */
|
|
5504
|
+
readonly playbackUrl: _angular_core.Signal<string>;
|
|
5289
5505
|
readonly thumbnailUrl: _angular_core.Signal<string>;
|
|
5290
|
-
|
|
5506
|
+
readonly hasThumbnail: _angular_core.Signal<boolean>;
|
|
5291
5507
|
readonly duration: _angular_core.Signal<number>;
|
|
5292
|
-
/** Caption */
|
|
5293
5508
|
readonly caption: _angular_core.Signal<string>;
|
|
5294
|
-
|
|
5509
|
+
readonly durationLabel: _angular_core.Signal<string>;
|
|
5510
|
+
readonly showDurationBadge: _angular_core.Signal<boolean>;
|
|
5511
|
+
readonly playAriaLabel: _angular_core.Signal<string>;
|
|
5512
|
+
constructor();
|
|
5295
5513
|
playVideo(): void;
|
|
5296
|
-
|
|
5514
|
+
onPlay(): void;
|
|
5515
|
+
onPause(): void;
|
|
5516
|
+
onTimeUpdate(): void;
|
|
5517
|
+
onEnded(): void;
|
|
5518
|
+
onThumbLoad(): void;
|
|
5519
|
+
onThumbError(): void;
|
|
5520
|
+
onVideoLoaded(): void;
|
|
5297
5521
|
onError(): void;
|
|
5298
|
-
|
|
5299
|
-
|
|
5522
|
+
private pausePlayback;
|
|
5523
|
+
private syncInfoBarBanner;
|
|
5300
5524
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoRendererComponent, never>;
|
|
5301
5525
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5302
5526
|
}
|
|
5303
5527
|
|
|
5304
|
-
declare class
|
|
5305
|
-
private readonly platformId;
|
|
5306
|
-
/** Message to render */
|
|
5528
|
+
declare class AXVideoInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
|
|
5307
5529
|
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5308
|
-
|
|
5530
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
5531
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
5532
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
5533
|
+
private readonly payload;
|
|
5534
|
+
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5535
|
+
readonly progressPercent: _angular_core.Signal<number>;
|
|
5536
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
5537
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoInfoBarBannerComponent, never>;
|
|
5538
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoInfoBarBannerComponent, "ax-conversation-video-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5539
|
+
}
|
|
5540
|
+
|
|
5541
|
+
declare class AXVoiceRendererComponent implements AXMessageRendererComponent {
|
|
5542
|
+
private readonly platformId;
|
|
5543
|
+
private readonly destroyRef;
|
|
5544
|
+
private readonly infoBarService;
|
|
5309
5545
|
private readonly audioElementRef;
|
|
5310
|
-
|
|
5546
|
+
private readonly _contentState;
|
|
5547
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5548
|
+
readonly rendererState: _angular_core.Signal<{
|
|
5549
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5550
|
+
contentState: AXMessageRendererContentState;
|
|
5551
|
+
}>;
|
|
5311
5552
|
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5312
|
-
/** Current time in seconds */
|
|
5313
5553
|
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5314
|
-
/** Duration in seconds */
|
|
5315
5554
|
readonly duration: _angular_core.WritableSignal<number>;
|
|
5316
|
-
/** Error state */
|
|
5317
|
-
readonly error: _angular_core.WritableSignal<boolean>;
|
|
5318
|
-
/** Playback speed */
|
|
5319
5555
|
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
5320
|
-
/** Available playback speeds */
|
|
5321
5556
|
private readonly speeds;
|
|
5322
|
-
/** Voice payload */
|
|
5323
5557
|
readonly payload: _angular_core.Signal<AXVoicePayload>;
|
|
5324
|
-
/** Voice URL */
|
|
5325
5558
|
readonly voiceUrl: _angular_core.Signal<string>;
|
|
5326
|
-
/** Waveform data (simplified visualization) */
|
|
5327
5559
|
readonly waveformBars: _angular_core.Signal<number[]>;
|
|
5328
|
-
/** Active bar index based on progress */
|
|
5329
5560
|
readonly activeBarIndex: _angular_core.Signal<number>;
|
|
5330
|
-
|
|
5331
|
-
readonly currentTimeFormatted: _angular_core.Signal<string>;
|
|
5561
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
5332
5562
|
constructor();
|
|
5333
|
-
/** Toggle play/pause */
|
|
5334
5563
|
togglePlay(): void;
|
|
5335
|
-
/** Cycle through playback speeds */
|
|
5336
5564
|
cyclePlaybackSpeed(): void;
|
|
5337
|
-
/** Handle time update */
|
|
5338
5565
|
onTimeUpdate(): void;
|
|
5339
|
-
/** Handle audio ended */
|
|
5340
5566
|
onEnded(): void;
|
|
5341
|
-
/** Handle audio error */
|
|
5342
5567
|
onError(): void;
|
|
5343
|
-
|
|
5344
|
-
private
|
|
5568
|
+
private pausePlayback;
|
|
5569
|
+
private syncInfoBarBanner;
|
|
5345
5570
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRendererComponent, never>;
|
|
5346
5571
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5347
5572
|
}
|
|
5348
5573
|
|
|
5574
|
+
declare class AXVoiceInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
|
|
5575
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5576
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
5577
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
5578
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
5579
|
+
private readonly payload;
|
|
5580
|
+
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5581
|
+
readonly progressPercent: _angular_core.Signal<number>;
|
|
5582
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
5583
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceInfoBarBannerComponent, never>;
|
|
5584
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceInfoBarBannerComponent, "ax-conversation-voice-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5585
|
+
}
|
|
5586
|
+
|
|
5349
5587
|
/**
|
|
5350
5588
|
* Default Message Actions Plugin
|
|
5351
5589
|
* Individual message action constants
|
|
@@ -5385,7 +5623,6 @@ declare const AX_CONVERSATION_VOICE_RENDERER: AXMessageRenderer;
|
|
|
5385
5623
|
declare const AX_CONVERSATION_FILE_RENDERER: AXMessageRenderer;
|
|
5386
5624
|
declare const AX_CONVERSATION_LOCATION_RENDERER: AXMessageRenderer;
|
|
5387
5625
|
declare const AX_CONVERSATION_STICKER_RENDERER: AXMessageRenderer;
|
|
5388
|
-
declare const AX_CONVERSATION_CONTACT_RENDERER: AXMessageRenderer;
|
|
5389
5626
|
declare const AX_CONVERSATION_SYSTEM_RENDERER: AXMessageRenderer;
|
|
5390
5627
|
declare const AX_CONVERSATION_FALLBACK_RENDERER: AXMessageRenderer;
|
|
5391
5628
|
|
|
@@ -5435,6 +5672,7 @@ declare const AX_CONVERSATION_TAB_ALL: AXConversationTab;
|
|
|
5435
5672
|
declare const AX_CONVERSATION_TAB_PRIVATE: AXConversationTab;
|
|
5436
5673
|
declare const AX_CONVERSATION_TAB_GROUPS: AXConversationTab;
|
|
5437
5674
|
declare const AX_CONVERSATION_TAB_CHANNELS: AXConversationTab;
|
|
5675
|
+
declare const AX_CONVERSATION_TAB_BOT: AXConversationTab;
|
|
5438
5676
|
declare const AX_CONVERSATION_TAB_UNREAD: AXConversationTab;
|
|
5439
5677
|
declare const AX_CONVERSATION_TAB_ARCHIVED: AXConversationTab;
|
|
5440
5678
|
|
|
@@ -5477,19 +5715,19 @@ declare class AXConversation2Module {
|
|
|
5477
5715
|
* @example
|
|
5478
5716
|
* ```typescript
|
|
5479
5717
|
* import {
|
|
5480
|
-
*
|
|
5481
|
-
*
|
|
5482
|
-
*
|
|
5483
|
-
*
|
|
5718
|
+
* AXConversationIndexedDbUserApi,
|
|
5719
|
+
* AXConversationIndexedDbConversationApi,
|
|
5720
|
+
* AXConversationIndexedDbMessageApi,
|
|
5721
|
+
* AXConversationIndexedDbRealtimeApi
|
|
5484
5722
|
* } from '@acorex/components/conversation2';
|
|
5485
5723
|
*
|
|
5486
5724
|
* export const appConfig: ApplicationConfig = {
|
|
5487
5725
|
* providers: [
|
|
5488
5726
|
* provideConversation({
|
|
5489
|
-
* userApi:
|
|
5490
|
-
* conversationApi:
|
|
5491
|
-
* messageApi:
|
|
5492
|
-
* realtimeApi:
|
|
5727
|
+
* userApi: AXConversationIndexedDbUserApi,
|
|
5728
|
+
* conversationApi: AXConversationIndexedDbConversationApi,
|
|
5729
|
+
* messageApi: AXConversationIndexedDbMessageApi,
|
|
5730
|
+
* realtimeApi: AXConversationIndexedDbRealtimeApi,
|
|
5493
5731
|
* config: { },
|
|
5494
5732
|
* registry: { messageActions: [myCustomAction] }
|
|
5495
5733
|
* })
|
|
@@ -5528,9 +5766,14 @@ declare class AXConversationMessageUtilsService {
|
|
|
5528
5766
|
*/
|
|
5529
5767
|
static getSenderName(message: AXMessage, conversation: AXConversation): string;
|
|
5530
5768
|
/**
|
|
5531
|
-
* Get sender avatar
|
|
5769
|
+
* Get sender avatar image URL (takes precedence over {@link getSenderAvatarIcon}).
|
|
5532
5770
|
*/
|
|
5533
5771
|
static getSenderAvatar(message: AXMessage, conversation: AXConversation): string | undefined;
|
|
5772
|
+
/**
|
|
5773
|
+
* Font Awesome icon class(es) for the sender when there is no avatar image:
|
|
5774
|
+
* participant `icon` first, then conversation-level `icon`.
|
|
5775
|
+
*/
|
|
5776
|
+
static getSenderAvatarIcon(message: AXMessage, conversation: AXConversation): string | undefined;
|
|
5534
5777
|
/**
|
|
5535
5778
|
* Get initials from name
|
|
5536
5779
|
*/
|
|
@@ -5556,7 +5799,7 @@ declare class AXConversationMessageUtilsService {
|
|
|
5556
5799
|
*/
|
|
5557
5800
|
static isOwnMessage(message: AXMessage, currentUserId: string): boolean;
|
|
5558
5801
|
/**
|
|
5559
|
-
* Get message status icon
|
|
5802
|
+
* Get message status icon class (Font Awesome)
|
|
5560
5803
|
*/
|
|
5561
5804
|
static getStatusIcon(message: AXMessage): string;
|
|
5562
5805
|
/**
|
|
@@ -6136,5 +6379,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
|
|
|
6136
6379
|
*/
|
|
6137
6380
|
type AXErrorCode = typeof MESSAGE_ERRORS[keyof typeof MESSAGE_ERRORS]['code'] | typeof FILE_ERRORS[keyof typeof FILE_ERRORS]['code'] | typeof USER_ERRORS[keyof typeof USER_ERRORS]['code'] | typeof CONVERSATION_ERRORS[keyof typeof CONVERSATION_ERRORS]['code'] | typeof CONNECTION_ERRORS[keyof typeof CONNECTION_ERRORS]['code'] | typeof LOCATION_ERRORS[keyof typeof LOCATION_ERRORS]['code'] | typeof URL_ERRORS[keyof typeof URL_ERRORS]['code'] | typeof PERMISSION_ERRORS[keyof typeof PERMISSION_ERRORS]['code'];
|
|
6138
6381
|
|
|
6139
|
-
export {
|
|
6140
|
-
export type {
|
|
6382
|
+
export { AXAudioInfoBarBannerComponent, AXAudioPickerComponent, AXAudioRendererComponent, AXBaseRegistry, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXConversation2Module, AXConversationAiApiKey, AXConversationAiResponderService, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationService, AXConversationSharedStorage, AXConversationStoreService, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFallbackRendererComponent, AXFilePickerComponent, AXFileRendererComponent, AXFileUploadService, AXForwardMessageDialogComponent, AXImagePickerComponent, AXImageRendererComponent, AXInfiniteScrollDirective, AXInfoBarActionRegistry, AXInfoBarComponent, AXInfoBarSearchComponent, AXInfoBarService, AXLocationPickerComponent, AXLocationRendererComponent, AXMessageActionRegistry, AXMessageApi, AXMessageListComponent, AXMessageListNoActiveDefaultComponent, AXMessageListService, AXMessageRendererRegistry, AXNewConversationDialogComponent, AXPickerFooterComponent, AXPickerHeaderComponent, AXRealtimeApi, AXRegistryService, AXSidebarComponent, AXSidebarService, AXStickerRendererComponent, AXStickerTabComponent, AXSystemRendererComponent, AXTextRendererComponent, AXUserApi, AXVideoInfoBarBannerComponent, AXVideoPickerComponent, AXVideoRendererComponent, AXVoiceInfoBarBannerComponent, AXVoiceRecorderComponent, AXVoiceRendererComponent, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_COPY_ACTION, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_STICKER_API_KEY, CONNECTION_ERRORS, CONVERSATION_CONFIG, CONVERSATION_ERRORS, DEFAULT_COMPOSER_ACTIONS, DEFAULT_COMPOSER_TABS, DEFAULT_CONVERSATION_ITEM_ACTIONS, DEFAULT_CONVERSATION_TABS, DEFAULT_INFO_BAR_ACTIONS, DEFAULT_MESSAGE_ACTIONS, DEFAULT_MESSAGE_RENDERERS, ERROR_HANDLER_CONFIG, ERROR_MESSAGES, FILE_ERRORS, LOCATION_ERRORS, MESSAGE_ERRORS, PERMISSION_ERRORS, REGISTRY_CONFIG, URL_ERRORS, USER_ERRORS, axConversationIndexedDbStorage, conversationSharedStorage, formatErrorMessage, getDefaultConversationItemActions, getErrorMessage, mergeWithDefaults, provideConversation, sanitizeInput, validateConversationId, validateEmail, validateFile, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
|
|
6383
|
+
export type { AXApiError, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXComposerAction, AXComposerActionComponent, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXConversation, AXConversationAiResponderConfig, AXConversationConfig, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationItemAction, AXConversationItemActionContext, AXConversationMetadata, AXConversationOptions, AXConversationPermissions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXDeleteMessageCommand, AXEditMessageCommand, AXErrorCode, AXErrorHandlerConfig, AXErrorMessage, AXErrorSeverity, AXFilePayload, AXFileValidationResult, AXGroupedReaction, AXImagePayload, AXInfoBarAction, AXInfoBarActionComponent, AXInfoBarActionContext, AXInfoBarActiveBanner, AXInfoBarActiveComponent, AXLink, AXLinkPreview, AXLocationPayload, AXMention, AXMessage, AXMessageAction, AXMessageActionContext, AXMessageAvatarTemplateContext, AXMessageForwardData, AXMessageInfoBarBannerComponent, AXMessageListEmptyComponent, AXMessagePayload, AXMessageRenderer, AXMessageRendererCapabilities, AXMessageRendererComponent, AXMessageRendererContentState, AXMessageRendererState, AXMessageSearchFilters, AXMessageStatus, AXMessageType, AXNotificationEvent, AXPaginatedResult, AXPagination, AXParticipant, AXParticipantRole, AXParticipantStatus, AXParticipantUpdate, AXPinnedMessage, AXPollOption, AXPollPayload, AXPresenceStatus, AXPresenceUpdate, AXReaction, AXReadReceipt, AXRegistryConfiguration, AXRegistryItem, AXSendMessageCommand, AXStickerPayload, AXSystemPayload, AXTextFormat, AXTextPayload, AXTypingIndicator, AXUserProfileUpdate, AXUserRole, AXUserSearchFilters, AXValidationResult, AXVideoPayload, AXVoicePayload, DropdownMenuItem, FilePreview, FileUploadProgress };
|