@acorex/components 21.0.2-next.9 → 21.0.3-next.10
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/conversation2/README.md +5 -8
- package/fesm2022/acorex-components-accordion.mjs +29 -29
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-action-sheet.mjs +30 -30
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +16 -16
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-aspect-ratio.mjs +5 -5
- package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -1
- package/fesm2022/acorex-components-audio-wave.mjs +11 -11
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-autocomplete.mjs +14 -14
- package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +17 -16
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +9 -9
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-bottom-navigation.mjs +14 -14
- package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +13 -13
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +40 -20
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +35 -36
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +283 -62
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +10 -10
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +9 -9
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +13 -13
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-code-editor.mjs +27 -27
- package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +14 -14
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +84 -43
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-command.mjs +19 -19
- package/fesm2022/acorex-components-command.mjs.map +1 -1
- package/fesm2022/acorex-components-comment.mjs +35 -35
- package/fesm2022/acorex-components-comment.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +105 -105
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation2.mjs +13663 -10220
- package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +51 -51
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-data-list.mjs +31 -31
- package/fesm2022/acorex-components-data-list.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +93 -104
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +467 -86
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +174 -39
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +30 -38
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +62 -55
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +42 -49
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +19 -26
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +23 -23
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +9 -9
- package/fesm2022/acorex-components-dropdown.mjs +19 -19
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-editor.mjs +12 -12
- package/fesm2022/acorex-components-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-fab.mjs +15 -15
- package/fesm2022/acorex-components-fab.mjs.map +1 -1
- package/fesm2022/acorex-components-flow-chart.mjs +74 -58
- package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +30 -30
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-grid-layout-builder.mjs +15 -15
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +87 -87
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +11 -11
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-json-viewer.mjs +12 -12
- package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-kanban.mjs +23 -23
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +15 -15
- package/fesm2022/acorex-components-kbd.mjs.map +1 -1
- package/fesm2022/acorex-components-label.mjs +9 -9
- package/fesm2022/acorex-components-list.mjs +69 -19
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +20 -19
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +21 -21
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +46 -46
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +82 -82
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +366 -197
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-CcXuJ4IW.mjs → acorex-components-modal-acorex-components-modal-lJw2DGSj.mjs} +28 -28
- package/fesm2022/{acorex-components-modal-acorex-components-modal-CcXuJ4IW.mjs.map → acorex-components-modal-acorex-components-modal-lJw2DGSj.mjs.map} +1 -1
- package/fesm2022/{acorex-components-modal-modal-content.component-DTZu2zbU.mjs → acorex-components-modal-modal-content.component-t9kRuhc_.mjs} +39 -39
- package/fesm2022/acorex-components-modal-modal-content.component-t9kRuhc_.mjs.map +1 -0
- package/fesm2022/acorex-components-modal.mjs +1 -1
- package/fesm2022/acorex-components-navbar.mjs +8 -8
- package/fesm2022/acorex-components-notification.mjs +28 -28
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +61 -23
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +45 -21
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +10 -10
- package/fesm2022/acorex-components-paint.mjs +53 -53
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +28 -28
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-pdf-reader.mjs +9 -9
- package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +19 -19
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +31 -31
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +18 -14
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +53 -25
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +8 -8
- package/fesm2022/acorex-components-qrcode.mjs +37 -20
- package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
- package/fesm2022/acorex-components-query-builder.mjs +15 -14
- package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-radio.mjs +9 -9
- package/fesm2022/acorex-components-rail-navigation.mjs +28 -28
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +34 -34
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +17 -17
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +33 -33
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +8 -8
- package/fesm2022/acorex-components-routing-progress.mjs +8 -8
- package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-rrule.mjs +36 -36
- package/fesm2022/acorex-components-rrule.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler-picker.mjs +118 -118
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +402 -327
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +9 -9
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +73 -32
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list-2.mjs +12 -12
- package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +11 -11
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +455 -97
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +8 -8
- package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
- package/fesm2022/acorex-components-slider.mjs +7 -7
- package/fesm2022/acorex-components-sliding-item.mjs +25 -25
- package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +40 -39
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +12 -12
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +20 -20
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +19 -19
- package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +8 -8
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-text-area.mjs +9 -9
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +12 -12
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-duration.mjs +34 -32
- package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +19 -19
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +26 -26
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-toolbar.mjs +13 -13
- package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +27 -18
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view.mjs +326 -67
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +17 -17
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-video-player.mjs +8 -8
- package/fesm2022/acorex-components-video-player.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +60 -53
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/package.json +5 -4
- package/types/acorex-components-button-group.d.ts +9 -3
- package/types/acorex-components-button.d.ts +2 -8
- package/types/acorex-components-calendar.d.ts +142 -27
- package/types/acorex-components-color-palette.d.ts +2 -0
- package/types/acorex-components-conversation2.d.ts +1419 -1298
- package/types/acorex-components-data-pager.d.ts +6 -25
- package/types/acorex-components-data-table.d.ts +216 -56
- package/types/acorex-components-datetime-box.d.ts +79 -8
- package/types/acorex-components-datetime-input.d.ts +2 -2
- package/types/acorex-components-datetime-picker.d.ts +15 -5
- package/types/acorex-components-flow-chart.d.ts +4 -0
- package/types/acorex-components-list.d.ts +15 -1
- package/types/acorex-components-loading-dialog.d.ts +16 -16
- package/types/acorex-components-menu.d.ts +105 -36
- package/types/acorex-components-number-box.d.ts +9 -0
- package/types/acorex-components-otp.d.ts +18 -1
- package/types/acorex-components-popup.d.ts +11 -1
- package/types/acorex-components-qrcode.d.ts +1 -0
- package/types/acorex-components-query-builder.d.ts +1 -1
- package/types/acorex-components-scheduler.d.ts +26 -3
- package/types/acorex-components-select-box.d.ts +1 -0
- package/types/acorex-components-side-menu.d.ts +96 -34
- package/types/acorex-components-step-wizard.d.ts +2 -1
- package/types/acorex-components-time-duration.d.ts +1 -0
- package/types/acorex-components-tree-view.d.ts +43 -2
- package/types/acorex-components-wysiwyg.d.ts +6 -1
- package/fesm2022/acorex-components-modal-modal-content.component-DTZu2zbU.mjs.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as _acorex_components_conversation2 from '@acorex/components/conversation2';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, OnInit, EventEmitter, TemplateRef, InjectionToken,
|
|
4
|
-
import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXClosableComponent } from '@acorex/cdk/common';
|
|
5
|
-
import
|
|
6
|
-
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
7
|
-
import { AXListComponent } from '@acorex/components/list';
|
|
3
|
+
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
4
|
+
import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXPlacement, AXClosableComponent } from '@acorex/cdk/common';
|
|
5
|
+
import * as _acorex_components_popup from '@acorex/components/popup';
|
|
8
6
|
import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
|
|
7
|
+
import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
|
|
8
|
+
import { AXListComponent } from '@acorex/components/list';
|
|
9
9
|
import * as rxjs from 'rxjs';
|
|
10
10
|
import { Observable, BehaviorSubject, Subject } from 'rxjs';
|
|
11
11
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
@@ -13,6 +13,7 @@ import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex
|
|
|
13
13
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
14
14
|
import { AXTranslationService } from '@acorex/core/translation';
|
|
15
15
|
import { AXMapMarker } from '@acorex/components/map';
|
|
16
|
+
import { AXFileTypeInfoProvider, AXFileType, AXFileService } from '@acorex/core/file';
|
|
16
17
|
import { SafeHtml } from '@angular/platform-browser';
|
|
17
18
|
import * as i1 from '@angular/common';
|
|
18
19
|
import * as i2 from '@angular/forms';
|
|
@@ -56,271 +57,168 @@ declare class AXComposerPopupComponent implements OnDestroy {
|
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
60
|
+
* Conversation-specific upload/message types.
|
|
61
|
+
* Storage contracts live in {@link @acorex/cdk/uploader}.
|
|
61
62
|
*/
|
|
63
|
+
|
|
64
|
+
type AXUploaderReference = AXUploadReference;
|
|
65
|
+
type AXUploaderResult = AXUploadResult;
|
|
66
|
+
/** Upload options with conversation scope in metadata. */
|
|
67
|
+
type AXConversationUploadOptions = Omit<AXFileUploadOptions, 'source'> & {
|
|
68
|
+
metadata?: Record<string, unknown> & {
|
|
69
|
+
conversationId?: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
interface AXSendMessageUploadSource {
|
|
73
|
+
source: File | Blob;
|
|
74
|
+
fileName?: string;
|
|
75
|
+
mimeType?: string;
|
|
76
|
+
onProgress?: (percent: number) => void;
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
}
|
|
79
|
+
interface AXSendMessageOptions {
|
|
80
|
+
media?: AXSendMessageUploadSource;
|
|
81
|
+
localPreviewUrl?: string;
|
|
82
|
+
}
|
|
83
|
+
interface UploaderFilePreview {
|
|
84
|
+
file: File;
|
|
85
|
+
preview?: string;
|
|
86
|
+
type: 'image' | 'video' | 'audio' | 'file';
|
|
87
|
+
}
|
|
88
|
+
|
|
62
89
|
/**
|
|
63
|
-
*
|
|
90
|
+
* Message Payload Types
|
|
64
91
|
*/
|
|
92
|
+
/** Fields for one uploaded or remote media item. */
|
|
93
|
+
interface AXMediaItemFields {
|
|
94
|
+
/** HTTP(S) or other persistable URL; omit when only {@link mediaId} is stored. */
|
|
95
|
+
url?: string;
|
|
96
|
+
mediaId?: string;
|
|
97
|
+
mimeType?: string;
|
|
98
|
+
size?: number;
|
|
99
|
+
metadata?: Record<string, unknown>;
|
|
100
|
+
}
|
|
65
101
|
interface AXTextFormat {
|
|
66
|
-
/** Start position in text */
|
|
67
102
|
start: number;
|
|
68
|
-
/** End position in text */
|
|
69
103
|
end: number;
|
|
70
|
-
/** Format type: bold, italic, code, strikethrough, etc. */
|
|
71
104
|
type: 'bold' | 'italic' | 'code' | 'strikethrough' | 'underline' | 'spoiler';
|
|
72
105
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Mention information
|
|
75
|
-
*/
|
|
76
106
|
interface AXMention {
|
|
77
|
-
/** Start position in text */
|
|
78
107
|
start: number;
|
|
79
|
-
/** End position in text */
|
|
80
108
|
end: number;
|
|
81
|
-
/** Mentioned user ID */
|
|
82
109
|
userId: string;
|
|
83
|
-
/** Mentioned user display name */
|
|
84
110
|
userName: string;
|
|
85
111
|
}
|
|
86
|
-
/**
|
|
87
|
-
* Link information
|
|
88
|
-
*/
|
|
89
112
|
interface AXLink {
|
|
90
|
-
/** Start position in text */
|
|
91
113
|
start: number;
|
|
92
|
-
/** End position in text */
|
|
93
114
|
end: number;
|
|
94
|
-
/** URL */
|
|
95
115
|
url: string;
|
|
96
|
-
/** Link preview data (optional) */
|
|
97
116
|
preview?: AXLinkPreview;
|
|
98
117
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Link preview metadata
|
|
101
|
-
*/
|
|
102
118
|
interface AXLinkPreview {
|
|
103
|
-
/** Page title */
|
|
104
119
|
title?: string;
|
|
105
|
-
/** Page description */
|
|
106
120
|
description?: string;
|
|
107
|
-
/** Preview image URL */
|
|
108
121
|
image?: string;
|
|
109
|
-
/** Site name */
|
|
110
122
|
siteName?: string;
|
|
111
123
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Text message payload
|
|
114
|
-
*/
|
|
115
124
|
interface AXTextPayload {
|
|
116
|
-
/** Message type */
|
|
117
125
|
type: 'text';
|
|
118
|
-
/** Message text content */
|
|
119
126
|
text: string;
|
|
120
|
-
/** Text formatting information */
|
|
121
127
|
formatting?: AXTextFormat[];
|
|
122
|
-
/** User mentions */
|
|
123
128
|
mentions?: AXMention[];
|
|
124
|
-
/** Links in the message */
|
|
125
129
|
links?: AXLink[];
|
|
126
130
|
}
|
|
127
|
-
|
|
128
|
-
* Image message payload
|
|
129
|
-
*/
|
|
130
|
-
interface AXImagePayload {
|
|
131
|
-
/** Message type */
|
|
132
|
-
type: 'image';
|
|
133
|
-
/** Full-size image URL */
|
|
134
|
-
url: string;
|
|
135
|
-
/** Thumbnail URL for preview */
|
|
131
|
+
interface AXImageMediaItem extends AXMediaItemFields {
|
|
136
132
|
thumbnailUrl?: string;
|
|
137
|
-
/** Image width in pixels */
|
|
138
133
|
width: number;
|
|
139
|
-
/** Image height in pixels */
|
|
140
134
|
height: number;
|
|
141
|
-
/** Optional caption */
|
|
142
|
-
caption?: string;
|
|
143
|
-
/** File size in bytes */
|
|
144
|
-
size?: number;
|
|
145
|
-
/** MIME type */
|
|
146
|
-
mimeType?: string;
|
|
147
|
-
/** Blurhash for progressive loading */
|
|
148
135
|
blurhash?: string;
|
|
149
136
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
/** Video file URL */
|
|
157
|
-
url: string;
|
|
158
|
-
/** Thumbnail/poster image URL */
|
|
137
|
+
interface AXImagePayload {
|
|
138
|
+
type: 'image';
|
|
139
|
+
images: AXImageMediaItem[];
|
|
140
|
+
caption?: string;
|
|
141
|
+
}
|
|
142
|
+
interface AXVideoMediaItem extends AXMediaItemFields {
|
|
159
143
|
thumbnailUrl?: string;
|
|
160
|
-
/** Video duration in seconds */
|
|
161
144
|
duration: number;
|
|
162
|
-
/** Video width in pixels */
|
|
163
145
|
width: number;
|
|
164
|
-
/** Video height in pixels */
|
|
165
146
|
height: number;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
/** Optional caption */
|
|
147
|
+
}
|
|
148
|
+
interface AXVideoPayload {
|
|
149
|
+
type: 'video';
|
|
150
|
+
videos: AXVideoMediaItem[];
|
|
171
151
|
caption?: string;
|
|
172
152
|
}
|
|
173
|
-
|
|
174
|
-
* Audio message payload (e.g., music, podcast)
|
|
175
|
-
*/
|
|
176
|
-
interface AXAudioPayload {
|
|
177
|
-
/** Message type */
|
|
178
|
-
type: 'audio';
|
|
179
|
-
/** Audio file URL */
|
|
180
|
-
url: string;
|
|
181
|
-
/** Duration in seconds */
|
|
153
|
+
interface AXAudioMediaItem extends AXMediaItemFields {
|
|
182
154
|
duration: number;
|
|
183
|
-
/** File size in bytes */
|
|
184
|
-
size: number;
|
|
185
|
-
/** MIME type */
|
|
186
|
-
mimeType?: string;
|
|
187
|
-
/** Audio title */
|
|
188
155
|
title?: string;
|
|
189
|
-
/** Artist name */
|
|
190
156
|
artist?: string;
|
|
191
|
-
/** Album art URL */
|
|
192
157
|
coverUrl?: string;
|
|
193
|
-
/** Waveform data for visualization */
|
|
194
158
|
waveform?: number[];
|
|
195
159
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
160
|
+
interface AXAudioPayload {
|
|
161
|
+
type: 'audio';
|
|
162
|
+
audios: AXAudioMediaItem[];
|
|
163
|
+
caption?: string;
|
|
164
|
+
}
|
|
165
|
+
interface AXVoicePayload extends AXMediaItemFields {
|
|
201
166
|
type: 'voice';
|
|
202
|
-
/** Voice recording URL */
|
|
203
|
-
url: string;
|
|
204
|
-
/** Duration in seconds */
|
|
205
167
|
duration: number;
|
|
206
|
-
/** File size in bytes */
|
|
207
|
-
size: number;
|
|
208
|
-
/** MIME type */
|
|
209
|
-
mimeType?: string;
|
|
210
|
-
/** Waveform data for visualization */
|
|
211
168
|
waveform?: number[];
|
|
212
|
-
/** Whether the voice message has been played */
|
|
213
169
|
played?: boolean;
|
|
214
170
|
}
|
|
215
|
-
|
|
216
|
-
* File message payload
|
|
217
|
-
*/
|
|
218
|
-
interface AXFilePayload {
|
|
219
|
-
/** Message type */
|
|
220
|
-
type: 'file';
|
|
221
|
-
/** File download URL */
|
|
222
|
-
url: string;
|
|
223
|
-
/** File name */
|
|
171
|
+
interface AXFileMediaItem extends AXMediaItemFields {
|
|
224
172
|
name: string;
|
|
225
|
-
/** File size in bytes */
|
|
226
|
-
size: number;
|
|
227
|
-
/** MIME type */
|
|
228
173
|
mimeType: string;
|
|
229
|
-
/** Optional thumbnail for supported file types */
|
|
230
174
|
thumbnailUrl?: string;
|
|
231
|
-
/** File extension */
|
|
232
175
|
extension?: string;
|
|
233
176
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
177
|
+
interface AXFilePayload {
|
|
178
|
+
type: 'file';
|
|
179
|
+
files: AXFileMediaItem[];
|
|
180
|
+
caption?: string;
|
|
181
|
+
}
|
|
237
182
|
interface AXLocationPayload {
|
|
238
|
-
/** Message type */
|
|
239
183
|
type: 'location';
|
|
240
|
-
/** Latitude coordinate */
|
|
241
184
|
latitude: number;
|
|
242
|
-
/** Longitude coordinate */
|
|
243
185
|
longitude: number;
|
|
244
|
-
/** Location name */
|
|
245
186
|
name?: string;
|
|
246
|
-
/** Formatted address */
|
|
247
187
|
address?: string;
|
|
248
|
-
/** Static map image URL */
|
|
249
188
|
mapImageUrl?: string;
|
|
250
|
-
/** Accuracy in meters */
|
|
251
189
|
accuracy?: number;
|
|
252
190
|
}
|
|
253
|
-
|
|
254
|
-
* Sticker message payload
|
|
255
|
-
*/
|
|
256
|
-
interface AXStickerPayload {
|
|
257
|
-
/** Message type */
|
|
191
|
+
interface AXStickerPayload extends AXMediaItemFields {
|
|
258
192
|
type: 'sticker';
|
|
259
|
-
/** Sticker unique ID */
|
|
260
193
|
id: string;
|
|
261
|
-
/** Sticker pack ID */
|
|
262
194
|
packId: string;
|
|
263
|
-
/** Sticker image URL */
|
|
264
|
-
url: string;
|
|
265
|
-
/** Whether sticker is animated */
|
|
266
195
|
animated: boolean;
|
|
267
|
-
/** Sticker width */
|
|
268
196
|
width?: number;
|
|
269
|
-
/** Sticker height */
|
|
270
197
|
height?: number;
|
|
271
|
-
/** Emoji representation */
|
|
272
198
|
emoji?: string;
|
|
273
199
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
200
|
+
interface AXPollOption {
|
|
201
|
+
id: string;
|
|
202
|
+
text: string;
|
|
203
|
+
votes: number;
|
|
204
|
+
voters?: string[];
|
|
205
|
+
}
|
|
277
206
|
interface AXPollPayload {
|
|
278
|
-
/** Message type */
|
|
279
207
|
type: 'poll';
|
|
280
|
-
/** Poll question */
|
|
281
208
|
question: string;
|
|
282
|
-
/** Poll options */
|
|
283
209
|
options: AXPollOption[];
|
|
284
|
-
/** Whether multiple choices are allowed */
|
|
285
210
|
multipleChoice: boolean;
|
|
286
|
-
/** Whether poll is anonymous */
|
|
287
211
|
anonymous: boolean;
|
|
288
|
-
/** Poll expiry date */
|
|
289
212
|
expiresAt?: Date;
|
|
290
|
-
/** Total vote count */
|
|
291
213
|
totalVotes?: number;
|
|
292
214
|
}
|
|
293
|
-
/**
|
|
294
|
-
* Poll option
|
|
295
|
-
*/
|
|
296
|
-
interface AXPollOption {
|
|
297
|
-
/** Option ID */
|
|
298
|
-
id: string;
|
|
299
|
-
/** Option text */
|
|
300
|
-
text: string;
|
|
301
|
-
/** Vote count */
|
|
302
|
-
votes: number;
|
|
303
|
-
/** User IDs who voted for this option */
|
|
304
|
-
voters?: string[];
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* System message payload (for notifications, events, etc.)
|
|
308
|
-
*/
|
|
309
215
|
interface AXSystemPayload {
|
|
310
|
-
/** Message type */
|
|
311
216
|
type: 'system';
|
|
312
|
-
/** System event type */
|
|
313
217
|
eventType: 'user_joined' | 'user_left' | 'title_changed' | 'avatar_changed' | 'custom';
|
|
314
|
-
/** Message text */
|
|
315
218
|
text: string;
|
|
316
|
-
/** Related user IDs */
|
|
317
219
|
userIds?: string[];
|
|
318
|
-
/** Additional data */
|
|
319
220
|
data?: Record<string, unknown>;
|
|
320
221
|
}
|
|
321
|
-
/**
|
|
322
|
-
* Union type of all message payloads
|
|
323
|
-
*/
|
|
324
222
|
type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload | AXPollPayload | AXSystemPayload;
|
|
325
223
|
|
|
326
224
|
/**
|
|
@@ -353,6 +251,11 @@ interface AXMessage {
|
|
|
353
251
|
senderId: string;
|
|
354
252
|
/** Message type */
|
|
355
253
|
type: AXMessageType;
|
|
254
|
+
/**
|
|
255
|
+
* File-type catalog name when this message uses a composer file type (image, video, …).
|
|
256
|
+
* Omitted for text, location, system, etc.
|
|
257
|
+
*/
|
|
258
|
+
fileType?: string;
|
|
356
259
|
/** Message creation timestamp */
|
|
357
260
|
timestamp: Date;
|
|
358
261
|
/** Type-specific message payload */
|
|
@@ -412,6 +315,8 @@ interface AXSendMessageCommand {
|
|
|
412
315
|
conversationId: string;
|
|
413
316
|
/** Message type */
|
|
414
317
|
type: AXMessageType;
|
|
318
|
+
/** File-type catalog when applicable (see {@link AXMessage.fileType}). */
|
|
319
|
+
fileType?: string;
|
|
415
320
|
/** Message payload */
|
|
416
321
|
payload: AXMessagePayload;
|
|
417
322
|
/** Reply to message ID (optional) */
|
|
@@ -461,6 +366,16 @@ interface AXDeleteMessageCommand {
|
|
|
461
366
|
*/
|
|
462
367
|
type AXParticipantRole = 'admin' | 'moderator' | 'member';
|
|
463
368
|
type AXParticipantStatus = 'online' | 'offline' | 'away';
|
|
369
|
+
/** Extended profile fields shown in private-chat info panels. */
|
|
370
|
+
interface AXUserProfile {
|
|
371
|
+
bio?: string;
|
|
372
|
+
phone?: string;
|
|
373
|
+
email?: string;
|
|
374
|
+
username?: string;
|
|
375
|
+
location?: string;
|
|
376
|
+
company?: string;
|
|
377
|
+
title?: string;
|
|
378
|
+
}
|
|
464
379
|
interface AXParticipant {
|
|
465
380
|
/** Unique identifier for the participant */
|
|
466
381
|
id: string;
|
|
@@ -468,9 +383,11 @@ interface AXParticipant {
|
|
|
468
383
|
name: string;
|
|
469
384
|
/**
|
|
470
385
|
* Short line shown under the name in lists (e.g. job title, status line).
|
|
471
|
-
* Distinct from long-form bio in optional `
|
|
386
|
+
* Distinct from long-form bio in optional `profile.bio`.
|
|
472
387
|
*/
|
|
473
388
|
description?: string;
|
|
389
|
+
/** Optional extended profile details for private chats. */
|
|
390
|
+
profile?: AXUserProfile;
|
|
474
391
|
/** Avatar/profile image URL */
|
|
475
392
|
avatar?: string;
|
|
476
393
|
/**
|
|
@@ -506,27 +423,6 @@ interface AXConversationStatus {
|
|
|
506
423
|
/** Last seen timestamp (for private chats when offline) */
|
|
507
424
|
lastSeen?: Date;
|
|
508
425
|
}
|
|
509
|
-
/**
|
|
510
|
-
* Conversation permissions
|
|
511
|
-
*/
|
|
512
|
-
interface AXConversationPermissions {
|
|
513
|
-
/** Can send messages */
|
|
514
|
-
canSendMessages: boolean;
|
|
515
|
-
/** Can send media */
|
|
516
|
-
canSendMedia: boolean;
|
|
517
|
-
/** Can add members (groups) */
|
|
518
|
-
canAddMembers: boolean;
|
|
519
|
-
/** Can remove members (groups) */
|
|
520
|
-
canRemoveMembers: boolean;
|
|
521
|
-
/** Can change conversation info */
|
|
522
|
-
canEditInfo: boolean;
|
|
523
|
-
/** Can pin messages */
|
|
524
|
-
canPinMessages: boolean;
|
|
525
|
-
/** Can delete messages */
|
|
526
|
-
canDeleteMessages: boolean;
|
|
527
|
-
/** Custom permissions */
|
|
528
|
-
custom?: Record<string, boolean>;
|
|
529
|
-
}
|
|
530
426
|
/**
|
|
531
427
|
* Conversation settings
|
|
532
428
|
*/
|
|
@@ -587,8 +483,6 @@ interface AXConversation {
|
|
|
587
483
|
unreadMentions?: number;
|
|
588
484
|
/** Current status (typing, presence, etc.) */
|
|
589
485
|
status: AXConversationStatus;
|
|
590
|
-
/** User permissions in this conversation */
|
|
591
|
-
permissions: AXConversationPermissions;
|
|
592
486
|
/** User-specific settings */
|
|
593
487
|
settings: AXConversationSettings;
|
|
594
488
|
/** Pinned messages IDs */
|
|
@@ -661,144 +555,6 @@ interface AXConversationSort {
|
|
|
661
555
|
direction: 'asc' | 'desc';
|
|
662
556
|
}
|
|
663
557
|
|
|
664
|
-
declare class AXComposerComponent implements OnDestroy {
|
|
665
|
-
#private;
|
|
666
|
-
private readonly conversationService;
|
|
667
|
-
private readonly messageApi;
|
|
668
|
-
private readonly composerService;
|
|
669
|
-
private readonly messageListService;
|
|
670
|
-
private readonly popupService;
|
|
671
|
-
private readonly config;
|
|
672
|
-
private readonly translation;
|
|
673
|
-
/** Access registry through conversation service */
|
|
674
|
-
private get registry();
|
|
675
|
-
/** Input element reference */
|
|
676
|
-
private readonly inputElementRef;
|
|
677
|
-
/** Draft text - use service */
|
|
678
|
-
readonly draftText: _angular_core.WritableSignal<string>;
|
|
679
|
-
/** Attachments - use service */
|
|
680
|
-
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
681
|
-
/** Editing message */
|
|
682
|
-
readonly editingMessage: _angular_core.WritableSignal<any>;
|
|
683
|
-
/** Replying to message */
|
|
684
|
-
readonly replyingToMessage: _angular_core.WritableSignal<AXMessage>;
|
|
685
|
-
/** Show typing indicator - use service */
|
|
686
|
-
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
687
|
-
/** Message sent event */
|
|
688
|
-
readonly messageSent: _angular_core.OutputEmitterRef<AXSendMessageCommand>;
|
|
689
|
-
/** Emoji clicked event */
|
|
690
|
-
readonly emojiClick: _angular_core.OutputEmitterRef<void>;
|
|
691
|
-
/** Attach clicked event */
|
|
692
|
-
readonly attachClick: _angular_core.OutputEmitterRef<void>;
|
|
693
|
-
/** Voice clicked event */
|
|
694
|
-
readonly voiceClick: _angular_core.OutputEmitterRef<void>;
|
|
695
|
-
/** Active conversation */
|
|
696
|
-
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
697
|
-
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
698
|
-
/** Active component from service */
|
|
699
|
-
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXComposerActiveComponent>;
|
|
700
|
-
/** Emoji popover state */
|
|
701
|
-
private readonly emojiPopoverRef;
|
|
702
|
-
readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
703
|
-
readonly composerPopupComponent: typeof AXComposerPopupComponent;
|
|
704
|
-
/** Input placeholder - use service */
|
|
705
|
-
readonly placeholder: _angular_core.Signal<string>;
|
|
706
|
-
/** Sending message state */
|
|
707
|
-
readonly sendingMessage: _angular_core.WritableSignal<boolean>;
|
|
708
|
-
/** Typing indicator subject for rate limiting */
|
|
709
|
-
private readonly typingSubject;
|
|
710
|
-
constructor();
|
|
711
|
-
private draftSaveTimeout?;
|
|
712
|
-
/** Number of input rows - use service */
|
|
713
|
-
readonly inputRows: _angular_core.Signal<number>;
|
|
714
|
-
/** Can send message - use service */
|
|
715
|
-
readonly canSend: _angular_core.Signal<boolean>;
|
|
716
|
-
/** Left actions from registry - use service */
|
|
717
|
-
readonly leftActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
718
|
-
/** Right actions from registry - use service */
|
|
719
|
-
readonly rightActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
720
|
-
/** Left inline actions (location = 'inline' or undefined) */
|
|
721
|
-
readonly leftInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
722
|
-
/** Left menu actions (location = 'menu') */
|
|
723
|
-
readonly leftMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
724
|
-
/** Right inline actions (location = 'inline' or undefined) */
|
|
725
|
-
readonly rightInlineActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
726
|
-
/** Right menu actions (location = 'menu') */
|
|
727
|
-
readonly rightMenuActions: _angular_core.Signal<_acorex_components_conversation2.AXComposerAction[]>;
|
|
728
|
-
/** Handle key down */
|
|
729
|
-
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
730
|
-
/** Handle input */
|
|
731
|
-
onInput(): void;
|
|
732
|
-
/** Send typing indicator (throttled via RxJS) */
|
|
733
|
-
private sendTypingIndicator;
|
|
734
|
-
/** Cleanup on destroy */
|
|
735
|
-
ngOnDestroy(): void;
|
|
736
|
-
/** Handle send click */
|
|
737
|
-
onSendClick(): Promise<void>;
|
|
738
|
-
/** Handle emoji click */
|
|
739
|
-
onEmojiClick(event?: MouseEvent): Promise<void>;
|
|
740
|
-
/** Handle emoji popover closed */
|
|
741
|
-
onEmojiPopoverClosed(): void;
|
|
742
|
-
/** Handle emoji/sticker selection from popup */
|
|
743
|
-
onEmojiItemSelected(item: string | AXStickerPayload): void;
|
|
744
|
-
/** Send sticker message */
|
|
745
|
-
private sendSticker;
|
|
746
|
-
/** Get inputs for emoji popup component */
|
|
747
|
-
getEmojiPopupInputs(): Record<string, unknown>;
|
|
748
|
-
/** Handle attach click */
|
|
749
|
-
onAttachClick(): void;
|
|
750
|
-
/** Handle voice click */
|
|
751
|
-
onVoiceClick(): void;
|
|
752
|
-
/** Remove attachment */
|
|
753
|
-
removeAttachment(index: number): void;
|
|
754
|
-
/** Files selected via uploader */
|
|
755
|
-
onFilesSelected(e: AXUploaderChangedEvent): Promise<void>;
|
|
756
|
-
/**
|
|
757
|
-
* Validate file before upload
|
|
758
|
-
* @param file - File to validate
|
|
759
|
-
* @throws {Error} If file is invalid
|
|
760
|
-
*/
|
|
761
|
-
private validateFile;
|
|
762
|
-
/** Cancel edit/reply mode */
|
|
763
|
-
cancelEditReply(): void;
|
|
764
|
-
/** Reset all composer states (used when switching conversations) */
|
|
765
|
-
private resetComposerState;
|
|
766
|
-
/** Start editing a message */
|
|
767
|
-
startEdit(message: any): void;
|
|
768
|
-
/** Start replying to a message */
|
|
769
|
-
startReply(message: AXMessage): void;
|
|
770
|
-
/** Handle action click */
|
|
771
|
-
onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
|
|
772
|
-
/** Check if action is enabled */
|
|
773
|
-
isActionEnabled(action: any): boolean;
|
|
774
|
-
/** Get replying sender name */
|
|
775
|
-
getReplyingSenderName(): string;
|
|
776
|
-
getActionLabel(action: {
|
|
777
|
-
label: string;
|
|
778
|
-
}): string;
|
|
779
|
-
/** Get replying message text */
|
|
780
|
-
getReplyingMessageText(): string;
|
|
781
|
-
/** Preview object for replying banner (type, icon, value) */
|
|
782
|
-
getReplyingPreview(): {
|
|
783
|
-
value: string;
|
|
784
|
-
type: string;
|
|
785
|
-
icon: string;
|
|
786
|
-
} | null;
|
|
787
|
-
/** Preview object for editing banner (type, icon, value) */
|
|
788
|
-
getEditingPreview(): {
|
|
789
|
-
value: string;
|
|
790
|
-
type: string;
|
|
791
|
-
icon: string;
|
|
792
|
-
} | null;
|
|
793
|
-
/** Handle reply preview click - scroll to original message */
|
|
794
|
-
onReplyPreviewClick(): void;
|
|
795
|
-
/** Get inputs for dynamic component */
|
|
796
|
-
getComponentInputs(): Record<string, unknown>;
|
|
797
|
-
onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
|
|
798
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
|
|
799
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
800
|
-
}
|
|
801
|
-
|
|
802
558
|
/**
|
|
803
559
|
* Abstract Base Registry
|
|
804
560
|
* Base class for all registries with common functionality
|
|
@@ -903,6 +659,14 @@ interface AXComposerActionContext {
|
|
|
903
659
|
interface AXComposerActionComponent {
|
|
904
660
|
readonly conversation: InputSignal<AXConversation>;
|
|
905
661
|
readonly service?: InputSignal<AXComposerService | undefined>;
|
|
662
|
+
/** Max files per message; falls back to {@link AXConversationConfig.maxFilesPerMessage}. */
|
|
663
|
+
readonly maxFiles?: InputSignal<number | undefined>;
|
|
664
|
+
/** Pre-fill picker when opened from message-list drag-and-drop. */
|
|
665
|
+
readonly initialFiles?: InputSignal<File[]>;
|
|
666
|
+
/** Set by {@link AXPopupService} when the picker is shown in a popup. */
|
|
667
|
+
readonly __popup__?: InputSignal<_acorex_components_popup.AXPopupRef | undefined>;
|
|
668
|
+
/** Cancel in-flight uploads when the picker is closed or replaced. */
|
|
669
|
+
abortInProgressUploads?(): void;
|
|
906
670
|
}
|
|
907
671
|
/**
|
|
908
672
|
* Composer action registration
|
|
@@ -939,7 +703,13 @@ interface AXComposerAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
|
939
703
|
className?: string;
|
|
940
704
|
/** Badge text/count */
|
|
941
705
|
badge?: string | number;
|
|
706
|
+
/** File catalog for this action's picker; built-ins use {@link provideConversationComposerFileTypes}. */
|
|
707
|
+
fileType?: string;
|
|
708
|
+
/** Max files per message; falls back to {@link AXConversationConfig.maxFilesPerMessage}. */
|
|
709
|
+
maxFiles?: number;
|
|
942
710
|
}
|
|
711
|
+
/** Validation rules and built-in conversation file types. */
|
|
712
|
+
declare function provideConversationFileCatalog(_extraActions?: readonly AXComposerAction[]): Provider[];
|
|
943
713
|
/**
|
|
944
714
|
* Composer Action Registry Service
|
|
945
715
|
*/
|
|
@@ -947,6 +717,7 @@ declare class AXComposerActionRegistry {
|
|
|
947
717
|
private readonly _actions;
|
|
948
718
|
private readonly translation;
|
|
949
719
|
private readonly injector;
|
|
720
|
+
private readonly fileTypeRegistry;
|
|
950
721
|
constructor();
|
|
951
722
|
/** All registered actions */
|
|
952
723
|
readonly actions: _angular_core.Signal<AXComposerAction[]>;
|
|
@@ -966,6 +737,7 @@ declare class AXComposerActionRegistry {
|
|
|
966
737
|
* Register a composer action
|
|
967
738
|
*/
|
|
968
739
|
register(action: AXComposerAction): void;
|
|
740
|
+
private ensureFileTypeExists;
|
|
969
741
|
/**
|
|
970
742
|
* Unregister a composer action
|
|
971
743
|
*/
|
|
@@ -979,6 +751,14 @@ declare class AXComposerActionRegistry {
|
|
|
979
751
|
*/
|
|
980
752
|
getEnabledActions(position: 'left' | 'right', context: AXComposerActionContext): AXComposerAction[];
|
|
981
753
|
isActionEnabled(action: AXComposerAction, context: AXComposerActionContext): boolean;
|
|
754
|
+
/**
|
|
755
|
+
* Picker actions for a file catalog (by priority), when visible and enabled.
|
|
756
|
+
*/
|
|
757
|
+
findPickerActionsForFileType(catalogName: string, context: AXComposerActionContext): AXComposerAction[];
|
|
758
|
+
/**
|
|
759
|
+
* First picker action for a file catalog (by priority), when visible and enabled.
|
|
760
|
+
*/
|
|
761
|
+
findPickerActionForFileType(catalogName: string, context: AXComposerActionContext): AXComposerAction | undefined;
|
|
982
762
|
/**
|
|
983
763
|
* Get action by ID
|
|
984
764
|
*/
|
|
@@ -1310,95 +1090,8 @@ declare class AXInfoBarActionRegistry extends AXBaseRegistry<AXInfoBarAction> {
|
|
|
1310
1090
|
}
|
|
1311
1091
|
|
|
1312
1092
|
/**
|
|
1313
|
-
*
|
|
1314
|
-
|
|
1315
|
-
interface AXMessageActionContext {
|
|
1316
|
-
/** The message */
|
|
1317
|
-
message: AXMessage;
|
|
1318
|
-
/** Current user */
|
|
1319
|
-
currentUser: AXParticipant;
|
|
1320
|
-
/** All conversation participants */
|
|
1321
|
-
participants: AXParticipant[];
|
|
1322
|
-
/** Custom context data */
|
|
1323
|
-
custom?: Record<string, unknown>;
|
|
1324
|
-
}
|
|
1325
|
-
/**
|
|
1326
|
-
* Message action registration
|
|
1327
|
-
*/
|
|
1328
|
-
interface AXMessageAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
1329
|
-
/** Display label */
|
|
1330
|
-
label: string;
|
|
1331
|
-
/** Icon name/class */
|
|
1332
|
-
icon?: string;
|
|
1333
|
-
/** Show as inline button */
|
|
1334
|
-
showInline?: boolean;
|
|
1335
|
-
/** Visibility condition */
|
|
1336
|
-
visible: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1337
|
-
/** Enabled condition */
|
|
1338
|
-
enabled: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1339
|
-
/** Action handler */
|
|
1340
|
-
handler: (context: AXMessageActionContext) => void | Promise<void>;
|
|
1341
|
-
/** Confirmation message (if required) */
|
|
1342
|
-
confirmMessage?: string;
|
|
1343
|
-
/** Keyboard shortcut */
|
|
1344
|
-
shortcut?: string;
|
|
1345
|
-
/** Custom class for styling */
|
|
1346
|
-
className?: string;
|
|
1347
|
-
/** Destructive action (shows warning) */
|
|
1348
|
-
destructive?: boolean;
|
|
1349
|
-
}
|
|
1350
|
-
/**
|
|
1351
|
-
* Message Action Registry Service
|
|
1352
|
-
*/
|
|
1353
|
-
declare class AXMessageActionRegistry {
|
|
1354
|
-
private readonly _actions;
|
|
1355
|
-
private readonly translation;
|
|
1356
|
-
private readonly injector;
|
|
1357
|
-
constructor();
|
|
1358
|
-
/** All registered actions */
|
|
1359
|
-
readonly actions: _angular_core.Signal<AXMessageAction[]>;
|
|
1360
|
-
/** Actions sorted by priority */
|
|
1361
|
-
readonly sortedActions: _angular_core.Signal<AXMessageAction[]>;
|
|
1362
|
-
/**
|
|
1363
|
-
* Register a message action
|
|
1364
|
-
*/
|
|
1365
|
-
register(action: AXMessageAction): void;
|
|
1366
|
-
/**
|
|
1367
|
-
* Unregister a message action
|
|
1368
|
-
*/
|
|
1369
|
-
unregister(id: string): void;
|
|
1370
|
-
/**
|
|
1371
|
-
* Get all actions for a specific message
|
|
1372
|
-
*/
|
|
1373
|
-
getActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1374
|
-
/**
|
|
1375
|
-
* Get menu actions for a message
|
|
1376
|
-
*/
|
|
1377
|
-
getMenuActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1378
|
-
getActionLabel(action: AXMessageAction): string;
|
|
1379
|
-
/**
|
|
1380
|
-
* Get inline actions for a message
|
|
1381
|
-
*/
|
|
1382
|
-
getInlineActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1383
|
-
/**
|
|
1384
|
-
* Get action by ID
|
|
1385
|
-
*/
|
|
1386
|
-
getActionById(id: string): AXMessageAction | undefined;
|
|
1387
|
-
/**
|
|
1388
|
-
* Execute an action
|
|
1389
|
-
*/
|
|
1390
|
-
executeAction(actionId: string, context: AXMessageActionContext): Promise<void>;
|
|
1391
|
-
/**
|
|
1392
|
-
* Clear all actions
|
|
1393
|
-
*/
|
|
1394
|
-
clear(): void;
|
|
1395
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageActionRegistry, never>;
|
|
1396
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageActionRegistry>;
|
|
1397
|
-
}
|
|
1398
|
-
|
|
1399
|
-
/**
|
|
1400
|
-
* Message Renderer Registry
|
|
1401
|
-
* Register custom message renderers for different message types
|
|
1093
|
+
* Message Renderer Registry
|
|
1094
|
+
* Register custom message renderers for different message types
|
|
1402
1095
|
*/
|
|
1403
1096
|
|
|
1404
1097
|
/**
|
|
@@ -1439,6 +1132,8 @@ interface AXMessageRendererState {
|
|
|
1439
1132
|
interface AXMessageRendererComponent {
|
|
1440
1133
|
readonly message: InputSignal<AXMessage>;
|
|
1441
1134
|
readonly rendererState: Signal<AXMessageRendererState>;
|
|
1135
|
+
/** Plain-text copy for this message (does not write to the clipboard). */
|
|
1136
|
+
copy?(): string | Promise<string>;
|
|
1442
1137
|
}
|
|
1443
1138
|
/**
|
|
1444
1139
|
* Contract for components used as {@link AXMessageRenderer.infoBarBanner}.
|
|
@@ -1468,6 +1163,8 @@ interface AXMessageRenderer {
|
|
|
1468
1163
|
displayName?: string;
|
|
1469
1164
|
/** Icon name/class */
|
|
1470
1165
|
icon?: string;
|
|
1166
|
+
/** Linked file type catalog name (for utility APIs like preview/duration). */
|
|
1167
|
+
fileType?: string;
|
|
1471
1168
|
/**
|
|
1472
1169
|
* Optional composer actions co-located with this message type (e.g. pickers that produce this message).
|
|
1473
1170
|
* Registered with {@link AXComposerActionRegistry} when the renderer is registered.
|
|
@@ -1519,116 +1216,370 @@ declare class AXMessageRendererRegistry {
|
|
|
1519
1216
|
}
|
|
1520
1217
|
|
|
1521
1218
|
/**
|
|
1522
|
-
*
|
|
1219
|
+
* Action context provided to handlers
|
|
1523
1220
|
*/
|
|
1524
|
-
interface
|
|
1525
|
-
/**
|
|
1526
|
-
|
|
1527
|
-
/**
|
|
1528
|
-
|
|
1529
|
-
/**
|
|
1530
|
-
|
|
1221
|
+
interface AXMessageActionContext {
|
|
1222
|
+
/** The message */
|
|
1223
|
+
message: AXMessage;
|
|
1224
|
+
/** Current user */
|
|
1225
|
+
currentUser: AXParticipant;
|
|
1226
|
+
/** All conversation participants */
|
|
1227
|
+
participants: AXParticipant[];
|
|
1228
|
+
/** Mounted message renderer for this row (see {@link AXMessageRendererComponent.copy}). */
|
|
1229
|
+
renderer?: AXMessageRendererComponent;
|
|
1230
|
+
/** Custom context data */
|
|
1231
|
+
custom?: Record<string, unknown>;
|
|
1531
1232
|
}
|
|
1532
|
-
|
|
1533
|
-
|
|
1233
|
+
/**
|
|
1234
|
+
* Message action registration
|
|
1235
|
+
*/
|
|
1236
|
+
interface AXMessageAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
1237
|
+
/** Display label */
|
|
1238
|
+
label: string;
|
|
1239
|
+
/** Icon name/class */
|
|
1240
|
+
icon?: string;
|
|
1241
|
+
/** Show as inline button */
|
|
1242
|
+
showInline?: boolean;
|
|
1243
|
+
/** Visibility condition */
|
|
1244
|
+
visible: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1245
|
+
/** Enabled condition */
|
|
1246
|
+
enabled: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1247
|
+
/** Action handler */
|
|
1248
|
+
handler: (context: AXMessageActionContext) => void | Promise<void>;
|
|
1249
|
+
/** Confirmation message (if required) */
|
|
1250
|
+
confirmMessage?: string;
|
|
1251
|
+
/** Keyboard shortcut */
|
|
1252
|
+
shortcut?: string;
|
|
1253
|
+
/** Custom class for styling */
|
|
1254
|
+
className?: string;
|
|
1255
|
+
/** Destructive action (shows warning) */
|
|
1256
|
+
destructive?: boolean;
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* Message Action Registry Service
|
|
1260
|
+
*/
|
|
1261
|
+
declare class AXMessageActionRegistry {
|
|
1262
|
+
private readonly _actions;
|
|
1534
1263
|
private readonly translation;
|
|
1535
|
-
private
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
readonly
|
|
1539
|
-
|
|
1540
|
-
readonly
|
|
1541
|
-
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
1542
|
-
/** Active component being shown in composer (full-width mode) */
|
|
1543
|
-
private readonly _activeComponent;
|
|
1544
|
-
readonly activeComponent: _angular_core.Signal<AXComposerActiveComponent>;
|
|
1545
|
-
/** Draft text */
|
|
1546
|
-
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1547
|
-
/** Attachments */
|
|
1548
|
-
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
1549
|
-
/** Show typing indicator */
|
|
1550
|
-
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1551
|
-
/** Input placeholder */
|
|
1552
|
-
readonly placeholder: _angular_core.Signal<string>;
|
|
1553
|
-
/** Number of input rows */
|
|
1554
|
-
readonly inputRows: _angular_core.Signal<number>;
|
|
1555
|
-
/** Can send message */
|
|
1556
|
-
readonly canSend: _angular_core.Signal<boolean>;
|
|
1557
|
-
/** Composer action context */
|
|
1558
|
-
readonly actionContext: _angular_core.Signal<AXComposerActionContext>;
|
|
1559
|
-
/** Left actions from registry */
|
|
1560
|
-
readonly leftActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1561
|
-
/** Right actions from registry */
|
|
1562
|
-
readonly rightActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1563
|
-
/** Left inline actions (location = 'inline' or undefined) */
|
|
1564
|
-
readonly leftInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1565
|
-
/** Left menu actions (location = 'menu') */
|
|
1566
|
-
readonly leftMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1567
|
-
/** Right inline actions (location = 'inline' or undefined) */
|
|
1568
|
-
readonly rightInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1569
|
-
/** Right menu actions (location = 'menu') */
|
|
1570
|
-
readonly rightMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1571
|
-
startReply(message: AXMessage): void;
|
|
1572
|
-
startEdit(message: AXMessage): void;
|
|
1573
|
-
clear(): void;
|
|
1574
|
-
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
1575
|
-
sendMessage(command: AXSendMessageCommand): Promise<void>;
|
|
1264
|
+
private readonly injector;
|
|
1265
|
+
constructor();
|
|
1266
|
+
/** All registered actions */
|
|
1267
|
+
readonly actions: _angular_core.Signal<AXMessageAction[]>;
|
|
1268
|
+
/** Actions sorted by priority */
|
|
1269
|
+
readonly sortedActions: _angular_core.Signal<AXMessageAction[]>;
|
|
1576
1270
|
/**
|
|
1577
|
-
*
|
|
1271
|
+
* Register a message action
|
|
1578
1272
|
*/
|
|
1579
|
-
|
|
1273
|
+
register(action: AXMessageAction): void;
|
|
1580
1274
|
/**
|
|
1581
|
-
*
|
|
1275
|
+
* Unregister a message action
|
|
1582
1276
|
*/
|
|
1583
|
-
|
|
1277
|
+
unregister(id: string): void;
|
|
1584
1278
|
/**
|
|
1585
|
-
*
|
|
1279
|
+
* Get all actions for a specific message
|
|
1586
1280
|
*/
|
|
1587
|
-
|
|
1281
|
+
getActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1588
1282
|
/**
|
|
1589
|
-
* Get actions for
|
|
1283
|
+
* Get menu actions for a message
|
|
1590
1284
|
*/
|
|
1591
|
-
|
|
1285
|
+
getMenuActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1286
|
+
/** Whether an action is enabled (safe to call outside an injection context). */
|
|
1287
|
+
isActionEnabled(action: AXMessageAction, message: AXMessage, currentUser: AXParticipant): boolean;
|
|
1288
|
+
getActionLabel(action: AXMessageAction): string;
|
|
1592
1289
|
/**
|
|
1593
|
-
*
|
|
1290
|
+
* Get inline actions for a message
|
|
1594
1291
|
*/
|
|
1595
|
-
|
|
1292
|
+
getInlineActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1596
1293
|
/**
|
|
1597
|
-
*
|
|
1294
|
+
* Get action by ID
|
|
1598
1295
|
*/
|
|
1599
|
-
|
|
1296
|
+
getActionById(id: string): AXMessageAction | undefined;
|
|
1600
1297
|
/**
|
|
1601
|
-
*
|
|
1298
|
+
* Execute an action
|
|
1602
1299
|
*/
|
|
1603
|
-
|
|
1300
|
+
executeAction(actionId: string, context: AXMessageActionContext): Promise<void>;
|
|
1604
1301
|
/**
|
|
1605
|
-
* Clear
|
|
1302
|
+
* Clear all actions
|
|
1606
1303
|
*/
|
|
1607
|
-
|
|
1608
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
1609
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1304
|
+
clear(): void;
|
|
1305
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageActionRegistry, never>;
|
|
1306
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageActionRegistry>;
|
|
1610
1307
|
}
|
|
1611
1308
|
|
|
1612
|
-
declare class
|
|
1309
|
+
declare class AXComposerComponent implements OnDestroy {
|
|
1310
|
+
#private;
|
|
1613
1311
|
private readonly conversationService;
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
readonly
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1312
|
+
private readonly composerService;
|
|
1313
|
+
private readonly messageListService;
|
|
1314
|
+
private readonly config;
|
|
1315
|
+
private readonly translation;
|
|
1316
|
+
/** Access registry through conversation service */
|
|
1317
|
+
private get registry();
|
|
1318
|
+
/** Composer text area reference */
|
|
1319
|
+
private readonly textAreaRef;
|
|
1320
|
+
/** Draft text - use service */
|
|
1321
|
+
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1322
|
+
/** Attachments - use service */
|
|
1323
|
+
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
1324
|
+
/** Editing message */
|
|
1325
|
+
readonly editingMessage: _angular_core.WritableSignal<any>;
|
|
1326
|
+
/** Replying to message */
|
|
1327
|
+
readonly replyingToMessage: _angular_core.WritableSignal<AXMessage>;
|
|
1328
|
+
/** Show typing indicator - use service */
|
|
1329
|
+
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1330
|
+
/** Message sent event */
|
|
1331
|
+
readonly messageSent: _angular_core.OutputEmitterRef<AXSendMessageCommand>;
|
|
1332
|
+
/** Emoji clicked event */
|
|
1333
|
+
readonly emojiClick: _angular_core.OutputEmitterRef<void>;
|
|
1334
|
+
/** Attach clicked event */
|
|
1335
|
+
readonly attachClick: _angular_core.OutputEmitterRef<void>;
|
|
1336
|
+
/** Voice clicked event */
|
|
1337
|
+
readonly voiceClick: _angular_core.OutputEmitterRef<void>;
|
|
1621
1338
|
/** Active conversation */
|
|
1622
1339
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1340
|
+
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
1341
|
+
/** Active component from service */
|
|
1342
|
+
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXComposerActiveComponent>;
|
|
1343
|
+
/** Emoji popover state */
|
|
1344
|
+
private readonly emojiPopoverRef;
|
|
1345
|
+
readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1346
|
+
readonly composerPopupComponent: typeof AXComposerPopupComponent;
|
|
1347
|
+
/** Input placeholder - use service */
|
|
1348
|
+
readonly placeholder: _angular_core.Signal<string>;
|
|
1349
|
+
/** Sending message state */
|
|
1350
|
+
readonly sendingMessage: _angular_core.WritableSignal<boolean>;
|
|
1351
|
+
/** Typing indicator subject for rate limiting */
|
|
1352
|
+
private readonly typingSubject;
|
|
1353
|
+
constructor();
|
|
1354
|
+
private draftSaveTimeout?;
|
|
1355
|
+
/** Number of input rows - use service */
|
|
1356
|
+
readonly inputRows: _angular_core.Signal<number>;
|
|
1357
|
+
/** Can send message - use service */
|
|
1358
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
1359
|
+
/** Left actions from registry - use service */
|
|
1360
|
+
readonly leftActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1361
|
+
/** Right actions from registry - use service */
|
|
1362
|
+
readonly rightActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1363
|
+
/** Left inline actions (location = 'inline' or undefined) */
|
|
1364
|
+
readonly leftInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1365
|
+
/** Left menu actions (location = 'menu') */
|
|
1366
|
+
readonly leftMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1367
|
+
/** Right inline actions (location = 'inline' or undefined) */
|
|
1368
|
+
readonly rightInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1369
|
+
/** Right menu actions (location = 'menu') */
|
|
1370
|
+
readonly rightMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1371
|
+
/** Handle key down */
|
|
1372
|
+
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
1373
|
+
/** Handle input */
|
|
1374
|
+
onInput(): void;
|
|
1375
|
+
/** Send typing indicator (throttled via RxJS) */
|
|
1376
|
+
private sendTypingIndicator;
|
|
1377
|
+
/** Cleanup on destroy */
|
|
1378
|
+
ngOnDestroy(): void;
|
|
1379
|
+
/** Handle send click */
|
|
1380
|
+
onSendClick(): Promise<void>;
|
|
1381
|
+
/** Handle emoji click */
|
|
1382
|
+
onEmojiClick(event?: MouseEvent): Promise<void>;
|
|
1383
|
+
/** Handle emoji popover closed */
|
|
1384
|
+
onEmojiPopoverClosed(): void;
|
|
1385
|
+
/** Handle emoji/sticker selection from popup */
|
|
1386
|
+
onEmojiItemSelected(item: string | AXStickerPayload): void;
|
|
1387
|
+
/** Send sticker message */
|
|
1388
|
+
private sendSticker;
|
|
1389
|
+
/** Get inputs for emoji popup component */
|
|
1390
|
+
getEmojiPopupInputs(): Record<string, unknown>;
|
|
1391
|
+
/** Handle attach click */
|
|
1392
|
+
onAttachClick(): void;
|
|
1393
|
+
/** Handle voice click */
|
|
1394
|
+
onVoiceClick(): void;
|
|
1395
|
+
/** Remove attachment */
|
|
1396
|
+
removeAttachment(index: number): void;
|
|
1397
|
+
/** Cancel edit/reply mode */
|
|
1398
|
+
cancelEditReply(): void;
|
|
1399
|
+
/** Start editing a message */
|
|
1400
|
+
startEdit(message: any): void;
|
|
1401
|
+
/** Start replying to a message */
|
|
1402
|
+
startReply(message: AXMessage): void;
|
|
1403
|
+
/** Focus the native textarea inside ax-text-area */
|
|
1404
|
+
private focusTextArea;
|
|
1405
|
+
/** Handle action click */
|
|
1406
|
+
onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
|
|
1407
|
+
/** Check if action is enabled */
|
|
1408
|
+
isActionEnabled(action: any): boolean;
|
|
1409
|
+
/** Get replying sender name */
|
|
1410
|
+
getReplyingSenderName(): string;
|
|
1411
|
+
getActionLabel(action: {
|
|
1412
|
+
label: string;
|
|
1413
|
+
}): string;
|
|
1414
|
+
/** Get replying message text */
|
|
1415
|
+
getReplyingMessageText(): string;
|
|
1416
|
+
/** Preview object for replying banner (type, icon, value) */
|
|
1417
|
+
getReplyingPreview(): {
|
|
1418
|
+
value: string;
|
|
1419
|
+
type: string;
|
|
1420
|
+
icon: string;
|
|
1421
|
+
} | null;
|
|
1422
|
+
/** Preview object for editing banner (type, icon, value) */
|
|
1423
|
+
getEditingPreview(): {
|
|
1424
|
+
value: string;
|
|
1425
|
+
type: string;
|
|
1426
|
+
icon: string;
|
|
1427
|
+
} | null;
|
|
1428
|
+
getComposerPreviewLabel(preview: {
|
|
1429
|
+
value: string;
|
|
1430
|
+
type: string;
|
|
1431
|
+
}): string;
|
|
1432
|
+
/** Handle reply preview click - scroll to original message */
|
|
1433
|
+
onReplyPreviewClick(): void;
|
|
1434
|
+
/** Inputs for picker / full-width composer components */
|
|
1435
|
+
private buildPickerInputs;
|
|
1436
|
+
/** Get inputs for dynamic component */
|
|
1437
|
+
getComponentInputs(): Record<string, unknown>;
|
|
1438
|
+
onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
|
|
1439
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
|
|
1440
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
/**
|
|
1444
|
+
* Active component state in composer
|
|
1445
|
+
*/
|
|
1446
|
+
interface AXComposerActiveComponent {
|
|
1447
|
+
/** Action that triggered this component */
|
|
1448
|
+
action: AXComposerAction;
|
|
1449
|
+
/** Component to render */
|
|
1450
|
+
component: Type<unknown>;
|
|
1451
|
+
/** Component inputs */
|
|
1452
|
+
inputs?: Record<string, unknown>;
|
|
1453
|
+
}
|
|
1454
|
+
declare class AXComposerService {
|
|
1455
|
+
private readonly conversationService;
|
|
1456
|
+
private readonly translation;
|
|
1457
|
+
private get registry();
|
|
1458
|
+
private readonly _replyMessage;
|
|
1459
|
+
private readonly _editMessage;
|
|
1460
|
+
readonly replyMessage: _angular_core.Signal<AXMessage>;
|
|
1461
|
+
readonly editMessage: _angular_core.Signal<AXMessage>;
|
|
1462
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1463
|
+
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
1464
|
+
/** Active component being shown in composer (full-width mode) */
|
|
1465
|
+
private readonly _activeComponent;
|
|
1466
|
+
readonly activeComponent: _angular_core.Signal<AXComposerActiveComponent>;
|
|
1467
|
+
/** Draft text */
|
|
1468
|
+
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1469
|
+
/** Attachments */
|
|
1470
|
+
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
1471
|
+
/** Show typing indicator */
|
|
1472
|
+
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1473
|
+
/** Incremented to request focus on the composer text area (handled by AXComposerComponent). */
|
|
1474
|
+
private readonly _focusRequest;
|
|
1475
|
+
readonly focusRequest: _angular_core.Signal<number>;
|
|
1476
|
+
/** Input placeholder */
|
|
1477
|
+
readonly placeholder: _angular_core.Signal<string>;
|
|
1478
|
+
/** Number of input rows */
|
|
1479
|
+
readonly inputRows: _angular_core.Signal<number>;
|
|
1480
|
+
/** Can send message */
|
|
1481
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
1482
|
+
/** Composer action context */
|
|
1483
|
+
readonly actionContext: _angular_core.Signal<AXComposerActionContext>;
|
|
1484
|
+
/** Left actions from registry */
|
|
1485
|
+
readonly leftActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1486
|
+
/** Right actions from registry */
|
|
1487
|
+
readonly rightActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1488
|
+
/** Left inline actions (location = 'inline' or undefined) */
|
|
1489
|
+
readonly leftInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1490
|
+
/** Left menu actions (location = 'menu') */
|
|
1491
|
+
readonly leftMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1492
|
+
/** Right inline actions (location = 'inline' or undefined) */
|
|
1493
|
+
readonly rightInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1494
|
+
/** Right menu actions (location = 'menu') */
|
|
1495
|
+
readonly rightMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1496
|
+
startReply(message: AXMessage): void;
|
|
1497
|
+
startEdit(message: AXMessage): void;
|
|
1498
|
+
/** Focus the composer text area when the composer component is mounted. */
|
|
1499
|
+
focusComposer(): void;
|
|
1500
|
+
clear(): void;
|
|
1501
|
+
/**
|
|
1502
|
+
* Persist draft for the previous conversation and reset composer UI state when switching conversations.
|
|
1503
|
+
*/
|
|
1504
|
+
onConversationChanged(previousConversationId: string | null, currentConversationId: string | null): void;
|
|
1505
|
+
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
1506
|
+
sendMessage(command: AXSendMessageCommand, options?: AXSendMessageOptions): Promise<void>;
|
|
1507
|
+
/**
|
|
1508
|
+
* Show a component in the composer (full-width mode)
|
|
1509
|
+
*/
|
|
1510
|
+
showComponent(action: AXComposerAction, inputs?: Record<string, unknown>): void;
|
|
1511
|
+
/**
|
|
1512
|
+
* Hide the active component
|
|
1513
|
+
*/
|
|
1514
|
+
hideComponent(): void;
|
|
1515
|
+
/**
|
|
1516
|
+
* Toggle component visibility
|
|
1517
|
+
*/
|
|
1518
|
+
toggleComponent(action: AXComposerAction, inputs?: Record<string, unknown>): void;
|
|
1519
|
+
/**
|
|
1520
|
+
* Get actions for the active conversation
|
|
1521
|
+
*/
|
|
1522
|
+
getActionsForPosition(position: 'left' | 'right', context: AXComposerActionContext): AXComposerAction[];
|
|
1523
|
+
/**
|
|
1524
|
+
* Execute an action
|
|
1525
|
+
*/
|
|
1526
|
+
executeAction(actionId: string, context: AXComposerActionContext): Promise<void>;
|
|
1527
|
+
/**
|
|
1528
|
+
* Save draft to localStorage
|
|
1529
|
+
*/
|
|
1530
|
+
saveDraft(conversationId: string, text: string): void;
|
|
1531
|
+
/**
|
|
1532
|
+
* Load draft from localStorage
|
|
1533
|
+
*/
|
|
1534
|
+
loadDraft(conversationId: string): string;
|
|
1535
|
+
/**
|
|
1536
|
+
* Clear draft from localStorage
|
|
1537
|
+
*/
|
|
1538
|
+
clearDraft(conversationId: string): void;
|
|
1539
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerService, never>;
|
|
1540
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXComposerService>;
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
declare class AXConversationContainerComponent {
|
|
1544
|
+
private readonly conversationService;
|
|
1545
|
+
private readonly composerService;
|
|
1546
|
+
private readonly fileService;
|
|
1547
|
+
private readonly translation;
|
|
1548
|
+
private readonly toast;
|
|
1549
|
+
private readonly hostRef;
|
|
1550
|
+
private readonly platformId;
|
|
1551
|
+
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
1552
|
+
private get registry();
|
|
1553
|
+
/** Custom CSS class */
|
|
1554
|
+
readonly customClass: _angular_core.InputSignal<string>;
|
|
1555
|
+
/** Loading state */
|
|
1556
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
1557
|
+
/** Error state */
|
|
1558
|
+
readonly error: _angular_core.Signal<Error>;
|
|
1559
|
+
/** Active conversation */
|
|
1560
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1561
|
+
/** Container CSS classes */
|
|
1562
|
+
readonly containerClasses: _angular_core.Signal<string>;
|
|
1563
|
+
closeActiveConversation(): void;
|
|
1564
|
+
/**
|
|
1565
|
+
* When the user pastes files copied from the OS (e.g. Ctrl+V after copying in Explorer),
|
|
1566
|
+
* open the same composer picker popup used for message-list drag-and-drop.
|
|
1567
|
+
*/
|
|
1568
|
+
onDocumentPaste(event: ClipboardEvent): Promise<void>;
|
|
1569
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
|
|
1570
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationContainerComponent, "ax-conversation-container", never, { "customClass": { "alias": "customClass"; "required": false; "isSignal": true; }; }, {}, never, ["ax-conversation-sidebar, [ax-conversation-sidebar]", "ax-conversation-info-bar, [ax-conversation-info-bar]", "ax-conversation-message-list, [ax-conversation-message-list]", "ax-conversation-composer, [ax-conversation-composer]", "ax-conversation-empty"], true, never>;
|
|
1571
|
+
}
|
|
1629
1572
|
|
|
1630
1573
|
declare class AXConversationContainerDirective {
|
|
1631
1574
|
private readonly conversationService;
|
|
1575
|
+
private readonly composerService;
|
|
1576
|
+
private readonly fileService;
|
|
1577
|
+
private readonly hostRef;
|
|
1578
|
+
private readonly platformId;
|
|
1579
|
+
private readonly translation;
|
|
1580
|
+
private readonly toast;
|
|
1581
|
+
private readonly config;
|
|
1582
|
+
private get registry();
|
|
1632
1583
|
/** Active conversation */
|
|
1633
1584
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1634
1585
|
/** Loading state */
|
|
@@ -1636,6 +1587,7 @@ declare class AXConversationContainerDirective {
|
|
|
1636
1587
|
/** Error state */
|
|
1637
1588
|
readonly error: _angular_core.Signal<Error>;
|
|
1638
1589
|
closeActiveConversation(): void;
|
|
1590
|
+
onDocumentPaste(event: ClipboardEvent): Promise<void>;
|
|
1639
1591
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerDirective, never>;
|
|
1640
1592
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationContainerDirective, "[axConversationContainer]", never, {}, {}, never, never, true, never>;
|
|
1641
1593
|
}
|
|
@@ -1659,13 +1611,13 @@ declare class AXInfoBarComponent {
|
|
|
1659
1611
|
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarActiveComponent>;
|
|
1660
1612
|
/** Active banner from service */
|
|
1661
1613
|
readonly activeBanner: _angular_core.Signal<_acorex_components_conversation2.AXInfoBarActiveBanner>;
|
|
1662
|
-
/** Members popover
|
|
1663
|
-
readonly membersPopoverRef: _angular_core.Signal<AXPopoverComponent>;
|
|
1664
|
-
/** Members popover target element */
|
|
1614
|
+
/** Members popover target element — retained for API compatibility */
|
|
1665
1615
|
readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1666
1616
|
/** Loading state for async actions */
|
|
1667
1617
|
readonly actionLoading: _angular_core.WritableSignal<boolean>;
|
|
1668
|
-
/**
|
|
1618
|
+
/** Info area clicked — opens conversation profile panel */
|
|
1619
|
+
readonly infoClick: _angular_core.OutputEmitterRef<void>;
|
|
1620
|
+
/** @deprecated Use infoClick — kept for backward compatibility */
|
|
1669
1621
|
readonly avatarClick: _angular_core.OutputEmitterRef<void>;
|
|
1670
1622
|
/** Search clicked event */
|
|
1671
1623
|
readonly searchClick: _angular_core.OutputEmitterRef<void>;
|
|
@@ -1681,14 +1633,8 @@ declare class AXInfoBarComponent {
|
|
|
1681
1633
|
getStatus(conversation: AXConversation): 'online' | 'offline' | 'away' | undefined;
|
|
1682
1634
|
/** Get subtitle text - delegate to utils */
|
|
1683
1635
|
getSubtitle(conversation: AXConversation): string;
|
|
1684
|
-
/**
|
|
1685
|
-
|
|
1686
|
-
getConversationAvatar(conversation: AXConversation): string | undefined;
|
|
1687
|
-
getConversationAvatarIcon(conversation: AXConversation): string | undefined;
|
|
1688
|
-
/** Handle avatar click */
|
|
1689
|
-
onAvatarClick(): void;
|
|
1690
|
-
/** Handle members click - open popover */
|
|
1691
|
-
onMembersClick(event: MouseEvent): void;
|
|
1636
|
+
/** Open conversation info panel when the left info area is clicked */
|
|
1637
|
+
onInfoLeftClick(): void;
|
|
1692
1638
|
/** Handle inline action click */
|
|
1693
1639
|
onInlineActionClick(actionId: string): Promise<void>;
|
|
1694
1640
|
/** Get inputs for dynamic component */
|
|
@@ -1702,7 +1648,7 @@ declare class AXInfoBarComponent {
|
|
|
1702
1648
|
/** Handle menu item click */
|
|
1703
1649
|
onMenuItemClick(item: DropdownMenuItem): Promise<void>;
|
|
1704
1650
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarComponent, never>;
|
|
1705
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarComponent, "ax-conversation-info-bar", never, {}, { "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
|
|
1651
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXInfoBarComponent, "ax-conversation-info-bar", never, {}, { "infoClick": "infoClick"; "avatarClick": "avatarClick"; "searchClick": "searchClick"; "searchQuery": "searchQuery"; "menuItemAction": "menuItemAction"; }, never, ["ax-prefix"], true, never>;
|
|
1706
1652
|
}
|
|
1707
1653
|
|
|
1708
1654
|
/**
|
|
@@ -1750,7 +1696,14 @@ declare class AXInfoBarService {
|
|
|
1750
1696
|
/** Current search result index */
|
|
1751
1697
|
private readonly _currentSearchIndex;
|
|
1752
1698
|
readonly currentSearchIndex: _angular_core.Signal<number>;
|
|
1753
|
-
|
|
1699
|
+
/**
|
|
1700
|
+
* Reset info-bar overlays when the active conversation changes.
|
|
1701
|
+
*/
|
|
1702
|
+
onConversationChanged(): void;
|
|
1703
|
+
/**
|
|
1704
|
+
* Open the Telegram-style conversation info panel for the active (or given) conversation.
|
|
1705
|
+
*/
|
|
1706
|
+
openConversationInfoPanel(conversation?: AXConversation): Promise<void>;
|
|
1754
1707
|
/**
|
|
1755
1708
|
* Get actions for the active conversation
|
|
1756
1709
|
*/
|
|
@@ -1855,6 +1808,14 @@ interface AXPaginatedResult<T> {
|
|
|
1855
1808
|
/** Total pages */
|
|
1856
1809
|
totalPages?: number;
|
|
1857
1810
|
}
|
|
1811
|
+
/**
|
|
1812
|
+
* Pagination cursor state for a single list (conversations or messages).
|
|
1813
|
+
*/
|
|
1814
|
+
interface AXPaginationState {
|
|
1815
|
+
page: number;
|
|
1816
|
+
hasMore: boolean;
|
|
1817
|
+
nextCursor?: string;
|
|
1818
|
+
}
|
|
1858
1819
|
/**
|
|
1859
1820
|
* Connection status
|
|
1860
1821
|
*/
|
|
@@ -1970,8 +1931,6 @@ interface AXParticipantUpdate {
|
|
|
1970
1931
|
userId: string;
|
|
1971
1932
|
/** New role */
|
|
1972
1933
|
role?: AXUserRole;
|
|
1973
|
-
/** Custom permissions */
|
|
1974
|
-
permissions?: Record<string, boolean>;
|
|
1975
1934
|
}
|
|
1976
1935
|
/**
|
|
1977
1936
|
* Abstract Conversation Management API
|
|
@@ -2130,7 +2089,7 @@ declare abstract class AXConversationApi {
|
|
|
2130
2089
|
*/
|
|
2131
2090
|
abstract leaveConversation(conversationId: string): Promise<void>;
|
|
2132
2091
|
/**
|
|
2133
|
-
* Update participant role
|
|
2092
|
+
* Update participant role
|
|
2134
2093
|
*
|
|
2135
2094
|
* @param conversationId - Conversation ID
|
|
2136
2095
|
* @param update - Participant update data
|
|
@@ -2211,22 +2170,6 @@ declare abstract class AXConversationApi {
|
|
|
2211
2170
|
* @throws {AXApiError} If request fails
|
|
2212
2171
|
*/
|
|
2213
2172
|
abstract getConversationTags(conversationId: string): Promise<string[]>;
|
|
2214
|
-
/**
|
|
2215
|
-
* Get conversation permissions for current user
|
|
2216
|
-
*
|
|
2217
|
-
* @param conversationId - Conversation ID
|
|
2218
|
-
* @returns User permissions
|
|
2219
|
-
* @throws {AXApiError} If request fails
|
|
2220
|
-
*/
|
|
2221
|
-
abstract getConversationPermissions(conversationId: string): Promise<Record<string, boolean>>;
|
|
2222
|
-
/**
|
|
2223
|
-
* Update conversation permissions
|
|
2224
|
-
*
|
|
2225
|
-
* @param conversationId - Conversation ID
|
|
2226
|
-
* @param permissions - Permissions to update
|
|
2227
|
-
* @throws {AXApiError} If update fails
|
|
2228
|
-
*/
|
|
2229
|
-
abstract updateConversationPermissions(conversationId: string, permissions: Record<string, boolean>): Promise<void>;
|
|
2230
2173
|
/**
|
|
2231
2174
|
* Save draft message for conversation
|
|
2232
2175
|
*
|
|
@@ -2527,21 +2470,6 @@ declare abstract class AXMessageApi {
|
|
|
2527
2470
|
* @throws {AXApiError} If stopping fails
|
|
2528
2471
|
*/
|
|
2529
2472
|
abstract stopTypingIndicator(conversationId: string): Promise<void>;
|
|
2530
|
-
/**
|
|
2531
|
-
* Upload a file/media
|
|
2532
|
-
*
|
|
2533
|
-
* @param file - File to upload
|
|
2534
|
-
* @param conversationId - Conversation ID for context
|
|
2535
|
-
* @returns Upload result with URL and metadata
|
|
2536
|
-
* @throws {AXApiError} If upload fails
|
|
2537
|
-
*/
|
|
2538
|
-
abstract uploadFile(file: File, conversationId: string): Promise<{
|
|
2539
|
-
url: string;
|
|
2540
|
-
thumbnailUrl?: string;
|
|
2541
|
-
size: number;
|
|
2542
|
-
mimeType: string;
|
|
2543
|
-
metadata?: Record<string, unknown>;
|
|
2544
|
-
}>;
|
|
2545
2473
|
/**
|
|
2546
2474
|
* Update message metadata
|
|
2547
2475
|
*
|
|
@@ -2936,11 +2864,13 @@ interface AXUserProfileUpdate {
|
|
|
2936
2864
|
avatar?: string;
|
|
2937
2865
|
/** Short line under the name in lists (e.g. job title) */
|
|
2938
2866
|
description?: string;
|
|
2939
|
-
/**
|
|
2867
|
+
/** Extended profile fields */
|
|
2868
|
+
profile?: Partial<AXUserProfile>;
|
|
2869
|
+
/** @deprecated Prefer `profile.bio` */
|
|
2940
2870
|
bio?: string;
|
|
2941
|
-
/**
|
|
2871
|
+
/** @deprecated Prefer `profile.phone` */
|
|
2942
2872
|
phone?: string;
|
|
2943
|
-
/**
|
|
2873
|
+
/** @deprecated Prefer `profile.email` */
|
|
2944
2874
|
email?: string;
|
|
2945
2875
|
/** Custom fields */
|
|
2946
2876
|
custom?: Record<string, unknown>;
|
|
@@ -3148,6 +3078,13 @@ declare class AXRegistryService {
|
|
|
3148
3078
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXRegistryService>;
|
|
3149
3079
|
}
|
|
3150
3080
|
|
|
3081
|
+
/** Result of loading a message page (newest-first APIs, merged ascending in the store). */
|
|
3082
|
+
interface AXLoadMessagesResult {
|
|
3083
|
+
items: AXMessage[];
|
|
3084
|
+
hasMore: boolean;
|
|
3085
|
+
page: number;
|
|
3086
|
+
nextCursor?: string;
|
|
3087
|
+
}
|
|
3151
3088
|
/**
|
|
3152
3089
|
* Main Conversation Service
|
|
3153
3090
|
*
|
|
@@ -3165,6 +3102,9 @@ declare class AXConversationService {
|
|
|
3165
3102
|
readonly conversationApi: AXConversationApi;
|
|
3166
3103
|
readonly messageApi: AXMessageApi;
|
|
3167
3104
|
readonly realtimeApi: AXRealtimeApi;
|
|
3105
|
+
readonly uploader: AXUploaderService;
|
|
3106
|
+
private readonly fileService;
|
|
3107
|
+
private readonly platformId;
|
|
3168
3108
|
private readonly errorHandler;
|
|
3169
3109
|
readonly dialogService: AXDialogService;
|
|
3170
3110
|
readonly popupService: AXPopupService;
|
|
@@ -3175,7 +3115,10 @@ declare class AXConversationService {
|
|
|
3175
3115
|
readonly registry: AXRegistryService;
|
|
3176
3116
|
private readonly _activeConversationId;
|
|
3177
3117
|
private readonly _loading;
|
|
3118
|
+
private readonly _loadingActiveMessages;
|
|
3178
3119
|
private readonly _error;
|
|
3120
|
+
private readonly _conversationsPagination;
|
|
3121
|
+
private readonly _messagesPaginationByConversation;
|
|
3179
3122
|
/** Emits when the active conversation changes, cancelling per-conversation subscriptions. */
|
|
3180
3123
|
private readonly _conversationSwitch$;
|
|
3181
3124
|
private readonly _messageReceived$;
|
|
@@ -3191,8 +3134,14 @@ declare class AXConversationService {
|
|
|
3191
3134
|
readonly activeConversation: _angular_core.Signal<AXConversation>;
|
|
3192
3135
|
/** Messages for active conversation */
|
|
3193
3136
|
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
3194
|
-
/** Loading state */
|
|
3137
|
+
/** Loading state (conversation list initial load) */
|
|
3195
3138
|
readonly loading: _angular_core.Signal<boolean>;
|
|
3139
|
+
/** Loading state for the active conversation's message history */
|
|
3140
|
+
readonly loadingActiveMessages: _angular_core.Signal<boolean>;
|
|
3141
|
+
/** Sidebar conversation list pagination */
|
|
3142
|
+
readonly conversationsPagination: _angular_core.Signal<AXPaginationState>;
|
|
3143
|
+
/** Active conversation message pagination */
|
|
3144
|
+
readonly activeMessagesPagination: _angular_core.Signal<AXPaginationState>;
|
|
3196
3145
|
/** Error state */
|
|
3197
3146
|
readonly error: _angular_core.Signal<Error>;
|
|
3198
3147
|
/** Connection status */
|
|
@@ -3243,13 +3192,25 @@ declare class AXConversationService {
|
|
|
3243
3192
|
* Load messages for a conversation
|
|
3244
3193
|
* Fetches messages from server with request cancellation support
|
|
3245
3194
|
*/
|
|
3246
|
-
loadMessages(conversationId: string, page?: number): Promise<
|
|
3195
|
+
loadMessages(conversationId: string, page?: number): Promise<AXLoadMessagesResult>;
|
|
3196
|
+
/** Reset sidebar conversation pagination (e.g. after filters change). */
|
|
3197
|
+
resetConversationsPagination(): void;
|
|
3198
|
+
/**
|
|
3199
|
+
* Upload media for a conversation (composers and custom plugins).
|
|
3200
|
+
*/
|
|
3201
|
+
uploadMedia(source: File | Blob, conversationId: string, options?: Omit<AXConversationUploadOptions, 'metadata'> & {
|
|
3202
|
+
metadata?: Record<string, unknown>;
|
|
3203
|
+
}): Promise<AXUploaderResult>;
|
|
3204
|
+
/**
|
|
3205
|
+
* Resolve a media reference to a playback/download URL.
|
|
3206
|
+
*/
|
|
3207
|
+
resolveMediaUrl(reference: AXUploaderReference, signal?: AbortSignal): Promise<string>;
|
|
3247
3208
|
/**
|
|
3248
3209
|
* Send a message
|
|
3249
3210
|
* Uses optimistic UI updates - message appears immediately
|
|
3250
|
-
*
|
|
3211
|
+
* Pass `options.media` to upload a File/Blob before send (with optional progress and AbortSignal).
|
|
3251
3212
|
*/
|
|
3252
|
-
sendMessage(command: AXSendMessageCommand): Promise<void>;
|
|
3213
|
+
sendMessage(command: AXSendMessageCommand, options?: AXSendMessageOptions): Promise<void>;
|
|
3253
3214
|
/**
|
|
3254
3215
|
* Retry a failed message
|
|
3255
3216
|
*/
|
|
@@ -3659,38 +3620,6 @@ declare class AXErrorHandlerService {
|
|
|
3659
3620
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXErrorHandlerService>;
|
|
3660
3621
|
}
|
|
3661
3622
|
|
|
3662
|
-
interface FilePreview {
|
|
3663
|
-
file: File;
|
|
3664
|
-
preview?: string;
|
|
3665
|
-
type: 'image' | 'video' | 'audio' | 'file';
|
|
3666
|
-
}
|
|
3667
|
-
declare class AXFileUploadService {
|
|
3668
|
-
private readonly config;
|
|
3669
|
-
private readonly platformId;
|
|
3670
|
-
readFileAsDataURL(file: File): Promise<string>;
|
|
3671
|
-
getFileType(file: File): 'image' | 'video' | 'audio' | 'file';
|
|
3672
|
-
generatePreview(file: File): Promise<FilePreview>;
|
|
3673
|
-
generatePreviews(files: File[]): Promise<FilePreview[]>;
|
|
3674
|
-
getVideoDuration(file: File): Promise<number>;
|
|
3675
|
-
getAudioDuration(file: File): Promise<number>;
|
|
3676
|
-
formatFileSize(bytes: number): string;
|
|
3677
|
-
formatDuration(seconds: number): string;
|
|
3678
|
-
validateFileType(file: File, allowedTypes: string[]): boolean;
|
|
3679
|
-
validateFileSize(file: File, maxSizeInMB: number): boolean;
|
|
3680
|
-
filterFilesByType(files: File[], allowedTypes: string[]): File[];
|
|
3681
|
-
isFileTypeAllowed(file: File): boolean;
|
|
3682
|
-
isFileSizeAllowed(file: File): boolean;
|
|
3683
|
-
validateFilesWithConfig(files: File[]): {
|
|
3684
|
-
accepted: File[];
|
|
3685
|
-
rejected: {
|
|
3686
|
-
file: File;
|
|
3687
|
-
reason: string;
|
|
3688
|
-
}[];
|
|
3689
|
-
};
|
|
3690
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileUploadService, never>;
|
|
3691
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXFileUploadService>;
|
|
3692
|
-
}
|
|
3693
|
-
|
|
3694
3623
|
declare class AXForwardMessageDialogComponent implements OnInit {
|
|
3695
3624
|
private readonly toastService;
|
|
3696
3625
|
private readonly translation;
|
|
@@ -3718,9 +3647,6 @@ declare class AXForwardMessageDialogComponent implements OnInit {
|
|
|
3718
3647
|
onForwardSearchChange(value: string): void;
|
|
3719
3648
|
conversationFromItem(item: unknown): AXConversation | null;
|
|
3720
3649
|
isSelected(conversationId: string): boolean;
|
|
3721
|
-
getInitials(name: string): string;
|
|
3722
|
-
getConversationAvatar(conversation: AXConversation): string | undefined;
|
|
3723
|
-
getConversationAvatarIcon(conversation: AXConversation): string | undefined;
|
|
3724
3650
|
private getFilteredConversationsForForward;
|
|
3725
3651
|
onCancel(): void;
|
|
3726
3652
|
onForward(): Promise<void>;
|
|
@@ -3728,6 +3654,309 @@ declare class AXForwardMessageDialogComponent implements OnInit {
|
|
|
3728
3654
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3729
3655
|
}
|
|
3730
3656
|
|
|
3657
|
+
/**
|
|
3658
|
+
* Shared UI for message bubble bodies: failed delivery (with retry) and content load errors.
|
|
3659
|
+
* Sending state is shown in the message-list footer only — not here (avoids layout glitch in media bubbles).
|
|
3660
|
+
*/
|
|
3661
|
+
declare class AXConversationMessageRendererStateComponent {
|
|
3662
|
+
private readonly conversation;
|
|
3663
|
+
readonly translation: AXTranslationService;
|
|
3664
|
+
readonly rendererState: _angular_core.InputSignal<AXMessageRendererState>;
|
|
3665
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3666
|
+
readonly contentErrorLabel: _angular_core.InputSignal<string>;
|
|
3667
|
+
readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
|
|
3668
|
+
readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
|
|
3669
|
+
readonly contentErrorStyle: _angular_core.InputSignal<"inline" | "banner">;
|
|
3670
|
+
readonly contentErrorIconClass: _angular_core.InputSignal<string>;
|
|
3671
|
+
readonly placement: _angular_core.InputSignal<"above" | "below">;
|
|
3672
|
+
readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
|
|
3673
|
+
readonly contentRetry: _angular_core.OutputEmitterRef<void>;
|
|
3674
|
+
readonly retryBusy: _angular_core.WritableSignal<boolean>;
|
|
3675
|
+
private readonly currentUser;
|
|
3676
|
+
private readonly isOwn;
|
|
3677
|
+
readonly showFailed: _angular_core.Signal<boolean>;
|
|
3678
|
+
readonly showContentError: _angular_core.Signal<boolean>;
|
|
3679
|
+
readonly hasVisibleChrome: _angular_core.Signal<boolean>;
|
|
3680
|
+
readonly contentErrorText: _angular_core.Signal<string>;
|
|
3681
|
+
readonly deliveryFailedText: _angular_core.Signal<string>;
|
|
3682
|
+
onRetry(): Promise<void>;
|
|
3683
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererStateComponent, never>;
|
|
3684
|
+
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>;
|
|
3685
|
+
}
|
|
3686
|
+
|
|
3687
|
+
interface AXPlaybackBannerInputs {
|
|
3688
|
+
title?: string;
|
|
3689
|
+
currentTime?: number;
|
|
3690
|
+
duration?: number;
|
|
3691
|
+
isPlaying?: boolean;
|
|
3692
|
+
onTogglePlay?: () => void;
|
|
3693
|
+
onClose?: () => void;
|
|
3694
|
+
playbackSpeed?: number;
|
|
3695
|
+
onCycleSpeed?: () => void;
|
|
3696
|
+
showSpeedControl?: boolean;
|
|
3697
|
+
}
|
|
3698
|
+
declare class AXCnvMediaPlaybackInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
|
|
3699
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3700
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
3701
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
3702
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
3703
|
+
readonly isPlaying: _angular_core.InputSignal<boolean>;
|
|
3704
|
+
readonly onTogglePlay: _angular_core.InputSignal<() => void>;
|
|
3705
|
+
readonly playbackSpeed: _angular_core.InputSignal<number>;
|
|
3706
|
+
readonly onCycleSpeed: _angular_core.InputSignal<() => void>;
|
|
3707
|
+
readonly showSpeedControl: _angular_core.InputSignal<boolean>;
|
|
3708
|
+
readonly iconClass: _angular_core.Signal<string>;
|
|
3709
|
+
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
3710
|
+
readonly progressPercent: _angular_core.Signal<number>;
|
|
3711
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
3712
|
+
onTogglePlayClick(): void;
|
|
3713
|
+
onCycleSpeedClick(): void;
|
|
3714
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXCnvMediaPlaybackInfoBarBannerComponent, never>;
|
|
3715
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXCnvMediaPlaybackInfoBarBannerComponent, "ax-cnv-media-playback-info-bar-banner", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "isPlaying": { "alias": "isPlaying"; "required": false; "isSignal": true; }; "onTogglePlay": { "alias": "onTogglePlay"; "required": false; "isSignal": true; }; "playbackSpeed": { "alias": "playbackSpeed"; "required": false; "isSignal": true; }; "onCycleSpeed": { "alias": "onCycleSpeed"; "required": false; "isSignal": true; }; "showSpeedControl": { "alias": "showSpeedControl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3716
|
+
}
|
|
3717
|
+
|
|
3718
|
+
/**
|
|
3719
|
+
* Registers the live renderer on {@link AXMessageListService} for message actions.
|
|
3720
|
+
*/
|
|
3721
|
+
declare abstract class AXMessageRendererCopyHostComponent implements AXMessageRendererComponent {
|
|
3722
|
+
abstract readonly message: InputSignal<AXMessage>;
|
|
3723
|
+
abstract readonly rendererState: Signal<AXMessageRendererState>;
|
|
3724
|
+
abstract copy(): string | Promise<string>;
|
|
3725
|
+
private readonly messageList;
|
|
3726
|
+
constructor();
|
|
3727
|
+
}
|
|
3728
|
+
|
|
3729
|
+
declare class AXAudioRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3730
|
+
private readonly fileTypes;
|
|
3731
|
+
private readonly translation;
|
|
3732
|
+
private readonly destroyRef;
|
|
3733
|
+
private readonly infoBarService;
|
|
3734
|
+
private readonly attachments;
|
|
3735
|
+
private readonly _contentState;
|
|
3736
|
+
private readonly activeTrackIndex;
|
|
3737
|
+
private readonly isPlaying;
|
|
3738
|
+
private readonly currentTime;
|
|
3739
|
+
private readonly duration;
|
|
3740
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3741
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3742
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3743
|
+
contentState: AXMessageRendererContentState;
|
|
3744
|
+
}>;
|
|
3745
|
+
readonly payload: _angular_core.Signal<AXAudioPayload>;
|
|
3746
|
+
readonly audios: _angular_core.Signal<_acorex_components_conversation2.AXAudioMediaItem[]>;
|
|
3747
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3748
|
+
readonly audioLoadErrorLabel: _angular_core.Signal<string>;
|
|
3749
|
+
copy(): Promise<string>;
|
|
3750
|
+
constructor();
|
|
3751
|
+
onPlayingChange(index: number, playing: boolean): void;
|
|
3752
|
+
onTimeUpdate(index: number, time: number): void;
|
|
3753
|
+
onDurationChange(index: number, duration: number): void;
|
|
3754
|
+
onPlaybackEnded(index: number): void;
|
|
3755
|
+
onPlaybackError(): void;
|
|
3756
|
+
togglePlay(): void;
|
|
3757
|
+
private pauseOtherTracks;
|
|
3758
|
+
private pausePlayback;
|
|
3759
|
+
private syncInfoBarBanner;
|
|
3760
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioRendererComponent, never>;
|
|
3761
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3762
|
+
}
|
|
3763
|
+
|
|
3764
|
+
declare class AXFallbackRendererComponent implements AXMessageRendererComponent {
|
|
3765
|
+
private readonly _contentState;
|
|
3766
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3767
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3768
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3769
|
+
contentState: AXMessageRendererContentState;
|
|
3770
|
+
}>;
|
|
3771
|
+
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
3772
|
+
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
3773
|
+
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
3774
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFallbackRendererComponent, never>;
|
|
3775
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3776
|
+
}
|
|
3777
|
+
|
|
3778
|
+
declare class AXFileRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3779
|
+
private readonly fileTypes;
|
|
3780
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3781
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3782
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3783
|
+
contentState: "ready";
|
|
3784
|
+
}>;
|
|
3785
|
+
readonly payload: _angular_core.Signal<AXFilePayload>;
|
|
3786
|
+
readonly files: _angular_core.Signal<_acorex_components_conversation2.AXFileMediaItem[]>;
|
|
3787
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3788
|
+
copy(): Promise<string>;
|
|
3789
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileRendererComponent, never>;
|
|
3790
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3791
|
+
}
|
|
3792
|
+
|
|
3793
|
+
declare class AXImageRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3794
|
+
private readonly fileTypes;
|
|
3795
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3796
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3797
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3798
|
+
contentState: "ready";
|
|
3799
|
+
}>;
|
|
3800
|
+
readonly payload: _angular_core.Signal<AXImagePayload>;
|
|
3801
|
+
readonly images: _angular_core.Signal<_acorex_components_conversation2.AXImageMediaItem[]>;
|
|
3802
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3803
|
+
copy(): Promise<string>;
|
|
3804
|
+
readonly gridModeClass: _angular_core.Signal<"ax-cnv-msg__grid--single" | "ax-cnv-msg__grid--dual" | "ax-cnv-msg__grid--multi">;
|
|
3805
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageRendererComponent, never>;
|
|
3806
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3807
|
+
}
|
|
3808
|
+
|
|
3809
|
+
declare class AXLocationRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3810
|
+
private readonly _contentState;
|
|
3811
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3812
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3813
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3814
|
+
contentState: AXMessageRendererContentState;
|
|
3815
|
+
}>;
|
|
3816
|
+
readonly payload: _angular_core.Signal<AXLocationPayload>;
|
|
3817
|
+
readonly latitude: _angular_core.Signal<number>;
|
|
3818
|
+
readonly longitude: _angular_core.Signal<number>;
|
|
3819
|
+
readonly locationName: _angular_core.Signal<string>;
|
|
3820
|
+
readonly address: _angular_core.Signal<string>;
|
|
3821
|
+
readonly coordinatesText: _angular_core.Signal<string>;
|
|
3822
|
+
readonly mapsUrl: _angular_core.Signal<string>;
|
|
3823
|
+
copy(): string;
|
|
3824
|
+
readonly markers: _angular_core.Signal<{
|
|
3825
|
+
latitude: number;
|
|
3826
|
+
longitude: number;
|
|
3827
|
+
popup: string;
|
|
3828
|
+
popupOpen: boolean;
|
|
3829
|
+
popupCloseButton: boolean;
|
|
3830
|
+
}[]>;
|
|
3831
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLocationRendererComponent, never>;
|
|
3832
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3833
|
+
}
|
|
3834
|
+
|
|
3835
|
+
declare class AXStickerRendererComponent implements AXMessageRendererComponent {
|
|
3836
|
+
private readonly _contentState;
|
|
3837
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3838
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3839
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3840
|
+
contentState: AXMessageRendererContentState;
|
|
3841
|
+
}>;
|
|
3842
|
+
readonly payload: _angular_core.Signal<AXStickerPayload>;
|
|
3843
|
+
private readonly mediaReference;
|
|
3844
|
+
private readonly resolvedUrl;
|
|
3845
|
+
readonly stickerUrl: _angular_core.Signal<string>;
|
|
3846
|
+
readonly alt: _angular_core.Signal<string>;
|
|
3847
|
+
constructor();
|
|
3848
|
+
onLoad(): void;
|
|
3849
|
+
onError(): void;
|
|
3850
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerRendererComponent, never>;
|
|
3851
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3852
|
+
}
|
|
3853
|
+
|
|
3854
|
+
declare class AXSystemRendererComponent implements AXMessageRendererComponent {
|
|
3855
|
+
private readonly _contentState;
|
|
3856
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3857
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3858
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3859
|
+
contentState: AXMessageRendererContentState;
|
|
3860
|
+
}>;
|
|
3861
|
+
readonly payload: _angular_core.Signal<AXSystemPayload>;
|
|
3862
|
+
readonly iconClass: _angular_core.Signal<string>;
|
|
3863
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSystemRendererComponent, never>;
|
|
3864
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3865
|
+
}
|
|
3866
|
+
|
|
3867
|
+
declare class AXTextRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3868
|
+
private readonly infoBarService;
|
|
3869
|
+
private readonly sanitizer;
|
|
3870
|
+
private readonly _contentState;
|
|
3871
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3872
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3873
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3874
|
+
contentState: AXMessageRendererContentState;
|
|
3875
|
+
}>;
|
|
3876
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
3877
|
+
copy(): string;
|
|
3878
|
+
readonly formattedText: _angular_core.Signal<SafeHtml>;
|
|
3879
|
+
private linkify;
|
|
3880
|
+
private highlightSearch;
|
|
3881
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTextRendererComponent, never>;
|
|
3882
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3883
|
+
}
|
|
3884
|
+
|
|
3885
|
+
declare class AXVideoRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3886
|
+
private readonly fileTypes;
|
|
3887
|
+
private readonly translation;
|
|
3888
|
+
private readonly platformId;
|
|
3889
|
+
private readonly destroyRef;
|
|
3890
|
+
private readonly infoBarService;
|
|
3891
|
+
private readonly attachments;
|
|
3892
|
+
private readonly _contentState;
|
|
3893
|
+
private readonly activeVideoIndex;
|
|
3894
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3895
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3896
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3897
|
+
contentState: AXMessageRendererContentState;
|
|
3898
|
+
}>;
|
|
3899
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
3900
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
3901
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
3902
|
+
readonly payload: _angular_core.Signal<AXVideoPayload>;
|
|
3903
|
+
readonly videos: _angular_core.Signal<_acorex_components_conversation2.AXVideoMediaItem[]>;
|
|
3904
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3905
|
+
readonly videoLoadErrorLabel: _angular_core.Signal<string>;
|
|
3906
|
+
copy(): Promise<string>;
|
|
3907
|
+
constructor();
|
|
3908
|
+
onPlayingChange(index: number, playing: boolean): void;
|
|
3909
|
+
onTimeUpdate(index: number, time: number): void;
|
|
3910
|
+
onDurationChange(index: number, duration: number): void;
|
|
3911
|
+
onPlaybackEnded(index: number): void;
|
|
3912
|
+
onPlaybackError(): void;
|
|
3913
|
+
togglePlay(): void;
|
|
3914
|
+
private pauseOtherVideos;
|
|
3915
|
+
private pausePlayback;
|
|
3916
|
+
private syncInfoBarBanner;
|
|
3917
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoRendererComponent, never>;
|
|
3918
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3919
|
+
}
|
|
3920
|
+
|
|
3921
|
+
declare class AXVoiceRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3922
|
+
private readonly fileTypes;
|
|
3923
|
+
private readonly translation;
|
|
3924
|
+
private readonly platformId;
|
|
3925
|
+
private readonly destroyRef;
|
|
3926
|
+
private readonly infoBarService;
|
|
3927
|
+
private readonly audioElementRef;
|
|
3928
|
+
private readonly _contentState;
|
|
3929
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3930
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3931
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3932
|
+
contentState: AXMessageRendererContentState;
|
|
3933
|
+
}>;
|
|
3934
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
3935
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
3936
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
3937
|
+
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
3938
|
+
private readonly speeds;
|
|
3939
|
+
readonly payload: _angular_core.Signal<AXVoicePayload>;
|
|
3940
|
+
private readonly mediaReference;
|
|
3941
|
+
private readonly resolvedUrl;
|
|
3942
|
+
readonly voiceUrl: _angular_core.Signal<string>;
|
|
3943
|
+
readonly waveformBars: _angular_core.Signal<number[]>;
|
|
3944
|
+
readonly activeBarIndex: _angular_core.Signal<number>;
|
|
3945
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
3946
|
+
readonly voiceLoadErrorLabel: _angular_core.Signal<string>;
|
|
3947
|
+
copy(): Promise<string>;
|
|
3948
|
+
constructor();
|
|
3949
|
+
togglePlay(): void;
|
|
3950
|
+
cyclePlaybackSpeed(): void;
|
|
3951
|
+
onTimeUpdate(): void;
|
|
3952
|
+
onEnded(): void;
|
|
3953
|
+
onError(): void;
|
|
3954
|
+
private pausePlayback;
|
|
3955
|
+
private syncInfoBarBanner;
|
|
3956
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRendererComponent, never>;
|
|
3957
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3958
|
+
}
|
|
3959
|
+
|
|
3731
3960
|
/** Default message list surface when no conversation is selected and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3732
3961
|
declare class AXMessageListNoActiveDefaultComponent {
|
|
3733
3962
|
private readonly translation;
|
|
@@ -3742,7 +3971,12 @@ declare class AXMessageListNoActiveDefaultComponent {
|
|
|
3742
3971
|
declare class AXMessageListComponent implements OnDestroy {
|
|
3743
3972
|
private readonly conversationService;
|
|
3744
3973
|
private readonly messageListService;
|
|
3974
|
+
private readonly composerService;
|
|
3975
|
+
private readonly fileService;
|
|
3976
|
+
private readonly toast;
|
|
3977
|
+
private readonly infoBarService;
|
|
3745
3978
|
private readonly translation;
|
|
3979
|
+
private readonly document;
|
|
3746
3980
|
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
3747
3981
|
/**
|
|
3748
3982
|
* Background for the message list scroll area from config, or the built-in soft gradient when unset/empty.
|
|
@@ -3752,16 +3986,19 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3752
3986
|
resolvedEmptyStateComponent(): Type<AXMessageListEmptyComponent>;
|
|
3753
3987
|
/** Fallback when no conversation is active and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3754
3988
|
protected readonly noActiveFallbackComponent: typeof AXMessageListNoActiveDefaultComponent;
|
|
3755
|
-
/** Custom avatar template for message list items */
|
|
3756
|
-
readonly avatarTemplate: _angular_core.InputSignal<TemplateRef<AXMessageAvatarTemplateContext>>;
|
|
3757
3989
|
private readonly timeouts;
|
|
3758
3990
|
private readonly replyCounts;
|
|
3759
3991
|
private readonly forwardCounts;
|
|
3760
3992
|
readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
|
|
3761
3993
|
readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
|
|
3994
|
+
readonly reactionPickerPlacement: _angular_core.WritableSignal<AXPlacement>;
|
|
3762
3995
|
readonly reactionPopover: _angular_core.Signal<any>;
|
|
3763
3996
|
/** Message id whose context menu is open (for active row styling). */
|
|
3764
3997
|
readonly contextMenuMessageId: _angular_core.WritableSignal<string>;
|
|
3998
|
+
/** True while files are dragged over the message list drop zone. */
|
|
3999
|
+
readonly messageListDragging: _angular_core.WritableSignal<boolean>;
|
|
4000
|
+
/** While true, older history is being prepended — do not auto-scroll to the latest message. */
|
|
4001
|
+
private restoringScrollAfterPrepend;
|
|
3765
4002
|
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
3766
4003
|
private get registry();
|
|
3767
4004
|
/** Message list element reference */
|
|
@@ -3769,9 +4006,11 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3769
4006
|
/** Messages container element reference */
|
|
3770
4007
|
private readonly messagesContainerRef;
|
|
3771
4008
|
/** Loading state - use service */
|
|
3772
|
-
readonly loading: _angular_core.
|
|
4009
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
3773
4010
|
/** Loading more messages state - use service */
|
|
3774
4011
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4012
|
+
/** Whether older messages remain on the server */
|
|
4013
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
3775
4014
|
/** Show scroll to bottom button - use service */
|
|
3776
4015
|
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3777
4016
|
/** Active conversation */
|
|
@@ -3813,16 +4052,12 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3813
4052
|
shouldShowSenderName(message: AXMessage): boolean;
|
|
3814
4053
|
/** Get sender name */
|
|
3815
4054
|
getSenderName(message: AXMessage): string;
|
|
3816
|
-
/** Get sender avatar */
|
|
3817
|
-
getSenderAvatar(message: AXMessage): string | undefined;
|
|
3818
|
-
/** Font Awesome icon for sender when no avatar image (participant or conversation icon). */
|
|
3819
|
-
getSenderAvatarIcon(message: AXMessage): string | undefined;
|
|
3820
4055
|
/** Get original sender name for forwarded messages */
|
|
3821
4056
|
getOriginalSenderName(message: AXMessage): string;
|
|
3822
4057
|
/** Get forwarded text with sender and conversation info */
|
|
3823
4058
|
getForwardedText(message: AXMessage): string;
|
|
3824
4059
|
/** Resolve renderer component for message */
|
|
3825
|
-
getRendererComponent(message: AXMessage): Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
4060
|
+
getRendererComponent(message: AXMessage): typeof AXFallbackRendererComponent | Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
3826
4061
|
/** Provide inputs for the dynamic renderer */
|
|
3827
4062
|
getRendererInputs(message: AXMessage): {
|
|
3828
4063
|
message: AXMessage;
|
|
@@ -3850,7 +4085,7 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3850
4085
|
hasReacted: boolean;
|
|
3851
4086
|
}): string;
|
|
3852
4087
|
/** Toggle reaction picker */
|
|
3853
|
-
toggleReactionPicker(
|
|
4088
|
+
toggleReactionPicker(message: AXMessage, event: MouseEvent): void;
|
|
3854
4089
|
/** Close reaction picker */
|
|
3855
4090
|
closeReactionPicker(): void;
|
|
3856
4091
|
/** Check if current user has reacted with specific emoji */
|
|
@@ -3865,8 +4100,6 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3865
4100
|
private loadAvailableReactions;
|
|
3866
4101
|
/** Get message actions from registry */
|
|
3867
4102
|
getMessageActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
3868
|
-
/** Get initials from name */
|
|
3869
|
-
getInitials(name: string): string;
|
|
3870
4103
|
/** Handle reaction click */
|
|
3871
4104
|
onReactionClick(message: AXMessage, emoji: string): void;
|
|
3872
4105
|
/** Handle message action */
|
|
@@ -3875,8 +4108,12 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3875
4108
|
onScroll(event: Event): void;
|
|
3876
4109
|
/** Handle infinite scroll threshold */
|
|
3877
4110
|
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
3878
|
-
/** Load older messages - delegate to service */
|
|
4111
|
+
/** Load older messages - delegate to service and preserve scroll anchor */
|
|
3879
4112
|
private loadOlderMessages;
|
|
4113
|
+
/**
|
|
4114
|
+
* Keep the user's viewport on the same messages after older rows are inserted above.
|
|
4115
|
+
*/
|
|
4116
|
+
private restoreScrollPositionAfterPrepend;
|
|
3880
4117
|
/** Check if user is near bottom of scroll */
|
|
3881
4118
|
private isUserNearBottom;
|
|
3882
4119
|
/**
|
|
@@ -3908,6 +4145,11 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3908
4145
|
* This is called when a new reply or forward is detected globally
|
|
3909
4146
|
*/
|
|
3910
4147
|
private refreshCount;
|
|
4148
|
+
onMessageListDragEnter(): void;
|
|
4149
|
+
onMessageListDragLeave(): void;
|
|
4150
|
+
/** Open the matching composer picker popup when files are dropped on the message list. */
|
|
4151
|
+
onMessageListFilesDropped(event: AXUploaderFileChangeEvent): Promise<void>;
|
|
4152
|
+
private composerPickerDeps;
|
|
3911
4153
|
/** Handle context menu opening for messages */
|
|
3912
4154
|
handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
|
|
3913
4155
|
/** Handle context menu item click for messages */
|
|
@@ -3926,15 +4168,7 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3926
4168
|
*/
|
|
3927
4169
|
trackMessage(index: number, message: AXMessage): string;
|
|
3928
4170
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageListComponent, never>;
|
|
3929
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, {
|
|
3930
|
-
}
|
|
3931
|
-
interface AXMessageAvatarTemplateContext {
|
|
3932
|
-
$implicit: AXMessage;
|
|
3933
|
-
size: number;
|
|
3934
|
-
senderName: string;
|
|
3935
|
-
senderAvatar?: string;
|
|
3936
|
-
/** Font Awesome class string when there is no `senderAvatar` image. */
|
|
3937
|
-
senderIcon?: string;
|
|
4171
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXMessageListComponent, "ax-conversation-message-list", never, {}, { "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>;
|
|
3938
4172
|
}
|
|
3939
4173
|
|
|
3940
4174
|
declare class AXMessageListService {
|
|
@@ -3944,18 +4178,21 @@ declare class AXMessageListService {
|
|
|
3944
4178
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
3945
4179
|
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
3946
4180
|
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
3947
|
-
/**
|
|
3948
|
-
readonly loading: _angular_core.
|
|
3949
|
-
/** Loading
|
|
4181
|
+
/** Initial message history load (conversation switch) */
|
|
4182
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4183
|
+
/** Loading older messages (scroll-up pagination) */
|
|
3950
4184
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4185
|
+
/** Whether older messages can be loaded */
|
|
4186
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
3951
4187
|
/** Show scroll to bottom button */
|
|
3952
4188
|
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3953
4189
|
/** Scroll requests counter */
|
|
3954
4190
|
readonly scrollRequests: _angular_core.WritableSignal<number>;
|
|
3955
|
-
/**
|
|
3956
|
-
private readonly
|
|
3957
|
-
|
|
3958
|
-
|
|
4191
|
+
/** Live renderer instances keyed by message id (for message actions). */
|
|
4192
|
+
private readonly _rendererInstances;
|
|
4193
|
+
registerRendererInstance(messageId: string, instance: AXMessageRendererComponent): void;
|
|
4194
|
+
unregisterRendererInstance(messageId: string): void;
|
|
4195
|
+
getRendererInstance(messageId: string): AXMessageRendererComponent | undefined;
|
|
3959
4196
|
/** Message grouped by date */
|
|
3960
4197
|
readonly messageGroups: _angular_core.Signal<{
|
|
3961
4198
|
date: string;
|
|
@@ -3963,11 +4200,11 @@ declare class AXMessageListService {
|
|
|
3963
4200
|
messages: AXMessage[];
|
|
3964
4201
|
}[]>;
|
|
3965
4202
|
/**
|
|
3966
|
-
* Load
|
|
4203
|
+
* Load older messages when the user scrolls near the top.
|
|
3967
4204
|
*/
|
|
3968
|
-
loadMoreMessages(): Promise<
|
|
4205
|
+
loadMoreMessages(): Promise<boolean>;
|
|
3969
4206
|
/**
|
|
3970
|
-
* Reset pagination (
|
|
4207
|
+
* Reset pagination when switching conversations (page 0 is loaded by {@link AXConversationService.selectConversation}).
|
|
3971
4208
|
*/
|
|
3972
4209
|
resetPagination(): void;
|
|
3973
4210
|
getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
@@ -3985,11 +4222,10 @@ declare class AXSidebarService {
|
|
|
3985
4222
|
private get registry();
|
|
3986
4223
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
3987
4224
|
readonly activeTabId: _angular_core.WritableSignal<string>;
|
|
3988
|
-
private readonly currentPage;
|
|
3989
|
-
private readonly hasMoreConversations;
|
|
3990
4225
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3991
4226
|
readonly conversations: _angular_core.Signal<AXConversation[]>;
|
|
3992
4227
|
readonly loading: _angular_core.Signal<boolean>;
|
|
4228
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
3993
4229
|
readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation2.AXConversationTab[]>;
|
|
3994
4230
|
private filterCache;
|
|
3995
4231
|
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
@@ -4002,7 +4238,7 @@ declare class AXSidebarService {
|
|
|
4002
4238
|
selectConversation(conversation: AXConversation): void;
|
|
4003
4239
|
getBadgeValue(tabId: string): string | undefined;
|
|
4004
4240
|
/**
|
|
4005
|
-
* Load more conversations
|
|
4241
|
+
* Load more conversations when the user scrolls near the bottom of the sidebar list.
|
|
4006
4242
|
*/
|
|
4007
4243
|
loadMoreConversations(): Promise<void>;
|
|
4008
4244
|
/**
|
|
@@ -4010,9 +4246,9 @@ declare class AXSidebarService {
|
|
|
4010
4246
|
*/
|
|
4011
4247
|
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4012
4248
|
/**
|
|
4013
|
-
*
|
|
4249
|
+
* Reload conversation list from the first page (e.g. pull-to-refresh).
|
|
4014
4250
|
*/
|
|
4015
|
-
|
|
4251
|
+
reloadConversations(): Promise<void>;
|
|
4016
4252
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSidebarService, never>;
|
|
4017
4253
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXSidebarService>;
|
|
4018
4254
|
}
|
|
@@ -4032,6 +4268,7 @@ declare class AXSidebarComponent implements OnDestroy {
|
|
|
4032
4268
|
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
4033
4269
|
readonly loading: _angular_core.Signal<boolean>;
|
|
4034
4270
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4271
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
4035
4272
|
constructor();
|
|
4036
4273
|
/** Handle search input change with debouncing */
|
|
4037
4274
|
onSearchChange(value: string): void;
|
|
@@ -4096,7 +4333,6 @@ declare class AXNewConversationDialogComponent extends AXBasePageComponent {
|
|
|
4096
4333
|
onSearchChange(value: string): void;
|
|
4097
4334
|
isUserSelected(id: string): boolean;
|
|
4098
4335
|
userFromItem(item: unknown): AXParticipant | null;
|
|
4099
|
-
getInitials(name: string): string;
|
|
4100
4336
|
private filteredUsers;
|
|
4101
4337
|
onCreateConversation(): Promise<void>;
|
|
4102
4338
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXNewConversationDialogComponent, never>;
|
|
@@ -4110,15 +4346,22 @@ declare class AXInfiniteScrollDirective {
|
|
|
4110
4346
|
readonly threshold: _angular_core.InputSignal<number>;
|
|
4111
4347
|
/** Which edge to watch: 'top', 'bottom', or 'both' */
|
|
4112
4348
|
readonly edge: _angular_core.InputSignal<"top" | "bottom" | "both">;
|
|
4349
|
+
/** When true, scroll events are ignored (e.g. while a page is loading). */
|
|
4350
|
+
readonly scrollDisabled: _angular_core.InputSignal<boolean>;
|
|
4351
|
+
/** Minimum time between emissions (ms) to avoid duplicate API calls. */
|
|
4352
|
+
readonly cooldownMs: _angular_core.InputSignal<number>;
|
|
4113
4353
|
/** Event emitted when scrolling reaches the threshold */
|
|
4114
4354
|
readonly scrollThreshold: _angular_core.OutputEmitterRef<"top" | "bottom">;
|
|
4115
4355
|
private lastScrollTop;
|
|
4116
4356
|
private ticking;
|
|
4357
|
+
private lastEmitAt;
|
|
4358
|
+
private pendingEmit;
|
|
4117
4359
|
constructor();
|
|
4118
4360
|
private setupScrollListener;
|
|
4119
4361
|
private handleScroll;
|
|
4362
|
+
private emitThreshold;
|
|
4120
4363
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfiniteScrollDirective, never>;
|
|
4121
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInfiniteScrollDirective, "[axInfiniteScroll]", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "edge": { "alias": "edge"; "required": false; "isSignal": true; }; }, { "scrollThreshold": "scrollThreshold"; }, never, never, true, never>;
|
|
4364
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXInfiniteScrollDirective, "[axInfiniteScroll]", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "edge": { "alias": "edge"; "required": false; "isSignal": true; }; "scrollDisabled": { "alias": "scrollDisabled"; "required": false; "isSignal": true; }; "cooldownMs": { "alias": "cooldownMs"; "required": false; "isSignal": true; }; }, { "scrollThreshold": "scrollThreshold"; }, never, never, true, never>;
|
|
4122
4365
|
}
|
|
4123
4366
|
|
|
4124
4367
|
/**
|
|
@@ -4160,14 +4403,12 @@ interface AXConversationConfig {
|
|
|
4160
4403
|
defaultSidebarWidth?: number;
|
|
4161
4404
|
/** Filter cache size */
|
|
4162
4405
|
filterCacheSize?: number;
|
|
4163
|
-
/** Maximum file size in bytes */
|
|
4164
|
-
maxFileSize?: number;
|
|
4165
|
-
/** Allowed file types (glob patterns like 'image/*') */
|
|
4166
|
-
allowedFileTypes?: string[];
|
|
4167
4406
|
/** Maximum message length in characters */
|
|
4168
4407
|
maxMessageLength?: number;
|
|
4169
4408
|
/** Minimum message length in characters */
|
|
4170
4409
|
minMessageLength?: number;
|
|
4410
|
+
/** Max attachments per message when a composer action omits `maxFiles`. */
|
|
4411
|
+
maxFilesPerMessage?: number;
|
|
4171
4412
|
/** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
|
|
4172
4413
|
messageReadThreshold?: number;
|
|
4173
4414
|
/**
|
|
@@ -4211,6 +4452,29 @@ declare const CONVERSATION_CONFIG: InjectionToken<Required<AXConversationConfig>
|
|
|
4211
4452
|
*/
|
|
4212
4453
|
declare const ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXErrorHandlerConfig>>;
|
|
4213
4454
|
|
|
4455
|
+
/**
|
|
4456
|
+
* Pluggable avatar components for the conversation UI.
|
|
4457
|
+
* Register via `provideConversation({ avatarComponents: { user, conversation } })`.
|
|
4458
|
+
*/
|
|
4459
|
+
|
|
4460
|
+
/** Custom user avatar (e.g. platform `axp-user-avatar`). */
|
|
4461
|
+
interface AXConversationUserAvatarComponent {
|
|
4462
|
+
readonly userId: InputSignal<string>;
|
|
4463
|
+
readonly size: InputSignal<number>;
|
|
4464
|
+
}
|
|
4465
|
+
/** Optional custom group/channel conversation avatar. */
|
|
4466
|
+
interface AXConversationConversationAvatarComponent {
|
|
4467
|
+
readonly conversationId: InputSignal<string>;
|
|
4468
|
+
readonly size: InputSignal<number>;
|
|
4469
|
+
}
|
|
4470
|
+
type AXConversationAvatarKind = 'user' | 'conversation' | 'auto';
|
|
4471
|
+
declare const AX_CONVERSATION_USER_AVATAR_COMPONENT: InjectionToken<Type<AXConversationUserAvatarComponent>>;
|
|
4472
|
+
declare const AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT: InjectionToken<Type<AXConversationConversationAvatarComponent>>;
|
|
4473
|
+
interface AXConversationAvatarComponents {
|
|
4474
|
+
user?: Type<AXConversationUserAvatarComponent>;
|
|
4475
|
+
conversation?: Type<AXConversationConversationAvatarComponent>;
|
|
4476
|
+
}
|
|
4477
|
+
|
|
4214
4478
|
/**
|
|
4215
4479
|
* Registry Configuration Tokens
|
|
4216
4480
|
* Injection tokens for configuring default registry values
|
|
@@ -4289,10 +4553,21 @@ declare const AXConversationIndexedDbStores: {
|
|
|
4289
4553
|
readonly PARTICIPANTS: "participants";
|
|
4290
4554
|
readonly CONVERSATIONS: "conversations";
|
|
4291
4555
|
readonly MESSAGES: "messages";
|
|
4556
|
+
readonly MEDIA: "media";
|
|
4292
4557
|
readonly SETTINGS: "settings";
|
|
4293
4558
|
};
|
|
4294
|
-
|
|
4295
|
-
|
|
4559
|
+
/** Blob stored for demo multimedia uploads */
|
|
4560
|
+
interface AXConversationIndexedDbMediaRecord {
|
|
4561
|
+
id: string;
|
|
4562
|
+
conversationId: string;
|
|
4563
|
+
mimeType: string;
|
|
4564
|
+
size: number;
|
|
4565
|
+
fileName?: string;
|
|
4566
|
+
blob: Blob;
|
|
4567
|
+
createdAt: string;
|
|
4568
|
+
}
|
|
4569
|
+
declare class AXConversationIndexedDbStorage {
|
|
4570
|
+
private db;
|
|
4296
4571
|
private initPromise;
|
|
4297
4572
|
/**
|
|
4298
4573
|
* Initialize IndexedDB
|
|
@@ -4336,6 +4611,9 @@ declare class AXConversationIndexedDbStorage {
|
|
|
4336
4611
|
deleteMessage(id: string): Promise<void>;
|
|
4337
4612
|
getSetting(key: string): Promise<unknown>;
|
|
4338
4613
|
putSetting(key: string, value: unknown): Promise<void>;
|
|
4614
|
+
getMedia(id: string): Promise<AXConversationIndexedDbMediaRecord | undefined>;
|
|
4615
|
+
putMedia(record: AXConversationIndexedDbMediaRecord): Promise<void>;
|
|
4616
|
+
deleteMedia(id: string): Promise<void>;
|
|
4339
4617
|
}
|
|
4340
4618
|
declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
|
|
4341
4619
|
|
|
@@ -4389,6 +4667,59 @@ declare class AXConversationSharedStorage {
|
|
|
4389
4667
|
}
|
|
4390
4668
|
declare const conversationSharedStorage: AXConversationSharedStorage;
|
|
4391
4669
|
|
|
4670
|
+
/**
|
|
4671
|
+
* Chat-oriented pagination helpers for IndexedDB demo APIs.
|
|
4672
|
+
*
|
|
4673
|
+
* Convention (matches {@link AXConversationService}):
|
|
4674
|
+
* - Page 0: newest items (sidebar: recent chats; messages: latest history window).
|
|
4675
|
+
* - Page 1+ or `cursor`: older items before the previous window.
|
|
4676
|
+
* - `hasMore`: true when older items remain.
|
|
4677
|
+
* - `nextCursor`: id of the oldest item in the current page (use as `pagination.cursor` for the next request).
|
|
4678
|
+
*/
|
|
4679
|
+
|
|
4680
|
+
declare const AX_MESSAGE_CURSOR_PREFIX = "msg:";
|
|
4681
|
+
declare const AX_CONVERSATION_CURSOR_PREFIX = "conv:";
|
|
4682
|
+
type AXChatCursorKind = 'message' | 'conversation';
|
|
4683
|
+
interface AXParsedChatCursor {
|
|
4684
|
+
kind: AXChatCursorKind;
|
|
4685
|
+
id: string;
|
|
4686
|
+
}
|
|
4687
|
+
declare function encodeMessageCursor(messageId: string): string;
|
|
4688
|
+
declare function encodeConversationCursor(conversationId: string): string;
|
|
4689
|
+
/** Decode cursor from API pagination (supports prefixed or legacy raw message id). */
|
|
4690
|
+
declare function parseChatCursor(cursor?: string): AXParsedChatCursor | null;
|
|
4691
|
+
/**
|
|
4692
|
+
* Paginate a list sorted newest-first (chats, message history windows).
|
|
4693
|
+
*/
|
|
4694
|
+
declare function paginateChatNewestFirst<T extends {
|
|
4695
|
+
id: string;
|
|
4696
|
+
}>(sortedNewestFirst: T[], pagination: AXPagination, cursorKind: AXChatCursorKind): AXPaginatedResult<T>;
|
|
4697
|
+
/**
|
|
4698
|
+
* Paginate a list sorted oldest-first (replies, forward history).
|
|
4699
|
+
*/
|
|
4700
|
+
declare function paginateChatOldestFirst<T extends {
|
|
4701
|
+
id: string;
|
|
4702
|
+
}>(sortedOldestFirst: T[], pagination: AXPagination): AXPaginatedResult<T>;
|
|
4703
|
+
|
|
4704
|
+
/**
|
|
4705
|
+
* Shared read/write helpers for IndexedDB chat storage (in-memory + persistence).
|
|
4706
|
+
*/
|
|
4707
|
+
|
|
4708
|
+
declare function getConversationLastActivity(conv: AXConversation): number;
|
|
4709
|
+
/** Messages for a conversation, newest first (API / pagination order). */
|
|
4710
|
+
declare function getConversationMessagesNewestFirst(conversationId: string): AXMessage[];
|
|
4711
|
+
/** Keep per-conversation id list sorted ascending by timestamp (store order). */
|
|
4712
|
+
declare function sortConversationMessageIds(conversationId: string): void;
|
|
4713
|
+
/** Register a message in maps and keep the conversation index sorted. */
|
|
4714
|
+
declare function registerChatMessage(message: AXMessage): void;
|
|
4715
|
+
/** Remove a message from conversation index and global map. */
|
|
4716
|
+
declare function unregisterChatMessage(messageId: string, conversationId: string): void;
|
|
4717
|
+
declare function applyConversationFilters(conversations: AXConversation[], filters?: AXConversationFilters): AXConversation[];
|
|
4718
|
+
/** Sidebar list order: pinned first, then by last activity (newest first). */
|
|
4719
|
+
declare function getSortedConversationsForInbox(filters?: AXConversationFilters): AXConversation[];
|
|
4720
|
+
/** Sort all loaded conversation message indexes (after IndexedDB hydration). */
|
|
4721
|
+
declare function normalizeAllConversationMessageIndexes(): void;
|
|
4722
|
+
|
|
4392
4723
|
declare class AXConversationIndexedDbUserApi extends AXUserApi {
|
|
4393
4724
|
getCurrentUser(): Promise<AXParticipant>;
|
|
4394
4725
|
updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
|
|
@@ -4412,36 +4743,38 @@ declare class AXConversationIndexedDbUserApi extends AXUserApi {
|
|
|
4412
4743
|
declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
4413
4744
|
createConversation(data: AXConversationCreateData): Promise<AXConversation>;
|
|
4414
4745
|
getConversation(conversationId: string): Promise<AXConversation>;
|
|
4415
|
-
|
|
4746
|
+
/**
|
|
4747
|
+
* Inbox page (pinned + recent activity, newest first).
|
|
4748
|
+
* Page 0 / cursor align with {@link AXConversationService.loadConversations} and sidebar infinite scroll.
|
|
4749
|
+
*/
|
|
4750
|
+
getConversations(pagination: AXPagination, filters?: AXConversationFilters): Promise<AXPaginatedResult<AXConversation>>;
|
|
4416
4751
|
updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
|
|
4417
4752
|
deleteConversation(conversationId: string): Promise<boolean>;
|
|
4418
4753
|
archiveConversation(conversationId: string): Promise<void>;
|
|
4419
4754
|
unarchiveConversation(conversationId: string): Promise<void>;
|
|
4420
|
-
pinConversation(
|
|
4421
|
-
unpinConversation(
|
|
4755
|
+
pinConversation(conversationId: string): Promise<void>;
|
|
4756
|
+
unpinConversation(conversationId: string): Promise<void>;
|
|
4422
4757
|
markConversationAsRead(conversationId: string): Promise<void>;
|
|
4423
4758
|
markConversationAsUnread(conversationId: string): Promise<void>;
|
|
4424
4759
|
searchConversations(query: string): Promise<AXConversation[]>;
|
|
4425
|
-
filterConversations(
|
|
4760
|
+
filterConversations(filters: AXConversationFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXConversation>>;
|
|
4426
4761
|
getParticipants(conversationId: string): Promise<AXParticipant[]>;
|
|
4427
4762
|
addParticipants(_conversationId: string, _userIds: string[]): Promise<AXConversation>;
|
|
4428
4763
|
removeParticipant(conversationId: string, _userId: string): Promise<AXConversation>;
|
|
4429
4764
|
leaveConversation(_conversationId: string): Promise<void>;
|
|
4430
4765
|
updateParticipant(conversationId: string, _update: AXParticipantUpdate): Promise<AXConversation>;
|
|
4431
4766
|
getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
|
|
4432
|
-
updateConversationSettings(
|
|
4433
|
-
muteConversation(
|
|
4434
|
-
unmuteConversation(
|
|
4767
|
+
updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
|
|
4768
|
+
muteConversation(conversationId: string, duration?: number): Promise<void>;
|
|
4769
|
+
unmuteConversation(conversationId: string): Promise<void>;
|
|
4435
4770
|
uploadConversationAvatar(_conversationId: string, file: File): Promise<string>;
|
|
4436
|
-
getConversationMedia(
|
|
4437
|
-
addConversationTags(
|
|
4438
|
-
removeConversationTags(
|
|
4439
|
-
getConversationTags(
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
getDraft(_conversationId: string): Promise<string | null>;
|
|
4444
|
-
clearDraft(_conversationId: string): Promise<void>;
|
|
4771
|
+
getConversationMedia(conversationId: string, pagination?: AXPagination): Promise<AXPaginatedResult<unknown>>;
|
|
4772
|
+
addConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4773
|
+
removeConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4774
|
+
getConversationTags(conversationId: string): Promise<string[]>;
|
|
4775
|
+
saveDraft(conversationId: string, draft: string): Promise<void>;
|
|
4776
|
+
getDraft(conversationId: string): Promise<string | null>;
|
|
4777
|
+
clearDraft(conversationId: string): Promise<void>;
|
|
4445
4778
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
|
|
4446
4779
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
|
|
4447
4780
|
}
|
|
@@ -4449,12 +4782,17 @@ declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
|
4449
4782
|
declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
|
|
4450
4783
|
sendMessage(command: AXSendMessageCommand): Promise<AXMessage>;
|
|
4451
4784
|
getMessage(messageId: string): Promise<AXMessage>;
|
|
4785
|
+
/**
|
|
4786
|
+
* Message history for a chat (newest-first pages).
|
|
4787
|
+
* - Page 0: latest `pageSize` messages.
|
|
4788
|
+
* - Page 1+ or `pagination.cursor`: older messages before the previous window.
|
|
4789
|
+
*/
|
|
4452
4790
|
getMessages(conversationId: string, pagination: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4453
4791
|
editMessage(messageId: string, payload: AXMessagePayload): Promise<AXMessage>;
|
|
4454
4792
|
deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
|
|
4455
4793
|
deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4456
|
-
searchMessages(conversationId: string, filters: AXMessageSearchFilters,
|
|
4457
|
-
searchAllMessages(
|
|
4794
|
+
searchMessages(conversationId: string, filters: AXMessageSearchFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4795
|
+
searchAllMessages(filters: AXMessageSearchFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4458
4796
|
addReaction(messageId: string, emoji: string): Promise<void>;
|
|
4459
4797
|
removeReaction(messageId: string, emoji: string): Promise<void>;
|
|
4460
4798
|
getAvailableReactions(): Promise<string[]>;
|
|
@@ -4470,24 +4808,17 @@ declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
|
|
|
4470
4808
|
getForwardCount(messageId: string): Promise<number>;
|
|
4471
4809
|
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
4472
4810
|
stopTypingIndicator(conversationId: string): Promise<void>;
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
size: number;
|
|
4477
|
-
mimeType: string;
|
|
4478
|
-
metadata?: Record<string, unknown>;
|
|
4479
|
-
}>;
|
|
4480
|
-
updateMessageMetadata(_messageId: string, _metadata: Record<string, unknown>): Promise<void>;
|
|
4481
|
-
getMessageMetadata(_messageId: string): Promise<Record<string, unknown>>;
|
|
4482
|
-
updateMessageStatus(_messageId: string, _status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
|
|
4811
|
+
updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
|
|
4812
|
+
getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
|
|
4813
|
+
updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
|
|
4483
4814
|
getMessageDeliveryStatus(_messageId: string): Promise<{
|
|
4484
4815
|
delivered: number;
|
|
4485
4816
|
read: number;
|
|
4486
4817
|
total: number;
|
|
4487
4818
|
}>;
|
|
4488
|
-
markMessagesAsRead(
|
|
4489
|
-
bulkDeleteMessages(
|
|
4490
|
-
exportMessages(
|
|
4819
|
+
markMessagesAsRead(messageIds: string[]): Promise<void>;
|
|
4820
|
+
bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4821
|
+
exportMessages(conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
|
|
4491
4822
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
|
|
4492
4823
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
|
|
4493
4824
|
}
|
|
@@ -4653,31 +4984,66 @@ declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedD
|
|
|
4653
4984
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
|
|
4654
4985
|
}
|
|
4655
4986
|
|
|
4656
|
-
|
|
4987
|
+
/**
|
|
4988
|
+
* Shared upload state and helpers for composer media pickers.
|
|
4989
|
+
*/
|
|
4990
|
+
|
|
4991
|
+
interface AXComposerPickerUploadItem {
|
|
4657
4992
|
file: File;
|
|
4993
|
+
preview?: string;
|
|
4994
|
+
duration?: number;
|
|
4995
|
+
uploadProgress?: number;
|
|
4996
|
+
uploading?: boolean;
|
|
4997
|
+
uploaded?: boolean;
|
|
4998
|
+
uploadedUrl?: string;
|
|
4999
|
+
mediaId?: string;
|
|
5000
|
+
error?: string;
|
|
5001
|
+
abortController?: AbortController;
|
|
5002
|
+
}
|
|
5003
|
+
|
|
5004
|
+
interface AudioFile extends AXComposerPickerUploadItem {
|
|
4658
5005
|
duration?: number;
|
|
4659
5006
|
dataUrl?: string;
|
|
4660
5007
|
}
|
|
4661
|
-
declare class AXAudioPickerComponent {
|
|
4662
|
-
private
|
|
4663
|
-
private
|
|
4664
|
-
|
|
5008
|
+
declare class AXAudioPickerComponent implements OnDestroy {
|
|
5009
|
+
private uploadsDismissed;
|
|
5010
|
+
private retainUploadedOnDismiss;
|
|
5011
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5012
|
+
private readonly composerServiceFromInjector;
|
|
5013
|
+
private get composerService();
|
|
5014
|
+
private readonly uploader;
|
|
5015
|
+
private readonly fileService;
|
|
5016
|
+
private readonly fileTypeRegistry;
|
|
5017
|
+
private readonly platformId;
|
|
5018
|
+
private readonly toast;
|
|
4665
5019
|
readonly translation: AXTranslationService;
|
|
4666
5020
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4667
|
-
readonly
|
|
5021
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5022
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5023
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5024
|
+
readonly catalogFileType: "conversation-audio";
|
|
4668
5025
|
readonly audioFiles: _angular_core.WritableSignal<AudioFile[]>;
|
|
4669
5026
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
5027
|
+
readonly typeIconClass: "fa-light fa-music text-amber-500";
|
|
5028
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-music text-amber-500" | "fa-light fa-cloud-arrow-up">;
|
|
5029
|
+
private catalogFileTypeDef?;
|
|
4670
5030
|
caption: string;
|
|
4671
|
-
|
|
5031
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5032
|
+
constructor();
|
|
5033
|
+
private createUtilityContext;
|
|
5034
|
+
private getCatalogFileTypeDef;
|
|
5035
|
+
private runUtility;
|
|
4672
5036
|
handleFiles(files: File[]): Promise<void>;
|
|
4673
|
-
|
|
5037
|
+
private uploadAudioAt;
|
|
5038
|
+
private patchAudio;
|
|
4674
5039
|
removeAudio(index: number): void;
|
|
4675
|
-
onDragEnter(event: DragEvent): void;
|
|
4676
|
-
onDragOver(event: DragEvent): void;
|
|
4677
|
-
onDragLeave(event: DragEvent): void;
|
|
4678
|
-
onDrop(event: DragEvent): void;
|
|
4679
5040
|
sendAudio(): Promise<void>;
|
|
5041
|
+
canSend(): boolean;
|
|
5042
|
+
getUploadingLabel(progress: number): string;
|
|
5043
|
+
getCancelUploadLabel(): string;
|
|
4680
5044
|
cancel(): void;
|
|
5045
|
+
ngOnDestroy(): void;
|
|
5046
|
+
private dismissPicker;
|
|
4681
5047
|
formatFileSize(bytes: number): string;
|
|
4682
5048
|
formatDuration(seconds: number): string;
|
|
4683
5049
|
getEmptyTitle(): string;
|
|
@@ -4685,7 +5051,7 @@ declare class AXAudioPickerComponent {
|
|
|
4685
5051
|
getSelectedCountText(): string;
|
|
4686
5052
|
getSendText(): string;
|
|
4687
5053
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioPickerComponent, never>;
|
|
4688
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioPickerComponent, "ax-conversation-audio-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5054
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioPickerComponent, "ax-conversation-audio-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4689
5055
|
}
|
|
4690
5056
|
|
|
4691
5057
|
declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXComposerTab;
|
|
@@ -4729,37 +5095,54 @@ declare class AXEmojiTabComponent {
|
|
|
4729
5095
|
interface AttachedFile {
|
|
4730
5096
|
file: File;
|
|
4731
5097
|
preview?: string;
|
|
5098
|
+
icon: string;
|
|
4732
5099
|
type: 'image' | 'video' | 'audio' | 'file';
|
|
4733
5100
|
uploadProgress?: number;
|
|
4734
5101
|
uploading?: boolean;
|
|
4735
5102
|
uploaded?: boolean;
|
|
4736
5103
|
uploadedUrl?: string;
|
|
5104
|
+
mediaId?: string;
|
|
4737
5105
|
error?: string;
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
private
|
|
4742
|
-
private
|
|
4743
|
-
private readonly
|
|
5106
|
+
abortController?: AbortController;
|
|
5107
|
+
}
|
|
5108
|
+
declare class AXFilePickerComponent implements OnDestroy {
|
|
5109
|
+
private uploadsDismissed;
|
|
5110
|
+
private retainUploadedOnDismiss;
|
|
5111
|
+
private readonly uploader;
|
|
5112
|
+
private readonly fileService;
|
|
5113
|
+
private readonly fileTypeRegistry;
|
|
5114
|
+
private readonly platformId;
|
|
5115
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5116
|
+
private readonly composerServiceFromInjector;
|
|
5117
|
+
private get composerService();
|
|
5118
|
+
private readonly toast;
|
|
4744
5119
|
readonly translation: AXTranslationService;
|
|
4745
5120
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4746
|
-
readonly
|
|
5121
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5122
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5123
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5124
|
+
readonly catalogFileType: "conversation-file";
|
|
5125
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
4747
5126
|
readonly files: _angular_core.WritableSignal<AttachedFile[]>;
|
|
4748
5127
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4749
5128
|
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
4750
|
-
|
|
5129
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-file text-neutral-500" | "fa-light fa-cloud-arrow-up">;
|
|
5130
|
+
private catalogFileTypeDef?;
|
|
5131
|
+
caption: string;
|
|
5132
|
+
constructor();
|
|
5133
|
+
private createUtilityContext;
|
|
5134
|
+
private getCatalogFileTypeDef;
|
|
5135
|
+
private pickerKind;
|
|
4751
5136
|
handleFiles(fileList: File[]): Promise<void>;
|
|
4752
5137
|
private uploadFile;
|
|
4753
|
-
onFileInputChange(event: Event): void;
|
|
4754
5138
|
removeFile(index: number): void;
|
|
4755
|
-
onDragEnter(event: DragEvent): void;
|
|
4756
|
-
onDragOver(event: DragEvent): void;
|
|
4757
|
-
onDragLeave(event: DragEvent): void;
|
|
4758
|
-
onDrop(event: DragEvent): void;
|
|
4759
5139
|
sendFiles(): Promise<void>;
|
|
4760
5140
|
private updateFileProgress;
|
|
4761
5141
|
private uploadFileWithProgress;
|
|
4762
5142
|
cancel(): void;
|
|
5143
|
+
ngOnDestroy(): void;
|
|
5144
|
+
private dismissPicker;
|
|
5145
|
+
getCancelUploadLabel(): string;
|
|
4763
5146
|
formatFileSize(bytes: number): string;
|
|
4764
5147
|
canSend(): boolean;
|
|
4765
5148
|
getSendButtonText(): string;
|
|
@@ -4768,40 +5151,56 @@ declare class AXFilePickerComponent {
|
|
|
4768
5151
|
getSelectedCountText(): string;
|
|
4769
5152
|
getUploadingLabel(progress: number): string;
|
|
4770
5153
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFilePickerComponent, never>;
|
|
4771
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFilePickerComponent, "ax-conversation-file-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5154
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFilePickerComponent, "ax-conversation-file-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4772
5155
|
}
|
|
4773
5156
|
|
|
4774
|
-
interface ImageFile {
|
|
4775
|
-
file: File;
|
|
5157
|
+
interface ImageFile extends AXComposerPickerUploadItem {
|
|
4776
5158
|
preview: string;
|
|
4777
5159
|
}
|
|
4778
|
-
declare class AXImagePickerComponent {
|
|
4779
|
-
private
|
|
4780
|
-
|
|
4781
|
-
private
|
|
5160
|
+
declare class AXImagePickerComponent implements OnDestroy {
|
|
5161
|
+
private uploadsDismissed;
|
|
5162
|
+
/** Uploaded blobs are referenced by the sent message — do not delete on dismiss. */
|
|
5163
|
+
private retainUploadedOnDismiss;
|
|
5164
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5165
|
+
private readonly composerServiceFromInjector;
|
|
5166
|
+
private get composerService();
|
|
5167
|
+
private readonly uploader;
|
|
5168
|
+
private readonly fileService;
|
|
5169
|
+
private readonly fileTypeRegistry;
|
|
5170
|
+
private readonly platformId;
|
|
5171
|
+
private readonly toast;
|
|
4782
5172
|
readonly translation: AXTranslationService;
|
|
5173
|
+
readonly catalogFileType: "conversation-image";
|
|
4783
5174
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4784
|
-
readonly
|
|
5175
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5176
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5177
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4785
5178
|
readonly images: _angular_core.WritableSignal<ImageFile[]>;
|
|
4786
5179
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
5180
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image text-purple-500" | "fa-light fa-cloud-arrow-up">;
|
|
4787
5181
|
caption: string;
|
|
4788
|
-
|
|
5182
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5183
|
+
private imageFileType?;
|
|
5184
|
+
constructor();
|
|
5185
|
+
private createUtilityContext;
|
|
5186
|
+
private loadImageFileType;
|
|
4789
5187
|
handleFiles(files: File[]): Promise<void>;
|
|
4790
|
-
|
|
5188
|
+
private uploadImageAt;
|
|
5189
|
+
private patchImage;
|
|
4791
5190
|
removeImage(index: number): void;
|
|
4792
|
-
onDragEnter(event: DragEvent): void;
|
|
4793
|
-
onDragOver(event: DragEvent): void;
|
|
4794
|
-
onDragLeave(event: DragEvent): void;
|
|
4795
|
-
onDrop(event: DragEvent): void;
|
|
4796
5191
|
sendImages(): Promise<void>;
|
|
5192
|
+
canSend(): boolean;
|
|
5193
|
+
getUploadingLabel(progress: number): string;
|
|
5194
|
+
getCancelUploadLabel(): string;
|
|
4797
5195
|
cancel(): void;
|
|
4798
|
-
|
|
5196
|
+
ngOnDestroy(): void;
|
|
5197
|
+
private dismissPicker;
|
|
4799
5198
|
getEmptyTitle(): string;
|
|
4800
5199
|
getEmptySubtitle(): string;
|
|
4801
5200
|
getSelectedCountText(): string;
|
|
4802
5201
|
getSendText(): string;
|
|
4803
5202
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImagePickerComponent, never>;
|
|
4804
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImagePickerComponent, "ax-conversation-image-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5203
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImagePickerComponent, "ax-conversation-image-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4805
5204
|
}
|
|
4806
5205
|
|
|
4807
5206
|
declare class AXLocationPickerComponent {
|
|
@@ -4868,31 +5267,49 @@ declare class AXStickerTabComponent {
|
|
|
4868
5267
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerTabComponent, "ax-sticker-tab", never, {}, { "itemSelected": "itemSelected"; }, never, never, true, never>;
|
|
4869
5268
|
}
|
|
4870
5269
|
|
|
4871
|
-
interface VideoFile {
|
|
4872
|
-
file: File;
|
|
5270
|
+
interface VideoFile extends AXComposerPickerUploadItem {
|
|
4873
5271
|
preview?: string;
|
|
4874
5272
|
duration?: number;
|
|
4875
5273
|
}
|
|
4876
|
-
declare class AXVideoPickerComponent {
|
|
4877
|
-
private
|
|
4878
|
-
private
|
|
4879
|
-
|
|
5274
|
+
declare class AXVideoPickerComponent implements OnDestroy {
|
|
5275
|
+
private uploadsDismissed;
|
|
5276
|
+
private retainUploadedOnDismiss;
|
|
5277
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5278
|
+
private readonly composerServiceFromInjector;
|
|
5279
|
+
private get composerService();
|
|
5280
|
+
private readonly uploader;
|
|
5281
|
+
private readonly fileService;
|
|
5282
|
+
private readonly fileTypeRegistry;
|
|
5283
|
+
private readonly platformId;
|
|
5284
|
+
private readonly toast;
|
|
4880
5285
|
readonly translation: AXTranslationService;
|
|
4881
5286
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4882
|
-
readonly
|
|
5287
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5288
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5289
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5290
|
+
readonly catalogFileType: "conversation-video";
|
|
4883
5291
|
readonly videos: _angular_core.WritableSignal<VideoFile[]>;
|
|
4884
5292
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4885
5293
|
caption: string;
|
|
4886
|
-
|
|
5294
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5295
|
+
readonly typeIconClass: "fa-light fa-video ax-text-blue-500";
|
|
5296
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
|
|
5297
|
+
private catalogFileTypeDef?;
|
|
5298
|
+
constructor();
|
|
5299
|
+
private createUtilityContext;
|
|
5300
|
+
private getCatalogFileTypeDef;
|
|
5301
|
+
private runUtility;
|
|
4887
5302
|
handleFiles(files: File[]): Promise<void>;
|
|
4888
|
-
|
|
5303
|
+
private uploadVideoAt;
|
|
5304
|
+
private patchVideo;
|
|
4889
5305
|
removeVideo(index: number): void;
|
|
4890
|
-
onDragEnter(event: DragEvent): void;
|
|
4891
|
-
onDragOver(event: DragEvent): void;
|
|
4892
|
-
onDragLeave(event: DragEvent): void;
|
|
4893
|
-
onDrop(event: DragEvent): void;
|
|
4894
5306
|
sendVideos(): Promise<void>;
|
|
5307
|
+
canSend(): boolean;
|
|
5308
|
+
getUploadingLabel(progress: number): string;
|
|
5309
|
+
getCancelUploadLabel(): string;
|
|
4895
5310
|
cancel(): void;
|
|
5311
|
+
ngOnDestroy(): void;
|
|
5312
|
+
private dismissPicker;
|
|
4896
5313
|
formatFileSize(bytes: number): string;
|
|
4897
5314
|
formatDuration(seconds: number): string;
|
|
4898
5315
|
getEmptyTitle(): string;
|
|
@@ -4900,20 +5317,22 @@ declare class AXVideoPickerComponent {
|
|
|
4900
5317
|
getSelectedCountText(): string;
|
|
4901
5318
|
getSendText(): string;
|
|
4902
5319
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoPickerComponent, never>;
|
|
4903
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoPickerComponent, "ax-conversation-video-picker", never, { "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5320
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoPickerComponent, "ax-conversation-video-picker", never, { "service": { "alias": "service"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "maxFiles": { "alias": "maxFiles"; "required": false; "isSignal": true; }; "initialFiles": { "alias": "initialFiles"; "required": false; "isSignal": true; }; "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4904
5321
|
}
|
|
4905
5322
|
|
|
4906
5323
|
declare class AXVoiceRecorderComponent {
|
|
4907
5324
|
private readonly platformId;
|
|
4908
5325
|
private readonly destroyRef;
|
|
4909
5326
|
private readonly composerService;
|
|
4910
|
-
private readonly
|
|
4911
|
-
private readonly
|
|
5327
|
+
private readonly uploader;
|
|
5328
|
+
private readonly toast;
|
|
4912
5329
|
readonly translation: AXTranslationService;
|
|
4913
5330
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4914
5331
|
readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
|
|
4915
5332
|
readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
|
|
4916
5333
|
readonly isRecording: _angular_core.WritableSignal<boolean>;
|
|
5334
|
+
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
5335
|
+
readonly uploadProgress: _angular_core.WritableSignal<number>;
|
|
4917
5336
|
readonly recordingDuration: _angular_core.WritableSignal<number>;
|
|
4918
5337
|
private recordingStartTime;
|
|
4919
5338
|
private timerInterval?;
|
|
@@ -4921,6 +5340,7 @@ declare class AXVoiceRecorderComponent {
|
|
|
4921
5340
|
private audioChunks;
|
|
4922
5341
|
private activeStream?;
|
|
4923
5342
|
private cancelled;
|
|
5343
|
+
private uploadAbortController?;
|
|
4924
5344
|
readonly formattedTime: _angular_core.Signal<string>;
|
|
4925
5345
|
constructor();
|
|
4926
5346
|
startRecording(): Promise<void>;
|
|
@@ -4929,518 +5349,278 @@ declare class AXVoiceRecorderComponent {
|
|
|
4929
5349
|
cancelRecording(): void;
|
|
4930
5350
|
/** Close the voice recorder */
|
|
4931
5351
|
cancel(): void;
|
|
5352
|
+
abortInProgressUploads(): void;
|
|
4932
5353
|
/** Clear timer */
|
|
4933
|
-
private clearTimer;
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
private
|
|
4937
|
-
|
|
4938
|
-
static
|
|
4939
|
-
}
|
|
4940
|
-
|
|
4941
|
-
/**
|
|
4942
|
-
* Composer Actions Plugin
|
|
4943
|
-
* Individual composer action constants
|
|
4944
|
-
*
|
|
4945
|
-
* Priority Standard (lower number = higher priority):
|
|
4946
|
-
* - 10: Emoji (most common)
|
|
4947
|
-
* - 20: File attachment (common)
|
|
4948
|
-
* - 30: Voice recording (common)
|
|
4949
|
-
* - 40: Image (media)
|
|
4950
|
-
* - 50: Video (media)
|
|
4951
|
-
* - 60: Audio (media)
|
|
4952
|
-
* - 70: Location (special)
|
|
4953
|
-
*/
|
|
4954
|
-
|
|
4955
|
-
/**
|
|
4956
|
-
* Emoji & Stickers picker action
|
|
4957
|
-
*/
|
|
4958
|
-
declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXComposerAction;
|
|
4959
|
-
/**
|
|
4960
|
-
* Image picker action
|
|
4961
|
-
*/
|
|
4962
|
-
declare const AX_CONVERSATION_COMPOSER_IMAGE_ACTION: AXComposerAction;
|
|
4963
|
-
/**
|
|
4964
|
-
* Video picker action
|
|
4965
|
-
*/
|
|
4966
|
-
declare const AX_CONVERSATION_COMPOSER_VIDEO_ACTION: AXComposerAction;
|
|
4967
|
-
/**
|
|
4968
|
-
* File picker action
|
|
4969
|
-
*/
|
|
4970
|
-
declare const AX_CONVERSATION_COMPOSER_FILE_ACTION: AXComposerAction;
|
|
4971
|
-
/**
|
|
4972
|
-
* Voice recording action
|
|
4973
|
-
*/
|
|
4974
|
-
declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
|
|
4975
|
-
/**
|
|
4976
|
-
* Audio file picker action
|
|
4977
|
-
*/
|
|
4978
|
-
declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
|
|
4979
|
-
/**
|
|
4980
|
-
* Location picker action
|
|
4981
|
-
*/
|
|
4982
|
-
declare const AX_CONVERSATION_COMPOSER_LOCATION_ACTION: AXComposerAction;
|
|
4983
|
-
|
|
4984
|
-
declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
|
|
4985
|
-
private readonly toastService;
|
|
4986
|
-
readonly translation: AXTranslationService;
|
|
4987
|
-
/** Event emitted when popup should close */
|
|
4988
|
-
readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
|
|
4989
|
-
/** Conversation (typically passed via popup data). */
|
|
4990
|
-
conversation: AXConversation;
|
|
4991
|
-
conversationService: AXConversationService;
|
|
4992
|
-
/**
|
|
4993
|
-
* Conversation service used by panel actions.
|
|
4994
|
-
* Kept assignable for backward compatibility with popup `data`,
|
|
4995
|
-
* but defaults to DI so this panel works without explicit data wiring.
|
|
4996
|
-
*/
|
|
4997
|
-
notificationsEnabled: boolean;
|
|
4998
|
-
showPreview: boolean;
|
|
4999
|
-
archived: boolean;
|
|
5000
|
-
private initialNotifications;
|
|
5001
|
-
private initialShowPreview;
|
|
5002
|
-
private initialArchived;
|
|
5003
|
-
memberSearchQuery: string;
|
|
5004
|
-
activeTab: string;
|
|
5005
|
-
editTitle: string;
|
|
5006
|
-
editAvatar: string;
|
|
5007
|
-
readonly backgroundPresets: Array<{
|
|
5008
|
-
id: string;
|
|
5009
|
-
label: string;
|
|
5010
|
-
value: string;
|
|
5011
|
-
}>;
|
|
5012
|
-
/** Get filtered members based on search */
|
|
5013
|
-
get filteredMembers(): _acorex_components_conversation2.AXParticipant[];
|
|
5014
|
-
/** Handle tab change */
|
|
5015
|
-
onTabChange(event: any): void;
|
|
5016
|
-
ngOnInit(): void;
|
|
5017
|
-
/** Get initials from name */
|
|
5018
|
-
getInitials(name: string): string;
|
|
5019
|
-
/** Get conversation subtitle */
|
|
5020
|
-
getSubtitle(): string;
|
|
5021
|
-
/** Get type label */
|
|
5022
|
-
getTypeLabel(): string;
|
|
5023
|
-
/** Handle notifications change */
|
|
5024
|
-
onNotificationsChange(value: boolean): Promise<void>;
|
|
5025
|
-
/** Handle show preview change */
|
|
5026
|
-
onShowPreviewChange(value: boolean): Promise<void>;
|
|
5027
|
-
/** Handle archived change */
|
|
5028
|
-
onArchivedChange(value: boolean): Promise<void>;
|
|
5029
|
-
/** Implement AXClosableComponent.close() */
|
|
5030
|
-
close(data?: unknown): void;
|
|
5031
|
-
/** Implement AXClosableComponent.closeAll() */
|
|
5032
|
-
closeAll(): void;
|
|
5033
|
-
/** Handle leave conversation */
|
|
5034
|
-
onLeave(): Promise<void>;
|
|
5035
|
-
/** Get member count text */
|
|
5036
|
-
getMemberCountText(): string;
|
|
5037
|
-
/** Get formatted date */
|
|
5038
|
-
getFormattedDate(date: Date): string;
|
|
5039
|
-
/** Check if can save edit */
|
|
5040
|
-
canSaveEdit(): boolean;
|
|
5041
|
-
/** Save edit */
|
|
5042
|
-
saveEdit(): Promise<void>;
|
|
5043
|
-
currentBackground(): string;
|
|
5044
|
-
isBackgroundSelected(value: string): boolean;
|
|
5045
|
-
applyMessageListBackground(value: string): Promise<void>;
|
|
5046
|
-
ngOnDestroy(): void;
|
|
5047
|
-
getMembersTabLabel(): string;
|
|
5048
|
-
getBackgroundAriaLabel(label: string): string;
|
|
5049
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
|
|
5050
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
|
|
5051
|
-
}
|
|
5052
|
-
|
|
5053
|
-
declare class AXInfoBarSearchComponent {
|
|
5054
|
-
private readonly platformId;
|
|
5055
|
-
private readonly destroyRef;
|
|
5056
|
-
private readonly infoBarService;
|
|
5057
|
-
private readonly conversationService;
|
|
5058
|
-
/** Conversation input */
|
|
5059
|
-
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5060
|
-
/** Service input */
|
|
5061
|
-
readonly service: _angular_core.InputSignal<AXInfoBarService>;
|
|
5062
|
-
/** Search query from service */
|
|
5063
|
-
readonly searchQuery: _angular_core.Signal<string>;
|
|
5064
|
-
/** Results count from service */
|
|
5065
|
-
readonly resultsCount: _angular_core.Signal<number>;
|
|
5066
|
-
/** Current index from service */
|
|
5067
|
-
readonly currentIndex: _angular_core.Signal<number>;
|
|
5068
|
-
/** Messages from conversation */
|
|
5069
|
-
readonly messages: _angular_core.Signal<_acorex_components_conversation2.AXMessage[]>;
|
|
5070
|
-
private scrollTimer?;
|
|
5071
|
-
constructor();
|
|
5072
|
-
/** Handle search input change */
|
|
5073
|
-
onSearchChange(value: string): void;
|
|
5074
|
-
/** Perform search in messages */
|
|
5075
|
-
private performSearch;
|
|
5076
|
-
/** Navigate to next result */
|
|
5077
|
-
onNext(): void;
|
|
5078
|
-
/** Navigate to previous result */
|
|
5079
|
-
onPrevious(): void;
|
|
5080
|
-
/** Scroll to current search result */
|
|
5081
|
-
private scrollToCurrentResult;
|
|
5082
|
-
private scrollToResult;
|
|
5083
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarSearchComponent, never>;
|
|
5084
|
-
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>;
|
|
5085
|
-
}
|
|
5086
|
-
|
|
5087
|
-
/**
|
|
5088
|
-
* Info Bar Actions Plugin
|
|
5089
|
-
* Individual info bar action constants
|
|
5090
|
-
*/
|
|
5091
|
-
|
|
5092
|
-
/**
|
|
5093
|
-
* Search in conversation action (inline)
|
|
5094
|
-
*/
|
|
5095
|
-
declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXInfoBarAction;
|
|
5096
|
-
/**
|
|
5097
|
-
* Show conversation info action (menu)
|
|
5098
|
-
*/
|
|
5099
|
-
declare const AX_CONVERSATION_INFO_BAR_INFO_ACTION: AXInfoBarAction;
|
|
5100
|
-
/**
|
|
5101
|
-
* Mute/Unmute notifications action (menu)
|
|
5102
|
-
*/
|
|
5103
|
-
declare const AX_CONVERSATION_INFO_BAR_MUTE_ACTION: AXInfoBarAction;
|
|
5104
|
-
/**
|
|
5105
|
-
* Divider separator (menu)
|
|
5106
|
-
*/
|
|
5107
|
-
declare const AX_CONVERSATION_INFO_BAR_DIVIDER: AXInfoBarAction;
|
|
5108
|
-
/**
|
|
5109
|
-
* Archive/Unarchive conversation action (menu)
|
|
5110
|
-
*/
|
|
5111
|
-
declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXInfoBarAction;
|
|
5112
|
-
/**
|
|
5113
|
-
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5114
|
-
* - Private: "Delete" - Deletes the conversation
|
|
5115
|
-
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5116
|
-
*/
|
|
5117
|
-
declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
|
|
5118
|
-
/**
|
|
5119
|
-
* Block user action (private chats only, menu)
|
|
5120
|
-
*/
|
|
5121
|
-
declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
|
|
5122
|
-
|
|
5123
|
-
/**
|
|
5124
|
-
* Shared UI for message bubble bodies: sending / failed (with retry) and content load errors,
|
|
5125
|
-
* driven by {@link AXMessageRendererState}.
|
|
5126
|
-
*/
|
|
5127
|
-
declare class AXConversationMessageRendererStateComponent {
|
|
5128
|
-
private readonly conversation;
|
|
5129
|
-
readonly translation: AXTranslationService;
|
|
5130
|
-
readonly rendererState: _angular_core.InputSignal<AXMessageRendererState>;
|
|
5131
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5132
|
-
/** Overrides default text when {@link AXMessageRendererState.contentState} is `error`. */
|
|
5133
|
-
readonly contentErrorLabel: _angular_core.InputSignal<string>;
|
|
5134
|
-
/** Overrides default text when delivery failed. */
|
|
5135
|
-
readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
|
|
5136
|
-
/** Set false when the renderer shows content errors inline (e.g. inline media error state). */
|
|
5137
|
-
readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
|
|
5138
|
-
/** `inline` matches legacy media rows (e.g. audio): compact danger text under the player. */
|
|
5139
|
-
readonly contentErrorStyle: _angular_core.InputSignal<"inline" | "banner">;
|
|
5140
|
-
/** Icon class for content error (e.g. `fa-light fa-music` for audio). */
|
|
5141
|
-
readonly contentErrorIconClass: _angular_core.InputSignal<string>;
|
|
5142
|
-
/** `below`: render after main bubble body (typical for media). */
|
|
5143
|
-
readonly placement: _angular_core.InputSignal<"above" | "below">;
|
|
5144
|
-
readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
|
|
5145
|
-
readonly contentRetry: _angular_core.OutputEmitterRef<void>;
|
|
5146
|
-
readonly retryBusy: _angular_core.WritableSignal<boolean>;
|
|
5147
|
-
private readonly currentUser;
|
|
5148
|
-
private readonly isOwn;
|
|
5149
|
-
readonly showSending: _angular_core.Signal<boolean>;
|
|
5150
|
-
readonly showFailed: _angular_core.Signal<boolean>;
|
|
5151
|
-
readonly showContentError: _angular_core.Signal<boolean>;
|
|
5152
|
-
readonly hasVisibleChrome: _angular_core.Signal<boolean>;
|
|
5153
|
-
readonly showRetryButton: _angular_core.Signal<boolean>;
|
|
5154
|
-
readonly contentErrorText: _angular_core.Signal<string>;
|
|
5155
|
-
readonly deliveryFailedText: _angular_core.Signal<string>;
|
|
5156
|
-
onRetry(): Promise<void>;
|
|
5157
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererStateComponent, never>;
|
|
5158
|
-
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>;
|
|
5159
|
-
}
|
|
5160
|
-
|
|
5161
|
-
declare class AXAudioRendererComponent implements AXMessageRendererComponent {
|
|
5162
|
-
private readonly platformId;
|
|
5163
|
-
private readonly destroyRef;
|
|
5164
|
-
private readonly infoBarService;
|
|
5165
|
-
private readonly audioElementRef;
|
|
5166
|
-
private readonly _contentState;
|
|
5167
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5168
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5169
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5170
|
-
contentState: AXMessageRendererContentState;
|
|
5171
|
-
}>;
|
|
5172
|
-
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5173
|
-
readonly isMuted: _angular_core.WritableSignal<boolean>;
|
|
5174
|
-
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5175
|
-
readonly duration: _angular_core.WritableSignal<number>;
|
|
5176
|
-
readonly payload: _angular_core.Signal<AXAudioPayload>;
|
|
5177
|
-
readonly audioUrl: _angular_core.Signal<string>;
|
|
5178
|
-
readonly title: _angular_core.Signal<string>;
|
|
5179
|
-
readonly progress: _angular_core.Signal<number>;
|
|
5180
|
-
readonly currentTimeFormatted: _angular_core.Signal<string>;
|
|
5181
|
-
readonly durationFormatted: _angular_core.Signal<string>;
|
|
5182
|
-
constructor();
|
|
5183
|
-
togglePlay(): void;
|
|
5184
|
-
toggleMute(): void;
|
|
5185
|
-
onTimeUpdate(): void;
|
|
5186
|
-
onEnded(): void;
|
|
5187
|
-
onError(): void;
|
|
5188
|
-
onProgressClick(event: MouseEvent): void;
|
|
5189
|
-
private pausePlayback;
|
|
5190
|
-
private syncInfoBarBanner;
|
|
5191
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioRendererComponent, never>;
|
|
5192
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5193
|
-
}
|
|
5194
|
-
|
|
5195
|
-
declare class AXAudioInfoBarBannerComponent implements AXMessageInfoBarBannerComponent {
|
|
5196
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5197
|
-
readonly title: _angular_core.InputSignal<string>;
|
|
5198
|
-
readonly currentTime: _angular_core.InputSignal<number>;
|
|
5199
|
-
readonly duration: _angular_core.InputSignal<number>;
|
|
5200
|
-
private readonly payload;
|
|
5201
|
-
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5202
|
-
readonly progressPercent: _angular_core.Signal<number>;
|
|
5203
|
-
readonly timeLabel: _angular_core.Signal<string>;
|
|
5204
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioInfoBarBannerComponent, never>;
|
|
5205
|
-
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>;
|
|
5206
|
-
}
|
|
5207
|
-
|
|
5208
|
-
declare class AXFallbackRendererComponent implements AXMessageRendererComponent {
|
|
5209
|
-
private readonly _contentState;
|
|
5210
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5211
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5212
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5213
|
-
contentState: AXMessageRendererContentState;
|
|
5214
|
-
}>;
|
|
5215
|
-
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
5216
|
-
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
5217
|
-
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
5218
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFallbackRendererComponent, never>;
|
|
5219
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5220
|
-
}
|
|
5221
|
-
|
|
5222
|
-
declare class AXFileRendererComponent implements AXMessageRendererComponent {
|
|
5223
|
-
private readonly _contentState;
|
|
5224
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5225
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5226
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5227
|
-
contentState: AXMessageRendererContentState;
|
|
5228
|
-
}>;
|
|
5229
|
-
readonly payload: _angular_core.Signal<AXFilePayload>;
|
|
5230
|
-
readonly fileUrl: _angular_core.Signal<string>;
|
|
5231
|
-
readonly fileName: _angular_core.Signal<string>;
|
|
5232
|
-
readonly fileSize: _angular_core.Signal<number>;
|
|
5233
|
-
readonly mimeType: _angular_core.Signal<string>;
|
|
5234
|
-
readonly fileExtension: _angular_core.Signal<string>;
|
|
5235
|
-
readonly swatchColor: _angular_core.Signal<string>;
|
|
5236
|
-
readonly formattedSize: _angular_core.Signal<string>;
|
|
5237
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileRendererComponent, never>;
|
|
5238
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5239
|
-
}
|
|
5240
|
-
|
|
5241
|
-
declare class AXImageRendererComponent implements AXMessageRendererComponent {
|
|
5242
|
-
private readonly platformId;
|
|
5243
|
-
private readonly _contentState;
|
|
5244
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5245
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5246
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5247
|
-
contentState: AXMessageRendererContentState;
|
|
5248
|
-
}>;
|
|
5249
|
-
readonly imageClick: _angular_core.OutputEmitterRef<string>;
|
|
5250
|
-
readonly payload: _angular_core.Signal<AXImagePayload>;
|
|
5251
|
-
readonly thumbnailUrl: _angular_core.Signal<string>;
|
|
5252
|
-
readonly alt: _angular_core.Signal<string>;
|
|
5253
|
-
readonly caption: _angular_core.Signal<string>;
|
|
5254
|
-
constructor();
|
|
5255
|
-
onLoad(): void;
|
|
5256
|
-
onError(): void;
|
|
5257
|
-
onClick(): void;
|
|
5258
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageRendererComponent, never>;
|
|
5259
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, { "imageClick": "imageClick"; }, never, never, true, never>;
|
|
5260
|
-
}
|
|
5261
|
-
|
|
5262
|
-
declare class AXLocationRendererComponent implements AXMessageRendererComponent {
|
|
5263
|
-
private readonly _contentState;
|
|
5264
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5265
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5266
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5267
|
-
contentState: AXMessageRendererContentState;
|
|
5268
|
-
}>;
|
|
5269
|
-
readonly payload: _angular_core.Signal<AXLocationPayload>;
|
|
5270
|
-
readonly latitude: _angular_core.Signal<number>;
|
|
5271
|
-
readonly longitude: _angular_core.Signal<number>;
|
|
5272
|
-
readonly locationName: _angular_core.Signal<string>;
|
|
5273
|
-
readonly address: _angular_core.Signal<string>;
|
|
5274
|
-
readonly coordinatesText: _angular_core.Signal<string>;
|
|
5275
|
-
readonly mapsUrl: _angular_core.Signal<string>;
|
|
5276
|
-
readonly markers: _angular_core.Signal<{
|
|
5277
|
-
latitude: number;
|
|
5278
|
-
longitude: number;
|
|
5279
|
-
popup: string;
|
|
5280
|
-
popupOpen: boolean;
|
|
5281
|
-
popupCloseButton: boolean;
|
|
5282
|
-
}[]>;
|
|
5283
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLocationRendererComponent, never>;
|
|
5284
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5354
|
+
private clearTimer;
|
|
5355
|
+
getUploadingLabel(): string;
|
|
5356
|
+
/** Send voice message */
|
|
5357
|
+
private sendVoiceMessage;
|
|
5358
|
+
private stopAndCleanup;
|
|
5359
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRecorderComponent, never>;
|
|
5360
|
+
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>;
|
|
5285
5361
|
}
|
|
5286
5362
|
|
|
5287
|
-
declare class
|
|
5288
|
-
|
|
5289
|
-
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
5293
|
-
|
|
5294
|
-
readonly payload: _angular_core.Signal<AXStickerPayload>;
|
|
5295
|
-
readonly stickerUrl: _angular_core.Signal<string>;
|
|
5296
|
-
readonly alt: _angular_core.Signal<string>;
|
|
5297
|
-
constructor();
|
|
5298
|
-
onLoad(): void;
|
|
5299
|
-
onError(): void;
|
|
5300
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerRendererComponent, never>;
|
|
5301
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5363
|
+
declare class AXConversationAudioFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5364
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5365
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5366
|
+
platformId: object;
|
|
5367
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5368
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioFileTypeProvider, never>;
|
|
5369
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAudioFileTypeProvider>;
|
|
5302
5370
|
}
|
|
5303
5371
|
|
|
5304
|
-
declare class
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
readonly payload: _angular_core.Signal<AXSystemPayload>;
|
|
5312
|
-
readonly iconClass: _angular_core.Signal<string>;
|
|
5313
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSystemRendererComponent, never>;
|
|
5314
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5372
|
+
declare class AXConversationFileFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5373
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5374
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5375
|
+
platformId: object;
|
|
5376
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5377
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileFileTypeProvider, never>;
|
|
5378
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationFileFileTypeProvider>;
|
|
5315
5379
|
}
|
|
5316
5380
|
|
|
5317
|
-
declare class
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
static
|
|
5381
|
+
declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5382
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5383
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5384
|
+
platformId: object;
|
|
5385
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5386
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageFileTypeProvider, never>;
|
|
5387
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationImageFileTypeProvider>;
|
|
5388
|
+
}
|
|
5389
|
+
|
|
5390
|
+
declare class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5391
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5392
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5393
|
+
platformId: object;
|
|
5394
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5395
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoFileTypeProvider, never>;
|
|
5396
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVideoFileTypeProvider>;
|
|
5332
5397
|
}
|
|
5333
5398
|
|
|
5399
|
+
declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5400
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5401
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5402
|
+
platformId: object;
|
|
5403
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5404
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceFileTypeProvider, never>;
|
|
5405
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVoiceFileTypeProvider>;
|
|
5406
|
+
}
|
|
5407
|
+
|
|
5408
|
+
/** Built-in composer media file type providers (one per picker plugin). */
|
|
5409
|
+
declare const AX_CONVERSATION_COMPOSER_FILE_TYPE_PROVIDERS: readonly [typeof AXConversationImageFileTypeProvider, typeof AXConversationVideoFileTypeProvider, typeof AXConversationAudioFileTypeProvider, typeof AXConversationFileFileTypeProvider, typeof AXConversationVoiceFileTypeProvider];
|
|
5334
5410
|
/**
|
|
5335
|
-
*
|
|
5411
|
+
* Ensures built-in conversation catalogs exist on the root {@link AXFileTypeRegistryService}
|
|
5412
|
+
* before registries validate composer actions (inject from conversation providers).
|
|
5336
5413
|
*/
|
|
5337
|
-
declare
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5414
|
+
declare const CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
|
|
5415
|
+
/** Registers validation rules, file-type providers, and root catalog bootstrap for conversation2. */
|
|
5416
|
+
declare function provideConversationComposerFileTypes(): Provider[];
|
|
5417
|
+
declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXComposerAction;
|
|
5418
|
+
declare const AX_CONVERSATION_COMPOSER_IMAGE_ACTION: AXComposerAction;
|
|
5419
|
+
declare const AX_CONVERSATION_COMPOSER_VIDEO_ACTION: AXComposerAction;
|
|
5420
|
+
declare const AX_CONVERSATION_COMPOSER_FILE_ACTION: AXComposerAction;
|
|
5421
|
+
declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
|
|
5422
|
+
declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
|
|
5423
|
+
declare const AX_CONVERSATION_COMPOSER_LOCATION_ACTION: AXComposerAction;
|
|
5424
|
+
|
|
5425
|
+
declare function mergeUploadResult(type: AXMessageType, payload: AXMessagePayload, result: AXUploadResult): AXMessagePayload;
|
|
5426
|
+
declare function applyLocalPreview(type: AXMessageType, payload: AXMessagePayload, localUrl: string, mimeType?: string): AXMessagePayload;
|
|
5427
|
+
declare function toUploaderReference(payload: AXMessagePayload): AXUploaderReference;
|
|
5428
|
+
declare function createObjectUrl(platformId: object, blob: Blob): string;
|
|
5429
|
+
declare function revokeObjectUrl(platformId: object, url: string): void;
|
|
5430
|
+
declare function createLocalPreviewUrl(fileService: AXFileService, platformId: object, source: File | Blob, messageType: AXMessageType): Promise<string | undefined>;
|
|
5431
|
+
|
|
5432
|
+
interface AXConversationInfoProfileField {
|
|
5433
|
+
id: string;
|
|
5434
|
+
labelKey: string;
|
|
5435
|
+
value: string;
|
|
5436
|
+
icon: string;
|
|
5437
|
+
}
|
|
5438
|
+
type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
|
|
5439
|
+
interface AXConversationMediaCategory {
|
|
5440
|
+
id: AXConversationMediaCategoryId;
|
|
5441
|
+
labelKey: string;
|
|
5442
|
+
countLabelKey: string;
|
|
5443
|
+
icon: string;
|
|
5444
|
+
count: number;
|
|
5445
|
+
}
|
|
5446
|
+
interface AXConversationMediaGalleryTile {
|
|
5447
|
+
key: string;
|
|
5448
|
+
message: AXMessage;
|
|
5449
|
+
kind: 'image' | 'video' | 'sticker';
|
|
5450
|
+
image?: AXImageMediaItem;
|
|
5451
|
+
video?: AXVideoMediaItem;
|
|
5452
|
+
stickerUrl?: string;
|
|
5453
|
+
stickerAlt?: string;
|
|
5454
|
+
}
|
|
5455
|
+
declare function getMessageVideoItems(message: AXMessage): AXVideoMediaItem[];
|
|
5456
|
+
declare function getMessageAudioItems(message: AXMessage): AXAudioMediaItem[];
|
|
5457
|
+
|
|
5458
|
+
interface AXInfoPanelQuickAction {
|
|
5459
|
+
id: string;
|
|
5460
|
+
labelKey: string;
|
|
5461
|
+
icon: string;
|
|
5462
|
+
danger?: boolean;
|
|
5463
|
+
}
|
|
5464
|
+
declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
|
|
5465
|
+
private readonly toastService;
|
|
5466
|
+
readonly translation: AXTranslationService;
|
|
5467
|
+
private readonly injectedConversationService;
|
|
5468
|
+
readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
|
|
5469
|
+
conversation: AXConversation;
|
|
5470
|
+
conversationService: AXConversationService;
|
|
5471
|
+
readonly activeTab: _angular_core.WritableSignal<"profile" | "manage">;
|
|
5472
|
+
readonly showMemberSearch: _angular_core.WritableSignal<boolean>;
|
|
5473
|
+
readonly panelView: _angular_core.WritableSignal<"media" | "main">;
|
|
5474
|
+
readonly selectedMediaCategory: _angular_core.WritableSignal<AXConversationMediaCategory>;
|
|
5475
|
+
readonly conversationMessages: _angular_core.WritableSignal<AXMessage[]>;
|
|
5476
|
+
readonly loadingMessages: _angular_core.WritableSignal<boolean>;
|
|
5477
|
+
readonly memberSearchQuery: _angular_core.WritableSignal<string>;
|
|
5478
|
+
archived: boolean;
|
|
5479
|
+
private initialNotifications;
|
|
5480
|
+
private initialArchived;
|
|
5481
|
+
editTitle: string;
|
|
5482
|
+
editAvatar: string;
|
|
5483
|
+
private groupTitleSaveTimer;
|
|
5484
|
+
private groupDetailsSaveInFlight;
|
|
5485
|
+
readonly backgroundPresets: Array<{
|
|
5486
|
+
id: string;
|
|
5487
|
+
label: string;
|
|
5488
|
+
value: string;
|
|
5347
5489
|
}>;
|
|
5348
|
-
readonly
|
|
5349
|
-
readonly
|
|
5350
|
-
readonly
|
|
5351
|
-
readonly
|
|
5352
|
-
readonly
|
|
5353
|
-
readonly
|
|
5354
|
-
readonly
|
|
5355
|
-
|
|
5356
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5490
|
+
readonly heroSubtitle: _angular_core.Signal<string>;
|
|
5491
|
+
readonly liveConversation: _angular_core.Signal<AXConversation>;
|
|
5492
|
+
readonly isConversationMuted: _angular_core.Signal<boolean>;
|
|
5493
|
+
readonly profileFields: _angular_core.Signal<AXConversationInfoProfileField[]>;
|
|
5494
|
+
readonly mediaCategories: _angular_core.Signal<AXConversationMediaCategory[]>;
|
|
5495
|
+
readonly quickActions: _angular_core.Signal<AXInfoPanelQuickAction[]>;
|
|
5496
|
+
readonly filteredMembers: _angular_core.Signal<AXParticipant[]>;
|
|
5497
|
+
ngOnInit(): void;
|
|
5498
|
+
private loadConversationMessages;
|
|
5499
|
+
isPrivateConversation(): boolean;
|
|
5500
|
+
isGroupConversation(): boolean;
|
|
5501
|
+
membersSectionTitle(): string;
|
|
5502
|
+
getMemberRoleLabel(participant: AXParticipant): string | null;
|
|
5503
|
+
onMemberSearchChange(value: string | null | undefined): void;
|
|
5504
|
+
setActiveTab(tab: 'profile' | 'manage'): void;
|
|
5505
|
+
toggleMemberSearch(): void;
|
|
5506
|
+
openMediaCategory(category: AXConversationMediaCategory): void;
|
|
5507
|
+
closeMediaView(): void;
|
|
5508
|
+
getMediaRowLabel(category: AXConversationMediaCategory): string;
|
|
5509
|
+
getMemberSubtitle(participant: AXParticipant): string;
|
|
5510
|
+
onQuickAction(actionId: string): void;
|
|
5511
|
+
toggleConversationMute(): Promise<void>;
|
|
5512
|
+
onNotificationsChange(value: boolean): Promise<void>;
|
|
5513
|
+
onArchivedChange(value: boolean): Promise<void>;
|
|
5514
|
+
close(data?: unknown): void;
|
|
5515
|
+
closeAll(): void;
|
|
5516
|
+
onLeave(): Promise<void>;
|
|
5517
|
+
onGroupTitleChange(value: string): void;
|
|
5518
|
+
onGroupAvatarChange(value: string): void;
|
|
5519
|
+
private persistGroupDetails;
|
|
5520
|
+
isBackgroundSelected(value: string): boolean;
|
|
5521
|
+
applyMessageListBackground(value: string): Promise<void>;
|
|
5522
|
+
getBackgroundAriaLabel(label: string): string;
|
|
5523
|
+
ngOnDestroy(): void;
|
|
5524
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
|
|
5525
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
|
|
5374
5526
|
}
|
|
5375
5527
|
|
|
5376
|
-
declare class
|
|
5377
|
-
readonly
|
|
5378
|
-
readonly
|
|
5379
|
-
readonly
|
|
5380
|
-
readonly
|
|
5381
|
-
|
|
5382
|
-
readonly
|
|
5383
|
-
readonly
|
|
5384
|
-
readonly
|
|
5385
|
-
|
|
5386
|
-
|
|
5528
|
+
declare class AXConversationInfoMediaViewComponent {
|
|
5529
|
+
private readonly translation;
|
|
5530
|
+
private readonly parentInjector;
|
|
5531
|
+
readonly category: _angular_core.InputSignal<AXConversationMediaCategory>;
|
|
5532
|
+
readonly messages: _angular_core.InputSignal<AXMessage[]>;
|
|
5533
|
+
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5534
|
+
readonly conversationServiceInput: _angular_core.InputSignal<AXConversationService>;
|
|
5535
|
+
readonly back: _angular_core.OutputEmitterRef<void>;
|
|
5536
|
+
readonly items: _angular_core.Signal<AXMessage[]>;
|
|
5537
|
+
readonly isGrid: _angular_core.Signal<boolean>;
|
|
5538
|
+
readonly isAttachmentList: _angular_core.Signal<boolean>;
|
|
5539
|
+
readonly galleryTiles: _angular_core.Signal<AXConversationMediaGalleryTile[]>;
|
|
5540
|
+
readonly rendererInjector: _angular_core.Signal<_angular_core.DestroyableInjector>;
|
|
5541
|
+
readonly titleLabel: _angular_core.Signal<string>;
|
|
5542
|
+
readonly getMessageVideoItems: typeof getMessageVideoItems;
|
|
5543
|
+
readonly getMessageAudioItems: typeof getMessageAudioItems;
|
|
5544
|
+
getRendererComponent(message: AXMessage): typeof AXFallbackRendererComponent | _angular_core.Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
5545
|
+
getRendererInputs(message: AXMessage): {
|
|
5546
|
+
message: AXMessage;
|
|
5547
|
+
};
|
|
5548
|
+
formatTimestamp(message: AXMessage): string;
|
|
5549
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoMediaViewComponent, never>;
|
|
5550
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoMediaViewComponent, "ax-conversation-info-media-view", never, { "category": { "alias": "category"; "required": true; "isSignal": true; }; "messages": { "alias": "messages"; "required": true; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": true; "isSignal": true; }; "conversationServiceInput": { "alias": "conversationService"; "required": true; "isSignal": true; }; }, { "back": "back"; }, never, never, true, never>;
|
|
5387
5551
|
}
|
|
5388
5552
|
|
|
5389
|
-
declare class
|
|
5553
|
+
declare class AXInfoBarSearchComponent {
|
|
5390
5554
|
private readonly platformId;
|
|
5391
5555
|
private readonly destroyRef;
|
|
5392
5556
|
private readonly infoBarService;
|
|
5393
|
-
private readonly
|
|
5394
|
-
|
|
5395
|
-
readonly
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
readonly
|
|
5402
|
-
|
|
5403
|
-
readonly
|
|
5404
|
-
|
|
5405
|
-
readonly
|
|
5406
|
-
|
|
5407
|
-
readonly waveformBars: _angular_core.Signal<number[]>;
|
|
5408
|
-
readonly activeBarIndex: _angular_core.Signal<number>;
|
|
5409
|
-
readonly timeLabel: _angular_core.Signal<string>;
|
|
5557
|
+
private readonly conversationService;
|
|
5558
|
+
/** Conversation input */
|
|
5559
|
+
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5560
|
+
/** Service input */
|
|
5561
|
+
readonly service: _angular_core.InputSignal<AXInfoBarService>;
|
|
5562
|
+
/** Search query from service */
|
|
5563
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
5564
|
+
/** Results count from service */
|
|
5565
|
+
readonly resultsCount: _angular_core.Signal<number>;
|
|
5566
|
+
/** Current index from service */
|
|
5567
|
+
readonly currentIndex: _angular_core.Signal<number>;
|
|
5568
|
+
/** Messages from conversation */
|
|
5569
|
+
readonly messages: _angular_core.Signal<_acorex_components_conversation2.AXMessage[]>;
|
|
5570
|
+
private scrollTimer?;
|
|
5410
5571
|
constructor();
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5572
|
+
/** Handle search input change */
|
|
5573
|
+
onSearchChange(value: string): void;
|
|
5574
|
+
/** Perform search in messages */
|
|
5575
|
+
private performSearch;
|
|
5576
|
+
/** Navigate to next result */
|
|
5577
|
+
onNext(): void;
|
|
5578
|
+
/** Navigate to previous result */
|
|
5579
|
+
onPrevious(): void;
|
|
5580
|
+
/** Scroll to current search result */
|
|
5581
|
+
private scrollToCurrentResult;
|
|
5582
|
+
private scrollToResult;
|
|
5583
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarSearchComponent, never>;
|
|
5584
|
+
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>;
|
|
5420
5585
|
}
|
|
5421
5586
|
|
|
5422
|
-
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
readonly duration: _angular_core.InputSignal<number>;
|
|
5427
|
-
private readonly payload;
|
|
5428
|
-
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5429
|
-
readonly progressPercent: _angular_core.Signal<number>;
|
|
5430
|
-
readonly timeLabel: _angular_core.Signal<string>;
|
|
5431
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceInfoBarBannerComponent, never>;
|
|
5432
|
-
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>;
|
|
5433
|
-
}
|
|
5587
|
+
/**
|
|
5588
|
+
* Info Bar Actions Plugin
|
|
5589
|
+
* Individual info bar action constants
|
|
5590
|
+
*/
|
|
5434
5591
|
|
|
5435
5592
|
/**
|
|
5436
|
-
*
|
|
5437
|
-
|
|
5593
|
+
* Search in conversation action (inline)
|
|
5594
|
+
*/
|
|
5595
|
+
declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXInfoBarAction;
|
|
5596
|
+
/**
|
|
5597
|
+
* Mute/Unmute notifications action (menu)
|
|
5598
|
+
*/
|
|
5599
|
+
declare const AX_CONVERSATION_INFO_BAR_MUTE_ACTION: AXInfoBarAction;
|
|
5600
|
+
/**
|
|
5601
|
+
* Divider separator (menu)
|
|
5602
|
+
*/
|
|
5603
|
+
declare const AX_CONVERSATION_INFO_BAR_DIVIDER: AXInfoBarAction;
|
|
5604
|
+
/**
|
|
5605
|
+
* Archive/Unarchive conversation action (menu)
|
|
5606
|
+
*/
|
|
5607
|
+
declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXInfoBarAction;
|
|
5608
|
+
/**
|
|
5609
|
+
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5610
|
+
* - Private: "Delete" - Deletes the conversation
|
|
5611
|
+
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5438
5612
|
*/
|
|
5613
|
+
declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
|
|
5614
|
+
/**
|
|
5615
|
+
* Block user action (private chats only, menu)
|
|
5616
|
+
*/
|
|
5617
|
+
declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
|
|
5439
5618
|
|
|
5440
5619
|
/**
|
|
5441
|
-
*
|
|
5620
|
+
* Default Message Actions Plugin
|
|
5621
|
+
* Individual message action constants
|
|
5442
5622
|
*/
|
|
5443
|
-
|
|
5623
|
+
|
|
5444
5624
|
/**
|
|
5445
5625
|
* Reply to message
|
|
5446
5626
|
*/
|
|
@@ -5505,11 +5685,6 @@ declare const AX_CONVERSATION_ITEM_DELETE_ACTION: AXConversationItemAction;
|
|
|
5505
5685
|
* Block/Unblock user (private conversations only)
|
|
5506
5686
|
*/
|
|
5507
5687
|
declare const AX_CONVERSATION_ITEM_BLOCK_ACTION: AXConversationItemAction;
|
|
5508
|
-
/**
|
|
5509
|
-
* Get all default conversation item actions
|
|
5510
|
-
* @deprecated Use individual action constants instead (e.g., AX_CONVERSATION_ITEM_MUTE_ACTION)
|
|
5511
|
-
*/
|
|
5512
|
-
declare function getDefaultConversationItemActions(): AXConversationItemAction[];
|
|
5513
5688
|
|
|
5514
5689
|
/**
|
|
5515
5690
|
* Default Conversation Tabs Plugin
|
|
@@ -5540,6 +5715,8 @@ interface AXConversationOptions {
|
|
|
5540
5715
|
config?: Partial<AXConversationConfig>;
|
|
5541
5716
|
/** Registry configuration */
|
|
5542
5717
|
registry?: Partial<AXRegistryConfiguration>;
|
|
5718
|
+
/** Optional custom avatar components for the entire conversation UI */
|
|
5719
|
+
avatarComponents?: AXConversationAvatarComponents;
|
|
5543
5720
|
}
|
|
5544
5721
|
declare class AXConversation2Module {
|
|
5545
5722
|
/**
|
|
@@ -5585,6 +5762,21 @@ declare class AXConversation2Module {
|
|
|
5585
5762
|
*/
|
|
5586
5763
|
declare function provideConversation(options: AXConversationOptions): Provider[];
|
|
5587
5764
|
|
|
5765
|
+
interface AXConversationAvatarDisplay {
|
|
5766
|
+
name: string;
|
|
5767
|
+
avatar?: string;
|
|
5768
|
+
icon?: string;
|
|
5769
|
+
}
|
|
5770
|
+
/** Other participant in a private chat (excludes the current user). */
|
|
5771
|
+
declare function resolvePrivatePeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
|
|
5772
|
+
/** Whether `auto` kind should render a user avatar for this conversation. */
|
|
5773
|
+
declare function shouldUseUserAvatarForConversation(conversation: AXConversation, currentUserId?: string): boolean;
|
|
5774
|
+
declare function resolveUserAvatarDisplay(userId: string, conversation: AXConversation | undefined, message?: AXMessage): AXConversationAvatarDisplay;
|
|
5775
|
+
declare function resolveConversationAvatarDisplay(conversation: AXConversation): AXConversationAvatarDisplay;
|
|
5776
|
+
|
|
5777
|
+
/** Resolves typed `profile`, falling back to legacy `metadata.profile`. */
|
|
5778
|
+
declare function resolveParticipantProfile(participant?: AXParticipant): AXUserProfile;
|
|
5779
|
+
|
|
5588
5780
|
declare class AXConversationDateUtilsService {
|
|
5589
5781
|
/**
|
|
5590
5782
|
* Format relative time (e.g., "2m ago", "1h ago")
|
|
@@ -5691,7 +5883,7 @@ declare class AXConversationMessageUtilsService {
|
|
|
5691
5883
|
|
|
5692
5884
|
/**
|
|
5693
5885
|
* Validation Utilities
|
|
5694
|
-
* Centralized validation functions for messages
|
|
5886
|
+
* Centralized validation functions for messages and user input
|
|
5695
5887
|
*/
|
|
5696
5888
|
|
|
5697
5889
|
/**
|
|
@@ -5705,15 +5897,6 @@ interface AXValidationResult {
|
|
|
5705
5897
|
/** Error code for programmatic handling */
|
|
5706
5898
|
errorCode?: string;
|
|
5707
5899
|
}
|
|
5708
|
-
/**
|
|
5709
|
-
* File validation result with additional metadata
|
|
5710
|
-
*/
|
|
5711
|
-
interface AXFileValidationResult extends AXValidationResult {
|
|
5712
|
-
/** File size in bytes */
|
|
5713
|
-
size?: number;
|
|
5714
|
-
/** File type/MIME type */
|
|
5715
|
-
type?: string;
|
|
5716
|
-
}
|
|
5717
5900
|
/**
|
|
5718
5901
|
* Validate message text content
|
|
5719
5902
|
* @param text - Text to validate
|
|
@@ -5721,13 +5904,6 @@ interface AXFileValidationResult extends AXValidationResult {
|
|
|
5721
5904
|
* @returns Validation result
|
|
5722
5905
|
*/
|
|
5723
5906
|
declare function validateMessageText(text: string | undefined, config: AXConversationConfig): AXValidationResult;
|
|
5724
|
-
/**
|
|
5725
|
-
* Validate file upload
|
|
5726
|
-
* @param file - File to validate
|
|
5727
|
-
* @param config - Configuration for validation rules
|
|
5728
|
-
* @returns File validation result
|
|
5729
|
-
*/
|
|
5730
|
-
declare function validateFile(file: File, config: AXConversationConfig): AXFileValidationResult;
|
|
5731
5907
|
/**
|
|
5732
5908
|
* Validate conversation ID
|
|
5733
5909
|
* @param conversationId - Conversation ID to validate
|
|
@@ -5993,35 +6169,6 @@ declare const URL_ERRORS: {
|
|
|
5993
6169
|
readonly message: "Invalid URL format";
|
|
5994
6170
|
};
|
|
5995
6171
|
};
|
|
5996
|
-
/**
|
|
5997
|
-
* Permission errors
|
|
5998
|
-
*/
|
|
5999
|
-
declare const PERMISSION_ERRORS: {
|
|
6000
|
-
readonly CANNOT_SEND_MESSAGES: {
|
|
6001
|
-
readonly code: "PERMISSION.CANNOT_SEND_MESSAGES";
|
|
6002
|
-
readonly message: "You do not have permission to send messages";
|
|
6003
|
-
};
|
|
6004
|
-
readonly CANNOT_SEND_MEDIA: {
|
|
6005
|
-
readonly code: "PERMISSION.CANNOT_SEND_MEDIA";
|
|
6006
|
-
readonly message: "You do not have permission to send media";
|
|
6007
|
-
};
|
|
6008
|
-
readonly CANNOT_ADD_MEMBERS: {
|
|
6009
|
-
readonly code: "PERMISSION.CANNOT_ADD_MEMBERS";
|
|
6010
|
-
readonly message: "You do not have permission to add members";
|
|
6011
|
-
};
|
|
6012
|
-
readonly CANNOT_REMOVE_MEMBERS: {
|
|
6013
|
-
readonly code: "PERMISSION.CANNOT_REMOVE_MEMBERS";
|
|
6014
|
-
readonly message: "You do not have permission to remove members";
|
|
6015
|
-
};
|
|
6016
|
-
readonly CANNOT_EDIT_INFO: {
|
|
6017
|
-
readonly code: "PERMISSION.CANNOT_EDIT_INFO";
|
|
6018
|
-
readonly message: "You do not have permission to edit conversation info";
|
|
6019
|
-
};
|
|
6020
|
-
readonly CANNOT_DELETE_MESSAGES: {
|
|
6021
|
-
readonly code: "PERMISSION.CANNOT_DELETE_MESSAGES";
|
|
6022
|
-
readonly message: "You do not have permission to delete messages";
|
|
6023
|
-
};
|
|
6024
|
-
};
|
|
6025
6172
|
/**
|
|
6026
6173
|
* All error messages combined
|
|
6027
6174
|
*/
|
|
@@ -6186,32 +6333,6 @@ declare const ERROR_MESSAGES: {
|
|
|
6186
6333
|
readonly message: "Invalid URL format";
|
|
6187
6334
|
};
|
|
6188
6335
|
};
|
|
6189
|
-
readonly PERMISSION: {
|
|
6190
|
-
readonly CANNOT_SEND_MESSAGES: {
|
|
6191
|
-
readonly code: "PERMISSION.CANNOT_SEND_MESSAGES";
|
|
6192
|
-
readonly message: "You do not have permission to send messages";
|
|
6193
|
-
};
|
|
6194
|
-
readonly CANNOT_SEND_MEDIA: {
|
|
6195
|
-
readonly code: "PERMISSION.CANNOT_SEND_MEDIA";
|
|
6196
|
-
readonly message: "You do not have permission to send media";
|
|
6197
|
-
};
|
|
6198
|
-
readonly CANNOT_ADD_MEMBERS: {
|
|
6199
|
-
readonly code: "PERMISSION.CANNOT_ADD_MEMBERS";
|
|
6200
|
-
readonly message: "You do not have permission to add members";
|
|
6201
|
-
};
|
|
6202
|
-
readonly CANNOT_REMOVE_MEMBERS: {
|
|
6203
|
-
readonly code: "PERMISSION.CANNOT_REMOVE_MEMBERS";
|
|
6204
|
-
readonly message: "You do not have permission to remove members";
|
|
6205
|
-
};
|
|
6206
|
-
readonly CANNOT_EDIT_INFO: {
|
|
6207
|
-
readonly code: "PERMISSION.CANNOT_EDIT_INFO";
|
|
6208
|
-
readonly message: "You do not have permission to edit conversation info";
|
|
6209
|
-
};
|
|
6210
|
-
readonly CANNOT_DELETE_MESSAGES: {
|
|
6211
|
-
readonly code: "PERMISSION.CANNOT_DELETE_MESSAGES";
|
|
6212
|
-
readonly message: "You do not have permission to delete messages";
|
|
6213
|
-
};
|
|
6214
|
-
};
|
|
6215
6336
|
};
|
|
6216
6337
|
/**
|
|
6217
6338
|
* Helper function to format error message with parameters
|
|
@@ -6238,7 +6359,7 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
|
|
|
6238
6359
|
* Type for error codes
|
|
6239
6360
|
* Useful for type-safe error handling
|
|
6240
6361
|
*/
|
|
6241
|
-
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']
|
|
6362
|
+
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'];
|
|
6242
6363
|
|
|
6243
|
-
export {
|
|
6244
|
-
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,
|
|
6364
|
+
export { AXAudioPickerComponent, AXAudioRendererComponent, AXBaseRegistry, AXCnvMediaPlaybackInfoBarBannerComponent, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXConversation2Module, AXConversationAiApiKey, AXConversationAiResponderService, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfoMediaViewComponent, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationService, AXConversationSharedStorage, AXConversationTabRegistry, AXEmojiTabComponent, AXErrorHandlerService, AXFallbackRendererComponent, AXFilePickerComponent, AXFileRendererComponent, 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, AXVideoPickerComponent, AXVideoRendererComponent, 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_FILE_TYPE_PROVIDERS, 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_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_CURSOR_PREFIX, 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_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_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_USER_AVATAR_COMPONENT, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_MESSAGE_CURSOR_PREFIX, AX_STICKER_API_KEY, CONNECTION_ERRORS, CONVERSATION_CONFIG, CONVERSATION_ERRORS, CONVERSATION_FILE_TYPES_READY, 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, REGISTRY_CONFIG, URL_ERRORS, USER_ERRORS, applyConversationFilters, applyLocalPreview, axConversationIndexedDbStorage, conversationSharedStorage, createLocalPreviewUrl, createObjectUrl, encodeConversationCursor, encodeMessageCursor, formatErrorMessage, getConversationLastActivity, getConversationMessagesNewestFirst, getErrorMessage, getSortedConversationsForInbox, mergeUploadResult, mergeWithDefaults, normalizeAllConversationMessageIndexes, paginateChatNewestFirst, paginateChatOldestFirst, parseChatCursor, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerChatMessage, resolveConversationAvatarDisplay, resolveParticipantProfile, resolvePrivatePeerUserId, resolveUserAvatarDisplay, revokeObjectUrl, sanitizeInput, shouldUseUserAvatarForConversation, sortConversationMessageIds, toUploaderReference, unregisterChatMessage, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
|
|
6365
|
+
export type { AXApiError, AXAudioMediaItem, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXChatCursorKind, AXComposerAction, AXComposerActionComponent, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXConversation, AXConversationAiResponderConfig, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationConfig, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationIndexedDbMediaRecord, AXConversationItemAction, AXConversationItemActionContext, AXConversationMetadata, AXConversationOptions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUserAvatarComponent, AXDeleteMessageCommand, AXEditMessageCommand, AXErrorCode, AXErrorHandlerConfig, AXErrorMessage, AXErrorSeverity, AXFileMediaItem, AXFilePayload, AXGroupedReaction, AXImageMediaItem, AXImagePayload, AXInfoBarAction, AXInfoBarActionComponent, AXInfoBarActionContext, AXInfoBarActiveBanner, AXInfoBarActiveComponent, AXLink, AXLinkPreview, AXLoadMessagesResult, AXLocationPayload, AXMediaItemFields, AXMention, AXMessage, AXMessageAction, AXMessageActionContext, AXMessageForwardData, AXMessageInfoBarBannerComponent, AXMessageListEmptyComponent, AXMessagePayload, AXMessageRenderer, AXMessageRendererCapabilities, AXMessageRendererComponent, AXMessageRendererContentState, AXMessageRendererState, AXMessageSearchFilters, AXMessageStatus, AXMessageType, AXNotificationEvent, AXPaginatedResult, AXPagination, AXPaginationState, AXParsedChatCursor, AXParticipant, AXParticipantRole, AXParticipantStatus, AXParticipantUpdate, AXPinnedMessage, AXPlaybackBannerInputs, AXPollOption, AXPollPayload, AXPresenceStatus, AXPresenceUpdate, AXReaction, AXReadReceipt, AXRegistryConfiguration, AXRegistryItem, AXSendMessageCommand, AXSendMessageOptions, AXSendMessageUploadSource, AXStickerPayload, AXSystemPayload, AXTextFormat, AXTextPayload, AXTypingIndicator, AXUploaderReference, AXUploaderResult, AXUserProfile, AXUserProfileUpdate, AXUserRole, AXUserSearchFilters, AXValidationResult, AXVideoMediaItem, AXVideoPayload, AXVoicePayload, DropdownMenuItem, UploaderFilePreview };
|