@acorex/components 21.0.2-next.4 → 21.0.2-next.41
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 +176 -39
- 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 +11165 -8111
- 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 +88 -96
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +69 -57
- 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 +39 -39
- 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 +15 -15
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +19 -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 +137 -63
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/{acorex-components-modal-acorex-components-modal-DWNqU6or.mjs → acorex-components-modal-acorex-components-modal-JpPBSiVh.mjs} +27 -27
- package/fesm2022/{acorex-components-modal-acorex-components-modal-DWNqU6or.mjs.map → acorex-components-modal-acorex-components-modal-JpPBSiVh.mjs.map} +1 -1
- package/fesm2022/{acorex-components-modal-modal-content.component-DplJbJyk.mjs → acorex-components-modal-modal-content.component-DKweXQfl.mjs} +39 -39
- package/fesm2022/acorex-components-modal-modal-content.component-DKweXQfl.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 +10 -10
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +48 -24
- 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 +398 -326
- 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 +23 -27
- 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 +28 -30
- 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 +51 -51
- 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 +109 -22
- package/types/acorex-components-color-palette.d.ts +2 -0
- package/types/acorex-components-conversation2.d.ts +1296 -1256
- package/types/acorex-components-data-pager.d.ts +6 -25
- package/types/acorex-components-data-table.d.ts +12 -2
- 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-menu.d.ts +47 -7
- 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 +23 -2
- package/types/acorex-components-side-menu.d.ts +96 -34
- package/types/acorex-components-step-wizard.d.ts +2 -1
- package/types/acorex-components-tree-view.d.ts +43 -2
- package/fesm2022/acorex-components-modal-modal-content.component-DplJbJyk.mjs.map +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
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,
|
|
3
|
+
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, OnInit, EventEmitter, TemplateRef, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
4
4
|
import { AXComponentCloseEvent, AXHtmlEvent, AXDataSource, AXClosableComponent } from '@acorex/cdk/common';
|
|
5
|
-
import
|
|
5
|
+
import * as _acorex_components_popup from '@acorex/components/popup';
|
|
6
|
+
import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
|
|
7
|
+
import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
|
|
6
8
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
7
9
|
import { AXListComponent } from '@acorex/components/list';
|
|
8
|
-
import { AXPopupService, AXPopupRef } from '@acorex/components/popup';
|
|
9
10
|
import * as rxjs from 'rxjs';
|
|
10
11
|
import { Observable, BehaviorSubject, Subject } from 'rxjs';
|
|
11
12
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
@@ -13,6 +14,7 @@ import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex
|
|
|
13
14
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
14
15
|
import { AXTranslationService } from '@acorex/core/translation';
|
|
15
16
|
import { AXMapMarker } from '@acorex/components/map';
|
|
17
|
+
import { AXFileTypeInfoProvider, AXFileType, AXFileService } from '@acorex/core/file';
|
|
16
18
|
import { SafeHtml } from '@angular/platform-browser';
|
|
17
19
|
import * as i1 from '@angular/common';
|
|
18
20
|
import * as i2 from '@angular/forms';
|
|
@@ -56,271 +58,168 @@ declare class AXComposerPopupComponent implements OnDestroy {
|
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
+
* Conversation-specific upload/message types.
|
|
62
|
+
* Storage contracts live in {@link @acorex/cdk/uploader}.
|
|
61
63
|
*/
|
|
64
|
+
|
|
65
|
+
type AXUploaderReference = AXUploadReference;
|
|
66
|
+
type AXUploaderResult = AXUploadResult;
|
|
67
|
+
/** Upload options with conversation scope in metadata. */
|
|
68
|
+
type AXConversationUploadOptions = Omit<AXFileUploadOptions, 'source'> & {
|
|
69
|
+
metadata?: Record<string, unknown> & {
|
|
70
|
+
conversationId?: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
interface AXSendMessageUploadSource {
|
|
74
|
+
source: File | Blob;
|
|
75
|
+
fileName?: string;
|
|
76
|
+
mimeType?: string;
|
|
77
|
+
onProgress?: (percent: number) => void;
|
|
78
|
+
signal?: AbortSignal;
|
|
79
|
+
}
|
|
80
|
+
interface AXSendMessageOptions {
|
|
81
|
+
media?: AXSendMessageUploadSource;
|
|
82
|
+
localPreviewUrl?: string;
|
|
83
|
+
}
|
|
84
|
+
interface UploaderFilePreview {
|
|
85
|
+
file: File;
|
|
86
|
+
preview?: string;
|
|
87
|
+
type: 'image' | 'video' | 'audio' | 'file';
|
|
88
|
+
}
|
|
89
|
+
|
|
62
90
|
/**
|
|
63
|
-
*
|
|
91
|
+
* Message Payload Types
|
|
64
92
|
*/
|
|
93
|
+
/** Fields for one uploaded or remote media item. */
|
|
94
|
+
interface AXMediaItemFields {
|
|
95
|
+
/** HTTP(S) or other persistable URL; omit when only {@link mediaId} is stored. */
|
|
96
|
+
url?: string;
|
|
97
|
+
mediaId?: string;
|
|
98
|
+
mimeType?: string;
|
|
99
|
+
size?: number;
|
|
100
|
+
metadata?: Record<string, unknown>;
|
|
101
|
+
}
|
|
65
102
|
interface AXTextFormat {
|
|
66
|
-
/** Start position in text */
|
|
67
103
|
start: number;
|
|
68
|
-
/** End position in text */
|
|
69
104
|
end: number;
|
|
70
|
-
/** Format type: bold, italic, code, strikethrough, etc. */
|
|
71
105
|
type: 'bold' | 'italic' | 'code' | 'strikethrough' | 'underline' | 'spoiler';
|
|
72
106
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Mention information
|
|
75
|
-
*/
|
|
76
107
|
interface AXMention {
|
|
77
|
-
/** Start position in text */
|
|
78
108
|
start: number;
|
|
79
|
-
/** End position in text */
|
|
80
109
|
end: number;
|
|
81
|
-
/** Mentioned user ID */
|
|
82
110
|
userId: string;
|
|
83
|
-
/** Mentioned user display name */
|
|
84
111
|
userName: string;
|
|
85
112
|
}
|
|
86
|
-
/**
|
|
87
|
-
* Link information
|
|
88
|
-
*/
|
|
89
113
|
interface AXLink {
|
|
90
|
-
/** Start position in text */
|
|
91
114
|
start: number;
|
|
92
|
-
/** End position in text */
|
|
93
115
|
end: number;
|
|
94
|
-
/** URL */
|
|
95
116
|
url: string;
|
|
96
|
-
/** Link preview data (optional) */
|
|
97
117
|
preview?: AXLinkPreview;
|
|
98
118
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Link preview metadata
|
|
101
|
-
*/
|
|
102
119
|
interface AXLinkPreview {
|
|
103
|
-
/** Page title */
|
|
104
120
|
title?: string;
|
|
105
|
-
/** Page description */
|
|
106
121
|
description?: string;
|
|
107
|
-
/** Preview image URL */
|
|
108
122
|
image?: string;
|
|
109
|
-
/** Site name */
|
|
110
123
|
siteName?: string;
|
|
111
124
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Text message payload
|
|
114
|
-
*/
|
|
115
125
|
interface AXTextPayload {
|
|
116
|
-
/** Message type */
|
|
117
126
|
type: 'text';
|
|
118
|
-
/** Message text content */
|
|
119
127
|
text: string;
|
|
120
|
-
/** Text formatting information */
|
|
121
128
|
formatting?: AXTextFormat[];
|
|
122
|
-
/** User mentions */
|
|
123
129
|
mentions?: AXMention[];
|
|
124
|
-
/** Links in the message */
|
|
125
130
|
links?: AXLink[];
|
|
126
131
|
}
|
|
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 */
|
|
132
|
+
interface AXImageMediaItem extends AXMediaItemFields {
|
|
136
133
|
thumbnailUrl?: string;
|
|
137
|
-
/** Image width in pixels */
|
|
138
134
|
width: number;
|
|
139
|
-
/** Image height in pixels */
|
|
140
135
|
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
136
|
blurhash?: string;
|
|
149
137
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
/** Video file URL */
|
|
157
|
-
url: string;
|
|
158
|
-
/** Thumbnail/poster image URL */
|
|
138
|
+
interface AXImagePayload {
|
|
139
|
+
type: 'image';
|
|
140
|
+
images: AXImageMediaItem[];
|
|
141
|
+
caption?: string;
|
|
142
|
+
}
|
|
143
|
+
interface AXVideoMediaItem extends AXMediaItemFields {
|
|
159
144
|
thumbnailUrl?: string;
|
|
160
|
-
/** Video duration in seconds */
|
|
161
145
|
duration: number;
|
|
162
|
-
/** Video width in pixels */
|
|
163
146
|
width: number;
|
|
164
|
-
/** Video height in pixels */
|
|
165
147
|
height: number;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
/** Optional caption */
|
|
148
|
+
}
|
|
149
|
+
interface AXVideoPayload {
|
|
150
|
+
type: 'video';
|
|
151
|
+
videos: AXVideoMediaItem[];
|
|
171
152
|
caption?: string;
|
|
172
153
|
}
|
|
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 */
|
|
154
|
+
interface AXAudioMediaItem extends AXMediaItemFields {
|
|
182
155
|
duration: number;
|
|
183
|
-
/** File size in bytes */
|
|
184
|
-
size: number;
|
|
185
|
-
/** MIME type */
|
|
186
|
-
mimeType?: string;
|
|
187
|
-
/** Audio title */
|
|
188
156
|
title?: string;
|
|
189
|
-
/** Artist name */
|
|
190
157
|
artist?: string;
|
|
191
|
-
/** Album art URL */
|
|
192
158
|
coverUrl?: string;
|
|
193
|
-
/** Waveform data for visualization */
|
|
194
159
|
waveform?: number[];
|
|
195
160
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
161
|
+
interface AXAudioPayload {
|
|
162
|
+
type: 'audio';
|
|
163
|
+
audios: AXAudioMediaItem[];
|
|
164
|
+
caption?: string;
|
|
165
|
+
}
|
|
166
|
+
interface AXVoicePayload extends AXMediaItemFields {
|
|
201
167
|
type: 'voice';
|
|
202
|
-
/** Voice recording URL */
|
|
203
|
-
url: string;
|
|
204
|
-
/** Duration in seconds */
|
|
205
168
|
duration: number;
|
|
206
|
-
/** File size in bytes */
|
|
207
|
-
size: number;
|
|
208
|
-
/** MIME type */
|
|
209
|
-
mimeType?: string;
|
|
210
|
-
/** Waveform data for visualization */
|
|
211
169
|
waveform?: number[];
|
|
212
|
-
/** Whether the voice message has been played */
|
|
213
170
|
played?: boolean;
|
|
214
171
|
}
|
|
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 */
|
|
172
|
+
interface AXFileMediaItem extends AXMediaItemFields {
|
|
224
173
|
name: string;
|
|
225
|
-
/** File size in bytes */
|
|
226
|
-
size: number;
|
|
227
|
-
/** MIME type */
|
|
228
174
|
mimeType: string;
|
|
229
|
-
/** Optional thumbnail for supported file types */
|
|
230
175
|
thumbnailUrl?: string;
|
|
231
|
-
/** File extension */
|
|
232
176
|
extension?: string;
|
|
233
177
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
178
|
+
interface AXFilePayload {
|
|
179
|
+
type: 'file';
|
|
180
|
+
files: AXFileMediaItem[];
|
|
181
|
+
caption?: string;
|
|
182
|
+
}
|
|
237
183
|
interface AXLocationPayload {
|
|
238
|
-
/** Message type */
|
|
239
184
|
type: 'location';
|
|
240
|
-
/** Latitude coordinate */
|
|
241
185
|
latitude: number;
|
|
242
|
-
/** Longitude coordinate */
|
|
243
186
|
longitude: number;
|
|
244
|
-
/** Location name */
|
|
245
187
|
name?: string;
|
|
246
|
-
/** Formatted address */
|
|
247
188
|
address?: string;
|
|
248
|
-
/** Static map image URL */
|
|
249
189
|
mapImageUrl?: string;
|
|
250
|
-
/** Accuracy in meters */
|
|
251
190
|
accuracy?: number;
|
|
252
191
|
}
|
|
253
|
-
|
|
254
|
-
* Sticker message payload
|
|
255
|
-
*/
|
|
256
|
-
interface AXStickerPayload {
|
|
257
|
-
/** Message type */
|
|
192
|
+
interface AXStickerPayload extends AXMediaItemFields {
|
|
258
193
|
type: 'sticker';
|
|
259
|
-
/** Sticker unique ID */
|
|
260
194
|
id: string;
|
|
261
|
-
/** Sticker pack ID */
|
|
262
195
|
packId: string;
|
|
263
|
-
/** Sticker image URL */
|
|
264
|
-
url: string;
|
|
265
|
-
/** Whether sticker is animated */
|
|
266
196
|
animated: boolean;
|
|
267
|
-
/** Sticker width */
|
|
268
197
|
width?: number;
|
|
269
|
-
/** Sticker height */
|
|
270
198
|
height?: number;
|
|
271
|
-
/** Emoji representation */
|
|
272
199
|
emoji?: string;
|
|
273
200
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
201
|
+
interface AXPollOption {
|
|
202
|
+
id: string;
|
|
203
|
+
text: string;
|
|
204
|
+
votes: number;
|
|
205
|
+
voters?: string[];
|
|
206
|
+
}
|
|
277
207
|
interface AXPollPayload {
|
|
278
|
-
/** Message type */
|
|
279
208
|
type: 'poll';
|
|
280
|
-
/** Poll question */
|
|
281
209
|
question: string;
|
|
282
|
-
/** Poll options */
|
|
283
210
|
options: AXPollOption[];
|
|
284
|
-
/** Whether multiple choices are allowed */
|
|
285
211
|
multipleChoice: boolean;
|
|
286
|
-
/** Whether poll is anonymous */
|
|
287
212
|
anonymous: boolean;
|
|
288
|
-
/** Poll expiry date */
|
|
289
213
|
expiresAt?: Date;
|
|
290
|
-
/** Total vote count */
|
|
291
214
|
totalVotes?: number;
|
|
292
215
|
}
|
|
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
216
|
interface AXSystemPayload {
|
|
310
|
-
/** Message type */
|
|
311
217
|
type: 'system';
|
|
312
|
-
/** System event type */
|
|
313
218
|
eventType: 'user_joined' | 'user_left' | 'title_changed' | 'avatar_changed' | 'custom';
|
|
314
|
-
/** Message text */
|
|
315
219
|
text: string;
|
|
316
|
-
/** Related user IDs */
|
|
317
220
|
userIds?: string[];
|
|
318
|
-
/** Additional data */
|
|
319
221
|
data?: Record<string, unknown>;
|
|
320
222
|
}
|
|
321
|
-
/**
|
|
322
|
-
* Union type of all message payloads
|
|
323
|
-
*/
|
|
324
223
|
type AXMessagePayload = AXTextPayload | AXImagePayload | AXVideoPayload | AXAudioPayload | AXVoicePayload | AXFilePayload | AXLocationPayload | AXStickerPayload | AXPollPayload | AXSystemPayload;
|
|
325
224
|
|
|
326
225
|
/**
|
|
@@ -353,6 +252,11 @@ interface AXMessage {
|
|
|
353
252
|
senderId: string;
|
|
354
253
|
/** Message type */
|
|
355
254
|
type: AXMessageType;
|
|
255
|
+
/**
|
|
256
|
+
* File-type catalog name when this message uses a composer file type (image, video, …).
|
|
257
|
+
* Omitted for text, location, system, etc.
|
|
258
|
+
*/
|
|
259
|
+
fileType?: string;
|
|
356
260
|
/** Message creation timestamp */
|
|
357
261
|
timestamp: Date;
|
|
358
262
|
/** Type-specific message payload */
|
|
@@ -412,6 +316,8 @@ interface AXSendMessageCommand {
|
|
|
412
316
|
conversationId: string;
|
|
413
317
|
/** Message type */
|
|
414
318
|
type: AXMessageType;
|
|
319
|
+
/** File-type catalog when applicable (see {@link AXMessage.fileType}). */
|
|
320
|
+
fileType?: string;
|
|
415
321
|
/** Message payload */
|
|
416
322
|
payload: AXMessagePayload;
|
|
417
323
|
/** Reply to message ID (optional) */
|
|
@@ -506,27 +412,6 @@ interface AXConversationStatus {
|
|
|
506
412
|
/** Last seen timestamp (for private chats when offline) */
|
|
507
413
|
lastSeen?: Date;
|
|
508
414
|
}
|
|
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
415
|
/**
|
|
531
416
|
* Conversation settings
|
|
532
417
|
*/
|
|
@@ -587,8 +472,6 @@ interface AXConversation {
|
|
|
587
472
|
unreadMentions?: number;
|
|
588
473
|
/** Current status (typing, presence, etc.) */
|
|
589
474
|
status: AXConversationStatus;
|
|
590
|
-
/** User permissions in this conversation */
|
|
591
|
-
permissions: AXConversationPermissions;
|
|
592
475
|
/** User-specific settings */
|
|
593
476
|
settings: AXConversationSettings;
|
|
594
477
|
/** Pinned messages IDs */
|
|
@@ -661,144 +544,6 @@ interface AXConversationSort {
|
|
|
661
544
|
direction: 'asc' | 'desc';
|
|
662
545
|
}
|
|
663
546
|
|
|
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
547
|
/**
|
|
803
548
|
* Abstract Base Registry
|
|
804
549
|
* Base class for all registries with common functionality
|
|
@@ -903,6 +648,14 @@ interface AXComposerActionContext {
|
|
|
903
648
|
interface AXComposerActionComponent {
|
|
904
649
|
readonly conversation: InputSignal<AXConversation>;
|
|
905
650
|
readonly service?: InputSignal<AXComposerService | undefined>;
|
|
651
|
+
/** Max files per message; falls back to {@link AXConversationConfig.maxFilesPerMessage}. */
|
|
652
|
+
readonly maxFiles?: InputSignal<number | undefined>;
|
|
653
|
+
/** Pre-fill picker when opened from message-list drag-and-drop. */
|
|
654
|
+
readonly initialFiles?: InputSignal<File[]>;
|
|
655
|
+
/** Set by {@link AXPopupService} when the picker is shown in a popup. */
|
|
656
|
+
readonly __popup__?: InputSignal<_acorex_components_popup.AXPopupRef | undefined>;
|
|
657
|
+
/** Cancel in-flight uploads when the picker is closed or replaced. */
|
|
658
|
+
abortInProgressUploads?(): void;
|
|
906
659
|
}
|
|
907
660
|
/**
|
|
908
661
|
* Composer action registration
|
|
@@ -939,7 +692,13 @@ interface AXComposerAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
|
939
692
|
className?: string;
|
|
940
693
|
/** Badge text/count */
|
|
941
694
|
badge?: string | number;
|
|
695
|
+
/** File catalog for this action's picker; built-ins use {@link provideConversationComposerFileTypes}. */
|
|
696
|
+
fileType?: string;
|
|
697
|
+
/** Max files per message; falls back to {@link AXConversationConfig.maxFilesPerMessage}. */
|
|
698
|
+
maxFiles?: number;
|
|
942
699
|
}
|
|
700
|
+
/** Validation rules and built-in conversation file types. */
|
|
701
|
+
declare function provideConversationFileCatalog(_extraActions?: readonly AXComposerAction[]): Provider[];
|
|
943
702
|
/**
|
|
944
703
|
* Composer Action Registry Service
|
|
945
704
|
*/
|
|
@@ -947,6 +706,7 @@ declare class AXComposerActionRegistry {
|
|
|
947
706
|
private readonly _actions;
|
|
948
707
|
private readonly translation;
|
|
949
708
|
private readonly injector;
|
|
709
|
+
private readonly fileTypeRegistry;
|
|
950
710
|
constructor();
|
|
951
711
|
/** All registered actions */
|
|
952
712
|
readonly actions: _angular_core.Signal<AXComposerAction[]>;
|
|
@@ -966,6 +726,7 @@ declare class AXComposerActionRegistry {
|
|
|
966
726
|
* Register a composer action
|
|
967
727
|
*/
|
|
968
728
|
register(action: AXComposerAction): void;
|
|
729
|
+
private ensureFileTypeExists;
|
|
969
730
|
/**
|
|
970
731
|
* Unregister a composer action
|
|
971
732
|
*/
|
|
@@ -979,6 +740,14 @@ declare class AXComposerActionRegistry {
|
|
|
979
740
|
*/
|
|
980
741
|
getEnabledActions(position: 'left' | 'right', context: AXComposerActionContext): AXComposerAction[];
|
|
981
742
|
isActionEnabled(action: AXComposerAction, context: AXComposerActionContext): boolean;
|
|
743
|
+
/**
|
|
744
|
+
* Picker actions for a file catalog (by priority), when visible and enabled.
|
|
745
|
+
*/
|
|
746
|
+
findPickerActionsForFileType(catalogName: string, context: AXComposerActionContext): AXComposerAction[];
|
|
747
|
+
/**
|
|
748
|
+
* First picker action for a file catalog (by priority), when visible and enabled.
|
|
749
|
+
*/
|
|
750
|
+
findPickerActionForFileType(catalogName: string, context: AXComposerActionContext): AXComposerAction | undefined;
|
|
982
751
|
/**
|
|
983
752
|
* Get action by ID
|
|
984
753
|
*/
|
|
@@ -1310,95 +1079,8 @@ declare class AXInfoBarActionRegistry extends AXBaseRegistry<AXInfoBarAction> {
|
|
|
1310
1079
|
}
|
|
1311
1080
|
|
|
1312
1081
|
/**
|
|
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
|
|
1082
|
+
* Message Renderer Registry
|
|
1083
|
+
* Register custom message renderers for different message types
|
|
1402
1084
|
*/
|
|
1403
1085
|
|
|
1404
1086
|
/**
|
|
@@ -1439,6 +1121,8 @@ interface AXMessageRendererState {
|
|
|
1439
1121
|
interface AXMessageRendererComponent {
|
|
1440
1122
|
readonly message: InputSignal<AXMessage>;
|
|
1441
1123
|
readonly rendererState: Signal<AXMessageRendererState>;
|
|
1124
|
+
/** Plain-text copy for this message (does not write to the clipboard). */
|
|
1125
|
+
copy?(): string | Promise<string>;
|
|
1442
1126
|
}
|
|
1443
1127
|
/**
|
|
1444
1128
|
* Contract for components used as {@link AXMessageRenderer.infoBarBanner}.
|
|
@@ -1468,6 +1152,8 @@ interface AXMessageRenderer {
|
|
|
1468
1152
|
displayName?: string;
|
|
1469
1153
|
/** Icon name/class */
|
|
1470
1154
|
icon?: string;
|
|
1155
|
+
/** Linked file type catalog name (for utility APIs like preview/duration). */
|
|
1156
|
+
fileType?: string;
|
|
1471
1157
|
/**
|
|
1472
1158
|
* Optional composer actions co-located with this message type (e.g. pickers that produce this message).
|
|
1473
1159
|
* Registered with {@link AXComposerActionRegistry} when the renderer is registered.
|
|
@@ -1519,116 +1205,370 @@ declare class AXMessageRendererRegistry {
|
|
|
1519
1205
|
}
|
|
1520
1206
|
|
|
1521
1207
|
/**
|
|
1522
|
-
*
|
|
1208
|
+
* Action context provided to handlers
|
|
1523
1209
|
*/
|
|
1524
|
-
interface
|
|
1525
|
-
/**
|
|
1526
|
-
|
|
1527
|
-
/**
|
|
1528
|
-
|
|
1529
|
-
/**
|
|
1530
|
-
|
|
1210
|
+
interface AXMessageActionContext {
|
|
1211
|
+
/** The message */
|
|
1212
|
+
message: AXMessage;
|
|
1213
|
+
/** Current user */
|
|
1214
|
+
currentUser: AXParticipant;
|
|
1215
|
+
/** All conversation participants */
|
|
1216
|
+
participants: AXParticipant[];
|
|
1217
|
+
/** Mounted message renderer for this row (see {@link AXMessageRendererComponent.copy}). */
|
|
1218
|
+
renderer?: AXMessageRendererComponent;
|
|
1219
|
+
/** Custom context data */
|
|
1220
|
+
custom?: Record<string, unknown>;
|
|
1531
1221
|
}
|
|
1532
|
-
|
|
1533
|
-
|
|
1222
|
+
/**
|
|
1223
|
+
* Message action registration
|
|
1224
|
+
*/
|
|
1225
|
+
interface AXMessageAction extends Omit<AXRegistryItem, 'enabled'> {
|
|
1226
|
+
/** Display label */
|
|
1227
|
+
label: string;
|
|
1228
|
+
/** Icon name/class */
|
|
1229
|
+
icon?: string;
|
|
1230
|
+
/** Show as inline button */
|
|
1231
|
+
showInline?: boolean;
|
|
1232
|
+
/** Visibility condition */
|
|
1233
|
+
visible: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1234
|
+
/** Enabled condition */
|
|
1235
|
+
enabled: (message: AXMessage, currentUser: AXParticipant) => boolean;
|
|
1236
|
+
/** Action handler */
|
|
1237
|
+
handler: (context: AXMessageActionContext) => void | Promise<void>;
|
|
1238
|
+
/** Confirmation message (if required) */
|
|
1239
|
+
confirmMessage?: string;
|
|
1240
|
+
/** Keyboard shortcut */
|
|
1241
|
+
shortcut?: string;
|
|
1242
|
+
/** Custom class for styling */
|
|
1243
|
+
className?: string;
|
|
1244
|
+
/** Destructive action (shows warning) */
|
|
1245
|
+
destructive?: boolean;
|
|
1246
|
+
}
|
|
1247
|
+
/**
|
|
1248
|
+
* Message Action Registry Service
|
|
1249
|
+
*/
|
|
1250
|
+
declare class AXMessageActionRegistry {
|
|
1251
|
+
private readonly _actions;
|
|
1534
1252
|
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>;
|
|
1253
|
+
private readonly injector;
|
|
1254
|
+
constructor();
|
|
1255
|
+
/** All registered actions */
|
|
1256
|
+
readonly actions: _angular_core.Signal<AXMessageAction[]>;
|
|
1257
|
+
/** Actions sorted by priority */
|
|
1258
|
+
readonly sortedActions: _angular_core.Signal<AXMessageAction[]>;
|
|
1576
1259
|
/**
|
|
1577
|
-
*
|
|
1260
|
+
* Register a message action
|
|
1578
1261
|
*/
|
|
1579
|
-
|
|
1262
|
+
register(action: AXMessageAction): void;
|
|
1580
1263
|
/**
|
|
1581
|
-
*
|
|
1264
|
+
* Unregister a message action
|
|
1582
1265
|
*/
|
|
1583
|
-
|
|
1266
|
+
unregister(id: string): void;
|
|
1584
1267
|
/**
|
|
1585
|
-
*
|
|
1268
|
+
* Get all actions for a specific message
|
|
1586
1269
|
*/
|
|
1587
|
-
|
|
1270
|
+
getActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1588
1271
|
/**
|
|
1589
|
-
* Get actions for
|
|
1272
|
+
* Get menu actions for a message
|
|
1590
1273
|
*/
|
|
1591
|
-
|
|
1274
|
+
getMenuActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1275
|
+
/** Whether an action is enabled (safe to call outside an injection context). */
|
|
1276
|
+
isActionEnabled(action: AXMessageAction, message: AXMessage, currentUser: AXParticipant): boolean;
|
|
1277
|
+
getActionLabel(action: AXMessageAction): string;
|
|
1592
1278
|
/**
|
|
1593
|
-
*
|
|
1279
|
+
* Get inline actions for a message
|
|
1594
1280
|
*/
|
|
1595
|
-
|
|
1281
|
+
getInlineActions(message: AXMessage, currentUser: AXParticipant): AXMessageAction[];
|
|
1596
1282
|
/**
|
|
1597
|
-
*
|
|
1283
|
+
* Get action by ID
|
|
1598
1284
|
*/
|
|
1599
|
-
|
|
1285
|
+
getActionById(id: string): AXMessageAction | undefined;
|
|
1600
1286
|
/**
|
|
1601
|
-
*
|
|
1287
|
+
* Execute an action
|
|
1602
1288
|
*/
|
|
1603
|
-
|
|
1289
|
+
executeAction(actionId: string, context: AXMessageActionContext): Promise<void>;
|
|
1604
1290
|
/**
|
|
1605
|
-
* Clear
|
|
1291
|
+
* Clear all actions
|
|
1606
1292
|
*/
|
|
1607
|
-
|
|
1608
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
1609
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1610
|
-
}
|
|
1611
|
-
|
|
1612
|
-
declare class AXConversationContainerComponent {
|
|
1613
|
-
private readonly conversationService;
|
|
1614
|
-
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
1615
|
-
/** Custom CSS class */
|
|
1616
|
-
readonly customClass: _angular_core.InputSignal<string>;
|
|
1617
|
-
/** Loading state */
|
|
1618
|
-
readonly loading: _angular_core.Signal<boolean>;
|
|
1619
|
-
/** Error state */
|
|
1620
|
-
readonly error: _angular_core.Signal<Error>;
|
|
1621
|
-
/** Active conversation */
|
|
1622
|
-
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1623
|
-
/** Container CSS classes */
|
|
1624
|
-
readonly containerClasses: _angular_core.Signal<string>;
|
|
1625
|
-
closeActiveConversation(): void;
|
|
1626
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
|
|
1627
|
-
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>;
|
|
1293
|
+
clear(): void;
|
|
1294
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXMessageActionRegistry, never>;
|
|
1295
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXMessageActionRegistry>;
|
|
1628
1296
|
}
|
|
1629
1297
|
|
|
1630
|
-
declare class
|
|
1298
|
+
declare class AXComposerComponent implements OnDestroy {
|
|
1299
|
+
#private;
|
|
1631
1300
|
private readonly conversationService;
|
|
1301
|
+
private readonly composerService;
|
|
1302
|
+
private readonly messageListService;
|
|
1303
|
+
private readonly config;
|
|
1304
|
+
private readonly translation;
|
|
1305
|
+
/** Access registry through conversation service */
|
|
1306
|
+
private get registry();
|
|
1307
|
+
/** Composer text area reference */
|
|
1308
|
+
private readonly textAreaRef;
|
|
1309
|
+
/** Draft text - use service */
|
|
1310
|
+
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1311
|
+
/** Attachments - use service */
|
|
1312
|
+
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
1313
|
+
/** Editing message */
|
|
1314
|
+
readonly editingMessage: _angular_core.WritableSignal<any>;
|
|
1315
|
+
/** Replying to message */
|
|
1316
|
+
readonly replyingToMessage: _angular_core.WritableSignal<AXMessage>;
|
|
1317
|
+
/** Show typing indicator - use service */
|
|
1318
|
+
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1319
|
+
/** Message sent event */
|
|
1320
|
+
readonly messageSent: _angular_core.OutputEmitterRef<AXSendMessageCommand>;
|
|
1321
|
+
/** Emoji clicked event */
|
|
1322
|
+
readonly emojiClick: _angular_core.OutputEmitterRef<void>;
|
|
1323
|
+
/** Attach clicked event */
|
|
1324
|
+
readonly attachClick: _angular_core.OutputEmitterRef<void>;
|
|
1325
|
+
/** Voice clicked event */
|
|
1326
|
+
readonly voiceClick: _angular_core.OutputEmitterRef<void>;
|
|
1327
|
+
/** Active conversation */
|
|
1328
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1329
|
+
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
1330
|
+
/** Active component from service */
|
|
1331
|
+
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation2.AXComposerActiveComponent>;
|
|
1332
|
+
/** Emoji popover state */
|
|
1333
|
+
private readonly emojiPopoverRef;
|
|
1334
|
+
readonly emojiPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1335
|
+
readonly composerPopupComponent: typeof AXComposerPopupComponent;
|
|
1336
|
+
/** Input placeholder - use service */
|
|
1337
|
+
readonly placeholder: _angular_core.Signal<string>;
|
|
1338
|
+
/** Sending message state */
|
|
1339
|
+
readonly sendingMessage: _angular_core.WritableSignal<boolean>;
|
|
1340
|
+
/** Typing indicator subject for rate limiting */
|
|
1341
|
+
private readonly typingSubject;
|
|
1342
|
+
constructor();
|
|
1343
|
+
private draftSaveTimeout?;
|
|
1344
|
+
/** Number of input rows - use service */
|
|
1345
|
+
readonly inputRows: _angular_core.Signal<number>;
|
|
1346
|
+
/** Can send message - use service */
|
|
1347
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
1348
|
+
/** Left actions from registry - use service */
|
|
1349
|
+
readonly leftActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1350
|
+
/** Right actions from registry - use service */
|
|
1351
|
+
readonly rightActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1352
|
+
/** Left inline actions (location = 'inline' or undefined) */
|
|
1353
|
+
readonly leftInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1354
|
+
/** Left menu actions (location = 'menu') */
|
|
1355
|
+
readonly leftMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1356
|
+
/** Right inline actions (location = 'inline' or undefined) */
|
|
1357
|
+
readonly rightInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1358
|
+
/** Right menu actions (location = 'menu') */
|
|
1359
|
+
readonly rightMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1360
|
+
/** Handle key down */
|
|
1361
|
+
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
1362
|
+
/** Handle input */
|
|
1363
|
+
onInput(): void;
|
|
1364
|
+
/** Send typing indicator (throttled via RxJS) */
|
|
1365
|
+
private sendTypingIndicator;
|
|
1366
|
+
/** Cleanup on destroy */
|
|
1367
|
+
ngOnDestroy(): void;
|
|
1368
|
+
/** Handle send click */
|
|
1369
|
+
onSendClick(): Promise<void>;
|
|
1370
|
+
/** Handle emoji click */
|
|
1371
|
+
onEmojiClick(event?: MouseEvent): Promise<void>;
|
|
1372
|
+
/** Handle emoji popover closed */
|
|
1373
|
+
onEmojiPopoverClosed(): void;
|
|
1374
|
+
/** Handle emoji/sticker selection from popup */
|
|
1375
|
+
onEmojiItemSelected(item: string | AXStickerPayload): void;
|
|
1376
|
+
/** Send sticker message */
|
|
1377
|
+
private sendSticker;
|
|
1378
|
+
/** Get inputs for emoji popup component */
|
|
1379
|
+
getEmojiPopupInputs(): Record<string, unknown>;
|
|
1380
|
+
/** Handle attach click */
|
|
1381
|
+
onAttachClick(): void;
|
|
1382
|
+
/** Handle voice click */
|
|
1383
|
+
onVoiceClick(): void;
|
|
1384
|
+
/** Remove attachment */
|
|
1385
|
+
removeAttachment(index: number): void;
|
|
1386
|
+
/** Cancel edit/reply mode */
|
|
1387
|
+
cancelEditReply(): void;
|
|
1388
|
+
/** Start editing a message */
|
|
1389
|
+
startEdit(message: any): void;
|
|
1390
|
+
/** Start replying to a message */
|
|
1391
|
+
startReply(message: AXMessage): void;
|
|
1392
|
+
/** Focus the native textarea inside ax-text-area */
|
|
1393
|
+
private focusTextArea;
|
|
1394
|
+
/** Handle action click */
|
|
1395
|
+
onActionClick(actionId: string, event?: MouseEvent): Promise<void>;
|
|
1396
|
+
/** Check if action is enabled */
|
|
1397
|
+
isActionEnabled(action: any): boolean;
|
|
1398
|
+
/** Get replying sender name */
|
|
1399
|
+
getReplyingSenderName(): string;
|
|
1400
|
+
getActionLabel(action: {
|
|
1401
|
+
label: string;
|
|
1402
|
+
}): string;
|
|
1403
|
+
/** Get replying message text */
|
|
1404
|
+
getReplyingMessageText(): string;
|
|
1405
|
+
/** Preview object for replying banner (type, icon, value) */
|
|
1406
|
+
getReplyingPreview(): {
|
|
1407
|
+
value: string;
|
|
1408
|
+
type: string;
|
|
1409
|
+
icon: string;
|
|
1410
|
+
} | null;
|
|
1411
|
+
/** Preview object for editing banner (type, icon, value) */
|
|
1412
|
+
getEditingPreview(): {
|
|
1413
|
+
value: string;
|
|
1414
|
+
type: string;
|
|
1415
|
+
icon: string;
|
|
1416
|
+
} | null;
|
|
1417
|
+
getComposerPreviewLabel(preview: {
|
|
1418
|
+
value: string;
|
|
1419
|
+
type: string;
|
|
1420
|
+
}): string;
|
|
1421
|
+
/** Handle reply preview click - scroll to original message */
|
|
1422
|
+
onReplyPreviewClick(): void;
|
|
1423
|
+
/** Inputs for picker / full-width composer components */
|
|
1424
|
+
private buildPickerInputs;
|
|
1425
|
+
/** Get inputs for dynamic component */
|
|
1426
|
+
getComponentInputs(): Record<string, unknown>;
|
|
1427
|
+
onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
|
|
1428
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerComponent, never>;
|
|
1429
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
/**
|
|
1433
|
+
* Active component state in composer
|
|
1434
|
+
*/
|
|
1435
|
+
interface AXComposerActiveComponent {
|
|
1436
|
+
/** Action that triggered this component */
|
|
1437
|
+
action: AXComposerAction;
|
|
1438
|
+
/** Component to render */
|
|
1439
|
+
component: Type<unknown>;
|
|
1440
|
+
/** Component inputs */
|
|
1441
|
+
inputs?: Record<string, unknown>;
|
|
1442
|
+
}
|
|
1443
|
+
declare class AXComposerService {
|
|
1444
|
+
private readonly conversationService;
|
|
1445
|
+
private readonly translation;
|
|
1446
|
+
private get registry();
|
|
1447
|
+
private readonly _replyMessage;
|
|
1448
|
+
private readonly _editMessage;
|
|
1449
|
+
readonly replyMessage: _angular_core.Signal<AXMessage>;
|
|
1450
|
+
readonly editMessage: _angular_core.Signal<AXMessage>;
|
|
1451
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1452
|
+
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
1453
|
+
/** Active component being shown in composer (full-width mode) */
|
|
1454
|
+
private readonly _activeComponent;
|
|
1455
|
+
readonly activeComponent: _angular_core.Signal<AXComposerActiveComponent>;
|
|
1456
|
+
/** Draft text */
|
|
1457
|
+
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1458
|
+
/** Attachments */
|
|
1459
|
+
readonly attachments: _angular_core.WritableSignal<File[]>;
|
|
1460
|
+
/** Show typing indicator */
|
|
1461
|
+
readonly showTypingIndicator: _angular_core.WritableSignal<boolean>;
|
|
1462
|
+
/** Incremented to request focus on the composer text area (handled by AXComposerComponent). */
|
|
1463
|
+
private readonly _focusRequest;
|
|
1464
|
+
readonly focusRequest: _angular_core.Signal<number>;
|
|
1465
|
+
/** Input placeholder */
|
|
1466
|
+
readonly placeholder: _angular_core.Signal<string>;
|
|
1467
|
+
/** Number of input rows */
|
|
1468
|
+
readonly inputRows: _angular_core.Signal<number>;
|
|
1469
|
+
/** Can send message */
|
|
1470
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
1471
|
+
/** Composer action context */
|
|
1472
|
+
readonly actionContext: _angular_core.Signal<AXComposerActionContext>;
|
|
1473
|
+
/** Left actions from registry */
|
|
1474
|
+
readonly leftActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1475
|
+
/** Right actions from registry */
|
|
1476
|
+
readonly rightActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1477
|
+
/** Left inline actions (location = 'inline' or undefined) */
|
|
1478
|
+
readonly leftInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1479
|
+
/** Left menu actions (location = 'menu') */
|
|
1480
|
+
readonly leftMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1481
|
+
/** Right inline actions (location = 'inline' or undefined) */
|
|
1482
|
+
readonly rightInlineActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1483
|
+
/** Right menu actions (location = 'menu') */
|
|
1484
|
+
readonly rightMenuActions: _angular_core.Signal<AXComposerAction[]>;
|
|
1485
|
+
startReply(message: AXMessage): void;
|
|
1486
|
+
startEdit(message: AXMessage): void;
|
|
1487
|
+
/** Focus the composer text area when the composer component is mounted. */
|
|
1488
|
+
focusComposer(): void;
|
|
1489
|
+
clear(): void;
|
|
1490
|
+
/**
|
|
1491
|
+
* Persist draft for the previous conversation and reset composer UI state when switching conversations.
|
|
1492
|
+
*/
|
|
1493
|
+
onConversationChanged(previousConversationId: string | null, currentConversationId: string | null): void;
|
|
1494
|
+
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
1495
|
+
sendMessage(command: AXSendMessageCommand, options?: AXSendMessageOptions): Promise<void>;
|
|
1496
|
+
/**
|
|
1497
|
+
* Show a component in the composer (full-width mode)
|
|
1498
|
+
*/
|
|
1499
|
+
showComponent(action: AXComposerAction, inputs?: Record<string, unknown>): void;
|
|
1500
|
+
/**
|
|
1501
|
+
* Hide the active component
|
|
1502
|
+
*/
|
|
1503
|
+
hideComponent(): void;
|
|
1504
|
+
/**
|
|
1505
|
+
* Toggle component visibility
|
|
1506
|
+
*/
|
|
1507
|
+
toggleComponent(action: AXComposerAction, inputs?: Record<string, unknown>): void;
|
|
1508
|
+
/**
|
|
1509
|
+
* Get actions for the active conversation
|
|
1510
|
+
*/
|
|
1511
|
+
getActionsForPosition(position: 'left' | 'right', context: AXComposerActionContext): AXComposerAction[];
|
|
1512
|
+
/**
|
|
1513
|
+
* Execute an action
|
|
1514
|
+
*/
|
|
1515
|
+
executeAction(actionId: string, context: AXComposerActionContext): Promise<void>;
|
|
1516
|
+
/**
|
|
1517
|
+
* Save draft to localStorage
|
|
1518
|
+
*/
|
|
1519
|
+
saveDraft(conversationId: string, text: string): void;
|
|
1520
|
+
/**
|
|
1521
|
+
* Load draft from localStorage
|
|
1522
|
+
*/
|
|
1523
|
+
loadDraft(conversationId: string): string;
|
|
1524
|
+
/**
|
|
1525
|
+
* Clear draft from localStorage
|
|
1526
|
+
*/
|
|
1527
|
+
clearDraft(conversationId: string): void;
|
|
1528
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXComposerService, never>;
|
|
1529
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXComposerService>;
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
declare class AXConversationContainerComponent {
|
|
1533
|
+
private readonly conversationService;
|
|
1534
|
+
private readonly composerService;
|
|
1535
|
+
private readonly fileService;
|
|
1536
|
+
private readonly translation;
|
|
1537
|
+
private readonly toast;
|
|
1538
|
+
private readonly hostRef;
|
|
1539
|
+
private readonly platformId;
|
|
1540
|
+
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
1541
|
+
private get registry();
|
|
1542
|
+
/** Custom CSS class */
|
|
1543
|
+
readonly customClass: _angular_core.InputSignal<string>;
|
|
1544
|
+
/** Loading state */
|
|
1545
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
1546
|
+
/** Error state */
|
|
1547
|
+
readonly error: _angular_core.Signal<Error>;
|
|
1548
|
+
/** Active conversation */
|
|
1549
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1550
|
+
/** Container CSS classes */
|
|
1551
|
+
readonly containerClasses: _angular_core.Signal<string>;
|
|
1552
|
+
closeActiveConversation(): void;
|
|
1553
|
+
/**
|
|
1554
|
+
* When the user pastes files copied from the OS (e.g. Ctrl+V after copying in Explorer),
|
|
1555
|
+
* open the same composer picker popup used for message-list drag-and-drop.
|
|
1556
|
+
*/
|
|
1557
|
+
onDocumentPaste(event: ClipboardEvent): Promise<void>;
|
|
1558
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
|
|
1559
|
+
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>;
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
declare class AXConversationContainerDirective {
|
|
1563
|
+
private readonly conversationService;
|
|
1564
|
+
private readonly composerService;
|
|
1565
|
+
private readonly fileService;
|
|
1566
|
+
private readonly hostRef;
|
|
1567
|
+
private readonly platformId;
|
|
1568
|
+
private readonly translation;
|
|
1569
|
+
private readonly toast;
|
|
1570
|
+
private readonly config;
|
|
1571
|
+
private get registry();
|
|
1632
1572
|
/** Active conversation */
|
|
1633
1573
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
1634
1574
|
/** Loading state */
|
|
@@ -1636,6 +1576,7 @@ declare class AXConversationContainerDirective {
|
|
|
1636
1576
|
/** Error state */
|
|
1637
1577
|
readonly error: _angular_core.Signal<Error>;
|
|
1638
1578
|
closeActiveConversation(): void;
|
|
1579
|
+
onDocumentPaste(event: ClipboardEvent): Promise<void>;
|
|
1639
1580
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerDirective, never>;
|
|
1640
1581
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationContainerDirective, "[axConversationContainer]", never, {}, {}, never, never, true, never>;
|
|
1641
1582
|
}
|
|
@@ -1750,7 +1691,10 @@ declare class AXInfoBarService {
|
|
|
1750
1691
|
/** Current search result index */
|
|
1751
1692
|
private readonly _currentSearchIndex;
|
|
1752
1693
|
readonly currentSearchIndex: _angular_core.Signal<number>;
|
|
1753
|
-
|
|
1694
|
+
/**
|
|
1695
|
+
* Reset info-bar overlays when the active conversation changes.
|
|
1696
|
+
*/
|
|
1697
|
+
onConversationChanged(): void;
|
|
1754
1698
|
/**
|
|
1755
1699
|
* Get actions for the active conversation
|
|
1756
1700
|
*/
|
|
@@ -1855,6 +1799,14 @@ interface AXPaginatedResult<T> {
|
|
|
1855
1799
|
/** Total pages */
|
|
1856
1800
|
totalPages?: number;
|
|
1857
1801
|
}
|
|
1802
|
+
/**
|
|
1803
|
+
* Pagination cursor state for a single list (conversations or messages).
|
|
1804
|
+
*/
|
|
1805
|
+
interface AXPaginationState {
|
|
1806
|
+
page: number;
|
|
1807
|
+
hasMore: boolean;
|
|
1808
|
+
nextCursor?: string;
|
|
1809
|
+
}
|
|
1858
1810
|
/**
|
|
1859
1811
|
* Connection status
|
|
1860
1812
|
*/
|
|
@@ -1970,8 +1922,6 @@ interface AXParticipantUpdate {
|
|
|
1970
1922
|
userId: string;
|
|
1971
1923
|
/** New role */
|
|
1972
1924
|
role?: AXUserRole;
|
|
1973
|
-
/** Custom permissions */
|
|
1974
|
-
permissions?: Record<string, boolean>;
|
|
1975
1925
|
}
|
|
1976
1926
|
/**
|
|
1977
1927
|
* Abstract Conversation Management API
|
|
@@ -2130,7 +2080,7 @@ declare abstract class AXConversationApi {
|
|
|
2130
2080
|
*/
|
|
2131
2081
|
abstract leaveConversation(conversationId: string): Promise<void>;
|
|
2132
2082
|
/**
|
|
2133
|
-
* Update participant role
|
|
2083
|
+
* Update participant role
|
|
2134
2084
|
*
|
|
2135
2085
|
* @param conversationId - Conversation ID
|
|
2136
2086
|
* @param update - Participant update data
|
|
@@ -2211,22 +2161,6 @@ declare abstract class AXConversationApi {
|
|
|
2211
2161
|
* @throws {AXApiError} If request fails
|
|
2212
2162
|
*/
|
|
2213
2163
|
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
2164
|
/**
|
|
2231
2165
|
* Save draft message for conversation
|
|
2232
2166
|
*
|
|
@@ -2527,21 +2461,6 @@ declare abstract class AXMessageApi {
|
|
|
2527
2461
|
* @throws {AXApiError} If stopping fails
|
|
2528
2462
|
*/
|
|
2529
2463
|
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
2464
|
/**
|
|
2546
2465
|
* Update message metadata
|
|
2547
2466
|
*
|
|
@@ -3148,6 +3067,13 @@ declare class AXRegistryService {
|
|
|
3148
3067
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXRegistryService>;
|
|
3149
3068
|
}
|
|
3150
3069
|
|
|
3070
|
+
/** Result of loading a message page (newest-first APIs, merged ascending in the store). */
|
|
3071
|
+
interface AXLoadMessagesResult {
|
|
3072
|
+
items: AXMessage[];
|
|
3073
|
+
hasMore: boolean;
|
|
3074
|
+
page: number;
|
|
3075
|
+
nextCursor?: string;
|
|
3076
|
+
}
|
|
3151
3077
|
/**
|
|
3152
3078
|
* Main Conversation Service
|
|
3153
3079
|
*
|
|
@@ -3165,6 +3091,9 @@ declare class AXConversationService {
|
|
|
3165
3091
|
readonly conversationApi: AXConversationApi;
|
|
3166
3092
|
readonly messageApi: AXMessageApi;
|
|
3167
3093
|
readonly realtimeApi: AXRealtimeApi;
|
|
3094
|
+
readonly uploader: AXUploaderService;
|
|
3095
|
+
private readonly fileService;
|
|
3096
|
+
private readonly platformId;
|
|
3168
3097
|
private readonly errorHandler;
|
|
3169
3098
|
readonly dialogService: AXDialogService;
|
|
3170
3099
|
readonly popupService: AXPopupService;
|
|
@@ -3175,7 +3104,10 @@ declare class AXConversationService {
|
|
|
3175
3104
|
readonly registry: AXRegistryService;
|
|
3176
3105
|
private readonly _activeConversationId;
|
|
3177
3106
|
private readonly _loading;
|
|
3107
|
+
private readonly _loadingActiveMessages;
|
|
3178
3108
|
private readonly _error;
|
|
3109
|
+
private readonly _conversationsPagination;
|
|
3110
|
+
private readonly _messagesPaginationByConversation;
|
|
3179
3111
|
/** Emits when the active conversation changes, cancelling per-conversation subscriptions. */
|
|
3180
3112
|
private readonly _conversationSwitch$;
|
|
3181
3113
|
private readonly _messageReceived$;
|
|
@@ -3191,8 +3123,14 @@ declare class AXConversationService {
|
|
|
3191
3123
|
readonly activeConversation: _angular_core.Signal<AXConversation>;
|
|
3192
3124
|
/** Messages for active conversation */
|
|
3193
3125
|
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
3194
|
-
/** Loading state */
|
|
3126
|
+
/** Loading state (conversation list initial load) */
|
|
3195
3127
|
readonly loading: _angular_core.Signal<boolean>;
|
|
3128
|
+
/** Loading state for the active conversation's message history */
|
|
3129
|
+
readonly loadingActiveMessages: _angular_core.Signal<boolean>;
|
|
3130
|
+
/** Sidebar conversation list pagination */
|
|
3131
|
+
readonly conversationsPagination: _angular_core.Signal<AXPaginationState>;
|
|
3132
|
+
/** Active conversation message pagination */
|
|
3133
|
+
readonly activeMessagesPagination: _angular_core.Signal<AXPaginationState>;
|
|
3196
3134
|
/** Error state */
|
|
3197
3135
|
readonly error: _angular_core.Signal<Error>;
|
|
3198
3136
|
/** Connection status */
|
|
@@ -3243,13 +3181,25 @@ declare class AXConversationService {
|
|
|
3243
3181
|
* Load messages for a conversation
|
|
3244
3182
|
* Fetches messages from server with request cancellation support
|
|
3245
3183
|
*/
|
|
3246
|
-
loadMessages(conversationId: string, page?: number): Promise<
|
|
3184
|
+
loadMessages(conversationId: string, page?: number): Promise<AXLoadMessagesResult>;
|
|
3185
|
+
/** Reset sidebar conversation pagination (e.g. after filters change). */
|
|
3186
|
+
resetConversationsPagination(): void;
|
|
3247
3187
|
/**
|
|
3248
|
-
*
|
|
3249
|
-
* Uses optimistic UI updates - message appears immediately
|
|
3250
|
-
* Improved with better temp ID generation to prevent collisions
|
|
3188
|
+
* Upload media for a conversation (composers and custom plugins).
|
|
3251
3189
|
*/
|
|
3252
|
-
|
|
3190
|
+
uploadMedia(source: File | Blob, conversationId: string, options?: Omit<AXConversationUploadOptions, 'metadata'> & {
|
|
3191
|
+
metadata?: Record<string, unknown>;
|
|
3192
|
+
}): Promise<AXUploaderResult>;
|
|
3193
|
+
/**
|
|
3194
|
+
* Resolve a media reference to a playback/download URL.
|
|
3195
|
+
*/
|
|
3196
|
+
resolveMediaUrl(reference: AXUploaderReference, signal?: AbortSignal): Promise<string>;
|
|
3197
|
+
/**
|
|
3198
|
+
* Send a message
|
|
3199
|
+
* Uses optimistic UI updates - message appears immediately
|
|
3200
|
+
* Pass `options.media` to upload a File/Blob before send (with optional progress and AbortSignal).
|
|
3201
|
+
*/
|
|
3202
|
+
sendMessage(command: AXSendMessageCommand, options?: AXSendMessageOptions): Promise<void>;
|
|
3253
3203
|
/**
|
|
3254
3204
|
* Retry a failed message
|
|
3255
3205
|
*/
|
|
@@ -3659,38 +3609,6 @@ declare class AXErrorHandlerService {
|
|
|
3659
3609
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXErrorHandlerService>;
|
|
3660
3610
|
}
|
|
3661
3611
|
|
|
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
3612
|
declare class AXForwardMessageDialogComponent implements OnInit {
|
|
3695
3613
|
private readonly toastService;
|
|
3696
3614
|
private readonly translation;
|
|
@@ -3728,6 +3646,309 @@ declare class AXForwardMessageDialogComponent implements OnInit {
|
|
|
3728
3646
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXForwardMessageDialogComponent, "ax-forward-message-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3729
3647
|
}
|
|
3730
3648
|
|
|
3649
|
+
/**
|
|
3650
|
+
* Shared UI for message bubble bodies: sending / failed (with retry) and content load errors,
|
|
3651
|
+
* driven by {@link AXMessageRendererState}.
|
|
3652
|
+
*/
|
|
3653
|
+
declare class AXConversationMessageRendererStateComponent {
|
|
3654
|
+
private readonly conversation;
|
|
3655
|
+
readonly translation: AXTranslationService;
|
|
3656
|
+
readonly rendererState: _angular_core.InputSignal<AXMessageRendererState>;
|
|
3657
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3658
|
+
/** Overrides default text when {@link AXMessageRendererState.contentState} is `error`. */
|
|
3659
|
+
readonly contentErrorLabel: _angular_core.InputSignal<string>;
|
|
3660
|
+
/** Overrides default text when delivery failed. */
|
|
3661
|
+
readonly deliveryFailedLabel: _angular_core.InputSignal<string>;
|
|
3662
|
+
/** Set false when the renderer shows content errors inline (e.g. inline media error state). */
|
|
3663
|
+
readonly showContentErrorChrome: _angular_core.InputSignal<boolean>;
|
|
3664
|
+
/** `inline` matches legacy media rows (e.g. audio): compact danger text under the player. */
|
|
3665
|
+
readonly contentErrorStyle: _angular_core.InputSignal<"inline" | "banner">;
|
|
3666
|
+
/** Icon class for content error (e.g. `fa-light fa-music` for audio). */
|
|
3667
|
+
readonly contentErrorIconClass: _angular_core.InputSignal<string>;
|
|
3668
|
+
/** `below`: render after main bubble body (typical for media). */
|
|
3669
|
+
readonly placement: _angular_core.InputSignal<"above" | "below">;
|
|
3670
|
+
readonly contentRetryEnabled: _angular_core.InputSignal<boolean>;
|
|
3671
|
+
readonly contentRetry: _angular_core.OutputEmitterRef<void>;
|
|
3672
|
+
readonly retryBusy: _angular_core.WritableSignal<boolean>;
|
|
3673
|
+
private readonly currentUser;
|
|
3674
|
+
private readonly isOwn;
|
|
3675
|
+
readonly showSending: _angular_core.Signal<boolean>;
|
|
3676
|
+
readonly showFailed: _angular_core.Signal<boolean>;
|
|
3677
|
+
readonly showContentError: _angular_core.Signal<boolean>;
|
|
3678
|
+
readonly hasVisibleChrome: _angular_core.Signal<boolean>;
|
|
3679
|
+
readonly showRetryButton: _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 destroyRef;
|
|
3732
|
+
private readonly infoBarService;
|
|
3733
|
+
private readonly attachments;
|
|
3734
|
+
private readonly _contentState;
|
|
3735
|
+
private readonly activeTrackIndex;
|
|
3736
|
+
private readonly isPlaying;
|
|
3737
|
+
private readonly currentTime;
|
|
3738
|
+
private readonly duration;
|
|
3739
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3740
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3741
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3742
|
+
contentState: AXMessageRendererContentState;
|
|
3743
|
+
}>;
|
|
3744
|
+
readonly payload: _angular_core.Signal<AXAudioPayload>;
|
|
3745
|
+
readonly audios: _angular_core.Signal<_acorex_components_conversation2.AXAudioMediaItem[]>;
|
|
3746
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3747
|
+
copy(): Promise<string>;
|
|
3748
|
+
constructor();
|
|
3749
|
+
onPlayingChange(index: number, playing: boolean): void;
|
|
3750
|
+
onTimeUpdate(index: number, time: number): void;
|
|
3751
|
+
onDurationChange(index: number, duration: number): void;
|
|
3752
|
+
onPlaybackEnded(index: number): void;
|
|
3753
|
+
onPlaybackError(): void;
|
|
3754
|
+
togglePlay(): void;
|
|
3755
|
+
private pauseOtherTracks;
|
|
3756
|
+
private pausePlayback;
|
|
3757
|
+
private syncInfoBarBanner;
|
|
3758
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAudioRendererComponent, never>;
|
|
3759
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3760
|
+
}
|
|
3761
|
+
|
|
3762
|
+
declare class AXFallbackRendererComponent implements AXMessageRendererComponent {
|
|
3763
|
+
private readonly _contentState;
|
|
3764
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3765
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3766
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3767
|
+
contentState: AXMessageRendererContentState;
|
|
3768
|
+
}>;
|
|
3769
|
+
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
3770
|
+
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
3771
|
+
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
3772
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFallbackRendererComponent, never>;
|
|
3773
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3774
|
+
}
|
|
3775
|
+
|
|
3776
|
+
declare class AXFileRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3777
|
+
private readonly fileTypes;
|
|
3778
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3779
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3780
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3781
|
+
contentState: "ready";
|
|
3782
|
+
}>;
|
|
3783
|
+
readonly payload: _angular_core.Signal<AXFilePayload>;
|
|
3784
|
+
readonly files: _angular_core.Signal<_acorex_components_conversation2.AXFileMediaItem[]>;
|
|
3785
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3786
|
+
copy(): Promise<string>;
|
|
3787
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXFileRendererComponent, never>;
|
|
3788
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3789
|
+
}
|
|
3790
|
+
|
|
3791
|
+
declare class AXImageRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3792
|
+
private readonly fileTypes;
|
|
3793
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3794
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3795
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3796
|
+
contentState: "ready";
|
|
3797
|
+
}>;
|
|
3798
|
+
readonly payload: _angular_core.Signal<AXImagePayload>;
|
|
3799
|
+
readonly images: _angular_core.Signal<_acorex_components_conversation2.AXImageMediaItem[]>;
|
|
3800
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3801
|
+
copy(): Promise<string>;
|
|
3802
|
+
readonly gridModeClass: _angular_core.Signal<"ax-cnv-msg__grid--single" | "ax-cnv-msg__grid--dual" | "ax-cnv-msg__grid--multi">;
|
|
3803
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageRendererComponent, never>;
|
|
3804
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3805
|
+
}
|
|
3806
|
+
|
|
3807
|
+
declare class AXLocationRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3808
|
+
private readonly _contentState;
|
|
3809
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3810
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3811
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3812
|
+
contentState: AXMessageRendererContentState;
|
|
3813
|
+
}>;
|
|
3814
|
+
readonly payload: _angular_core.Signal<AXLocationPayload>;
|
|
3815
|
+
readonly latitude: _angular_core.Signal<number>;
|
|
3816
|
+
readonly longitude: _angular_core.Signal<number>;
|
|
3817
|
+
readonly locationName: _angular_core.Signal<string>;
|
|
3818
|
+
readonly address: _angular_core.Signal<string>;
|
|
3819
|
+
readonly coordinatesText: _angular_core.Signal<string>;
|
|
3820
|
+
readonly mapsUrl: _angular_core.Signal<string>;
|
|
3821
|
+
copy(): string;
|
|
3822
|
+
readonly markers: _angular_core.Signal<{
|
|
3823
|
+
latitude: number;
|
|
3824
|
+
longitude: number;
|
|
3825
|
+
popup: string;
|
|
3826
|
+
popupOpen: boolean;
|
|
3827
|
+
popupCloseButton: boolean;
|
|
3828
|
+
}[]>;
|
|
3829
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXLocationRendererComponent, never>;
|
|
3830
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3831
|
+
}
|
|
3832
|
+
|
|
3833
|
+
declare class AXStickerRendererComponent implements AXMessageRendererComponent {
|
|
3834
|
+
private readonly _contentState;
|
|
3835
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3836
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3837
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3838
|
+
contentState: AXMessageRendererContentState;
|
|
3839
|
+
}>;
|
|
3840
|
+
readonly payload: _angular_core.Signal<AXStickerPayload>;
|
|
3841
|
+
private readonly mediaReference;
|
|
3842
|
+
private readonly resolvedUrl;
|
|
3843
|
+
readonly stickerUrl: _angular_core.Signal<string>;
|
|
3844
|
+
readonly alt: _angular_core.Signal<string>;
|
|
3845
|
+
constructor();
|
|
3846
|
+
onLoad(): void;
|
|
3847
|
+
onError(): void;
|
|
3848
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXStickerRendererComponent, never>;
|
|
3849
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3850
|
+
}
|
|
3851
|
+
|
|
3852
|
+
declare class AXSystemRendererComponent implements AXMessageRendererComponent {
|
|
3853
|
+
private readonly _contentState;
|
|
3854
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3855
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3856
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3857
|
+
contentState: AXMessageRendererContentState;
|
|
3858
|
+
}>;
|
|
3859
|
+
readonly payload: _angular_core.Signal<AXSystemPayload>;
|
|
3860
|
+
readonly iconClass: _angular_core.Signal<string>;
|
|
3861
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSystemRendererComponent, never>;
|
|
3862
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3863
|
+
}
|
|
3864
|
+
|
|
3865
|
+
declare class AXTextRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3866
|
+
private readonly infoBarService;
|
|
3867
|
+
private readonly sanitizer;
|
|
3868
|
+
private readonly _contentState;
|
|
3869
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3870
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3871
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3872
|
+
contentState: AXMessageRendererContentState;
|
|
3873
|
+
}>;
|
|
3874
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
3875
|
+
copy(): string;
|
|
3876
|
+
readonly formattedText: _angular_core.Signal<SafeHtml>;
|
|
3877
|
+
private linkify;
|
|
3878
|
+
private highlightSearch;
|
|
3879
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTextRendererComponent, never>;
|
|
3880
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3881
|
+
}
|
|
3882
|
+
|
|
3883
|
+
declare class AXVideoRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3884
|
+
private readonly fileTypes;
|
|
3885
|
+
private readonly platformId;
|
|
3886
|
+
private readonly destroyRef;
|
|
3887
|
+
private readonly infoBarService;
|
|
3888
|
+
private readonly attachments;
|
|
3889
|
+
private readonly activeVideoIndex;
|
|
3890
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3891
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3892
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3893
|
+
contentState: "ready";
|
|
3894
|
+
}>;
|
|
3895
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
3896
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
3897
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
3898
|
+
readonly payload: _angular_core.Signal<AXVideoPayload>;
|
|
3899
|
+
readonly videos: _angular_core.Signal<_acorex_components_conversation2.AXVideoMediaItem[]>;
|
|
3900
|
+
readonly caption: _angular_core.Signal<string>;
|
|
3901
|
+
copy(): Promise<string>;
|
|
3902
|
+
constructor();
|
|
3903
|
+
onPlayingChange(index: number, playing: boolean): void;
|
|
3904
|
+
onTimeUpdate(index: number, time: number): void;
|
|
3905
|
+
onDurationChange(index: number, duration: number): void;
|
|
3906
|
+
onPlaybackEnded(index: number): void;
|
|
3907
|
+
togglePlay(): void;
|
|
3908
|
+
private pauseOtherVideos;
|
|
3909
|
+
private pausePlayback;
|
|
3910
|
+
private syncInfoBarBanner;
|
|
3911
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoRendererComponent, never>;
|
|
3912
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3913
|
+
}
|
|
3914
|
+
|
|
3915
|
+
declare class AXVoiceRendererComponent extends AXMessageRendererCopyHostComponent {
|
|
3916
|
+
private readonly fileTypes;
|
|
3917
|
+
private readonly platformId;
|
|
3918
|
+
private readonly destroyRef;
|
|
3919
|
+
private readonly infoBarService;
|
|
3920
|
+
private readonly audioElementRef;
|
|
3921
|
+
private readonly _contentState;
|
|
3922
|
+
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
3923
|
+
readonly rendererState: _angular_core.Signal<{
|
|
3924
|
+
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
3925
|
+
contentState: AXMessageRendererContentState;
|
|
3926
|
+
}>;
|
|
3927
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
3928
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
3929
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
3930
|
+
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
3931
|
+
private readonly speeds;
|
|
3932
|
+
readonly payload: _angular_core.Signal<AXVoicePayload>;
|
|
3933
|
+
private readonly mediaReference;
|
|
3934
|
+
private readonly resolvedUrl;
|
|
3935
|
+
readonly voiceUrl: _angular_core.Signal<string>;
|
|
3936
|
+
readonly waveformBars: _angular_core.Signal<number[]>;
|
|
3937
|
+
readonly activeBarIndex: _angular_core.Signal<number>;
|
|
3938
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
3939
|
+
copy(): Promise<string>;
|
|
3940
|
+
constructor();
|
|
3941
|
+
togglePlay(): void;
|
|
3942
|
+
cyclePlaybackSpeed(): void;
|
|
3943
|
+
onTimeUpdate(): void;
|
|
3944
|
+
onEnded(): void;
|
|
3945
|
+
onError(): void;
|
|
3946
|
+
private pausePlayback;
|
|
3947
|
+
private syncInfoBarBanner;
|
|
3948
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVoiceRendererComponent, never>;
|
|
3949
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3950
|
+
}
|
|
3951
|
+
|
|
3731
3952
|
/** Default message list surface when no conversation is selected and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3732
3953
|
declare class AXMessageListNoActiveDefaultComponent {
|
|
3733
3954
|
private readonly translation;
|
|
@@ -3742,6 +3963,10 @@ declare class AXMessageListNoActiveDefaultComponent {
|
|
|
3742
3963
|
declare class AXMessageListComponent implements OnDestroy {
|
|
3743
3964
|
private readonly conversationService;
|
|
3744
3965
|
private readonly messageListService;
|
|
3966
|
+
private readonly composerService;
|
|
3967
|
+
private readonly fileService;
|
|
3968
|
+
private readonly toast;
|
|
3969
|
+
private readonly infoBarService;
|
|
3745
3970
|
private readonly translation;
|
|
3746
3971
|
protected readonly config: Required<_acorex_components_conversation2.AXConversationConfig>;
|
|
3747
3972
|
/**
|
|
@@ -3762,6 +3987,10 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3762
3987
|
readonly reactionPopover: _angular_core.Signal<any>;
|
|
3763
3988
|
/** Message id whose context menu is open (for active row styling). */
|
|
3764
3989
|
readonly contextMenuMessageId: _angular_core.WritableSignal<string>;
|
|
3990
|
+
/** True while files are dragged over the message list drop zone. */
|
|
3991
|
+
readonly messageListDragging: _angular_core.WritableSignal<boolean>;
|
|
3992
|
+
/** While true, older history is being prepended — do not auto-scroll to the latest message. */
|
|
3993
|
+
private restoringScrollAfterPrepend;
|
|
3765
3994
|
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
3766
3995
|
private get registry();
|
|
3767
3996
|
/** Message list element reference */
|
|
@@ -3769,9 +3998,11 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3769
3998
|
/** Messages container element reference */
|
|
3770
3999
|
private readonly messagesContainerRef;
|
|
3771
4000
|
/** Loading state - use service */
|
|
3772
|
-
readonly loading: _angular_core.
|
|
4001
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
3773
4002
|
/** Loading more messages state - use service */
|
|
3774
4003
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4004
|
+
/** Whether older messages remain on the server */
|
|
4005
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
3775
4006
|
/** Show scroll to bottom button - use service */
|
|
3776
4007
|
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3777
4008
|
/** Active conversation */
|
|
@@ -3822,7 +4053,7 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3822
4053
|
/** Get forwarded text with sender and conversation info */
|
|
3823
4054
|
getForwardedText(message: AXMessage): string;
|
|
3824
4055
|
/** Resolve renderer component for message */
|
|
3825
|
-
getRendererComponent(message: AXMessage): Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
4056
|
+
getRendererComponent(message: AXMessage): typeof AXFallbackRendererComponent | Type<_acorex_components_conversation2.AXMessageRendererComponent>;
|
|
3826
4057
|
/** Provide inputs for the dynamic renderer */
|
|
3827
4058
|
getRendererInputs(message: AXMessage): {
|
|
3828
4059
|
message: AXMessage;
|
|
@@ -3875,8 +4106,12 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3875
4106
|
onScroll(event: Event): void;
|
|
3876
4107
|
/** Handle infinite scroll threshold */
|
|
3877
4108
|
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
3878
|
-
/** Load older messages - delegate to service */
|
|
4109
|
+
/** Load older messages - delegate to service and preserve scroll anchor */
|
|
3879
4110
|
private loadOlderMessages;
|
|
4111
|
+
/**
|
|
4112
|
+
* Keep the user's viewport on the same messages after older rows are inserted above.
|
|
4113
|
+
*/
|
|
4114
|
+
private restoreScrollPositionAfterPrepend;
|
|
3880
4115
|
/** Check if user is near bottom of scroll */
|
|
3881
4116
|
private isUserNearBottom;
|
|
3882
4117
|
/**
|
|
@@ -3908,6 +4143,11 @@ declare class AXMessageListComponent implements OnDestroy {
|
|
|
3908
4143
|
* This is called when a new reply or forward is detected globally
|
|
3909
4144
|
*/
|
|
3910
4145
|
private refreshCount;
|
|
4146
|
+
onMessageListDragEnter(): void;
|
|
4147
|
+
onMessageListDragLeave(): void;
|
|
4148
|
+
/** Open the matching composer picker popup when files are dropped on the message list. */
|
|
4149
|
+
onMessageListFilesDropped(event: AXUploaderFileChangeEvent): Promise<void>;
|
|
4150
|
+
private composerPickerDeps;
|
|
3911
4151
|
/** Handle context menu opening for messages */
|
|
3912
4152
|
handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent, message: AXMessage): void;
|
|
3913
4153
|
/** Handle context menu item click for messages */
|
|
@@ -3944,18 +4184,21 @@ declare class AXMessageListService {
|
|
|
3944
4184
|
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation2.AXConversation>;
|
|
3945
4185
|
readonly activeMessages: _angular_core.Signal<AXMessage[]>;
|
|
3946
4186
|
readonly currentUser: _angular_core.Signal<_acorex_components_conversation2.AXParticipant>;
|
|
3947
|
-
/**
|
|
3948
|
-
readonly loading: _angular_core.
|
|
3949
|
-
/** Loading
|
|
4187
|
+
/** Initial message history load (conversation switch) */
|
|
4188
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4189
|
+
/** Loading older messages (scroll-up pagination) */
|
|
3950
4190
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4191
|
+
/** Whether older messages can be loaded */
|
|
4192
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
3951
4193
|
/** Show scroll to bottom button */
|
|
3952
4194
|
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3953
4195
|
/** Scroll requests counter */
|
|
3954
4196
|
readonly scrollRequests: _angular_core.WritableSignal<number>;
|
|
3955
|
-
/**
|
|
3956
|
-
private readonly
|
|
3957
|
-
|
|
3958
|
-
|
|
4197
|
+
/** Live renderer instances keyed by message id (for message actions). */
|
|
4198
|
+
private readonly _rendererInstances;
|
|
4199
|
+
registerRendererInstance(messageId: string, instance: AXMessageRendererComponent): void;
|
|
4200
|
+
unregisterRendererInstance(messageId: string): void;
|
|
4201
|
+
getRendererInstance(messageId: string): AXMessageRendererComponent | undefined;
|
|
3959
4202
|
/** Message grouped by date */
|
|
3960
4203
|
readonly messageGroups: _angular_core.Signal<{
|
|
3961
4204
|
date: string;
|
|
@@ -3963,11 +4206,11 @@ declare class AXMessageListService {
|
|
|
3963
4206
|
messages: AXMessage[];
|
|
3964
4207
|
}[]>;
|
|
3965
4208
|
/**
|
|
3966
|
-
* Load
|
|
4209
|
+
* Load older messages when the user scrolls near the top.
|
|
3967
4210
|
*/
|
|
3968
|
-
loadMoreMessages(): Promise<
|
|
4211
|
+
loadMoreMessages(): Promise<boolean>;
|
|
3969
4212
|
/**
|
|
3970
|
-
* Reset pagination (
|
|
4213
|
+
* Reset pagination when switching conversations (page 0 is loaded by {@link AXConversationService.selectConversation}).
|
|
3971
4214
|
*/
|
|
3972
4215
|
resetPagination(): void;
|
|
3973
4216
|
getMenuActions(message: AXMessage): _acorex_components_conversation2.AXMessageAction[];
|
|
@@ -3985,11 +4228,10 @@ declare class AXSidebarService {
|
|
|
3985
4228
|
private get registry();
|
|
3986
4229
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
3987
4230
|
readonly activeTabId: _angular_core.WritableSignal<string>;
|
|
3988
|
-
private readonly currentPage;
|
|
3989
|
-
private readonly hasMoreConversations;
|
|
3990
4231
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3991
4232
|
readonly conversations: _angular_core.Signal<AXConversation[]>;
|
|
3992
4233
|
readonly loading: _angular_core.Signal<boolean>;
|
|
4234
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
3993
4235
|
readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation2.AXConversationTab[]>;
|
|
3994
4236
|
private filterCache;
|
|
3995
4237
|
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
@@ -4002,7 +4244,7 @@ declare class AXSidebarService {
|
|
|
4002
4244
|
selectConversation(conversation: AXConversation): void;
|
|
4003
4245
|
getBadgeValue(tabId: string): string | undefined;
|
|
4004
4246
|
/**
|
|
4005
|
-
* Load more conversations
|
|
4247
|
+
* Load more conversations when the user scrolls near the bottom of the sidebar list.
|
|
4006
4248
|
*/
|
|
4007
4249
|
loadMoreConversations(): Promise<void>;
|
|
4008
4250
|
/**
|
|
@@ -4010,9 +4252,9 @@ declare class AXSidebarService {
|
|
|
4010
4252
|
*/
|
|
4011
4253
|
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4012
4254
|
/**
|
|
4013
|
-
*
|
|
4255
|
+
* Reload conversation list from the first page (e.g. pull-to-refresh).
|
|
4014
4256
|
*/
|
|
4015
|
-
|
|
4257
|
+
reloadConversations(): Promise<void>;
|
|
4016
4258
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSidebarService, never>;
|
|
4017
4259
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXSidebarService>;
|
|
4018
4260
|
}
|
|
@@ -4032,6 +4274,7 @@ declare class AXSidebarComponent implements OnDestroy {
|
|
|
4032
4274
|
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
4033
4275
|
readonly loading: _angular_core.Signal<boolean>;
|
|
4034
4276
|
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4277
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
4035
4278
|
constructor();
|
|
4036
4279
|
/** Handle search input change with debouncing */
|
|
4037
4280
|
onSearchChange(value: string): void;
|
|
@@ -4110,15 +4353,22 @@ declare class AXInfiniteScrollDirective {
|
|
|
4110
4353
|
readonly threshold: _angular_core.InputSignal<number>;
|
|
4111
4354
|
/** Which edge to watch: 'top', 'bottom', or 'both' */
|
|
4112
4355
|
readonly edge: _angular_core.InputSignal<"top" | "bottom" | "both">;
|
|
4356
|
+
/** When true, scroll events are ignored (e.g. while a page is loading). */
|
|
4357
|
+
readonly scrollDisabled: _angular_core.InputSignal<boolean>;
|
|
4358
|
+
/** Minimum time between emissions (ms) to avoid duplicate API calls. */
|
|
4359
|
+
readonly cooldownMs: _angular_core.InputSignal<number>;
|
|
4113
4360
|
/** Event emitted when scrolling reaches the threshold */
|
|
4114
4361
|
readonly scrollThreshold: _angular_core.OutputEmitterRef<"top" | "bottom">;
|
|
4115
4362
|
private lastScrollTop;
|
|
4116
4363
|
private ticking;
|
|
4364
|
+
private lastEmitAt;
|
|
4365
|
+
private pendingEmit;
|
|
4117
4366
|
constructor();
|
|
4118
4367
|
private setupScrollListener;
|
|
4119
4368
|
private handleScroll;
|
|
4369
|
+
private emitThreshold;
|
|
4120
4370
|
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>;
|
|
4371
|
+
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
4372
|
}
|
|
4123
4373
|
|
|
4124
4374
|
/**
|
|
@@ -4160,14 +4410,12 @@ interface AXConversationConfig {
|
|
|
4160
4410
|
defaultSidebarWidth?: number;
|
|
4161
4411
|
/** Filter cache size */
|
|
4162
4412
|
filterCacheSize?: number;
|
|
4163
|
-
/** Maximum file size in bytes */
|
|
4164
|
-
maxFileSize?: number;
|
|
4165
|
-
/** Allowed file types (glob patterns like 'image/*') */
|
|
4166
|
-
allowedFileTypes?: string[];
|
|
4167
4413
|
/** Maximum message length in characters */
|
|
4168
4414
|
maxMessageLength?: number;
|
|
4169
4415
|
/** Minimum message length in characters */
|
|
4170
4416
|
minMessageLength?: number;
|
|
4417
|
+
/** Max attachments per message when a composer action omits `maxFiles`. */
|
|
4418
|
+
maxFilesPerMessage?: number;
|
|
4171
4419
|
/** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
|
|
4172
4420
|
messageReadThreshold?: number;
|
|
4173
4421
|
/**
|
|
@@ -4289,8 +4537,19 @@ declare const AXConversationIndexedDbStores: {
|
|
|
4289
4537
|
readonly PARTICIPANTS: "participants";
|
|
4290
4538
|
readonly CONVERSATIONS: "conversations";
|
|
4291
4539
|
readonly MESSAGES: "messages";
|
|
4540
|
+
readonly MEDIA: "media";
|
|
4292
4541
|
readonly SETTINGS: "settings";
|
|
4293
4542
|
};
|
|
4543
|
+
/** Blob stored for demo multimedia uploads */
|
|
4544
|
+
interface AXConversationIndexedDbMediaRecord {
|
|
4545
|
+
id: string;
|
|
4546
|
+
conversationId: string;
|
|
4547
|
+
mimeType: string;
|
|
4548
|
+
size: number;
|
|
4549
|
+
fileName?: string;
|
|
4550
|
+
blob: Blob;
|
|
4551
|
+
createdAt: string;
|
|
4552
|
+
}
|
|
4294
4553
|
declare class AXConversationIndexedDbStorage {
|
|
4295
4554
|
private db;
|
|
4296
4555
|
private initPromise;
|
|
@@ -4336,6 +4595,9 @@ declare class AXConversationIndexedDbStorage {
|
|
|
4336
4595
|
deleteMessage(id: string): Promise<void>;
|
|
4337
4596
|
getSetting(key: string): Promise<unknown>;
|
|
4338
4597
|
putSetting(key: string, value: unknown): Promise<void>;
|
|
4598
|
+
getMedia(id: string): Promise<AXConversationIndexedDbMediaRecord | undefined>;
|
|
4599
|
+
putMedia(record: AXConversationIndexedDbMediaRecord): Promise<void>;
|
|
4600
|
+
deleteMedia(id: string): Promise<void>;
|
|
4339
4601
|
}
|
|
4340
4602
|
declare const axConversationIndexedDbStorage: AXConversationIndexedDbStorage;
|
|
4341
4603
|
|
|
@@ -4389,6 +4651,59 @@ declare class AXConversationSharedStorage {
|
|
|
4389
4651
|
}
|
|
4390
4652
|
declare const conversationSharedStorage: AXConversationSharedStorage;
|
|
4391
4653
|
|
|
4654
|
+
/**
|
|
4655
|
+
* Chat-oriented pagination helpers for IndexedDB demo APIs.
|
|
4656
|
+
*
|
|
4657
|
+
* Convention (matches {@link AXConversationService}):
|
|
4658
|
+
* - Page 0: newest items (sidebar: recent chats; messages: latest history window).
|
|
4659
|
+
* - Page 1+ or `cursor`: older items before the previous window.
|
|
4660
|
+
* - `hasMore`: true when older items remain.
|
|
4661
|
+
* - `nextCursor`: id of the oldest item in the current page (use as `pagination.cursor` for the next request).
|
|
4662
|
+
*/
|
|
4663
|
+
|
|
4664
|
+
declare const AX_MESSAGE_CURSOR_PREFIX = "msg:";
|
|
4665
|
+
declare const AX_CONVERSATION_CURSOR_PREFIX = "conv:";
|
|
4666
|
+
type AXChatCursorKind = 'message' | 'conversation';
|
|
4667
|
+
interface AXParsedChatCursor {
|
|
4668
|
+
kind: AXChatCursorKind;
|
|
4669
|
+
id: string;
|
|
4670
|
+
}
|
|
4671
|
+
declare function encodeMessageCursor(messageId: string): string;
|
|
4672
|
+
declare function encodeConversationCursor(conversationId: string): string;
|
|
4673
|
+
/** Decode cursor from API pagination (supports prefixed or legacy raw message id). */
|
|
4674
|
+
declare function parseChatCursor(cursor?: string): AXParsedChatCursor | null;
|
|
4675
|
+
/**
|
|
4676
|
+
* Paginate a list sorted newest-first (chats, message history windows).
|
|
4677
|
+
*/
|
|
4678
|
+
declare function paginateChatNewestFirst<T extends {
|
|
4679
|
+
id: string;
|
|
4680
|
+
}>(sortedNewestFirst: T[], pagination: AXPagination, cursorKind: AXChatCursorKind): AXPaginatedResult<T>;
|
|
4681
|
+
/**
|
|
4682
|
+
* Paginate a list sorted oldest-first (replies, forward history).
|
|
4683
|
+
*/
|
|
4684
|
+
declare function paginateChatOldestFirst<T extends {
|
|
4685
|
+
id: string;
|
|
4686
|
+
}>(sortedOldestFirst: T[], pagination: AXPagination): AXPaginatedResult<T>;
|
|
4687
|
+
|
|
4688
|
+
/**
|
|
4689
|
+
* Shared read/write helpers for IndexedDB chat storage (in-memory + persistence).
|
|
4690
|
+
*/
|
|
4691
|
+
|
|
4692
|
+
declare function getConversationLastActivity(conv: AXConversation): number;
|
|
4693
|
+
/** Messages for a conversation, newest first (API / pagination order). */
|
|
4694
|
+
declare function getConversationMessagesNewestFirst(conversationId: string): AXMessage[];
|
|
4695
|
+
/** Keep per-conversation id list sorted ascending by timestamp (store order). */
|
|
4696
|
+
declare function sortConversationMessageIds(conversationId: string): void;
|
|
4697
|
+
/** Register a message in maps and keep the conversation index sorted. */
|
|
4698
|
+
declare function registerChatMessage(message: AXMessage): void;
|
|
4699
|
+
/** Remove a message from conversation index and global map. */
|
|
4700
|
+
declare function unregisterChatMessage(messageId: string, conversationId: string): void;
|
|
4701
|
+
declare function applyConversationFilters(conversations: AXConversation[], filters?: AXConversationFilters): AXConversation[];
|
|
4702
|
+
/** Sidebar list order: pinned first, then by last activity (newest first). */
|
|
4703
|
+
declare function getSortedConversationsForInbox(filters?: AXConversationFilters): AXConversation[];
|
|
4704
|
+
/** Sort all loaded conversation message indexes (after IndexedDB hydration). */
|
|
4705
|
+
declare function normalizeAllConversationMessageIndexes(): void;
|
|
4706
|
+
|
|
4392
4707
|
declare class AXConversationIndexedDbUserApi extends AXUserApi {
|
|
4393
4708
|
getCurrentUser(): Promise<AXParticipant>;
|
|
4394
4709
|
updateProfile(updates: AXUserProfileUpdate): Promise<AXParticipant>;
|
|
@@ -4412,36 +4727,38 @@ declare class AXConversationIndexedDbUserApi extends AXUserApi {
|
|
|
4412
4727
|
declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
4413
4728
|
createConversation(data: AXConversationCreateData): Promise<AXConversation>;
|
|
4414
4729
|
getConversation(conversationId: string): Promise<AXConversation>;
|
|
4415
|
-
|
|
4730
|
+
/**
|
|
4731
|
+
* Inbox page (pinned + recent activity, newest first).
|
|
4732
|
+
* Page 0 / cursor align with {@link AXConversationService.loadConversations} and sidebar infinite scroll.
|
|
4733
|
+
*/
|
|
4734
|
+
getConversations(pagination: AXPagination, filters?: AXConversationFilters): Promise<AXPaginatedResult<AXConversation>>;
|
|
4416
4735
|
updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
|
|
4417
4736
|
deleteConversation(conversationId: string): Promise<boolean>;
|
|
4418
4737
|
archiveConversation(conversationId: string): Promise<void>;
|
|
4419
4738
|
unarchiveConversation(conversationId: string): Promise<void>;
|
|
4420
|
-
pinConversation(
|
|
4421
|
-
unpinConversation(
|
|
4739
|
+
pinConversation(conversationId: string): Promise<void>;
|
|
4740
|
+
unpinConversation(conversationId: string): Promise<void>;
|
|
4422
4741
|
markConversationAsRead(conversationId: string): Promise<void>;
|
|
4423
4742
|
markConversationAsUnread(conversationId: string): Promise<void>;
|
|
4424
4743
|
searchConversations(query: string): Promise<AXConversation[]>;
|
|
4425
|
-
filterConversations(
|
|
4744
|
+
filterConversations(filters: AXConversationFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXConversation>>;
|
|
4426
4745
|
getParticipants(conversationId: string): Promise<AXParticipant[]>;
|
|
4427
4746
|
addParticipants(_conversationId: string, _userIds: string[]): Promise<AXConversation>;
|
|
4428
4747
|
removeParticipant(conversationId: string, _userId: string): Promise<AXConversation>;
|
|
4429
4748
|
leaveConversation(_conversationId: string): Promise<void>;
|
|
4430
4749
|
updateParticipant(conversationId: string, _update: AXParticipantUpdate): Promise<AXConversation>;
|
|
4431
4750
|
getConversationSettings(conversationId: string): Promise<AXConversationSettingsUpdate>;
|
|
4432
|
-
updateConversationSettings(
|
|
4433
|
-
muteConversation(
|
|
4434
|
-
unmuteConversation(
|
|
4751
|
+
updateConversationSettings(conversationId: string, settings: AXConversationSettingsUpdate): Promise<void>;
|
|
4752
|
+
muteConversation(conversationId: string, duration?: number): Promise<void>;
|
|
4753
|
+
unmuteConversation(conversationId: string): Promise<void>;
|
|
4435
4754
|
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>;
|
|
4755
|
+
getConversationMedia(conversationId: string, pagination?: AXPagination): Promise<AXPaginatedResult<unknown>>;
|
|
4756
|
+
addConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4757
|
+
removeConversationTags(conversationId: string, tags: string[]): Promise<void>;
|
|
4758
|
+
getConversationTags(conversationId: string): Promise<string[]>;
|
|
4759
|
+
saveDraft(conversationId: string, draft: string): Promise<void>;
|
|
4760
|
+
getDraft(conversationId: string): Promise<string | null>;
|
|
4761
|
+
clearDraft(conversationId: string): Promise<void>;
|
|
4445
4762
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbConversationApi, never>;
|
|
4446
4763
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbConversationApi>;
|
|
4447
4764
|
}
|
|
@@ -4449,12 +4766,17 @@ declare class AXConversationIndexedDbConversationApi extends AXConversationApi {
|
|
|
4449
4766
|
declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
|
|
4450
4767
|
sendMessage(command: AXSendMessageCommand): Promise<AXMessage>;
|
|
4451
4768
|
getMessage(messageId: string): Promise<AXMessage>;
|
|
4769
|
+
/**
|
|
4770
|
+
* Message history for a chat (newest-first pages).
|
|
4771
|
+
* - Page 0: latest `pageSize` messages.
|
|
4772
|
+
* - Page 1+ or `pagination.cursor`: older messages before the previous window.
|
|
4773
|
+
*/
|
|
4452
4774
|
getMessages(conversationId: string, pagination: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4453
4775
|
editMessage(messageId: string, payload: AXMessagePayload): Promise<AXMessage>;
|
|
4454
4776
|
deleteMessage(messageId: string, _forEveryone?: boolean): Promise<void>;
|
|
4455
4777
|
deleteMessages(messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4456
|
-
searchMessages(conversationId: string, filters: AXMessageSearchFilters,
|
|
4457
|
-
searchAllMessages(
|
|
4778
|
+
searchMessages(conversationId: string, filters: AXMessageSearchFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4779
|
+
searchAllMessages(filters: AXMessageSearchFilters, pagination?: AXPagination): Promise<AXPaginatedResult<AXMessage>>;
|
|
4458
4780
|
addReaction(messageId: string, emoji: string): Promise<void>;
|
|
4459
4781
|
removeReaction(messageId: string, emoji: string): Promise<void>;
|
|
4460
4782
|
getAvailableReactions(): Promise<string[]>;
|
|
@@ -4470,24 +4792,17 @@ declare class AXConversationIndexedDbMessageApi extends AXMessageApi {
|
|
|
4470
4792
|
getForwardCount(messageId: string): Promise<number>;
|
|
4471
4793
|
sendTypingIndicator(conversationId: string): Promise<void>;
|
|
4472
4794
|
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>;
|
|
4795
|
+
updateMessageMetadata(messageId: string, metadata: Record<string, unknown>): Promise<void>;
|
|
4796
|
+
getMessageMetadata(messageId: string): Promise<Record<string, unknown>>;
|
|
4797
|
+
updateMessageStatus(messageId: string, status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed'): Promise<void>;
|
|
4483
4798
|
getMessageDeliveryStatus(_messageId: string): Promise<{
|
|
4484
4799
|
delivered: number;
|
|
4485
4800
|
read: number;
|
|
4486
4801
|
total: number;
|
|
4487
4802
|
}>;
|
|
4488
|
-
markMessagesAsRead(
|
|
4489
|
-
bulkDeleteMessages(
|
|
4490
|
-
exportMessages(
|
|
4803
|
+
markMessagesAsRead(messageIds: string[]): Promise<void>;
|
|
4804
|
+
bulkDeleteMessages(conversationId: string, messageIds: string[], forEveryone?: boolean): Promise<void>;
|
|
4805
|
+
exportMessages(conversationId: string, _format: 'json' | 'csv' | 'txt'): Promise<string | Blob>;
|
|
4491
4806
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationIndexedDbMessageApi, never>;
|
|
4492
4807
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageApi>;
|
|
4493
4808
|
}
|
|
@@ -4653,31 +4968,66 @@ declare class AXConversationIndexedDbMessageAiApi extends AXConversationIndexedD
|
|
|
4653
4968
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationIndexedDbMessageAiApi>;
|
|
4654
4969
|
}
|
|
4655
4970
|
|
|
4656
|
-
|
|
4971
|
+
/**
|
|
4972
|
+
* Shared upload state and helpers for composer media pickers.
|
|
4973
|
+
*/
|
|
4974
|
+
|
|
4975
|
+
interface AXComposerPickerUploadItem {
|
|
4657
4976
|
file: File;
|
|
4977
|
+
preview?: string;
|
|
4978
|
+
duration?: number;
|
|
4979
|
+
uploadProgress?: number;
|
|
4980
|
+
uploading?: boolean;
|
|
4981
|
+
uploaded?: boolean;
|
|
4982
|
+
uploadedUrl?: string;
|
|
4983
|
+
mediaId?: string;
|
|
4984
|
+
error?: string;
|
|
4985
|
+
abortController?: AbortController;
|
|
4986
|
+
}
|
|
4987
|
+
|
|
4988
|
+
interface AudioFile extends AXComposerPickerUploadItem {
|
|
4658
4989
|
duration?: number;
|
|
4659
4990
|
dataUrl?: string;
|
|
4660
4991
|
}
|
|
4661
|
-
declare class AXAudioPickerComponent {
|
|
4662
|
-
private
|
|
4663
|
-
private
|
|
4664
|
-
|
|
4992
|
+
declare class AXAudioPickerComponent implements OnDestroy {
|
|
4993
|
+
private uploadsDismissed;
|
|
4994
|
+
private retainUploadedOnDismiss;
|
|
4995
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
4996
|
+
private readonly composerServiceFromInjector;
|
|
4997
|
+
private get composerService();
|
|
4998
|
+
private readonly uploader;
|
|
4999
|
+
private readonly fileService;
|
|
5000
|
+
private readonly fileTypeRegistry;
|
|
5001
|
+
private readonly platformId;
|
|
5002
|
+
private readonly toast;
|
|
4665
5003
|
readonly translation: AXTranslationService;
|
|
4666
5004
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4667
|
-
readonly
|
|
5005
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5006
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5007
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5008
|
+
readonly catalogFileType: "conversation-audio";
|
|
4668
5009
|
readonly audioFiles: _angular_core.WritableSignal<AudioFile[]>;
|
|
4669
5010
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
5011
|
+
readonly typeIconClass: "fa-light fa-music text-amber-500";
|
|
5012
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-music text-amber-500" | "fa-light fa-cloud-arrow-up">;
|
|
5013
|
+
private catalogFileTypeDef?;
|
|
4670
5014
|
caption: string;
|
|
4671
|
-
|
|
5015
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5016
|
+
constructor();
|
|
5017
|
+
private createUtilityContext;
|
|
5018
|
+
private getCatalogFileTypeDef;
|
|
5019
|
+
private runUtility;
|
|
4672
5020
|
handleFiles(files: File[]): Promise<void>;
|
|
4673
|
-
|
|
5021
|
+
private uploadAudioAt;
|
|
5022
|
+
private patchAudio;
|
|
4674
5023
|
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
5024
|
sendAudio(): Promise<void>;
|
|
5025
|
+
canSend(): boolean;
|
|
5026
|
+
getUploadingLabel(progress: number): string;
|
|
5027
|
+
getCancelUploadLabel(): string;
|
|
4680
5028
|
cancel(): void;
|
|
5029
|
+
ngOnDestroy(): void;
|
|
5030
|
+
private dismissPicker;
|
|
4681
5031
|
formatFileSize(bytes: number): string;
|
|
4682
5032
|
formatDuration(seconds: number): string;
|
|
4683
5033
|
getEmptyTitle(): string;
|
|
@@ -4685,7 +5035,7 @@ declare class AXAudioPickerComponent {
|
|
|
4685
5035
|
getSelectedCountText(): string;
|
|
4686
5036
|
getSendText(): string;
|
|
4687
5037
|
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>;
|
|
5038
|
+
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
5039
|
}
|
|
4690
5040
|
|
|
4691
5041
|
declare const AX_CONVERSATION_COMPOSER_EMOJI_TAB: AXComposerTab;
|
|
@@ -4729,37 +5079,54 @@ declare class AXEmojiTabComponent {
|
|
|
4729
5079
|
interface AttachedFile {
|
|
4730
5080
|
file: File;
|
|
4731
5081
|
preview?: string;
|
|
5082
|
+
icon: string;
|
|
4732
5083
|
type: 'image' | 'video' | 'audio' | 'file';
|
|
4733
5084
|
uploadProgress?: number;
|
|
4734
5085
|
uploading?: boolean;
|
|
4735
5086
|
uploaded?: boolean;
|
|
4736
5087
|
uploadedUrl?: string;
|
|
5088
|
+
mediaId?: string;
|
|
4737
5089
|
error?: string;
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
private
|
|
4742
|
-
private
|
|
4743
|
-
private readonly
|
|
5090
|
+
abortController?: AbortController;
|
|
5091
|
+
}
|
|
5092
|
+
declare class AXFilePickerComponent implements OnDestroy {
|
|
5093
|
+
private uploadsDismissed;
|
|
5094
|
+
private retainUploadedOnDismiss;
|
|
5095
|
+
private readonly uploader;
|
|
5096
|
+
private readonly fileService;
|
|
5097
|
+
private readonly fileTypeRegistry;
|
|
5098
|
+
private readonly platformId;
|
|
5099
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5100
|
+
private readonly composerServiceFromInjector;
|
|
5101
|
+
private get composerService();
|
|
5102
|
+
private readonly toast;
|
|
4744
5103
|
readonly translation: AXTranslationService;
|
|
4745
5104
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4746
|
-
readonly
|
|
5105
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5106
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5107
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5108
|
+
readonly catalogFileType: "conversation-file";
|
|
5109
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
4747
5110
|
readonly files: _angular_core.WritableSignal<AttachedFile[]>;
|
|
4748
5111
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4749
5112
|
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
4750
|
-
|
|
5113
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-file text-neutral-500" | "fa-light fa-cloud-arrow-up">;
|
|
5114
|
+
private catalogFileTypeDef?;
|
|
5115
|
+
caption: string;
|
|
5116
|
+
constructor();
|
|
5117
|
+
private createUtilityContext;
|
|
5118
|
+
private getCatalogFileTypeDef;
|
|
5119
|
+
private pickerKind;
|
|
4751
5120
|
handleFiles(fileList: File[]): Promise<void>;
|
|
4752
5121
|
private uploadFile;
|
|
4753
|
-
onFileInputChange(event: Event): void;
|
|
4754
5122
|
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
5123
|
sendFiles(): Promise<void>;
|
|
4760
5124
|
private updateFileProgress;
|
|
4761
5125
|
private uploadFileWithProgress;
|
|
4762
5126
|
cancel(): void;
|
|
5127
|
+
ngOnDestroy(): void;
|
|
5128
|
+
private dismissPicker;
|
|
5129
|
+
getCancelUploadLabel(): string;
|
|
4763
5130
|
formatFileSize(bytes: number): string;
|
|
4764
5131
|
canSend(): boolean;
|
|
4765
5132
|
getSendButtonText(): string;
|
|
@@ -4768,40 +5135,56 @@ declare class AXFilePickerComponent {
|
|
|
4768
5135
|
getSelectedCountText(): string;
|
|
4769
5136
|
getUploadingLabel(progress: number): string;
|
|
4770
5137
|
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>;
|
|
5138
|
+
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
5139
|
}
|
|
4773
5140
|
|
|
4774
|
-
interface ImageFile {
|
|
4775
|
-
file: File;
|
|
5141
|
+
interface ImageFile extends AXComposerPickerUploadItem {
|
|
4776
5142
|
preview: string;
|
|
4777
5143
|
}
|
|
4778
|
-
declare class AXImagePickerComponent {
|
|
4779
|
-
private
|
|
4780
|
-
|
|
4781
|
-
private
|
|
5144
|
+
declare class AXImagePickerComponent implements OnDestroy {
|
|
5145
|
+
private uploadsDismissed;
|
|
5146
|
+
/** Uploaded blobs are referenced by the sent message — do not delete on dismiss. */
|
|
5147
|
+
private retainUploadedOnDismiss;
|
|
5148
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5149
|
+
private readonly composerServiceFromInjector;
|
|
5150
|
+
private get composerService();
|
|
5151
|
+
private readonly uploader;
|
|
5152
|
+
private readonly fileService;
|
|
5153
|
+
private readonly fileTypeRegistry;
|
|
5154
|
+
private readonly platformId;
|
|
5155
|
+
private readonly toast;
|
|
4782
5156
|
readonly translation: AXTranslationService;
|
|
5157
|
+
readonly catalogFileType: "conversation-image";
|
|
4783
5158
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4784
|
-
readonly
|
|
5159
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5160
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5161
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4785
5162
|
readonly images: _angular_core.WritableSignal<ImageFile[]>;
|
|
4786
5163
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
5164
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image text-purple-500" | "fa-light fa-cloud-arrow-up">;
|
|
4787
5165
|
caption: string;
|
|
4788
|
-
|
|
5166
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5167
|
+
private imageFileType?;
|
|
5168
|
+
constructor();
|
|
5169
|
+
private createUtilityContext;
|
|
5170
|
+
private loadImageFileType;
|
|
4789
5171
|
handleFiles(files: File[]): Promise<void>;
|
|
4790
|
-
|
|
5172
|
+
private uploadImageAt;
|
|
5173
|
+
private patchImage;
|
|
4791
5174
|
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
5175
|
sendImages(): Promise<void>;
|
|
5176
|
+
canSend(): boolean;
|
|
5177
|
+
getUploadingLabel(progress: number): string;
|
|
5178
|
+
getCancelUploadLabel(): string;
|
|
4797
5179
|
cancel(): void;
|
|
4798
|
-
|
|
5180
|
+
ngOnDestroy(): void;
|
|
5181
|
+
private dismissPicker;
|
|
4799
5182
|
getEmptyTitle(): string;
|
|
4800
5183
|
getEmptySubtitle(): string;
|
|
4801
5184
|
getSelectedCountText(): string;
|
|
4802
5185
|
getSendText(): string;
|
|
4803
5186
|
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>;
|
|
5187
|
+
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
5188
|
}
|
|
4806
5189
|
|
|
4807
5190
|
declare class AXLocationPickerComponent {
|
|
@@ -4868,31 +5251,49 @@ declare class AXStickerTabComponent {
|
|
|
4868
5251
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXStickerTabComponent, "ax-sticker-tab", never, {}, { "itemSelected": "itemSelected"; }, never, never, true, never>;
|
|
4869
5252
|
}
|
|
4870
5253
|
|
|
4871
|
-
interface VideoFile {
|
|
4872
|
-
file: File;
|
|
5254
|
+
interface VideoFile extends AXComposerPickerUploadItem {
|
|
4873
5255
|
preview?: string;
|
|
4874
5256
|
duration?: number;
|
|
4875
5257
|
}
|
|
4876
|
-
declare class AXVideoPickerComponent {
|
|
4877
|
-
private
|
|
4878
|
-
private
|
|
4879
|
-
|
|
5258
|
+
declare class AXVideoPickerComponent implements OnDestroy {
|
|
5259
|
+
private uploadsDismissed;
|
|
5260
|
+
private retainUploadedOnDismiss;
|
|
5261
|
+
readonly service: _angular_core.InputSignal<AXComposerService>;
|
|
5262
|
+
private readonly composerServiceFromInjector;
|
|
5263
|
+
private get composerService();
|
|
5264
|
+
private readonly uploader;
|
|
5265
|
+
private readonly fileService;
|
|
5266
|
+
private readonly fileTypeRegistry;
|
|
5267
|
+
private readonly platformId;
|
|
5268
|
+
private readonly toast;
|
|
4880
5269
|
readonly translation: AXTranslationService;
|
|
4881
5270
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4882
|
-
readonly
|
|
5271
|
+
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
5272
|
+
readonly initialFiles: _angular_core.InputSignal<File[]>;
|
|
5273
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
5274
|
+
readonly catalogFileType: "conversation-video";
|
|
4883
5275
|
readonly videos: _angular_core.WritableSignal<VideoFile[]>;
|
|
4884
5276
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4885
5277
|
caption: string;
|
|
4886
|
-
|
|
5278
|
+
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5279
|
+
readonly typeIconClass: "fa-light fa-video ax-text-blue-500";
|
|
5280
|
+
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
|
|
5281
|
+
private catalogFileTypeDef?;
|
|
5282
|
+
constructor();
|
|
5283
|
+
private createUtilityContext;
|
|
5284
|
+
private getCatalogFileTypeDef;
|
|
5285
|
+
private runUtility;
|
|
4887
5286
|
handleFiles(files: File[]): Promise<void>;
|
|
4888
|
-
|
|
5287
|
+
private uploadVideoAt;
|
|
5288
|
+
private patchVideo;
|
|
4889
5289
|
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
5290
|
sendVideos(): Promise<void>;
|
|
5291
|
+
canSend(): boolean;
|
|
5292
|
+
getUploadingLabel(progress: number): string;
|
|
5293
|
+
getCancelUploadLabel(): string;
|
|
4895
5294
|
cancel(): void;
|
|
5295
|
+
ngOnDestroy(): void;
|
|
5296
|
+
private dismissPicker;
|
|
4896
5297
|
formatFileSize(bytes: number): string;
|
|
4897
5298
|
formatDuration(seconds: number): string;
|
|
4898
5299
|
getEmptyTitle(): string;
|
|
@@ -4900,20 +5301,22 @@ declare class AXVideoPickerComponent {
|
|
|
4900
5301
|
getSelectedCountText(): string;
|
|
4901
5302
|
getSendText(): string;
|
|
4902
5303
|
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>;
|
|
5304
|
+
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
5305
|
}
|
|
4905
5306
|
|
|
4906
5307
|
declare class AXVoiceRecorderComponent {
|
|
4907
5308
|
private readonly platformId;
|
|
4908
5309
|
private readonly destroyRef;
|
|
4909
5310
|
private readonly composerService;
|
|
4910
|
-
private readonly
|
|
4911
|
-
private readonly
|
|
5311
|
+
private readonly uploader;
|
|
5312
|
+
private readonly toast;
|
|
4912
5313
|
readonly translation: AXTranslationService;
|
|
4913
5314
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4914
5315
|
readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
|
|
4915
5316
|
readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
|
|
4916
5317
|
readonly isRecording: _angular_core.WritableSignal<boolean>;
|
|
5318
|
+
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
5319
|
+
readonly uploadProgress: _angular_core.WritableSignal<number>;
|
|
4917
5320
|
readonly recordingDuration: _angular_core.WritableSignal<number>;
|
|
4918
5321
|
private recordingStartTime;
|
|
4919
5322
|
private timerInterval?;
|
|
@@ -4921,6 +5324,7 @@ declare class AXVoiceRecorderComponent {
|
|
|
4921
5324
|
private audioChunks;
|
|
4922
5325
|
private activeStream?;
|
|
4923
5326
|
private cancelled;
|
|
5327
|
+
private uploadAbortController?;
|
|
4924
5328
|
readonly formattedTime: _angular_core.Signal<string>;
|
|
4925
5329
|
constructor();
|
|
4926
5330
|
startRecording(): Promise<void>;
|
|
@@ -4929,8 +5333,10 @@ declare class AXVoiceRecorderComponent {
|
|
|
4929
5333
|
cancelRecording(): void;
|
|
4930
5334
|
/** Close the voice recorder */
|
|
4931
5335
|
cancel(): void;
|
|
5336
|
+
abortInProgressUploads(): void;
|
|
4932
5337
|
/** Clear timer */
|
|
4933
5338
|
private clearTimer;
|
|
5339
|
+
getUploadingLabel(): string;
|
|
4934
5340
|
/** Send voice message */
|
|
4935
5341
|
private sendVoiceMessage;
|
|
4936
5342
|
private stopAndCleanup;
|
|
@@ -4938,509 +5344,219 @@ declare class AXVoiceRecorderComponent {
|
|
|
4938
5344
|
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>;
|
|
4939
5345
|
}
|
|
4940
5346
|
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
|
|
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>;
|
|
5347
|
+
declare class AXConversationAudioFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5348
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5349
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5350
|
+
platformId: object;
|
|
5351
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5352
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioFileTypeProvider, never>;
|
|
5353
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationAudioFileTypeProvider>;
|
|
5159
5354
|
}
|
|
5160
5355
|
|
|
5161
|
-
declare class
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
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>;
|
|
5285
|
-
}
|
|
5286
|
-
|
|
5287
|
-
declare class AXStickerRendererComponent implements AXMessageRendererComponent {
|
|
5288
|
-
private readonly _contentState;
|
|
5289
|
-
readonly message: _angular_core.InputSignal<AXMessage>;
|
|
5290
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5291
|
-
deliveryStatus: _acorex_components_conversation2.AXMessageStatus;
|
|
5292
|
-
contentState: AXMessageRendererContentState;
|
|
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>;
|
|
5356
|
+
declare class AXConversationFileFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5357
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5358
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5359
|
+
platformId: object;
|
|
5360
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileFileTypeProvider, never>;
|
|
5362
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationFileFileTypeProvider>;
|
|
5302
5363
|
}
|
|
5303
5364
|
|
|
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>;
|
|
5365
|
+
declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5366
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5367
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5368
|
+
platformId: object;
|
|
5369
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5370
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageFileTypeProvider, never>;
|
|
5371
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationImageFileTypeProvider>;
|
|
5315
5372
|
}
|
|
5316
5373
|
|
|
5317
|
-
declare class
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
static
|
|
5374
|
+
declare class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5375
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5376
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5377
|
+
platformId: object;
|
|
5378
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5379
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoFileTypeProvider, never>;
|
|
5380
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVideoFileTypeProvider>;
|
|
5381
|
+
}
|
|
5382
|
+
|
|
5383
|
+
declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider {
|
|
5384
|
+
items(): Promise<AXFileType<Record<string, (ctx: {
|
|
5385
|
+
readAsDataUrl: (file: File | Blob) => Promise<string>;
|
|
5386
|
+
platformId: object;
|
|
5387
|
+
}, ...args: unknown[]) => Promise<unknown> | unknown>>[]>;
|
|
5388
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceFileTypeProvider, never>;
|
|
5389
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationVoiceFileTypeProvider>;
|
|
5332
5390
|
}
|
|
5333
5391
|
|
|
5392
|
+
/** Built-in composer media file type providers (one per picker plugin). */
|
|
5393
|
+
declare const AX_CONVERSATION_COMPOSER_FILE_TYPE_PROVIDERS: readonly [typeof AXConversationImageFileTypeProvider, typeof AXConversationVideoFileTypeProvider, typeof AXConversationAudioFileTypeProvider, typeof AXConversationFileFileTypeProvider, typeof AXConversationVoiceFileTypeProvider];
|
|
5334
5394
|
/**
|
|
5335
|
-
*
|
|
5395
|
+
* Ensures built-in conversation catalogs exist on the root {@link AXFileTypeRegistryService}
|
|
5396
|
+
* before registries validate composer actions (inject from conversation providers).
|
|
5336
5397
|
*/
|
|
5337
|
-
declare
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5347
|
-
}>;
|
|
5348
|
-
readonly showPlayer: _angular_core.WritableSignal<boolean>;
|
|
5349
|
-
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5350
|
-
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5351
|
-
readonly payload: _angular_core.Signal<AXVideoPayload>;
|
|
5352
|
-
readonly playbackUrl: _angular_core.Signal<string>;
|
|
5353
|
-
readonly thumbnailUrl: _angular_core.Signal<string>;
|
|
5354
|
-
readonly hasThumbnail: _angular_core.Signal<boolean>;
|
|
5355
|
-
readonly duration: _angular_core.Signal<number>;
|
|
5356
|
-
readonly caption: _angular_core.Signal<string>;
|
|
5357
|
-
readonly durationLabel: _angular_core.Signal<string>;
|
|
5358
|
-
readonly showDurationBadge: _angular_core.Signal<boolean>;
|
|
5359
|
-
readonly playAriaLabel: _angular_core.Signal<string>;
|
|
5360
|
-
constructor();
|
|
5361
|
-
playVideo(): void;
|
|
5362
|
-
onPlay(): void;
|
|
5363
|
-
onPause(): void;
|
|
5364
|
-
onTimeUpdate(): void;
|
|
5365
|
-
onEnded(): void;
|
|
5366
|
-
onThumbLoad(): void;
|
|
5367
|
-
onThumbError(): void;
|
|
5368
|
-
onVideoLoaded(): void;
|
|
5369
|
-
onError(): void;
|
|
5370
|
-
private pausePlayback;
|
|
5371
|
-
private syncInfoBarBanner;
|
|
5372
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXVideoRendererComponent, never>;
|
|
5373
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5374
|
-
}
|
|
5398
|
+
declare const CONVERSATION_FILE_TYPES_READY: InjectionToken<boolean>;
|
|
5399
|
+
/** Registers validation rules, file-type providers, and root catalog bootstrap for conversation2. */
|
|
5400
|
+
declare function provideConversationComposerFileTypes(): Provider[];
|
|
5401
|
+
declare const AX_CONVERSATION_COMPOSER_EMOJI_ACTION: AXComposerAction;
|
|
5402
|
+
declare const AX_CONVERSATION_COMPOSER_IMAGE_ACTION: AXComposerAction;
|
|
5403
|
+
declare const AX_CONVERSATION_COMPOSER_VIDEO_ACTION: AXComposerAction;
|
|
5404
|
+
declare const AX_CONVERSATION_COMPOSER_FILE_ACTION: AXComposerAction;
|
|
5405
|
+
declare const AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION: AXComposerAction;
|
|
5406
|
+
declare const AX_CONVERSATION_COMPOSER_AUDIO_ACTION: AXComposerAction;
|
|
5407
|
+
declare const AX_CONVERSATION_COMPOSER_LOCATION_ACTION: AXComposerAction;
|
|
5375
5408
|
|
|
5376
|
-
declare
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
|
|
5380
|
-
|
|
5381
|
-
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
readonly
|
|
5385
|
-
|
|
5386
|
-
|
|
5409
|
+
declare function mergeUploadResult(type: AXMessageType, payload: AXMessagePayload, result: AXUploadResult): AXMessagePayload;
|
|
5410
|
+
declare function applyLocalPreview(type: AXMessageType, payload: AXMessagePayload, localUrl: string, mimeType?: string): AXMessagePayload;
|
|
5411
|
+
declare function toUploaderReference(payload: AXMessagePayload): AXUploaderReference;
|
|
5412
|
+
declare function createObjectUrl(platformId: object, blob: Blob): string;
|
|
5413
|
+
declare function revokeObjectUrl(platformId: object, url: string): void;
|
|
5414
|
+
declare function createLocalPreviewUrl(fileService: AXFileService, platformId: object, source: File | Blob, messageType: AXMessageType): Promise<string | undefined>;
|
|
5415
|
+
|
|
5416
|
+
declare class AXConversationInfoPanelComponent extends AXClosableComponent implements OnInit, OnDestroy {
|
|
5417
|
+
private readonly toastService;
|
|
5418
|
+
readonly translation: AXTranslationService;
|
|
5419
|
+
/** Event emitted when popup should close */
|
|
5420
|
+
readonly onClosed: _angular_core.OutputEmitterRef<AXComponentCloseEvent>;
|
|
5421
|
+
/** Conversation (typically passed via popup data). */
|
|
5422
|
+
conversation: AXConversation;
|
|
5423
|
+
conversationService: AXConversationService;
|
|
5424
|
+
/**
|
|
5425
|
+
* Conversation service used by panel actions.
|
|
5426
|
+
* Kept assignable for backward compatibility with popup `data`,
|
|
5427
|
+
* but defaults to DI so this panel works without explicit data wiring.
|
|
5428
|
+
*/
|
|
5429
|
+
notificationsEnabled: boolean;
|
|
5430
|
+
showPreview: boolean;
|
|
5431
|
+
archived: boolean;
|
|
5432
|
+
private initialNotifications;
|
|
5433
|
+
private initialShowPreview;
|
|
5434
|
+
private initialArchived;
|
|
5435
|
+
memberSearchQuery: string;
|
|
5436
|
+
activeTab: string;
|
|
5437
|
+
editTitle: string;
|
|
5438
|
+
editAvatar: string;
|
|
5439
|
+
readonly backgroundPresets: Array<{
|
|
5440
|
+
id: string;
|
|
5441
|
+
label: string;
|
|
5442
|
+
value: string;
|
|
5443
|
+
}>;
|
|
5444
|
+
/** Get filtered members based on search */
|
|
5445
|
+
get filteredMembers(): _acorex_components_conversation2.AXParticipant[];
|
|
5446
|
+
/** Handle tab change */
|
|
5447
|
+
onTabChange(event: any): void;
|
|
5448
|
+
ngOnInit(): void;
|
|
5449
|
+
/** Get initials from name */
|
|
5450
|
+
getInitials(name: string): string;
|
|
5451
|
+
/** Get conversation subtitle */
|
|
5452
|
+
getSubtitle(): string;
|
|
5453
|
+
/** Get type label */
|
|
5454
|
+
getTypeLabel(): string;
|
|
5455
|
+
/** Handle notifications change */
|
|
5456
|
+
onNotificationsChange(value: boolean): Promise<void>;
|
|
5457
|
+
/** Handle show preview change */
|
|
5458
|
+
onShowPreviewChange(value: boolean): Promise<void>;
|
|
5459
|
+
/** Handle archived change */
|
|
5460
|
+
onArchivedChange(value: boolean): Promise<void>;
|
|
5461
|
+
/** Implement AXClosableComponent.close() */
|
|
5462
|
+
close(data?: unknown): void;
|
|
5463
|
+
/** Implement AXClosableComponent.closeAll() */
|
|
5464
|
+
closeAll(): void;
|
|
5465
|
+
/** Handle leave conversation */
|
|
5466
|
+
onLeave(): Promise<void>;
|
|
5467
|
+
/** Get member count text */
|
|
5468
|
+
getMemberCountText(): string;
|
|
5469
|
+
/** Get formatted date */
|
|
5470
|
+
getFormattedDate(date: Date): string;
|
|
5471
|
+
/** Check if can save edit */
|
|
5472
|
+
canSaveEdit(): boolean;
|
|
5473
|
+
/** Save edit */
|
|
5474
|
+
saveEdit(): Promise<void>;
|
|
5475
|
+
currentBackground(): string;
|
|
5476
|
+
isBackgroundSelected(value: string): boolean;
|
|
5477
|
+
applyMessageListBackground(value: string): Promise<void>;
|
|
5478
|
+
ngOnDestroy(): void;
|
|
5479
|
+
getMembersTabLabel(): string;
|
|
5480
|
+
getBackgroundAriaLabel(label: string): string;
|
|
5481
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoPanelComponent, never>;
|
|
5482
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationInfoPanelComponent, "ax-conversation-info-panel", never, {}, { "onClosed": "onClosed"; }, never, never, true, never>;
|
|
5387
5483
|
}
|
|
5388
5484
|
|
|
5389
|
-
declare class
|
|
5485
|
+
declare class AXInfoBarSearchComponent {
|
|
5390
5486
|
private readonly platformId;
|
|
5391
5487
|
private readonly destroyRef;
|
|
5392
5488
|
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>;
|
|
5489
|
+
private readonly conversationService;
|
|
5490
|
+
/** Conversation input */
|
|
5491
|
+
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
5492
|
+
/** Service input */
|
|
5493
|
+
readonly service: _angular_core.InputSignal<AXInfoBarService>;
|
|
5494
|
+
/** Search query from service */
|
|
5495
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
5496
|
+
/** Results count from service */
|
|
5497
|
+
readonly resultsCount: _angular_core.Signal<number>;
|
|
5498
|
+
/** Current index from service */
|
|
5499
|
+
readonly currentIndex: _angular_core.Signal<number>;
|
|
5500
|
+
/** Messages from conversation */
|
|
5501
|
+
readonly messages: _angular_core.Signal<_acorex_components_conversation2.AXMessage[]>;
|
|
5502
|
+
private scrollTimer?;
|
|
5410
5503
|
constructor();
|
|
5411
|
-
|
|
5412
|
-
|
|
5413
|
-
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5504
|
+
/** Handle search input change */
|
|
5505
|
+
onSearchChange(value: string): void;
|
|
5506
|
+
/** Perform search in messages */
|
|
5507
|
+
private performSearch;
|
|
5508
|
+
/** Navigate to next result */
|
|
5509
|
+
onNext(): void;
|
|
5510
|
+
/** Navigate to previous result */
|
|
5511
|
+
onPrevious(): void;
|
|
5512
|
+
/** Scroll to current search result */
|
|
5513
|
+
private scrollToCurrentResult;
|
|
5514
|
+
private scrollToResult;
|
|
5515
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXInfoBarSearchComponent, never>;
|
|
5516
|
+
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
5517
|
}
|
|
5421
5518
|
|
|
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
|
-
}
|
|
5519
|
+
/**
|
|
5520
|
+
* Info Bar Actions Plugin
|
|
5521
|
+
* Individual info bar action constants
|
|
5522
|
+
*/
|
|
5434
5523
|
|
|
5435
5524
|
/**
|
|
5436
|
-
*
|
|
5437
|
-
|
|
5525
|
+
* Search in conversation action (inline)
|
|
5526
|
+
*/
|
|
5527
|
+
declare const AX_CONVERSATION_INFO_BAR_SEARCH_ACTION: AXInfoBarAction;
|
|
5528
|
+
/**
|
|
5529
|
+
* Show conversation info action (menu)
|
|
5530
|
+
*/
|
|
5531
|
+
declare const AX_CONVERSATION_INFO_BAR_INFO_ACTION: AXInfoBarAction;
|
|
5532
|
+
/**
|
|
5533
|
+
* Mute/Unmute notifications action (menu)
|
|
5534
|
+
*/
|
|
5535
|
+
declare const AX_CONVERSATION_INFO_BAR_MUTE_ACTION: AXInfoBarAction;
|
|
5536
|
+
/**
|
|
5537
|
+
* Divider separator (menu)
|
|
5538
|
+
*/
|
|
5539
|
+
declare const AX_CONVERSATION_INFO_BAR_DIVIDER: AXInfoBarAction;
|
|
5540
|
+
/**
|
|
5541
|
+
* Archive/Unarchive conversation action (menu)
|
|
5542
|
+
*/
|
|
5543
|
+
declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXInfoBarAction;
|
|
5544
|
+
/**
|
|
5545
|
+
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5546
|
+
* - Private: "Delete" - Deletes the conversation
|
|
5547
|
+
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5548
|
+
*/
|
|
5549
|
+
declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXInfoBarAction;
|
|
5550
|
+
/**
|
|
5551
|
+
* Block user action (private chats only, menu)
|
|
5438
5552
|
*/
|
|
5553
|
+
declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXInfoBarAction;
|
|
5439
5554
|
|
|
5440
5555
|
/**
|
|
5441
|
-
*
|
|
5556
|
+
* Default Message Actions Plugin
|
|
5557
|
+
* Individual message action constants
|
|
5442
5558
|
*/
|
|
5443
|
-
|
|
5559
|
+
|
|
5444
5560
|
/**
|
|
5445
5561
|
* Reply to message
|
|
5446
5562
|
*/
|
|
@@ -5505,11 +5621,6 @@ declare const AX_CONVERSATION_ITEM_DELETE_ACTION: AXConversationItemAction;
|
|
|
5505
5621
|
* Block/Unblock user (private conversations only)
|
|
5506
5622
|
*/
|
|
5507
5623
|
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
5624
|
|
|
5514
5625
|
/**
|
|
5515
5626
|
* Default Conversation Tabs Plugin
|
|
@@ -5691,7 +5802,7 @@ declare class AXConversationMessageUtilsService {
|
|
|
5691
5802
|
|
|
5692
5803
|
/**
|
|
5693
5804
|
* Validation Utilities
|
|
5694
|
-
* Centralized validation functions for messages
|
|
5805
|
+
* Centralized validation functions for messages and user input
|
|
5695
5806
|
*/
|
|
5696
5807
|
|
|
5697
5808
|
/**
|
|
@@ -5705,15 +5816,6 @@ interface AXValidationResult {
|
|
|
5705
5816
|
/** Error code for programmatic handling */
|
|
5706
5817
|
errorCode?: string;
|
|
5707
5818
|
}
|
|
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
5819
|
/**
|
|
5718
5820
|
* Validate message text content
|
|
5719
5821
|
* @param text - Text to validate
|
|
@@ -5721,13 +5823,6 @@ interface AXFileValidationResult extends AXValidationResult {
|
|
|
5721
5823
|
* @returns Validation result
|
|
5722
5824
|
*/
|
|
5723
5825
|
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
5826
|
/**
|
|
5732
5827
|
* Validate conversation ID
|
|
5733
5828
|
* @param conversationId - Conversation ID to validate
|
|
@@ -5993,35 +6088,6 @@ declare const URL_ERRORS: {
|
|
|
5993
6088
|
readonly message: "Invalid URL format";
|
|
5994
6089
|
};
|
|
5995
6090
|
};
|
|
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
6091
|
/**
|
|
6026
6092
|
* All error messages combined
|
|
6027
6093
|
*/
|
|
@@ -6186,32 +6252,6 @@ declare const ERROR_MESSAGES: {
|
|
|
6186
6252
|
readonly message: "Invalid URL format";
|
|
6187
6253
|
};
|
|
6188
6254
|
};
|
|
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
6255
|
};
|
|
6216
6256
|
/**
|
|
6217
6257
|
* Helper function to format error message with parameters
|
|
@@ -6238,7 +6278,7 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
|
|
|
6238
6278
|
* Type for error codes
|
|
6239
6279
|
* Useful for type-safe error handling
|
|
6240
6280
|
*/
|
|
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']
|
|
6281
|
+
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
6282
|
|
|
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,
|
|
6283
|
+
export { AXAudioPickerComponent, AXAudioRendererComponent, AXBaseRegistry, AXCnvMediaPlaybackInfoBarBannerComponent, AXComposerActionRegistry, AXComposerComponent, AXComposerPopupComponent, AXComposerService, AXComposerTabRegistry, AXConversation2Module, AXConversationAiApiKey, AXConversationAiResponderService, AXConversationApi, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationIndexedDbConversationApi, AXConversationIndexedDbMessageAiApi, AXConversationIndexedDbMessageApi, AXConversationIndexedDbRealtimeApi, AXConversationIndexedDbStorage, AXConversationIndexedDbStores, AXConversationIndexedDbUserApi, AXConversationInfoPanelComponent, AXConversationItemActionRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationService, AXConversationSharedStorage, 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_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_INFO_ACTION, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, AX_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, revokeObjectUrl, sanitizeInput, sortConversationMessageIds, toUploaderReference, unregisterChatMessage, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds };
|
|
6284
|
+
export type { AXApiError, AXAudioMediaItem, AXAudioPayload, AXBlockReportReason, AXCallEvent, AXChatCursorKind, AXComposerAction, AXComposerActionComponent, AXComposerActionContext, AXComposerActiveComponent, AXComposerTab, AXConnectionEvent, AXConnectionOptions, AXConnectionStatus, AXConversation, AXConversationAiResponderConfig, AXConversationConfig, AXConversationCreateData, AXConversationError, AXConversationFilter, AXConversationFilters, AXConversationIndexedDbMediaRecord, AXConversationItemAction, AXConversationItemActionContext, AXConversationMetadata, AXConversationOptions, AXConversationSettings, AXConversationSettingsUpdate, AXConversationSort, AXConversationStatus, AXConversationTab, AXConversationType, AXConversationUpdateData, AXConversationUploadOptions, 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, AXMessageAvatarTemplateContext, 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, AXUserProfileUpdate, AXUserRole, AXUserSearchFilters, AXValidationResult, AXVideoMediaItem, AXVideoPayload, AXVoicePayload, DropdownMenuItem, UploaderFilePreview };
|