@acorex/components 22.1.0-next.31 → 22.1.0-next.33
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/emoji/README.md +3 -0
- package/emojipicker/README.md +3 -0
- package/fesm2022/acorex-components-accordion.mjs +13 -13
- package/fesm2022/acorex-components-accordion.mjs.map +1 -1
- package/fesm2022/acorex-components-action-sheet.mjs +13 -13
- package/fesm2022/acorex-components-alert.mjs +7 -7
- package/fesm2022/acorex-components-aspect-ratio.mjs +3 -3
- package/fesm2022/acorex-components-audio-wave.mjs +295 -271
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-autocomplete.mjs +7 -7
- package/fesm2022/acorex-components-avatar.mjs +10 -10
- package/fesm2022/acorex-components-badge.mjs +7 -7
- package/fesm2022/acorex-components-bottom-navigation.mjs +10 -10
- package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
- package/fesm2022/acorex-components-bubble.mjs +71 -0
- package/fesm2022/acorex-components-bubble.mjs.map +1 -0
- package/fesm2022/acorex-components-button-group.mjs +22 -15
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +194 -51
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +332 -130
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +7 -7
- package/fesm2022/acorex-components-chips.mjs +7 -7
- package/fesm2022/acorex-components-circular-progress.mjs +7 -7
- package/fesm2022/acorex-components-code-editor.mjs +44 -19
- package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +7 -7
- package/fesm2022/acorex-components-color-palette.mjs +28 -28
- package/fesm2022/acorex-components-combo-box.mjs +244 -54
- package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
- package/fesm2022/acorex-components-command.mjs +7 -7
- package/fesm2022/acorex-components-comment.mjs +28 -28
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-EmV9ldrU.mjs +19539 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-EmV9ldrU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-F5fLD_SK.mjs +50 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-F5fLD_SK.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-Bk3ixvt2.mjs +87 -0
- package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-Bk3ixvt2.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-DY7nhA-e.mjs +65 -0
- package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-DY7nhA-e.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +1 -15470
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +47 -47
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-data-list.mjs +3 -3
- package/fesm2022/acorex-components-data-pager.mjs +35 -35
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +734 -165
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +7 -7
- package/fesm2022/acorex-components-datetime-input.mjs +7 -7
- package/fesm2022/acorex-components-datetime-picker.mjs +8 -8
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +60 -30
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +11 -11
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +10 -10
- package/fesm2022/acorex-components-dropdown-button.mjs +10 -9
- package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +19 -14
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-editor.mjs +15 -14
- package/fesm2022/acorex-components-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-emoji.mjs +74 -0
- package/fesm2022/acorex-components-emoji.mjs.map +1 -0
- package/fesm2022/acorex-components-emojipicker.mjs +425 -0
- package/fesm2022/acorex-components-emojipicker.mjs.map +1 -0
- package/fesm2022/acorex-components-fab.mjs +6 -6
- package/fesm2022/acorex-components-fab.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +370 -124
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +17 -17
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-grid-layout-builder.mjs +10 -10
- package/fesm2022/acorex-components-highlight.mjs +80 -0
- package/fesm2022/acorex-components-highlight.mjs.map +1 -0
- package/fesm2022/acorex-components-image-editor.mjs +780 -451
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +7 -7
- package/fesm2022/acorex-components-inline-reaction.mjs +111 -0
- package/fesm2022/acorex-components-inline-reaction.mjs.map +1 -0
- package/fesm2022/acorex-components-json-viewer.mjs +7 -7
- package/fesm2022/acorex-components-kanban.mjs +3 -3
- package/fesm2022/acorex-components-kanban.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +6 -6
- package/fesm2022/acorex-components-label.mjs +7 -7
- package/fesm2022/acorex-components-list.mjs +28 -9
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +10 -10
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +16 -16
- package/fesm2022/acorex-components-lookup.mjs +764 -156
- package/fesm2022/acorex-components-lookup.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +20 -13
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +215 -218
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +146 -45
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-message-status.mjs +71 -0
- package/fesm2022/acorex-components-message-status.mjs.map +1 -0
- package/fesm2022/acorex-components-message-time.mjs +36 -0
- package/fesm2022/acorex-components-message-time.mjs.map +1 -0
- package/fesm2022/acorex-components-message.mjs +120 -0
- package/fesm2022/acorex-components-message.mjs.map +1 -0
- package/fesm2022/acorex-components-navbar.mjs +7 -7
- package/fesm2022/acorex-components-notification.mjs +11 -11
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +7 -7
- package/fesm2022/acorex-components-otp.mjs +7 -7
- package/fesm2022/acorex-components-page.mjs +10 -10
- package/fesm2022/acorex-components-paint.mjs +25 -25
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +10 -10
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-pdf-reader.mjs +7 -7
- package/fesm2022/acorex-components-phone-box.mjs +7 -7
- package/fesm2022/acorex-components-picker.mjs +13 -13
- package/fesm2022/acorex-components-popover.mjs +80 -21
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +167 -104
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +7 -7
- package/fesm2022/acorex-components-qrcode.mjs +7 -7
- package/fesm2022/acorex-components-radio.mjs +7 -7
- package/fesm2022/acorex-components-rail-navigation.mjs +14 -14
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +9 -9
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +7 -7
- package/fesm2022/acorex-components-reaction.mjs +144 -0
- package/fesm2022/acorex-components-reaction.mjs.map +1 -0
- package/fesm2022/acorex-components-rest-api-generator.mjs +22 -22
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +7 -7
- package/fesm2022/acorex-components-routing-progress.mjs +7 -7
- package/fesm2022/acorex-components-rrule.mjs +9 -9
- package/fesm2022/acorex-components-rrule.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler-picker.mjs +56 -56
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +34 -34
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +7 -7
- package/fesm2022/acorex-components-select-box.mjs +7 -7
- package/fesm2022/acorex-components-selection-list.mjs +7 -8
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +55 -42
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-sidebar.mjs +28 -28
- package/fesm2022/acorex-components-skeleton.mjs +7 -7
- package/fesm2022/acorex-components-slider.mjs +7 -7
- package/fesm2022/acorex-components-sliding-item.mjs +13 -13
- package/fesm2022/acorex-components-step-wizard.mjs +16 -18
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +10 -10
- package/fesm2022/acorex-components-tabs.mjs +529 -78
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag-box.mjs +7 -7
- package/fesm2022/acorex-components-tag.mjs +7 -7
- package/fesm2022/acorex-components-text-area.mjs +7 -7
- package/fesm2022/acorex-components-text-box.mjs +7 -7
- package/fesm2022/acorex-components-time-duration.mjs +7 -7
- package/fesm2022/acorex-components-time-line.mjs +10 -10
- package/fesm2022/acorex-components-toast.mjs +10 -10
- package/fesm2022/acorex-components-toolbar.mjs +7 -7
- package/fesm2022/acorex-components-tooltip.mjs +10 -10
- package/fesm2022/acorex-components-tree-view.mjs +58 -15
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +13 -13
- package/fesm2022/acorex-components-video-player.mjs +7 -7
- package/fesm2022/acorex-components-wysiwyg.mjs +109 -39
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/highlight/README.md +13 -0
- package/inline-reaction/README.md +3 -0
- package/lookup/README.md +1 -1
- package/message/README.md +3 -0
- package/message-status/README.md +3 -0
- package/message-time/README.md +3 -0
- package/package.json +42 -12
- package/reaction/README.md +3 -0
- package/types/acorex-components-action-sheet.d.ts +1 -1
- package/types/acorex-components-audio-wave.d.ts +132 -73
- package/types/acorex-components-bubble.d.ts +31 -0
- package/types/acorex-components-button-group.d.ts +4 -0
- package/types/acorex-components-button.d.ts +24 -7
- package/types/acorex-components-calendar.d.ts +43 -12
- package/types/acorex-components-check-box.d.ts +1 -1
- package/types/acorex-components-code-editor.d.ts +4 -1
- package/types/acorex-components-color-box.d.ts +1 -1
- package/types/acorex-components-color-palette.d.ts +2 -2
- package/types/acorex-components-combo-box.d.ts +34 -4
- package/types/acorex-components-command.d.ts +1 -1
- package/types/acorex-components-conversation.d.ts +1869 -1372
- package/types/acorex-components-cron-job.d.ts +6 -6
- package/types/acorex-components-data-pager.d.ts +2 -2
- package/types/acorex-components-data-table.d.ts +194 -21
- package/types/acorex-components-datetime-box.d.ts +1 -1
- package/types/acorex-components-datetime-picker.d.ts +1 -1
- package/types/acorex-components-decorators.d.ts +13 -1
- package/types/acorex-components-dialog.d.ts +1 -1
- package/types/acorex-components-dropdown-button.d.ts +2 -1
- package/types/acorex-components-dropdown.d.ts +6 -1
- package/types/acorex-components-editor.d.ts +1 -1
- package/types/acorex-components-emoji.d.ts +42 -0
- package/types/acorex-components-emojipicker.d.ts +146 -0
- package/types/acorex-components-file-viewer.d.ts +50 -6
- package/types/acorex-components-highlight.d.ts +31 -0
- package/types/acorex-components-image-editor.d.ts +72 -50
- package/types/acorex-components-inline-reaction.d.ts +52 -0
- package/types/acorex-components-list.d.ts +12 -0
- package/types/acorex-components-loading-dialog.d.ts +1 -1
- package/types/acorex-components-loading.d.ts +1 -1
- package/types/acorex-components-lookup.d.ts +213 -82
- package/types/acorex-components-map.d.ts +7 -2
- package/types/acorex-components-media-viewer.d.ts +4 -3
- package/types/acorex-components-menu.d.ts +17 -5
- package/types/acorex-components-message-status.d.ts +23 -0
- package/types/acorex-components-message-time.d.ts +19 -0
- package/types/acorex-components-message.d.ts +59 -0
- package/types/acorex-components-notification.d.ts +1 -1
- package/types/acorex-components-number-box.d.ts +1 -1
- package/types/acorex-components-otp.d.ts +1 -1
- package/types/acorex-components-page.d.ts +2 -2
- package/types/acorex-components-paint.d.ts +2 -2
- package/types/acorex-components-password-box.d.ts +1 -1
- package/types/acorex-components-phone-box.d.ts +1 -1
- package/types/acorex-components-popover.d.ts +18 -4
- package/types/acorex-components-popup.d.ts +62 -26
- package/types/acorex-components-rail-navigation.d.ts +1 -1
- package/types/acorex-components-range-slider.d.ts +1 -1
- package/types/acorex-components-reaction.d.ts +85 -0
- package/types/acorex-components-rest-api-generator.d.ts +1 -1
- package/types/acorex-components-rrule.d.ts +1 -1
- package/types/acorex-components-scheduler-picker.d.ts +1 -1
- package/types/acorex-components-scheduler.d.ts +1 -1
- package/types/acorex-components-search-box.d.ts +1 -1
- package/types/acorex-components-selection-list.d.ts +1 -1
- package/types/acorex-components-side-menu.d.ts +6 -8
- package/types/acorex-components-slider.d.ts +1 -1
- package/types/acorex-components-step-wizard.d.ts +4 -4
- package/types/acorex-components-switch.d.ts +1 -1
- package/types/acorex-components-tabs.d.ts +150 -19
- package/types/acorex-components-tag-box.d.ts +2 -2
- package/types/acorex-components-text-area.d.ts +1 -1
- package/types/acorex-components-text-box.d.ts +1 -1
- package/types/acorex-components-time-duration.d.ts +1 -1
- package/types/acorex-components-toast.d.ts +1 -1
- package/types/acorex-components-tree-view.d.ts +32 -3
- package/types/acorex-components-wysiwyg.d.ts +15 -2
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +0 -50
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +0 -1
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs +0 -210
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +0 -1
- package/fesm2022/acorex-components-flow-chart.mjs +0 -735
- package/fesm2022/acorex-components-flow-chart.mjs.map +0 -1
- package/fesm2022/acorex-components-query-builder.mjs +0 -267
- package/fesm2022/acorex-components-query-builder.mjs.map +0 -1
- package/flow-chart/README.md +0 -3
- package/query-builder/README.md +0 -3
- package/types/acorex-components-flow-chart.d.ts +0 -187
- package/types/acorex-components-query-builder.d.ts +0 -52
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import * as _acorex_components_conversation from '@acorex/components/conversation';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider,
|
|
3
|
+
import { OnDestroy, ViewContainerRef, Type, InputSignal, WritableSignal, Signal, Provider, EventEmitter, TemplateRef, InjectionToken, ElementRef, ModuleWithProviders } from '@angular/core';
|
|
4
4
|
import { AXComponentCloseEvent, AXHtmlEvent, AXClickEvent, AXDataSource, AXPlacement } from '@acorex/cdk/common';
|
|
5
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
5
6
|
import * as _acorex_components_action_sheet from '@acorex/components/action-sheet';
|
|
6
7
|
import { AXActionSheetRef } from '@acorex/components/action-sheet';
|
|
7
8
|
import * as _acorex_components_popup from '@acorex/components/popup';
|
|
8
|
-
import {
|
|
9
|
+
import { AXPopupRef, AXPopupService } from '@acorex/components/popup';
|
|
9
10
|
import { AXFileUploadOptions, AXUploadResult, AXUploadReference, AXUploaderService, AXUploaderFileChangeEvent } from '@acorex/cdk/uploader';
|
|
11
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
12
|
+
import { AXValidationRuleResult } from '@acorex/core/validation';
|
|
10
13
|
import { AXListComponent } from '@acorex/components/list';
|
|
11
14
|
import * as rxjs from 'rxjs';
|
|
12
15
|
import { Observable } from 'rxjs';
|
|
@@ -15,11 +18,10 @@ import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex
|
|
|
15
18
|
import { AXTabLocation } from '@acorex/components/tabs';
|
|
16
19
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
17
20
|
import * as _acorex_core_file from '@acorex/core/file';
|
|
18
|
-
import {
|
|
19
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
20
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
21
|
-
import { AXValidationRuleResult } from '@acorex/core/validation';
|
|
21
|
+
import { AXFileTypeRegistryService, AXFileTypeExtensionHint, AXFileTypeOpenContext, AXFileTypeInfoProvider, AXFileType, AXFileService } from '@acorex/core/file';
|
|
22
22
|
import { AXMapMarker } from '@acorex/components/map';
|
|
23
|
+
import { AXWaveConfig, AXAudioWaveChangeEvent } from '@acorex/components/audio-wave';
|
|
24
|
+
import { AXRangeSliderValue } from '@acorex/components/range-slider';
|
|
23
25
|
import { SafeHtml } from '@angular/platform-browser';
|
|
24
26
|
import * as i1 from '@angular/common';
|
|
25
27
|
import * as i2 from '@angular/forms';
|
|
@@ -183,6 +185,7 @@ interface AXConversationFileMediaItem extends AXConversationMediaItemFields {
|
|
|
183
185
|
mimeType: string;
|
|
184
186
|
thumbnailUrl?: string;
|
|
185
187
|
extension?: string;
|
|
188
|
+
duration?: number;
|
|
186
189
|
}
|
|
187
190
|
interface AXConversationFilePayload {
|
|
188
191
|
type: 'file';
|
|
@@ -447,6 +450,11 @@ interface AXConversationParticipant {
|
|
|
447
450
|
icon?: string;
|
|
448
451
|
/** Role in the conversation (for groups/channels) */
|
|
449
452
|
role?: AXConversationParticipantRole;
|
|
453
|
+
/**
|
|
454
|
+
* When this user joined the conversation.
|
|
455
|
+
* Used for admin succession when the creator leaves a group or channel.
|
|
456
|
+
*/
|
|
457
|
+
joinedAt?: Date;
|
|
450
458
|
/** Custom metadata */
|
|
451
459
|
metadata?: Record<string, unknown>;
|
|
452
460
|
}
|
|
@@ -464,6 +472,8 @@ interface AXConversationMessageListThemeBackground {
|
|
|
464
472
|
}
|
|
465
473
|
/** Single CSS value (both themes) or per-theme `{ light, dark }` backgrounds. */
|
|
466
474
|
type AXConversationMessageListBackground = string | AXConversationMessageListThemeBackground;
|
|
475
|
+
/** Composer file-attachment UI: picker popup vs inline strip above the input. */
|
|
476
|
+
type AXConversationComposerAttachmentPresentation = 'overlay' | 'banner';
|
|
467
477
|
/**
|
|
468
478
|
* Conversation metadata
|
|
469
479
|
* Extensible map for app-specific conversation data.
|
|
@@ -474,10 +484,16 @@ interface AXConversationMetadata extends Record<string, unknown> {
|
|
|
474
484
|
/** Optional custom empty-state component for the message list. */
|
|
475
485
|
messageListEmptyComponent?: Type<AXConversationMessageListEmptyComponent>;
|
|
476
486
|
/**
|
|
477
|
-
*
|
|
478
|
-
*
|
|
487
|
+
* Explicit reaction UI override for this conversation.
|
|
488
|
+
* When omitted, reactions are enabled for `private` / `group` / `channel` and disabled for `bot`.
|
|
479
489
|
*/
|
|
480
490
|
reactionsEnabled?: boolean;
|
|
491
|
+
/**
|
|
492
|
+
* How composer file attachments are presented.
|
|
493
|
+
* `overlay` opens the picker popup; `banner` keeps files above the composer (ChatGPT-style).
|
|
494
|
+
* When omitted, `bot` chats default to `banner` and other types to `overlay`.
|
|
495
|
+
*/
|
|
496
|
+
composerAttachmentPresentation?: AXConversationComposerAttachmentPresentation;
|
|
481
497
|
}
|
|
482
498
|
/** Contract for custom empty-state components rendered by message list. */
|
|
483
499
|
interface AXConversationMessageListEmptyComponent {
|
|
@@ -526,6 +542,12 @@ interface AXConversation {
|
|
|
526
542
|
pinned?: boolean;
|
|
527
543
|
/** Whether conversation is archived */
|
|
528
544
|
archived?: boolean;
|
|
545
|
+
/**
|
|
546
|
+
* Viewer-scoped history cursor (Telegram-style).
|
|
547
|
+
* Messages at or before this timestamp are omitted for the current user only.
|
|
548
|
+
* Filled by the conversation/message APIs; never leak another user's cutoff.
|
|
549
|
+
*/
|
|
550
|
+
historyClearedAt?: Date;
|
|
529
551
|
/** Custom metadata */
|
|
530
552
|
metadata?: AXConversationMetadata;
|
|
531
553
|
}
|
|
@@ -680,6 +702,72 @@ declare abstract class AXConversationBaseRegistry<T extends AXConversationRegist
|
|
|
680
702
|
protected abstract getRegistryName(): string;
|
|
681
703
|
}
|
|
682
704
|
|
|
705
|
+
/**
|
|
706
|
+
* Shared upload state and helpers for composer media pickers.
|
|
707
|
+
*/
|
|
708
|
+
|
|
709
|
+
/** Stable id for `@for` tracking while upload state is patched immutably. */
|
|
710
|
+
declare function createPickerUploadItemId(): string;
|
|
711
|
+
interface AXConversationComposerPickerUploadItem {
|
|
712
|
+
id: string;
|
|
713
|
+
file: File;
|
|
714
|
+
preview?: string;
|
|
715
|
+
duration?: number;
|
|
716
|
+
uploadProgress?: number;
|
|
717
|
+
uploading?: boolean;
|
|
718
|
+
uploaded?: boolean;
|
|
719
|
+
uploadedUrl?: string;
|
|
720
|
+
mediaId?: string;
|
|
721
|
+
error?: string;
|
|
722
|
+
abortController?: AbortController;
|
|
723
|
+
}
|
|
724
|
+
declare function getPickerCancelUploadLabel(translation: AXTranslationService): string;
|
|
725
|
+
declare function abortPickerUploads(items: Iterable<{
|
|
726
|
+
abortController?: AbortController;
|
|
727
|
+
} | null | undefined>): void;
|
|
728
|
+
interface AXConversationCleanupPickerUploadsOptions {
|
|
729
|
+
retainUploaded?: boolean;
|
|
730
|
+
}
|
|
731
|
+
/** Upload finished; reference is {@link mediaId} and/or a non-empty session url. */
|
|
732
|
+
declare function isPickerItemReadyToSend(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId'>): boolean;
|
|
733
|
+
/** Build uploader result shape for {@link *ItemFromUpload} after picker upload. */
|
|
734
|
+
declare function pickerItemToUploadResult(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId' | 'file'>): {
|
|
735
|
+
url: string;
|
|
736
|
+
mediaId?: string;
|
|
737
|
+
mimeType: string;
|
|
738
|
+
size: number;
|
|
739
|
+
} | null;
|
|
740
|
+
declare function pickerItemToMediaReference(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId' | 'file'>): AXConversationUploaderReference | null;
|
|
741
|
+
declare function deleteUploadedPickerMedia(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>): Promise<void>;
|
|
742
|
+
declare function cleanupPickerUploads(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>, options?: AXConversationCleanupPickerUploadsOptions): void;
|
|
743
|
+
declare function revokePickerBlobPreviews(items: Iterable<{
|
|
744
|
+
preview?: string;
|
|
745
|
+
} | null | undefined>): void;
|
|
746
|
+
declare function isUploadAborted(error: unknown, signal?: AbortSignal): boolean;
|
|
747
|
+
declare function limitFilesToCapacity(files: File[], currentCount: number, maxFiles: number): File[];
|
|
748
|
+
declare function uploadPickerFile(uploader: AXUploaderService, conversationId: string, file: File, onProgress: (percent: number) => void, signal?: AbortSignal): Promise<{
|
|
749
|
+
url: string;
|
|
750
|
+
mediaId?: string;
|
|
751
|
+
mimeType: string;
|
|
752
|
+
size: number;
|
|
753
|
+
}>;
|
|
754
|
+
declare function notifyMaxFilesCapacityExceeded(toast: AXToastService, translation: AXTranslationService, maxFiles: number): void;
|
|
755
|
+
/** User-facing message for a file validation failure. */
|
|
756
|
+
declare function formatPickerValidationMessage(translation: AXTranslationService, file: File, error: AXValidationRuleResult | undefined): string;
|
|
757
|
+
/** Show a warning toast for each failed validation rule result. */
|
|
758
|
+
declare function notifyPickerValidationErrors(toast: AXToastService, translation: AXTranslationService, rejected: {
|
|
759
|
+
file: File;
|
|
760
|
+
errors: AXValidationRuleResult[];
|
|
761
|
+
}[]): void;
|
|
762
|
+
/** Close popup/action-sheet host or inline composer shell after send/cancel. */
|
|
763
|
+
declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null, actionSheetRef?: AXActionSheetRef | null): void;
|
|
764
|
+
|
|
765
|
+
type AXConversationComposerDraftAttachmentKind = 'image' | 'video' | 'audio' | 'file';
|
|
766
|
+
interface AXConversationComposerDraftAttachment extends AXConversationComposerPickerUploadItem {
|
|
767
|
+
kind: AXConversationComposerDraftAttachmentKind;
|
|
768
|
+
icon: string;
|
|
769
|
+
}
|
|
770
|
+
|
|
683
771
|
/** Primary composer button mode (send / cancel / stopping / default action / locked). */
|
|
684
772
|
type AXConversationComposerPrimaryButtonMode = 'send' | 'cancel' | 'stopping' | 'default-action' | 'locked';
|
|
685
773
|
declare class AXConversationComposerService {
|
|
@@ -687,10 +775,13 @@ declare class AXConversationComposerService {
|
|
|
687
775
|
private readonly generationState;
|
|
688
776
|
private readonly translation;
|
|
689
777
|
private readonly popupService;
|
|
690
|
-
private readonly
|
|
691
|
-
private readonly
|
|
778
|
+
private readonly uploader;
|
|
779
|
+
private readonly fileService;
|
|
780
|
+
private readonly toast;
|
|
692
781
|
private readonly config;
|
|
782
|
+
private readonly destroyRef;
|
|
693
783
|
private readonly _activeActionOverlay;
|
|
784
|
+
constructor();
|
|
694
785
|
private get registry();
|
|
695
786
|
private readonly _replyMessage;
|
|
696
787
|
private readonly _editMessage;
|
|
@@ -700,8 +791,10 @@ declare class AXConversationComposerService {
|
|
|
700
791
|
readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
|
|
701
792
|
/** Draft text */
|
|
702
793
|
readonly draftText: _angular_core.WritableSignal<string>;
|
|
703
|
-
/**
|
|
704
|
-
readonly
|
|
794
|
+
/** Inline composer attachments shown above the input in banner mode. */
|
|
795
|
+
readonly draftAttachments: _angular_core.WritableSignal<AXConversationComposerDraftAttachment[]>;
|
|
796
|
+
readonly draftAttachmentsReady: _angular_core.Signal<boolean>;
|
|
797
|
+
readonly usesAttachmentBanner: _angular_core.Signal<boolean>;
|
|
705
798
|
/** Incremented to request focus on the composer text area (handled by AXConversationComposerComponent). */
|
|
706
799
|
private readonly _focusRequest;
|
|
707
800
|
readonly focusRequest: _angular_core.Signal<number>;
|
|
@@ -738,6 +831,7 @@ declare class AXConversationComposerService {
|
|
|
738
831
|
startEdit(message: AXConversationMessage): void;
|
|
739
832
|
/** Focus the composer text area when the composer component is mounted. */
|
|
740
833
|
focusComposer(): void;
|
|
834
|
+
clearReplyEdit(): void;
|
|
741
835
|
clear(): void;
|
|
742
836
|
/**
|
|
743
837
|
* Persist draft for the previous conversation and reset composer UI state when switching conversations.
|
|
@@ -756,6 +850,15 @@ declare class AXConversationComposerService {
|
|
|
756
850
|
toggleable?: boolean;
|
|
757
851
|
initialFiles?: File[];
|
|
758
852
|
}): Promise<void>;
|
|
853
|
+
browseDraftAttachments(fileType?: string): Promise<number>;
|
|
854
|
+
addDraftAttachments(files: File[]): Promise<number>;
|
|
855
|
+
removeDraftAttachment(id: string): void;
|
|
856
|
+
clearDraftAttachments(options?: {
|
|
857
|
+
retainUploaded?: boolean;
|
|
858
|
+
}): void;
|
|
859
|
+
buildDraftAttachmentCommand(caption?: string): Promise<AXConversationSendMessageCommand | null>;
|
|
860
|
+
private uploadDraftAttachment;
|
|
861
|
+
private patchDraftAttachment;
|
|
759
862
|
/**
|
|
760
863
|
* Hide the active action overlay.
|
|
761
864
|
*/
|
|
@@ -781,7 +884,7 @@ declare class AXConversationComposerService {
|
|
|
781
884
|
*/
|
|
782
885
|
clearDraft(conversationId: string): void;
|
|
783
886
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerService, never>;
|
|
784
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
887
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
785
888
|
}
|
|
786
889
|
|
|
787
890
|
/**
|
|
@@ -958,7 +1061,7 @@ declare class AXConversationComposerActionRegistry {
|
|
|
958
1061
|
*/
|
|
959
1062
|
clear(): void;
|
|
960
1063
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerActionRegistry, never>;
|
|
961
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1064
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
962
1065
|
}
|
|
963
1066
|
|
|
964
1067
|
/**
|
|
@@ -1019,7 +1122,7 @@ declare class AXConversationComposerTabRegistry {
|
|
|
1019
1122
|
*/
|
|
1020
1123
|
clear(): void;
|
|
1021
1124
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerTabRegistry, never>;
|
|
1022
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1125
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1023
1126
|
}
|
|
1024
1127
|
|
|
1025
1128
|
/**
|
|
@@ -1093,7 +1196,7 @@ declare class AXConversationItemActionRegistry extends AXConversationBaseRegistr
|
|
|
1093
1196
|
getActionTooltip(action: AXConversationItemAction, conversation: AXConversation): string | undefined;
|
|
1094
1197
|
executeAction(actionId: string, context: AXConversationItemActionContext): Promise<void>;
|
|
1095
1198
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationItemActionRegistry, never>;
|
|
1096
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1199
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1097
1200
|
}
|
|
1098
1201
|
|
|
1099
1202
|
/**
|
|
@@ -1160,9 +1263,27 @@ declare class AXConversationTabRegistry {
|
|
|
1160
1263
|
*/
|
|
1161
1264
|
clear(): void;
|
|
1162
1265
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationTabRegistry, never>;
|
|
1163
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1266
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1164
1267
|
}
|
|
1165
1268
|
|
|
1269
|
+
/** Visual chrome around a message body in the list. */
|
|
1270
|
+
type AXConversationMessageChrome = 'bubble' | 'plain';
|
|
1271
|
+
/** Max consecutive emoji graphemes that render as a jumbo (sticker-sized) text message. */
|
|
1272
|
+
declare const AX_CONVERSATION_JUMBO_EMOJI_MAX = 3;
|
|
1273
|
+
/**
|
|
1274
|
+
* Resolve registry chrome config to a concrete value.
|
|
1275
|
+
* Default is {@link AXConversationMessageChrome bubble}.
|
|
1276
|
+
*/
|
|
1277
|
+
declare function resolveMessageChrome(chrome: AXConversationMessageChrome | ((message: AXConversationMessage) => AXConversationMessageChrome) | undefined, message: AXConversationMessage): AXConversationMessageChrome;
|
|
1278
|
+
/** Visible graphemes in trimmed text (whitespace between emojis is dropped). */
|
|
1279
|
+
declare function listTextGraphemes(text: string | null | undefined): string[];
|
|
1280
|
+
/** Count emoji graphemes in trimmed text; `0` when mixed with other characters. */
|
|
1281
|
+
declare function countLoneEmojis(text: string | null | undefined): number;
|
|
1282
|
+
declare function isJumboEmojiText(text: string | null | undefined): boolean;
|
|
1283
|
+
declare function isJumboEmojiTextMessage(message: AXConversationMessage): boolean;
|
|
1284
|
+
/** Types that never sit inside a bubble cluster with neighboring messages. */
|
|
1285
|
+
declare function isPlainChromeMessage(message: AXConversationMessage): boolean;
|
|
1286
|
+
|
|
1166
1287
|
/**
|
|
1167
1288
|
* Message Renderer Registry
|
|
1168
1289
|
* Register custom message renderers for different message types
|
|
@@ -1237,6 +1358,12 @@ interface AXConversationMessageRenderer {
|
|
|
1237
1358
|
canHandle: (message: AXConversationMessage) => boolean;
|
|
1238
1359
|
/** Renderer capabilities */
|
|
1239
1360
|
capabilities: AXConversationMessageRendererCapabilities;
|
|
1361
|
+
/**
|
|
1362
|
+
* List chrome for this message type.
|
|
1363
|
+
* `plain` removes bubble fill, padding, shadow, and tail. Default is `bubble`.
|
|
1364
|
+
* Pass a function when chrome depends on payload (e.g. jumbo emoji text).
|
|
1365
|
+
*/
|
|
1366
|
+
chrome?: AXConversationMessageChrome | ((message: AXConversationMessage) => AXConversationMessageChrome);
|
|
1240
1367
|
/** Display name */
|
|
1241
1368
|
displayName?: string;
|
|
1242
1369
|
/** Icon name/class */
|
|
@@ -1263,6 +1390,9 @@ declare class AXConversationMessageRendererRegistry {
|
|
|
1263
1390
|
readonly renderers: Signal<AXConversationMessageRenderer[]>;
|
|
1264
1391
|
/** Renderers sorted by priority (highest first) */
|
|
1265
1392
|
readonly sortedRenderers: Signal<AXConversationMessageRenderer[]>;
|
|
1393
|
+
/** O(1) lookup by message type. Rebuilt when the registry changes. */
|
|
1394
|
+
private readonly rendererByType;
|
|
1395
|
+
private readonly missingRendererTypesWarned;
|
|
1266
1396
|
/**
|
|
1267
1397
|
* Register a message renderer
|
|
1268
1398
|
*/
|
|
@@ -1272,13 +1402,15 @@ declare class AXConversationMessageRendererRegistry {
|
|
|
1272
1402
|
*/
|
|
1273
1403
|
unregister(type: string): void;
|
|
1274
1404
|
/**
|
|
1275
|
-
* Get renderer for a specific message
|
|
1405
|
+
* Get renderer for a specific message (exact type match).
|
|
1406
|
+
* Missing types are warned once; callers should fall back to the `fallback` renderer.
|
|
1276
1407
|
*/
|
|
1277
1408
|
getRenderer(message: AXConversationMessage): AXConversationMessageRenderer | undefined;
|
|
1278
1409
|
/**
|
|
1279
1410
|
* Get renderer by type
|
|
1280
1411
|
*/
|
|
1281
1412
|
getRendererByType(type: string): AXConversationMessageRenderer | undefined;
|
|
1413
|
+
private warnMissingRenderer;
|
|
1282
1414
|
/**
|
|
1283
1415
|
* Check if a message type is supported
|
|
1284
1416
|
*/
|
|
@@ -1292,7 +1424,7 @@ declare class AXConversationMessageRendererRegistry {
|
|
|
1292
1424
|
*/
|
|
1293
1425
|
clear(): void;
|
|
1294
1426
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageRendererRegistry, never>;
|
|
1295
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1427
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1296
1428
|
}
|
|
1297
1429
|
|
|
1298
1430
|
/**
|
|
@@ -1411,7 +1543,7 @@ declare class AXConversationInfoBarService {
|
|
|
1411
1543
|
clearSearch(): void;
|
|
1412
1544
|
private _extractOnClose;
|
|
1413
1545
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarService, never>;
|
|
1414
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1546
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1415
1547
|
}
|
|
1416
1548
|
|
|
1417
1549
|
/**
|
|
@@ -1527,7 +1659,7 @@ declare class AXConversationInfoBarActionRegistry extends AXConversationBaseRegi
|
|
|
1527
1659
|
*/
|
|
1528
1660
|
getActionTooltip(action: AXConversationInfoBarAction, conversation: AXConversation): string | undefined;
|
|
1529
1661
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarActionRegistry, never>;
|
|
1530
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1662
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1531
1663
|
}
|
|
1532
1664
|
|
|
1533
1665
|
/**
|
|
@@ -1618,7 +1750,7 @@ declare class AXConversationMessageActionRegistry {
|
|
|
1618
1750
|
*/
|
|
1619
1751
|
clear(): void;
|
|
1620
1752
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageActionRegistry, never>;
|
|
1621
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
1753
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1622
1754
|
}
|
|
1623
1755
|
|
|
1624
1756
|
declare class AXConversationComposerComponent implements OnDestroy {
|
|
@@ -1626,15 +1758,22 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1626
1758
|
private readonly composerService;
|
|
1627
1759
|
private readonly messageListService;
|
|
1628
1760
|
private readonly config;
|
|
1629
|
-
|
|
1761
|
+
protected readonly translation: AXTranslationService;
|
|
1762
|
+
private readonly uploader;
|
|
1763
|
+
private readonly platform;
|
|
1764
|
+
private readonly fileService;
|
|
1765
|
+
private readonly toast;
|
|
1766
|
+
private readonly actionSheetService;
|
|
1767
|
+
private readonly hostRef;
|
|
1630
1768
|
/** Access registry through conversation service */
|
|
1631
1769
|
protected get composerActionRegistry(): _acorex_components_conversation.AXConversationComposerActionRegistry;
|
|
1632
1770
|
/** Composer text area reference */
|
|
1633
1771
|
private readonly textAreaRef;
|
|
1634
1772
|
/** Draft text - use service */
|
|
1635
1773
|
readonly draftText: _angular_core.WritableSignal<string>;
|
|
1636
|
-
/**
|
|
1637
|
-
readonly
|
|
1774
|
+
/** Draft attachments shown above the composer in banner mode. */
|
|
1775
|
+
readonly draftAttachments: _angular_core.WritableSignal<_acorex_components_conversation.AXConversationComposerDraftAttachment[]>;
|
|
1776
|
+
readonly usesAttachmentBanner: _angular_core.Signal<boolean>;
|
|
1638
1777
|
/** Editing message */
|
|
1639
1778
|
readonly editingMessage: _angular_core.WritableSignal<any>;
|
|
1640
1779
|
/** Replying to message */
|
|
@@ -1665,6 +1804,7 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1665
1804
|
readonly placeholder: _angular_core.Signal<string>;
|
|
1666
1805
|
constructor();
|
|
1667
1806
|
private draftSaveTimeout?;
|
|
1807
|
+
private seededEditMessageId;
|
|
1668
1808
|
/** Number of input rows - use service */
|
|
1669
1809
|
readonly inputRows: _angular_core.Signal<number>;
|
|
1670
1810
|
/** Can send message - use service */
|
|
@@ -1691,6 +1831,10 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1691
1831
|
readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
|
|
1692
1832
|
/** Handle key down (send on Enter; typing is driven by draft changes only). */
|
|
1693
1833
|
onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
1834
|
+
/** Keep the draft signal in sync with ngModel (signal two-way bind is unreliable on ax-text-area). */
|
|
1835
|
+
onDraftModelChange(value: string): void;
|
|
1836
|
+
/** Keep the draft signal in sync with ax-text-area CVA output. */
|
|
1837
|
+
onDraftValueChanged(event: unknown): void;
|
|
1694
1838
|
/** Handle draft text changes — throttled typing indicator via conversation service. */
|
|
1695
1839
|
onDraftChanged(): void;
|
|
1696
1840
|
/** Cleanup on destroy */
|
|
@@ -1714,8 +1858,13 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1714
1858
|
onAttachMenuPanelMouseLeave(): void;
|
|
1715
1859
|
private scheduleAttachMenuClose;
|
|
1716
1860
|
private clearAttachMenuCloseTimer;
|
|
1717
|
-
/**
|
|
1861
|
+
/** Desktop: open an all-files chooser. Mobile: toggle the attachment dropdown. */
|
|
1718
1862
|
onAttachMenuClick(event: AXClickEvent): void;
|
|
1863
|
+
/** Open the OS file picker for any file, then route to the matching composer picker. */
|
|
1864
|
+
private openSmartAttachChooser;
|
|
1865
|
+
/** OS file paste (Ctrl+V) while the composer is focused. */
|
|
1866
|
+
onComposerPaste(event: ClipboardEvent): void;
|
|
1867
|
+
private composerPickerDeps;
|
|
1719
1868
|
/** Handle attachment menu action selection */
|
|
1720
1869
|
onAttachMenuAction(actionId: string): Promise<void>;
|
|
1721
1870
|
/** Handle primary button click (send / cancel / stopping / voice / locked). */
|
|
@@ -1729,9 +1878,13 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1729
1878
|
getDefaultActionIcon(): string;
|
|
1730
1879
|
/** Handle voice click */
|
|
1731
1880
|
onVoiceClick(): void;
|
|
1732
|
-
/** Remove attachment */
|
|
1733
|
-
|
|
1734
|
-
|
|
1881
|
+
/** Remove a draft attachment from the composer banner. */
|
|
1882
|
+
removeDraftAttachment(id: string): void;
|
|
1883
|
+
addDraftAttachments(): void;
|
|
1884
|
+
dismissDraftAttachments(): void;
|
|
1885
|
+
draftAttachmentLabel(name: string): string;
|
|
1886
|
+
canAddDraftAttachments(): boolean;
|
|
1887
|
+
/** Cancel edit/reply mode without dropping draft attachments. */
|
|
1735
1888
|
cancelEditReply(): void;
|
|
1736
1889
|
/** Start editing a message */
|
|
1737
1890
|
startEdit(message: any): void;
|
|
@@ -1739,6 +1892,11 @@ declare class AXConversationComposerComponent implements OnDestroy {
|
|
|
1739
1892
|
startReply(message: AXConversationMessage): void;
|
|
1740
1893
|
/** Focus the native textarea inside ax-text-area */
|
|
1741
1894
|
private focusTextArea;
|
|
1895
|
+
/** Prefer the visible textarea when it differs from the original edit; else the draft signal. */
|
|
1896
|
+
private resolveComposerText;
|
|
1897
|
+
private readOriginalEditText;
|
|
1898
|
+
private readNativeComposerText;
|
|
1899
|
+
private readChangedText;
|
|
1742
1900
|
private getClickTarget;
|
|
1743
1901
|
/** Handle action click */
|
|
1744
1902
|
onActionClick(actionId: string, event?: AXClickEvent | MouseEvent, initialFiles?: File[]): Promise<void>;
|
|
@@ -1788,6 +1946,8 @@ declare class AXConversationContainerComponent {
|
|
|
1788
1946
|
private readonly actionSheetService;
|
|
1789
1947
|
private readonly hostRef;
|
|
1790
1948
|
private readonly platformId;
|
|
1949
|
+
private readonly document;
|
|
1950
|
+
private readonly destroyRef;
|
|
1791
1951
|
protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
|
|
1792
1952
|
constructor();
|
|
1793
1953
|
private get registry();
|
|
@@ -1802,11 +1962,7 @@ declare class AXConversationContainerComponent {
|
|
|
1802
1962
|
/** Container CSS classes */
|
|
1803
1963
|
readonly containerClasses: _angular_core.Signal<string>;
|
|
1804
1964
|
closeActiveConversation(): void;
|
|
1805
|
-
|
|
1806
|
-
* When the user pastes files copied from the OS (e.g. Ctrl+V after copying in Explorer),
|
|
1807
|
-
* open the same composer picker popup used for message-list drag-and-drop.
|
|
1808
|
-
*/
|
|
1809
|
-
onDocumentPaste(event: ClipboardEvent): Promise<void>;
|
|
1965
|
+
private openPastedFiles;
|
|
1810
1966
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerComponent, never>;
|
|
1811
1967
|
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>;
|
|
1812
1968
|
}
|
|
@@ -1817,6 +1973,8 @@ declare class AXConversationContainerDirective {
|
|
|
1817
1973
|
private readonly fileService;
|
|
1818
1974
|
private readonly hostRef;
|
|
1819
1975
|
private readonly platformId;
|
|
1976
|
+
private readonly document;
|
|
1977
|
+
private readonly destroyRef;
|
|
1820
1978
|
private readonly translation;
|
|
1821
1979
|
private readonly toast;
|
|
1822
1980
|
private readonly platform;
|
|
@@ -1831,7 +1989,7 @@ declare class AXConversationContainerDirective {
|
|
|
1831
1989
|
/** Error state */
|
|
1832
1990
|
readonly error: _angular_core.Signal<Error>;
|
|
1833
1991
|
closeActiveConversation(): void;
|
|
1834
|
-
|
|
1992
|
+
private openPastedFiles;
|
|
1835
1993
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationContainerDirective, never>;
|
|
1836
1994
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationContainerDirective, "[axConversationContainer]", never, {}, {}, never, never, true, never>;
|
|
1837
1995
|
}
|
|
@@ -1858,6 +2016,7 @@ declare class AXConversationInfoBarComponent {
|
|
|
1858
2016
|
readonly activeConversation: _angular_core.Signal<AXConversation>;
|
|
1859
2017
|
readonly activeComponent: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveComponent>;
|
|
1860
2018
|
readonly activeBanner: _angular_core.Signal<_acorex_components_conversation.AXConversationInfoBarActiveBanner>;
|
|
2019
|
+
readonly bannerInputs: _angular_core.Signal<{}>;
|
|
1861
2020
|
readonly membersPopoverTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
1862
2021
|
readonly actionLoading: _angular_core.WritableSignal<boolean>;
|
|
1863
2022
|
readonly infoClick: _angular_core.OutputEmitterRef<void>;
|
|
@@ -1868,6 +2027,7 @@ declare class AXConversationInfoBarComponent {
|
|
|
1868
2027
|
readonly menuItems: _angular_core.Signal<AXConversationDropdownMenuItem[]>;
|
|
1869
2028
|
getStatus(conversation: AXConversation): _acorex_components_conversation.AXConversationPresenceStatus;
|
|
1870
2029
|
getSubtitle(conversation: AXConversation): string;
|
|
2030
|
+
isTyping(conversation: AXConversation): boolean;
|
|
1871
2031
|
onInfoLeftClick(): void;
|
|
1872
2032
|
onInlineActionClick(actionId: string): Promise<void>;
|
|
1873
2033
|
private activateAction;
|
|
@@ -1875,7 +2035,6 @@ declare class AXConversationInfoBarComponent {
|
|
|
1875
2035
|
getInlineComponentInputs(): Record<string, unknown>;
|
|
1876
2036
|
isActiveComponentFullWidth(): boolean;
|
|
1877
2037
|
onCloseComponent(): void;
|
|
1878
|
-
getBannerInputs(): Record<string, unknown>;
|
|
1879
2038
|
onCloseBanner(): void;
|
|
1880
2039
|
onMenuItemClick(item: AXConversationDropdownMenuItem): Promise<void>;
|
|
1881
2040
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfoBarComponent, never>;
|
|
@@ -1976,7 +2135,7 @@ declare class AXConversationApiLoggerService {
|
|
|
1976
2135
|
private readonly config;
|
|
1977
2136
|
log(entry: AXConversationApiLogEntry): void;
|
|
1978
2137
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationApiLoggerService, never>;
|
|
1979
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
2138
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
1980
2139
|
}
|
|
1981
2140
|
|
|
1982
2141
|
/**
|
|
@@ -2026,6 +2185,18 @@ interface AXConversationUpdateData {
|
|
|
2026
2185
|
/** Custom metadata */
|
|
2027
2186
|
metadata?: Record<string, unknown>;
|
|
2028
2187
|
}
|
|
2188
|
+
/**
|
|
2189
|
+
* Options for {@link AXConversationApi.deleteConversation}.
|
|
2190
|
+
*/
|
|
2191
|
+
interface AXConversationDeleteOptions {
|
|
2192
|
+
/**
|
|
2193
|
+
* Private: destroy the chat for every participant (Telegram "delete for both").
|
|
2194
|
+
* Bot: always delete for both sides.
|
|
2195
|
+
* Group/channel: only valid for the creator — destroys the room for everyone.
|
|
2196
|
+
* Defaults to `false` (hide / clear history for the current user only).
|
|
2197
|
+
*/
|
|
2198
|
+
forEveryone?: boolean;
|
|
2199
|
+
}
|
|
2029
2200
|
/**
|
|
2030
2201
|
* Conversation filter options
|
|
2031
2202
|
*/
|
|
@@ -2116,12 +2287,14 @@ declare abstract class AXConversationApi {
|
|
|
2116
2287
|
*/
|
|
2117
2288
|
abstract updateConversation(conversationId: string, updates: AXConversationUpdateData): Promise<AXConversation>;
|
|
2118
2289
|
/**
|
|
2119
|
-
* Delete conversation
|
|
2290
|
+
* Delete or hide a conversation for the current user.
|
|
2120
2291
|
*
|
|
2121
2292
|
* @param conversationId - Conversation ID
|
|
2293
|
+
* @param options - `forEveryone` destroys the room; omit/false hides it for the current user only
|
|
2294
|
+
* (private chats keep the peer's history). Group/channel leave should use {@link leaveConversation}.
|
|
2122
2295
|
* @throws {AXConversationApiError} If deletion fails
|
|
2123
2296
|
*/
|
|
2124
|
-
abstract deleteConversation(conversationId: string): Promise<boolean>;
|
|
2297
|
+
abstract deleteConversation(conversationId: string, options?: AXConversationDeleteOptions): Promise<boolean>;
|
|
2125
2298
|
/**
|
|
2126
2299
|
* Archive conversation
|
|
2127
2300
|
*
|
|
@@ -2984,7 +3157,7 @@ declare class AXConversationComposerGenerationStateService {
|
|
|
2984
3157
|
/** User requested cancel — enters `stopping` until {@link setGenerating}(false) is called. */
|
|
2985
3158
|
cancel(): void;
|
|
2986
3159
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerGenerationStateService, never>;
|
|
2987
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
3160
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
2988
3161
|
}
|
|
2989
3162
|
|
|
2990
3163
|
/**
|
|
@@ -3014,7 +3187,7 @@ declare class AXConversationRegistryService {
|
|
|
3014
3187
|
*/
|
|
3015
3188
|
clearAll(): void;
|
|
3016
3189
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryService, never>;
|
|
3017
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
3190
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
3018
3191
|
}
|
|
3019
3192
|
|
|
3020
3193
|
/** Result of loading a message page (newest-first APIs, merged ascending in the store). */
|
|
@@ -3034,7 +3207,10 @@ interface AXConversationLoadMessagesResult {
|
|
|
3034
3207
|
* - Automatic rollback on failures
|
|
3035
3208
|
*/
|
|
3036
3209
|
declare class AXConversationService {
|
|
3210
|
+
private static readonly createDisplayMetadataKeys;
|
|
3037
3211
|
private static normalizeOptionalString;
|
|
3212
|
+
/** Keep flags like `reactionsEnabled`; drop display fields already mapped onto the conversation. */
|
|
3213
|
+
private static toPersistedConversationMetadata;
|
|
3038
3214
|
private readonly config;
|
|
3039
3215
|
private readonly state;
|
|
3040
3216
|
readonly userApi: AXConversationUserApi;
|
|
@@ -3269,10 +3445,17 @@ declare class AXConversationService {
|
|
|
3269
3445
|
* Handle new message received
|
|
3270
3446
|
*/
|
|
3271
3447
|
private handleNewMessage;
|
|
3448
|
+
private applyIncomingMessage;
|
|
3272
3449
|
/**
|
|
3273
3450
|
* Handle message update
|
|
3274
3451
|
*/
|
|
3275
3452
|
private handleMessageUpdate;
|
|
3453
|
+
/**
|
|
3454
|
+
* After a local text edit, entity cache / status persist can echo the pre-edit payload.
|
|
3455
|
+
* Keep the newer local bubble until a strictly newer edit arrives.
|
|
3456
|
+
*/
|
|
3457
|
+
private preferLocalEditedPayload;
|
|
3458
|
+
private readTextPayload;
|
|
3276
3459
|
/**
|
|
3277
3460
|
* Bump reply/forward counts locally when realtime events arrive outside the active message list.
|
|
3278
3461
|
*/
|
|
@@ -3297,6 +3480,7 @@ declare class AXConversationService {
|
|
|
3297
3480
|
private handleConversationUpdate;
|
|
3298
3481
|
private handleConversationCreated;
|
|
3299
3482
|
private handleConversationDeleted;
|
|
3483
|
+
private removeConversationFromInbox;
|
|
3300
3484
|
private handleReadReceipt;
|
|
3301
3485
|
private handleMessageStatusChange;
|
|
3302
3486
|
/**
|
|
@@ -3367,11 +3551,12 @@ declare class AXConversationService {
|
|
|
3367
3551
|
*/
|
|
3368
3552
|
markConversationAsRead(conversationId: string): Promise<void>;
|
|
3369
3553
|
/**
|
|
3370
|
-
* Delete a conversation
|
|
3371
|
-
*
|
|
3372
|
-
*
|
|
3554
|
+
* Delete, hide, or leave a conversation.
|
|
3555
|
+
* Opens a confirmation popup (checkbox for private/creator destroy), then updates the store.
|
|
3556
|
+
* Bot chats skip the prompt and always delete for both sides.
|
|
3373
3557
|
*/
|
|
3374
3558
|
deleteConversation(conversationId: string): Promise<boolean>;
|
|
3559
|
+
private performDeleteConversation;
|
|
3375
3560
|
/**
|
|
3376
3561
|
* Get reply count for a message
|
|
3377
3562
|
* @param messageId - Message ID
|
|
@@ -3529,7 +3714,7 @@ declare class AXConversationService {
|
|
|
3529
3714
|
*/
|
|
3530
3715
|
private validateMessageContent;
|
|
3531
3716
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationService, never>;
|
|
3532
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
3717
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
3533
3718
|
}
|
|
3534
3719
|
|
|
3535
3720
|
/**
|
|
@@ -3644,12 +3829,16 @@ declare class AXConversationErrorHandlerService {
|
|
|
3644
3829
|
*/
|
|
3645
3830
|
private delay;
|
|
3646
3831
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationErrorHandlerService, never>;
|
|
3647
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
3832
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
3648
3833
|
}
|
|
3649
3834
|
|
|
3650
|
-
declare class AXConversationForwardMessageDialogComponent
|
|
3835
|
+
declare class AXConversationForwardMessageDialogComponent {
|
|
3651
3836
|
private readonly toastService;
|
|
3652
3837
|
private readonly translation;
|
|
3838
|
+
private readonly config;
|
|
3839
|
+
private readonly destroyRef;
|
|
3840
|
+
private searchDebounceTimer?;
|
|
3841
|
+
constructor();
|
|
3653
3842
|
/**
|
|
3654
3843
|
* Set by {@link AXPopupComponent} when opened via {@link AXPopupService} so the shell title can update.
|
|
3655
3844
|
*/
|
|
@@ -3662,20 +3851,26 @@ declare class AXConversationForwardMessageDialogComponent implements OnInit {
|
|
|
3662
3851
|
/** Assigned from `open(..., { data: { message } })`. */
|
|
3663
3852
|
message: AXConversationMessage;
|
|
3664
3853
|
readonly onClosed: EventEmitter<AXComponentCloseEvent>;
|
|
3665
|
-
readonly
|
|
3854
|
+
readonly availableUsers: _angular_core.WritableSignal<AXConversationParticipant[]>;
|
|
3666
3855
|
readonly forwardSearchQuery: _angular_core.WritableSignal<string>;
|
|
3667
|
-
readonly
|
|
3856
|
+
readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
|
|
3668
3857
|
readonly forwardListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
3858
|
+
readonly forwardListLoadingTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
3669
3859
|
readonly forwardList: _angular_core.Signal<AXListComponent>;
|
|
3670
3860
|
readonly forwardListDataSource: AXDataSource<unknown>;
|
|
3671
3861
|
readonly isForwarding: _angular_core.Signal<boolean>;
|
|
3672
3862
|
readonly canForward: _angular_core.Signal<boolean>;
|
|
3673
3863
|
private readonly _syncPopupTitleEffect;
|
|
3674
|
-
ngOnInit(): void;
|
|
3675
3864
|
onForwardSearchChange(value: string): void;
|
|
3676
|
-
|
|
3677
|
-
isSelected(
|
|
3678
|
-
private
|
|
3865
|
+
userFromItem(item: unknown): AXConversationParticipant | null;
|
|
3866
|
+
isSelected(userId: string): boolean;
|
|
3867
|
+
private mergeUsersCache;
|
|
3868
|
+
private seedUsersFromConversations;
|
|
3869
|
+
private loadUsersForForward;
|
|
3870
|
+
private getSortedUsersForForward;
|
|
3871
|
+
private isExcludedUser;
|
|
3872
|
+
private getExcludedUserIds;
|
|
3873
|
+
private resolveConversationIdForUser;
|
|
3679
3874
|
onCancel(): void;
|
|
3680
3875
|
onForward(): Promise<void>;
|
|
3681
3876
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationForwardMessageDialogComponent, never>;
|
|
@@ -3693,289 +3888,311 @@ declare class AXConversationMessageListNoActiveDefaultComponent {
|
|
|
3693
3888
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMessageListNoActiveDefaultComponent, "ax-conversation-message-list-no-active-default", never, {}, {}, never, never, true, never>;
|
|
3694
3889
|
}
|
|
3695
3890
|
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3891
|
+
interface AXConversationAvatarDisplay {
|
|
3892
|
+
name: string;
|
|
3893
|
+
avatar?: string;
|
|
3894
|
+
icon?: string;
|
|
3895
|
+
}
|
|
3896
|
+
/** Conversation types that resolve a single peer participant for viewer-scoped avatar/title. */
|
|
3897
|
+
declare const AX_CONVERSATION_PEER_AVATAR_TYPES: ReadonlySet<AXConversationType>;
|
|
3898
|
+
/**
|
|
3899
|
+
* Other participant in a peer-scoped conversation (excludes the current viewer).
|
|
3900
|
+
* Applies to private 1:1 and bot assist chats with exactly one non-viewer participant.
|
|
3901
|
+
*/
|
|
3902
|
+
declare function resolveConversationPeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
|
|
3903
|
+
/** Other participant in a private chat (excludes the current user). */
|
|
3904
|
+
declare function resolvePrivatePeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
|
|
3905
|
+
/** Peer participant for private and bot conversations. */
|
|
3906
|
+
declare function resolveConversationPeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
3907
|
+
/** Whether `auto` kind should render a registered user avatar for this conversation. */
|
|
3908
|
+
declare function shouldUseUserAvatarForConversation(conversation: AXConversation, currentUserId?: string): boolean;
|
|
3909
|
+
declare function resolveUserAvatarDisplay(userId: string, conversation: AXConversation | undefined, message?: AXConversationMessage): AXConversationAvatarDisplay;
|
|
3910
|
+
declare function resolveConversationAvatarDisplay(conversation: AXConversation, currentUserId?: string): AXConversationAvatarDisplay;
|
|
3911
|
+
|
|
3912
|
+
interface AXConversationMessageListBackgroundPreset {
|
|
3913
|
+
id: string;
|
|
3914
|
+
value: AXConversationMessageListThemeBackground;
|
|
3915
|
+
}
|
|
3916
|
+
/** Library default when no per-conversation or global background is set (pattern-5 tile + gradient wash). */
|
|
3917
|
+
declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND: AXConversationMessageListThemeBackground;
|
|
3918
|
+
/** Predefined chat-area backgrounds for the info panel (light + dark variants). */
|
|
3919
|
+
declare const AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS: AXConversationMessageListBackgroundPreset[];
|
|
3920
|
+
declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID = "solid-default";
|
|
3921
|
+
|
|
3922
|
+
/** Subtle Telegram-style chat-area wash when `messageListBackground` is not set (theme-aware). */
|
|
3923
|
+
declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND: string;
|
|
3924
|
+
declare function isMessageListThemeBackground(value: unknown): value is AXConversationMessageListThemeBackground;
|
|
3925
|
+
/** Pick the raw CSS string for the active theme; `undefined` when unset. */
|
|
3926
|
+
declare function resolveMessageListBackgroundRaw(value: AXConversationMessageListBackground | undefined, isDark: boolean): string | undefined;
|
|
3927
|
+
/** Turn bare `https://...` or `/path` into valid CSS `background` for images. */
|
|
3928
|
+
declare function normalizeMessageListBackgroundValue(raw: string): string;
|
|
3929
|
+
/** Whether the built-in pattern-5 wallpaper (gradient + tiled SVG) should be used. */
|
|
3930
|
+
declare function usesDefaultMessageListWallpaper(value: AXConversationMessageListBackground | undefined): boolean;
|
|
3931
|
+
/** Resolve config/metadata background for the active theme, with library default fallback. */
|
|
3932
|
+
declare function resolveMessageListBackgroundStyle(value: AXConversationMessageListBackground | undefined, isDark: boolean): string;
|
|
3933
|
+
/** Whether two stored backgrounds represent the same preset (supports legacy string values). */
|
|
3934
|
+
declare function isSameMessageListBackground(a: AXConversationMessageListBackground | undefined, b: AXConversationMessageListThemeBackground, isDark: boolean): boolean;
|
|
3935
|
+
|
|
3936
|
+
interface AXConversationForwardUserSortEntry {
|
|
3937
|
+
user: AXConversationParticipant;
|
|
3938
|
+
conversation?: AXConversation;
|
|
3939
|
+
}
|
|
3940
|
+
/** Default Font Awesome icon for group conversations without a custom avatar image. */
|
|
3941
|
+
declare const AX_CONVERSATION_DEFAULT_GROUP_ICON = "fa-light fa-users";
|
|
3942
|
+
/** Default Font Awesome icon for private/bot conversations without a custom avatar image. */
|
|
3943
|
+
declare const AX_CONVERSATION_DEFAULT_USER_ICON = "fa-light fa-user";
|
|
3944
|
+
/** True when the stored title is a placeholder, not a user-defined name. */
|
|
3945
|
+
declare function isGenericPrivateConversationTitle(title: string | undefined): boolean;
|
|
3946
|
+
/**
|
|
3947
|
+
* Find an existing private 1:1 conversation between the current user and a peer.
|
|
3948
|
+
* Matches conversations with exactly those two participants.
|
|
3949
|
+
*/
|
|
3950
|
+
declare function findExistingPrivateConversation(conversations: AXConversation[], currentUserId: string, peerUserId: string): AXConversation | undefined;
|
|
3951
|
+
/**
|
|
3952
|
+
* Sort users for forward picker: existing private chats first (most recent on top), then others by name.
|
|
3953
|
+
*/
|
|
3954
|
+
declare function sortUsersForForward(users: AXConversationParticipant[], conversations: AXConversation[], currentUserId: string): AXConversationParticipant[];
|
|
3955
|
+
/** Other participant in a private 1v1 chat (excludes the current viewer). */
|
|
3956
|
+
declare function resolvePrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
3957
|
+
/**
|
|
3958
|
+
* Resolves the display title for the current viewer.
|
|
3959
|
+
* Private and bot peer-scoped chats show the other participant's name when no custom title is set.
|
|
3960
|
+
*/
|
|
3961
|
+
declare function resolveConversationTitleForViewer(conversation: AXConversation, currentUserId?: string): string;
|
|
3962
|
+
/**
|
|
3963
|
+
* Returns a viewer-scoped copy of a conversation with dynamic peer title/avatar/icon.
|
|
3964
|
+
* Does not mutate the source object.
|
|
3965
|
+
*/
|
|
3966
|
+
declare function resolveConversationForViewer(conversation: AXConversation, currentUserId?: string): AXConversation;
|
|
3967
|
+
/**
|
|
3968
|
+
* Whether message reactions are enabled for a conversation.
|
|
3969
|
+
* `metadata.reactionsEnabled` wins when set; otherwise `bot` chats default to off.
|
|
3970
|
+
*/
|
|
3971
|
+
declare function isConversationReactionsEnabled(conversation?: AXConversation | null): boolean;
|
|
3972
|
+
/**
|
|
3973
|
+
* How file attachments are shown in the composer.
|
|
3974
|
+
* `metadata.composerAttachmentPresentation` wins when set; otherwise `bot` chats use `banner`.
|
|
3975
|
+
*/
|
|
3976
|
+
declare function resolveComposerAttachmentPresentation(conversation?: AXConversation | null): AXConversationComposerAttachmentPresentation;
|
|
3977
|
+
declare function isComposerAttachmentBannerEnabled(conversation?: AXConversation | null): boolean;
|
|
3978
|
+
|
|
3979
|
+
/** Group and channel rooms share join/leave and creator-destroy rules. */
|
|
3980
|
+
declare function isGroupLikeConversation(conversationOrType: AXConversation | AXConversationType | undefined): boolean;
|
|
3981
|
+
/** True when `userId` created this room (falls back to owner/admin if `creatorId` is missing). */
|
|
3982
|
+
declare function isConversationRoomCreator(conversation: AXConversation, userId?: string): boolean;
|
|
3983
|
+
/** Earliest joiner; stable tie-break by participant id. */
|
|
3984
|
+
declare function pickEarliestJoinedParticipant(participants: AXConversationParticipant[]): AXConversationParticipant | undefined;
|
|
3985
|
+
/**
|
|
3986
|
+
* Whether a message should appear for a viewer after a one-sided history clear.
|
|
3987
|
+
* Exclusive: the cutoff instant itself is hidden (cleared "up to now").
|
|
3988
|
+
*/
|
|
3989
|
+
declare function isMessageVisibleAfterHistoryCutoff(timestamp: Date | string | number, historyClearedAt?: Date | string | number | null): boolean;
|
|
3990
|
+
|
|
3991
|
+
/** Resolves typed `profile`, falling back to legacy `metadata.profile`. */
|
|
3992
|
+
declare function resolveParticipantProfile(participant?: AXConversationParticipant): AXConversationUserProfile;
|
|
3993
|
+
|
|
3994
|
+
type AXConversationDateSeparatorKind = 'today' | 'yesterday' | 'other';
|
|
3995
|
+
declare class AXConversationDateUtilsService {
|
|
3708
3996
|
/**
|
|
3709
|
-
*
|
|
3710
|
-
* Set `messageListBackground` to `transparent` or `none` for a flat look.
|
|
3711
|
-
* Supports `{ light, dark }` for theme-specific backgrounds.
|
|
3997
|
+
* Format relative time (e.g., "2m ago", "1h ago")
|
|
3712
3998
|
*/
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
resolvedEmptyStateComponent(): Type<AXConversationMessageListEmptyComponent>;
|
|
3717
|
-
/** Fallback when no conversation is active and no `ax-conversation-message-list-no-active` content is projected. */
|
|
3718
|
-
protected readonly noActiveFallbackComponent: typeof AXConversationMessageListNoActiveDefaultComponent;
|
|
3719
|
-
private readonly timeouts;
|
|
3720
|
-
readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
|
|
3721
|
-
readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
|
|
3722
|
-
readonly reactionPickerPlacement: _angular_core.WritableSignal<AXPlacement>;
|
|
3723
|
-
readonly reactionPopover: _angular_core.Signal<any>;
|
|
3724
|
-
/** Message id whose context menu is open (for active row styling). */
|
|
3725
|
-
readonly contextMenuMessageId: _angular_core.WritableSignal<string>;
|
|
3726
|
-
/** True while files are dragged over the message list drop zone. */
|
|
3727
|
-
readonly messageListDragging: _angular_core.WritableSignal<boolean>;
|
|
3728
|
-
/** True when the message list uses single-column adaptive layout (matches CSS container query). */
|
|
3729
|
-
readonly isAdaptiveWideLayout: _angular_core.WritableSignal<boolean>;
|
|
3730
|
-
/** While true, older history is being prepended — do not auto-scroll to the latest message. */
|
|
3731
|
-
private restoringScrollAfterPrepend;
|
|
3732
|
-
private adaptiveLayoutResizeObserver?;
|
|
3733
|
-
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
3734
|
-
private reactionsLoading;
|
|
3735
|
-
private get registry();
|
|
3736
|
-
/** Message list element reference */
|
|
3737
|
-
private readonly messageListRef;
|
|
3738
|
-
/** Messages container element reference */
|
|
3739
|
-
private readonly messagesContainerRef;
|
|
3740
|
-
/** Loading state - use service */
|
|
3741
|
-
readonly loading: _angular_core.Signal<boolean>;
|
|
3742
|
-
/** Loading more messages state - use service */
|
|
3743
|
-
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
3744
|
-
/** Whether older messages remain on the server */
|
|
3745
|
-
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
3746
|
-
/** Show scroll to bottom button - use service */
|
|
3747
|
-
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
3748
|
-
/** Active conversation */
|
|
3749
|
-
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
3750
|
-
readonly isGroupConversation: _angular_core.Signal<boolean>;
|
|
3751
|
-
/** Placeholder indices for the initial message list skeleton. */
|
|
3752
|
-
protected readonly loadingSkeletonItems: readonly [0, 1, 2, 3, 4, 5];
|
|
3753
|
-
/** Whether the active conversation allows message reactions. */
|
|
3754
|
-
readonly reactionsEnabled: _angular_core.Signal<boolean>;
|
|
3755
|
-
/** Messages */
|
|
3756
|
-
readonly messages: _angular_core.Signal<AXConversationMessage[]>;
|
|
3757
|
-
/** Message action event */
|
|
3758
|
-
readonly messageAction: _angular_core.OutputEmitterRef<{
|
|
3759
|
-
message: AXConversationMessage;
|
|
3760
|
-
action: string;
|
|
3761
|
-
}>;
|
|
3762
|
-
/** Current user from service */
|
|
3763
|
-
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
|
|
3764
|
-
/** Message grouped by date - use service */
|
|
3765
|
-
readonly messageGroups: _angular_core.Signal<{
|
|
3766
|
-
date: string;
|
|
3767
|
-
dateLabel: string;
|
|
3768
|
-
messages: AXConversationMessage[];
|
|
3769
|
-
}[]>;
|
|
3770
|
-
constructor();
|
|
3771
|
-
private intersectionObserver?;
|
|
3772
|
-
private readonly readIntersectionObserver;
|
|
3773
|
-
private readonly observedReadMessageIds;
|
|
3999
|
+
static formatRelativeTime(date: Date): string;
|
|
4000
|
+
/** Resolve whether a message date should show Today, Yesterday, or a formatted date. */
|
|
4001
|
+
static getDateSeparatorKind(date: Date): AXConversationDateSeparatorKind;
|
|
3774
4002
|
/**
|
|
3775
|
-
*
|
|
4003
|
+
* Format date label for non-relative separators (localized calendar date).
|
|
3776
4004
|
*/
|
|
3777
|
-
|
|
4005
|
+
static formatDateLabel(date: Date, locale?: string): string;
|
|
3778
4006
|
/**
|
|
3779
|
-
*
|
|
4007
|
+
* Check if two dates are the same day
|
|
3780
4008
|
*/
|
|
3781
|
-
|
|
3782
|
-
/** Get message CSS classes */
|
|
3783
|
-
getMessageClasses(message: AXConversationMessage): string;
|
|
3784
|
-
/** Get bubble CSS classes */
|
|
3785
|
-
getBubbleClasses(message: AXConversationMessage): string;
|
|
3786
|
-
/** Check if message is from current user */
|
|
3787
|
-
isOwnMessage(message: AXConversationMessage): boolean;
|
|
3788
|
-
/** Whether the avatar slot is rendered (visibility is CSS-controlled per layout mode). */
|
|
3789
|
-
shouldRenderAvatar(message: AXConversationMessage): boolean;
|
|
3790
|
-
/** Should show sender name */
|
|
3791
|
-
shouldShowSenderName(message: AXConversationMessage): boolean;
|
|
3792
|
-
/** Get sender name */
|
|
3793
|
-
getSenderName(message: AXConversationMessage): string;
|
|
3794
|
-
/** Get original sender name for forwarded messages */
|
|
3795
|
-
getOriginalSenderName(message: AXConversationMessage): string;
|
|
3796
|
-
/** Get forwarded text with sender and conversation info */
|
|
3797
|
-
getForwardedText(message: AXConversationMessage): string;
|
|
3798
|
-
/** Resolve renderer component for message */
|
|
3799
|
-
getRendererComponent(message: AXConversationMessage): Type<_acorex_components_conversation.AXConversationMessageRendererComponent>;
|
|
3800
|
-
/** Resolve lazy renderer loader for message */
|
|
3801
|
-
private static readonly fallbackRendererLoader;
|
|
3802
|
-
getRendererComponentLoader(message: AXConversationMessage): (() => Promise<Type<_acorex_components_conversation.AXConversationMessageRendererComponent>>) | (() => Promise<typeof _acorex_components_conversation.AXConversationFallbackRendererComponent>);
|
|
3803
|
-
/** Provide inputs for the dynamic renderer */
|
|
3804
|
-
getRendererInputs(message: AXConversationMessage): {
|
|
3805
|
-
message: AXConversationMessage;
|
|
3806
|
-
};
|
|
3807
|
-
/** Get status icon */
|
|
3808
|
-
getStatusIcon(message: AXConversationMessage): string;
|
|
3809
|
-
/** Get status icon CSS classes */
|
|
3810
|
-
getStatusIconClasses(message: AXConversationMessage): string;
|
|
3811
|
-
/** Get status tooltip text */
|
|
3812
|
-
getStatusTooltip(message: AXConversationMessage): string;
|
|
3813
|
-
/** Get first unread message ID */
|
|
3814
|
-
readonly firstUnreadMessageId: _angular_core.Signal<string>;
|
|
3815
|
-
/** Get grouped reactions */
|
|
3816
|
-
getGroupedReactions(message: AXConversationMessage): Array<{
|
|
3817
|
-
emoji: string;
|
|
3818
|
-
count: number;
|
|
3819
|
-
userIds: string[];
|
|
3820
|
-
hasReacted: boolean;
|
|
3821
|
-
}>;
|
|
3822
|
-
/** Get reaction tooltip text */
|
|
3823
|
-
getReactionTooltip(reaction: {
|
|
3824
|
-
emoji: string;
|
|
3825
|
-
count: number;
|
|
3826
|
-
userIds: string[];
|
|
3827
|
-
hasReacted: boolean;
|
|
3828
|
-
}): string;
|
|
3829
|
-
/** Whether reactions can be shown or added for a message in the active conversation. */
|
|
3830
|
-
messageSupportsReactions(message: AXConversationMessage): boolean;
|
|
3831
|
-
/** Toggle reaction picker */
|
|
3832
|
-
toggleReactionPicker(message: AXConversationMessage, event: MouseEvent): void;
|
|
3833
|
-
/** Close reaction picker */
|
|
3834
|
-
closeReactionPicker(): void;
|
|
3835
|
-
/** Check if current user has reacted with specific emoji */
|
|
3836
|
-
hasUserReacted(message: AXConversationMessage, emoji: string): boolean;
|
|
3837
|
-
/** Check if current user has reacted with specific emoji by message ID */
|
|
3838
|
-
hasUserReactedById(messageId: string, emoji: string): boolean;
|
|
3839
|
-
/** Handle reaction click by message ID */
|
|
3840
|
-
onReactionClickById(messageId: string, emoji: string): void;
|
|
3841
|
-
/** Get message by ID */
|
|
3842
|
-
getMessageById(messageId: string): AXConversationMessage | undefined;
|
|
3843
|
-
/** Load available reactions when the picker is opened (session-cached in service). */
|
|
3844
|
-
private ensureAvailableReactions;
|
|
3845
|
-
/** Get message actions from registry */
|
|
3846
|
-
getMessageActions(message: AXConversationMessage): _acorex_components_conversation.AXConversationMessageAction[];
|
|
3847
|
-
/** Handle reaction click */
|
|
3848
|
-
onReactionClick(message: AXConversationMessage, emoji: string): void;
|
|
3849
|
-
/** Handle message action */
|
|
3850
|
-
onMessageAction(message: AXConversationMessage, action: any): Promise<void>;
|
|
3851
|
-
/** Handle scroll events */
|
|
3852
|
-
onScroll(event: Event): void;
|
|
3853
|
-
/** Handle infinite scroll threshold */
|
|
3854
|
-
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
3855
|
-
/** Load older messages - delegate to service and preserve scroll anchor */
|
|
3856
|
-
private loadOlderMessages;
|
|
4009
|
+
static isSameDay(date1: Date, date2: Date): boolean;
|
|
3857
4010
|
/**
|
|
3858
|
-
*
|
|
4011
|
+
* Get date key for grouping (YYYY-MM-DD)
|
|
3859
4012
|
*/
|
|
3860
|
-
|
|
3861
|
-
/** Check if user is near bottom of scroll */
|
|
3862
|
-
private isUserNearBottom;
|
|
4013
|
+
static getDateKey(date: Date): string;
|
|
3863
4014
|
/**
|
|
3864
|
-
*
|
|
3865
|
-
* Poll with rAF until the feed exists, then scroll after double rAF so scrollHeight is stable.
|
|
4015
|
+
* Format time (HH:MM)
|
|
3866
4016
|
*/
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
4017
|
+
static formatTime(date: Date): string;
|
|
4018
|
+
}
|
|
4019
|
+
|
|
4020
|
+
/**
|
|
4021
|
+
* Message Utilities Service
|
|
4022
|
+
* Helper functions for message formatting and display
|
|
4023
|
+
*/
|
|
4024
|
+
|
|
4025
|
+
/** Position of a message inside a consecutive same-sender cluster (Telegram grouping). */
|
|
4026
|
+
type AXConversationMessageClusterRole = 'single' | 'start' | 'middle' | 'end';
|
|
4027
|
+
declare class AXConversationMessageUtilsService {
|
|
4028
|
+
static getInitials(name: string): string;
|
|
4029
|
+
static getMessageText(message: AXConversationMessage): string;
|
|
4030
|
+
static getPreviewText(message: AXConversationMessage, maxLength?: number): {
|
|
3876
4031
|
value: string;
|
|
3877
4032
|
type: string;
|
|
3878
4033
|
icon: string;
|
|
3879
4034
|
};
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
/**
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
static
|
|
3895
|
-
static
|
|
4035
|
+
static isOwnMessage(message: AXConversationMessage, currentUserId: string): boolean;
|
|
4036
|
+
static getSenderName(message: AXConversationMessage, conversation: AXConversation): string;
|
|
4037
|
+
static getSenderAvatar(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
4038
|
+
static getSenderAvatarIcon(message: AXConversationMessage, conversation: AXConversation): string | undefined;
|
|
4039
|
+
static getConversationAvatar(conversation: AXConversation): string | undefined;
|
|
4040
|
+
static getConversationAvatarIcon(conversation: AXConversation): string | undefined;
|
|
4041
|
+
static getConversationStatus(conversation: AXConversation, presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
|
|
4042
|
+
/** Consecutive same-sender messages within this window share one Telegram-style cluster. */
|
|
4043
|
+
static readonly MESSAGE_CLUSTER_MAX_GAP_MS: number;
|
|
4044
|
+
/** Palette of existing theme tokens used to color group sender names (not bubble chrome). */
|
|
4045
|
+
private static readonly SENDER_NAME_COLORS;
|
|
4046
|
+
static toTimestampMs(value: Date | string | number): number;
|
|
4047
|
+
static shouldGroupMessages(message: AXConversationMessage, previousMessage?: AXConversationMessage): boolean;
|
|
4048
|
+
static getMessageClusterRole(message: AXConversationMessage, previousMessage?: AXConversationMessage, nextMessage?: AXConversationMessage): AXConversationMessageClusterRole;
|
|
4049
|
+
static getSenderNameColor(senderId: string): string;
|
|
4050
|
+
static getUserPresenceStatus(presence?: AXConversationUserPresence): AXConversationPresenceStatus | undefined;
|
|
4051
|
+
static getTypingText(conversation: AXConversation, typingUserIds: string[]): string;
|
|
4052
|
+
static formatLastSeen(date: Date): string;
|
|
4053
|
+
static getPrivateChatSubtitle(conversation: AXConversation, presence?: AXConversationUserPresence, currentUserId?: string): string;
|
|
4054
|
+
static getConversationSubtitle(conversation: AXConversation, options?: {
|
|
4055
|
+
typingUserIds?: string[];
|
|
4056
|
+
peerPresence?: AXConversationUserPresence;
|
|
4057
|
+
currentUserId?: string;
|
|
4058
|
+
}): string;
|
|
3896
4059
|
}
|
|
3897
4060
|
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
4061
|
+
/**
|
|
4062
|
+
* Conversation feature flags for configurable bundle size.
|
|
4063
|
+
*/
|
|
4064
|
+
type AXConversationComposerTabFeature = 'emoji' | 'sticker';
|
|
4065
|
+
interface AXConversationFeatures {
|
|
4066
|
+
/** Enabled built-in composer popup tabs (`emoji`, `sticker`). Defaults to none when omitted. */
|
|
4067
|
+
composerTabs?: AXConversationComposerTabFeature[];
|
|
4068
|
+
}
|
|
4069
|
+
declare function resolveConversationComposerTabs(features?: AXConversationFeatures): readonly AXConversationComposerTabFeature[];
|
|
4070
|
+
declare function isComposerTabEnabled(tab: AXConversationComposerTabFeature, features?: AXConversationFeatures): boolean;
|
|
4071
|
+
|
|
4072
|
+
/**
|
|
4073
|
+
* Conversation Configuration Interface
|
|
4074
|
+
* Centralized configuration values to avoid magic numbers
|
|
4075
|
+
*/
|
|
4076
|
+
/**
|
|
4077
|
+
* Sidebar conversation tabs layout.
|
|
4078
|
+
* - `vertical`: horizontal tab strip above the conversation list.
|
|
4079
|
+
* - `horizontal`: vertical tab strip at inline-start beside the list (`ax-tabs` location `start`).
|
|
4080
|
+
*/
|
|
4081
|
+
type AXConversationSidebarTabsOrientation = 'vertical' | 'horizontal';
|
|
4082
|
+
/**
|
|
4083
|
+
* Main configuration interface for the conversation component
|
|
4084
|
+
*/
|
|
4085
|
+
interface AXConversationConfig {
|
|
4086
|
+
/** Number of messages to load per page */
|
|
4087
|
+
messagePageSize?: number;
|
|
4088
|
+
/** Number of conversations to load per page */
|
|
4089
|
+
conversationPageSize?: number;
|
|
4090
|
+
/** Scroll threshold for detecting scroll events */
|
|
4091
|
+
scrollThreshold?: number;
|
|
4092
|
+
/** Infinite scroll threshold */
|
|
4093
|
+
infiniteScrollThreshold?: number;
|
|
4094
|
+
/** Typing indicator timeout in milliseconds */
|
|
4095
|
+
typingIndicatorTimeout?: number;
|
|
4096
|
+
/** Typing indicator emit throttle in milliseconds while composing (default: 3000) */
|
|
4097
|
+
typingIndicatorThrottle?: number;
|
|
4098
|
+
/** How long to show received typing indicators in the UI (default: 4000) */
|
|
4099
|
+
typingDisplayDuration?: number;
|
|
4100
|
+
/** Message highlight duration in milliseconds */
|
|
4101
|
+
messageHighlightDuration?: number;
|
|
4102
|
+
/** Search debounce delay in milliseconds */
|
|
4103
|
+
debounceSearch?: number;
|
|
4104
|
+
/** Maximum messages per conversation */
|
|
4105
|
+
maxMessagesPerConversation?: number;
|
|
4106
|
+
/** Maximum total messages in store */
|
|
4107
|
+
maxTotalMessages?: number;
|
|
4108
|
+
/** Maximum cached conversations */
|
|
4109
|
+
maxCachedConversations?: number;
|
|
4110
|
+
/** Minimum sidebar width in pixels */
|
|
4111
|
+
minSidebarWidth?: number;
|
|
4112
|
+
/** Maximum sidebar width in pixels */
|
|
4113
|
+
maxSidebarWidth?: number;
|
|
4114
|
+
/** Default sidebar width in pixels */
|
|
4115
|
+
defaultSidebarWidth?: number;
|
|
3920
4116
|
/**
|
|
3921
|
-
*
|
|
4117
|
+
* Sidebar conversation tabs layout.
|
|
4118
|
+
* `vertical` places a horizontal tab strip above the list; `horizontal` places a vertical tab strip at inline-start beside the list.
|
|
3922
4119
|
*/
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
}[]>;
|
|
4120
|
+
sidebarTabsOrientation?: AXConversationSidebarTabsOrientation;
|
|
4121
|
+
/** Maximum message length in characters */
|
|
4122
|
+
maxMessageLength?: number;
|
|
4123
|
+
/** Minimum message length in characters */
|
|
4124
|
+
minMessageLength?: number;
|
|
4125
|
+
/** Max attachments per message when a composer action omits `maxFiles`. */
|
|
4126
|
+
maxFilesPerMessage?: number;
|
|
4127
|
+
/** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
|
|
4128
|
+
messageReadThreshold?: number;
|
|
4129
|
+
/** Debounce window (ms) before flushing batched read-receipt API calls (default: 3000) */
|
|
4130
|
+
messageReadDebounce?: number;
|
|
3935
4131
|
/**
|
|
3936
|
-
*
|
|
4132
|
+
* When true, marks the whole conversation as read once when it is selected (single API call).
|
|
4133
|
+
* Per-message intersection observer still handles new messages received while the chat is open.
|
|
3937
4134
|
*/
|
|
3938
|
-
|
|
4135
|
+
markConversationReadOnSelect?: boolean;
|
|
3939
4136
|
/**
|
|
3940
|
-
*
|
|
4137
|
+
* CSS `background` for the message list (`ax-conversation-message-list` area, all states: loading, empty, messages).
|
|
4138
|
+
* Use full shorthand, or a bare `https://...` / `/path/to.png` (wrapped as `url(...)` with `center/cover`).
|
|
4139
|
+
* Pass a string for the same value in both themes, or `{ light, dark }` for theme-specific backgrounds.
|
|
4140
|
+
* Empty string = Telegram-inspired theme-aware library default (`{ light, dark }`). `transparent` or `none` = flat background.
|
|
3941
4141
|
*/
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
requestScrollToBottom(): void;
|
|
3948
|
-
private buildCountMap;
|
|
3949
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageListService, never>;
|
|
3950
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXConversationMessageListService>;
|
|
3951
|
-
}
|
|
3952
|
-
|
|
3953
|
-
declare class AXConversationAvatarPickerComponent {
|
|
3954
|
-
readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
3955
|
-
readonly showClearButton: _angular_core.InputSignal<boolean>;
|
|
3956
|
-
readonly avatarUrl: _angular_core.ModelSignal<string>;
|
|
3957
|
-
readonly onFileSelected: _angular_core.OutputEmitterRef<string>;
|
|
3958
|
-
triggerFileInput(): void;
|
|
3959
|
-
onFileInputChange(event: Event): Promise<void>;
|
|
3960
|
-
clearAvatar(): void;
|
|
3961
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarPickerComponent, never>;
|
|
3962
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarPickerComponent, "ax-conversation-avatar-picker", never, { "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, { "avatarUrl": "avatarUrlChange"; "onFileSelected": "onFileSelected"; }, never, never, true, never>;
|
|
4142
|
+
messageListBackground?: AXConversationMessageListBackground;
|
|
4143
|
+
/** Optional feature flags to reduce bundle size per app. */
|
|
4144
|
+
features?: AXConversationFeatures;
|
|
4145
|
+
/** Log API calls made by AXConversationService to the console (default: false). */
|
|
4146
|
+
debugApiLogging?: boolean;
|
|
3963
4147
|
}
|
|
3964
4148
|
|
|
3965
4149
|
/**
|
|
3966
|
-
*
|
|
3967
|
-
*
|
|
3968
|
-
* When only `user` is registered, a built-in conversation avatar host is wired automatically.
|
|
4150
|
+
* Default Configuration Values
|
|
4151
|
+
* Centralized defaults to avoid magic numbers throughout the codebase
|
|
3969
4152
|
*/
|
|
3970
4153
|
|
|
3971
|
-
/**
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
4154
|
+
/**
|
|
4155
|
+
* Default conversation configuration
|
|
4156
|
+
* All values are explicitly defined here for easy maintenance and documentation
|
|
4157
|
+
*/
|
|
4158
|
+
declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
|
|
4159
|
+
/**
|
|
4160
|
+
* Helper function to merge user config with defaults
|
|
4161
|
+
* Properly handles array merging to avoid reference issues
|
|
4162
|
+
* @param userConfig - User-provided configuration
|
|
4163
|
+
* @returns Merged configuration with all required fields
|
|
4164
|
+
*/
|
|
4165
|
+
declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
|
|
4166
|
+
|
|
4167
|
+
/**
|
|
4168
|
+
* Dependency Injection Tokens
|
|
4169
|
+
* InjectionTokens for configuration and dependencies
|
|
4170
|
+
*/
|
|
4171
|
+
|
|
4172
|
+
/**
|
|
4173
|
+
* Configuration token for conversation component
|
|
4174
|
+
* Uses centralized defaults from AX_DEFAULT_CONVERSATION_CONFIG
|
|
4175
|
+
*/
|
|
4176
|
+
declare const AX_CONVERSATION_CONFIG: InjectionToken<Required<AXConversationConfig>>;
|
|
4177
|
+
/**
|
|
4178
|
+
* Token for configuring AXConversationErrorHandlerService
|
|
4179
|
+
*/
|
|
4180
|
+
declare const AX_CONVERSATION_ERROR_HANDLER_CONFIG: InjectionToken<Partial<AXConversationErrorHandlerConfig>>;
|
|
4181
|
+
|
|
4182
|
+
/**
|
|
4183
|
+
* Pluggable avatar components for the conversation UI.
|
|
4184
|
+
* Register via `provideConversation({ avatarComponents: { user, conversation } })`.
|
|
4185
|
+
* When only `user` is registered, a built-in conversation avatar host is wired automatically.
|
|
4186
|
+
*/
|
|
4187
|
+
|
|
4188
|
+
/** Custom user avatar (e.g. platform `axp-user-avatar`). */
|
|
4189
|
+
interface AXConversationUserAvatarComponent {
|
|
4190
|
+
readonly userId: InputSignal<string>;
|
|
4191
|
+
readonly size: InputSignal<number>;
|
|
4192
|
+
/** Optional resolved display name (e.g. bot/assist peer title). */
|
|
4193
|
+
readonly displayName?: InputSignal<string | undefined>;
|
|
4194
|
+
/** Optional resolved avatar URL when `userId` is not a platform user row. */
|
|
4195
|
+
readonly displayAvatar?: InputSignal<string | undefined>;
|
|
3979
4196
|
/** Optional icon class when no avatar image is available. */
|
|
3980
4197
|
readonly displayIcon?: InputSignal<string | undefined>;
|
|
3981
4198
|
}
|
|
@@ -3998,479 +4215,775 @@ interface AXConversationAvatarComponents {
|
|
|
3998
4215
|
conversation?: Type<AXConversationConversationAvatarComponent>;
|
|
3999
4216
|
}
|
|
4000
4217
|
|
|
4001
|
-
|
|
4002
|
-
|
|
4003
|
-
|
|
4004
|
-
|
|
4005
|
-
readonly kind: _angular_core.InputSignal<AXConversationAvatarKind>;
|
|
4006
|
-
readonly userId: _angular_core.InputSignal<string>;
|
|
4007
|
-
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4008
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
4009
|
-
readonly size: _angular_core.InputSignal<number>;
|
|
4010
|
-
readonly showStatus: _angular_core.InputSignal<boolean>;
|
|
4011
|
-
readonly name: _angular_core.InputSignal<string>;
|
|
4012
|
-
readonly avatar: _angular_core.InputSignal<string>;
|
|
4013
|
-
readonly icon: _angular_core.InputSignal<string>;
|
|
4014
|
-
private readonly currentUserId;
|
|
4015
|
-
readonly resolvedKind: _angular_core.Signal<"user" | "conversation">;
|
|
4016
|
-
readonly resolvedUserId: _angular_core.Signal<string>;
|
|
4017
|
-
readonly customComponent: _angular_core.Signal<Type<unknown>>;
|
|
4018
|
-
readonly customInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4019
|
-
readonly filteredCustomInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4020
|
-
readonly fallbackDisplay: _angular_core.Signal<{
|
|
4021
|
-
name: string;
|
|
4022
|
-
avatar: string;
|
|
4023
|
-
icon: string;
|
|
4024
|
-
}>;
|
|
4025
|
-
readonly fallbackInitials: _angular_core.Signal<string>;
|
|
4026
|
-
readonly resolvedStatus: _angular_core.Signal<_acorex_components_conversation.AXConversationPresenceStatus>;
|
|
4027
|
-
readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away" | "busy">;
|
|
4028
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarComponent, never>;
|
|
4029
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarComponent, "ax-conversation-avatar", never, { "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4030
|
-
}
|
|
4031
|
-
|
|
4032
|
-
interface AXConversationRegistryComponentRef {
|
|
4033
|
-
component?: Type<unknown>;
|
|
4034
|
-
componentLoader?: () => Promise<Type<unknown>>;
|
|
4035
|
-
}
|
|
4036
|
-
declare class AXConversationRegistryComponentOutletComponent {
|
|
4037
|
-
readonly component: _angular_core.InputSignal<Type<unknown>>;
|
|
4038
|
-
readonly componentLoader: _angular_core.InputSignal<() => Promise<Type<unknown>>>;
|
|
4039
|
-
readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
|
|
4040
|
-
readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
|
|
4041
|
-
/** Avoid re-loading when the parent re-binds the same lazy loader reference. */
|
|
4042
|
-
private activeLoader;
|
|
4043
|
-
constructor();
|
|
4044
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryComponentOutletComponent, never>;
|
|
4045
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationRegistryComponentOutletComponent, "ax-conversation-registry-component-outlet", never, { "component": { "alias": "component"; "required": false; "isSignal": true; }; "componentLoader": { "alias": "componentLoader"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4046
|
-
}
|
|
4047
|
-
/** Resolve a registry component reference, preferring lazy loaders when provided. */
|
|
4048
|
-
declare function hasRegistryComponent(ref?: AXConversationRegistryComponentRef): boolean;
|
|
4218
|
+
/**
|
|
4219
|
+
* Registry Configuration Tokens
|
|
4220
|
+
* Injection tokens for configuring default registry values
|
|
4221
|
+
*/
|
|
4049
4222
|
|
|
4050
|
-
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4223
|
+
/**
|
|
4224
|
+
* Additional message renderers configuration
|
|
4225
|
+
* Provide this token to add custom message renderers in addition to built-in ones
|
|
4226
|
+
* Note: Built-in renderers (text, system, fallback) are registered by default; other types are provided via plugins/constants.
|
|
4227
|
+
*/
|
|
4228
|
+
declare const AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS: InjectionToken<AXConversationMessageRenderer[]>;
|
|
4229
|
+
/**
|
|
4230
|
+
* Default message actions configuration
|
|
4231
|
+
* Provide this token to override default message actions
|
|
4232
|
+
*/
|
|
4233
|
+
declare const AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS: InjectionToken<AXConversationMessageAction[]>;
|
|
4234
|
+
/**
|
|
4235
|
+
* Default composer tabs configuration
|
|
4236
|
+
* Provide this token to override default composer tabs (emoji, stickers, etc.)
|
|
4237
|
+
*/
|
|
4238
|
+
declare const AX_CONVERSATION_DEFAULT_COMPOSER_TABS: InjectionToken<AXConversationComposerTab[]>;
|
|
4239
|
+
/**
|
|
4240
|
+
* Default composer actions configuration
|
|
4241
|
+
* Provide this token to override default composer actions (attach, voice, etc.)
|
|
4242
|
+
*/
|
|
4243
|
+
declare const AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS: InjectionToken<AXConversationComposerAction[]>;
|
|
4244
|
+
/**
|
|
4245
|
+
* Default conversation tabs configuration
|
|
4246
|
+
* Provide this token to override default conversation tabs (all, private, groups, etc.)
|
|
4247
|
+
*/
|
|
4248
|
+
declare const AX_CONVERSATION_DEFAULT_CONVERSATION_TABS: InjectionToken<AXConversationTab[]>;
|
|
4249
|
+
/**
|
|
4250
|
+
* Default info bar actions configuration
|
|
4251
|
+
* Provide this token to override default info bar actions (mute, archive, block, etc.)
|
|
4252
|
+
*/
|
|
4253
|
+
declare const AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS: InjectionToken<AXConversationInfoBarAction[]>;
|
|
4254
|
+
/**
|
|
4255
|
+
* Default conversation item actions configuration
|
|
4256
|
+
* Provide this token to override default conversation item actions (mute, delete, archive, etc.)
|
|
4257
|
+
*/
|
|
4258
|
+
declare const AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS: InjectionToken<AXConversationItemAction[]>;
|
|
4259
|
+
/**
|
|
4260
|
+
* Registry configuration interface
|
|
4261
|
+
*/
|
|
4262
|
+
interface AXConversationRegistryConfiguration {
|
|
4078
4263
|
/**
|
|
4079
|
-
*
|
|
4264
|
+
* Additional message renderers to register (built-in renderers are automatic).
|
|
4265
|
+
* Each {@link AXConversationMessageRenderer} may include optional `composerActions` for co-located send UX.
|
|
4080
4266
|
*/
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4267
|
+
messageRenderers?: AXConversationMessageRenderer[];
|
|
4268
|
+
/** Message actions to register by default */
|
|
4269
|
+
messageActions?: AXConversationMessageAction[];
|
|
4270
|
+
/** Composer tabs to register by default */
|
|
4271
|
+
composerTabs?: AXConversationComposerTab[];
|
|
4272
|
+
/** Composer actions to register by default */
|
|
4273
|
+
composerActions?: AXConversationComposerAction[];
|
|
4274
|
+
/** Conversation tabs to register by default */
|
|
4275
|
+
conversationTabs?: AXConversationTab[];
|
|
4276
|
+
/** Info bar actions to register by default */
|
|
4277
|
+
infoBarActions?: AXConversationInfoBarAction[];
|
|
4278
|
+
/** Conversation item actions to register by default */
|
|
4279
|
+
conversationItemActions?: AXConversationItemAction[];
|
|
4084
4280
|
}
|
|
4281
|
+
/**
|
|
4282
|
+
* Complete registry configuration token
|
|
4283
|
+
* Provide this for comprehensive registry configuration
|
|
4284
|
+
*/
|
|
4285
|
+
declare const AX_CONVERSATION_REGISTRY_CONFIG: InjectionToken<AXConversationRegistryConfiguration>;
|
|
4085
4286
|
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
private readonly popupService;
|
|
4091
|
-
private readonly translation;
|
|
4092
|
-
private readonly ngZone;
|
|
4093
|
-
private readonly cdr;
|
|
4094
|
-
/** Conversation selected event */
|
|
4095
|
-
readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
|
|
4096
|
-
/** Search debouncing */
|
|
4097
|
-
private readonly searchSubject;
|
|
4098
|
-
/** Derived state for template */
|
|
4099
|
-
readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation.AXConversationTab[]>;
|
|
4100
|
-
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
4101
|
-
readonly loading: _angular_core.Signal<boolean>;
|
|
4102
|
-
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4103
|
-
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
4104
|
-
readonly isSidebarTabsHorizontal: _angular_core.Signal<boolean>;
|
|
4105
|
-
readonly sidebarTabLocation: _angular_core.Signal<AXTabLocation>;
|
|
4106
|
-
constructor();
|
|
4107
|
-
/** Handle search input change with debouncing */
|
|
4108
|
-
onSearchChange(value: string): void;
|
|
4109
|
-
/** Handle tab change from ax-tabs */
|
|
4110
|
-
onTabChange(event: {
|
|
4111
|
-
tab?: {
|
|
4112
|
-
key?: string;
|
|
4113
|
-
};
|
|
4114
|
-
}): void;
|
|
4115
|
-
/** Select a conversation */
|
|
4116
|
-
selectConversation(conversation: AXConversation): void;
|
|
4117
|
-
/** Get badge value for tab */
|
|
4118
|
-
getBadgeValue(tabId: string): string | undefined;
|
|
4119
|
-
getTabLabel(tabId: string): string;
|
|
4120
|
-
openNewConversationPopup(): Promise<void>;
|
|
4121
|
-
/** Handle infinite scroll threshold - delegate to service */
|
|
4122
|
-
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4123
|
-
/** Cleanup on destroy */
|
|
4124
|
-
ngOnDestroy(): void;
|
|
4125
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSidebarComponent, never>;
|
|
4126
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never, ["ax-suffix"], true, never>;
|
|
4127
|
-
}
|
|
4287
|
+
/**
|
|
4288
|
+
* Validation Utilities
|
|
4289
|
+
* Centralized validation functions for messages and user input
|
|
4290
|
+
*/
|
|
4128
4291
|
|
|
4129
|
-
type AXConversationNewWizardStep = 'selectUsers' | 'groupDetails';
|
|
4130
|
-
declare class AXConversationNewDialogComponent extends AXBasePageComponent {
|
|
4131
|
-
/**
|
|
4132
|
-
* Assigned by {@link AXPopupComponent} from `open(..., { data: { conversationService } })`.
|
|
4133
|
-
* Not injected: popup content is created on the root view container, so route-scoped providers
|
|
4134
|
-
* would not see the same `AXConversationService` instance as the conversation feature.
|
|
4135
|
-
*/
|
|
4136
|
-
conversationService: AXConversationService;
|
|
4137
|
-
private readonly toastService;
|
|
4138
|
-
private readonly translation;
|
|
4139
|
-
private readonly config;
|
|
4140
|
-
private readonly destroyRef;
|
|
4141
|
-
private searchDebounceTimer?;
|
|
4142
|
-
constructor();
|
|
4143
|
-
/**
|
|
4144
|
-
* Injected by {@link AXPopupComponent} when this dialog is opened via {@link AXPopupService}.
|
|
4145
|
-
* Required for `setTitle` / dynamic header — {@link AXBasePageComponent#setTitle} is otherwise unset.
|
|
4146
|
-
*/
|
|
4147
|
-
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4148
|
-
readonly availableUsers: _angular_core.WritableSignal<AXConversationParticipant[]>;
|
|
4149
|
-
readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
|
|
4150
|
-
readonly groupTitle: _angular_core.WritableSignal<string>;
|
|
4151
|
-
readonly groupAvatar: _angular_core.WritableSignal<string>;
|
|
4152
|
-
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4153
|
-
readonly creating: _angular_core.WritableSignal<boolean>;
|
|
4154
|
-
/** For 2+ users: step 1 = pick users, step 2 = title + avatar. */
|
|
4155
|
-
readonly wizardStep: _angular_core.WritableSignal<AXConversationNewWizardStep>;
|
|
4156
|
-
readonly showUserPickerStep: _angular_core.Signal<boolean>;
|
|
4157
|
-
readonly showGroupDetailsStep: _angular_core.Signal<boolean>;
|
|
4158
|
-
readonly showNextButton: _angular_core.Signal<boolean>;
|
|
4159
|
-
readonly showGroupBackButton: _angular_core.Signal<boolean>;
|
|
4160
|
-
readonly showCreateButton: _angular_core.Signal<boolean>;
|
|
4161
|
-
readonly canGoNextToGroupDetails: _angular_core.Signal<boolean>;
|
|
4162
|
-
readonly canCreate: _angular_core.Signal<boolean>;
|
|
4163
|
-
private readonly _resetWizardWhenSingleEffect;
|
|
4164
|
-
private readonly _syncPopupTitleEffect;
|
|
4165
|
-
readonly usersListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
4166
|
-
readonly usersListLoadingTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
4167
|
-
readonly usersList: _angular_core.Signal<AXListComponent>;
|
|
4168
|
-
readonly usersListDataSource: AXDataSource<unknown>;
|
|
4169
|
-
onCancel(): void;
|
|
4170
|
-
onSelectedUsersChange(ids: string[]): void;
|
|
4171
|
-
onNextToGroupDetails(): void;
|
|
4172
|
-
onBackFromGroupDetails(): void;
|
|
4173
|
-
onSearchChange(value: string): void;
|
|
4174
|
-
isUserSelected(id: string): boolean;
|
|
4175
|
-
userFromItem(item: unknown): AXConversationParticipant | null;
|
|
4176
|
-
private mergeUsersCache;
|
|
4177
|
-
onCreateConversation(): Promise<void>;
|
|
4178
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationNewDialogComponent, never>;
|
|
4179
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationNewDialogComponent, "ax-conversation-new-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4180
|
-
}
|
|
4181
|
-
|
|
4182
|
-
declare class AXConversationInfiniteScrollDirective {
|
|
4183
|
-
private readonly elementRef;
|
|
4184
|
-
private readonly platformId;
|
|
4185
|
-
/** Threshold in pixels from the edge to trigger the event */
|
|
4186
|
-
readonly threshold: _angular_core.InputSignal<number>;
|
|
4187
|
-
/** Which edge to watch: 'top', 'bottom', or 'both' */
|
|
4188
|
-
readonly edge: _angular_core.InputSignal<"top" | "bottom" | "both">;
|
|
4189
|
-
/** When true, scroll events are ignored (e.g. while a page is loading). */
|
|
4190
|
-
readonly scrollDisabled: _angular_core.InputSignal<boolean>;
|
|
4191
|
-
/** Minimum time between emissions (ms) to avoid duplicate API calls. */
|
|
4192
|
-
readonly cooldownMs: _angular_core.InputSignal<number>;
|
|
4193
|
-
/** Event emitted when scrolling reaches the threshold */
|
|
4194
|
-
readonly scrollThreshold: _angular_core.OutputEmitterRef<"top" | "bottom">;
|
|
4195
|
-
private lastScrollTop;
|
|
4196
|
-
private ticking;
|
|
4197
|
-
private lastEmitAt;
|
|
4198
|
-
private pendingEmit;
|
|
4199
|
-
constructor();
|
|
4200
|
-
private setupScrollListener;
|
|
4201
|
-
private handleScroll;
|
|
4202
|
-
private emitThreshold;
|
|
4203
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfiniteScrollDirective, never>;
|
|
4204
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationInfiniteScrollDirective, "[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>;
|
|
4205
|
-
}
|
|
4206
|
-
|
|
4207
|
-
/**
|
|
4208
|
-
* Conversation feature flags for configurable bundle size.
|
|
4209
|
-
*/
|
|
4210
|
-
type AXConversationComposerTabFeature = 'emoji' | 'sticker';
|
|
4211
|
-
interface AXConversationFeatures {
|
|
4212
|
-
/** Enabled built-in composer popup tabs (`emoji`, `sticker`). Defaults to none when omitted. */
|
|
4213
|
-
composerTabs?: AXConversationComposerTabFeature[];
|
|
4214
|
-
}
|
|
4215
|
-
declare function resolveConversationComposerTabs(features?: AXConversationFeatures): readonly AXConversationComposerTabFeature[];
|
|
4216
|
-
declare function isComposerTabEnabled(tab: AXConversationComposerTabFeature, features?: AXConversationFeatures): boolean;
|
|
4217
|
-
|
|
4218
|
-
/**
|
|
4219
|
-
* Conversation Configuration Interface
|
|
4220
|
-
* Centralized configuration values to avoid magic numbers
|
|
4221
|
-
*/
|
|
4222
|
-
/**
|
|
4223
|
-
* Sidebar conversation tabs layout.
|
|
4224
|
-
* - `vertical`: horizontal tab strip above the conversation list.
|
|
4225
|
-
* - `horizontal`: vertical tab strip at inline-start beside the list (`ax-tabs` location `start`).
|
|
4226
|
-
*/
|
|
4227
|
-
type AXConversationSidebarTabsOrientation = 'vertical' | 'horizontal';
|
|
4228
4292
|
/**
|
|
4229
|
-
*
|
|
4293
|
+
* Validation result interface
|
|
4230
4294
|
*/
|
|
4231
|
-
interface
|
|
4232
|
-
/**
|
|
4233
|
-
|
|
4234
|
-
/**
|
|
4235
|
-
|
|
4236
|
-
/**
|
|
4237
|
-
|
|
4238
|
-
/** Infinite scroll threshold */
|
|
4239
|
-
infiniteScrollThreshold?: number;
|
|
4240
|
-
/** Typing indicator timeout in milliseconds */
|
|
4241
|
-
typingIndicatorTimeout?: number;
|
|
4242
|
-
/** Typing indicator emit throttle in milliseconds while composing (default: 3000) */
|
|
4243
|
-
typingIndicatorThrottle?: number;
|
|
4244
|
-
/** How long to show received typing indicators in the UI (default: 4000) */
|
|
4245
|
-
typingDisplayDuration?: number;
|
|
4246
|
-
/** Message highlight duration in milliseconds */
|
|
4247
|
-
messageHighlightDuration?: number;
|
|
4248
|
-
/** Search debounce delay in milliseconds */
|
|
4249
|
-
debounceSearch?: number;
|
|
4250
|
-
/** Maximum messages per conversation */
|
|
4251
|
-
maxMessagesPerConversation?: number;
|
|
4252
|
-
/** Maximum total messages in store */
|
|
4253
|
-
maxTotalMessages?: number;
|
|
4254
|
-
/** Maximum cached conversations */
|
|
4255
|
-
maxCachedConversations?: number;
|
|
4256
|
-
/** Minimum sidebar width in pixels */
|
|
4257
|
-
minSidebarWidth?: number;
|
|
4258
|
-
/** Maximum sidebar width in pixels */
|
|
4259
|
-
maxSidebarWidth?: number;
|
|
4260
|
-
/** Default sidebar width in pixels */
|
|
4261
|
-
defaultSidebarWidth?: number;
|
|
4262
|
-
/**
|
|
4263
|
-
* Sidebar conversation tabs layout.
|
|
4264
|
-
* `vertical` places a horizontal tab strip above the list; `horizontal` places a vertical tab strip at inline-start beside the list.
|
|
4265
|
-
*/
|
|
4266
|
-
sidebarTabsOrientation?: AXConversationSidebarTabsOrientation;
|
|
4267
|
-
/** Maximum message length in characters */
|
|
4268
|
-
maxMessageLength?: number;
|
|
4269
|
-
/** Minimum message length in characters */
|
|
4270
|
-
minMessageLength?: number;
|
|
4271
|
-
/** Max attachments per message when a composer action omits `maxFiles`. */
|
|
4272
|
-
maxFilesPerMessage?: number;
|
|
4273
|
-
/** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
|
|
4274
|
-
messageReadThreshold?: number;
|
|
4275
|
-
/** Debounce window (ms) before flushing batched read-receipt API calls (default: 3000) */
|
|
4276
|
-
messageReadDebounce?: number;
|
|
4277
|
-
/**
|
|
4278
|
-
* When true, marks the whole conversation as read once when it is selected (single API call).
|
|
4279
|
-
* Per-message intersection observer still handles new messages received while the chat is open.
|
|
4280
|
-
*/
|
|
4281
|
-
markConversationReadOnSelect?: boolean;
|
|
4282
|
-
/**
|
|
4283
|
-
* CSS `background` for the message list (`ax-conversation-message-list` area, all states: loading, empty, messages).
|
|
4284
|
-
* Use full shorthand, or a bare `https://...` / `/path/to.png` (wrapped as `url(...)` with `center/cover`).
|
|
4285
|
-
* Pass a string for the same value in both themes, or `{ light, dark }` for theme-specific backgrounds.
|
|
4286
|
-
* Empty string = Telegram-inspired theme-aware library default (`{ light, dark }`). `transparent` or `none` = flat background.
|
|
4287
|
-
*/
|
|
4288
|
-
messageListBackground?: AXConversationMessageListBackground;
|
|
4289
|
-
/** Optional feature flags to reduce bundle size per app. */
|
|
4290
|
-
features?: AXConversationFeatures;
|
|
4291
|
-
/** Log API calls made by AXConversationService to the console (default: false). */
|
|
4292
|
-
debugApiLogging?: boolean;
|
|
4295
|
+
interface AXConversationValidationResult {
|
|
4296
|
+
/** Whether validation passed */
|
|
4297
|
+
valid: boolean;
|
|
4298
|
+
/** Error message if validation failed */
|
|
4299
|
+
error?: string;
|
|
4300
|
+
/** Error code for programmatic handling */
|
|
4301
|
+
errorCode?: string;
|
|
4293
4302
|
}
|
|
4294
|
-
|
|
4295
|
-
/**
|
|
4296
|
-
* Default Configuration Values
|
|
4297
|
-
* Centralized defaults to avoid magic numbers throughout the codebase
|
|
4298
|
-
*/
|
|
4299
|
-
|
|
4300
|
-
/**
|
|
4301
|
-
* Default conversation configuration
|
|
4302
|
-
* All values are explicitly defined here for easy maintenance and documentation
|
|
4303
|
-
*/
|
|
4304
|
-
declare const AX_DEFAULT_CONVERSATION_CONFIG: Required<AXConversationConfig>;
|
|
4305
|
-
/**
|
|
4306
|
-
* Helper function to merge user config with defaults
|
|
4307
|
-
* Properly handles array merging to avoid reference issues
|
|
4308
|
-
* @param userConfig - User-provided configuration
|
|
4309
|
-
* @returns Merged configuration with all required fields
|
|
4310
|
-
*/
|
|
4311
|
-
declare function mergeWithDefaults(userConfig?: Partial<AXConversationConfig>): Required<AXConversationConfig>;
|
|
4312
|
-
|
|
4313
|
-
/**
|
|
4314
|
-
* Dependency Injection Tokens
|
|
4315
|
-
* InjectionTokens for configuration and dependencies
|
|
4316
|
-
*/
|
|
4317
|
-
|
|
4318
4303
|
/**
|
|
4319
|
-
*
|
|
4320
|
-
*
|
|
4304
|
+
* Validate message text content
|
|
4305
|
+
* @param text - Text to validate
|
|
4306
|
+
* @param config - Configuration for validation rules
|
|
4307
|
+
* @returns Validation result
|
|
4321
4308
|
*/
|
|
4322
|
-
declare
|
|
4309
|
+
declare function validateMessageText(text: string | undefined, config: AXConversationConfig): AXConversationValidationResult;
|
|
4323
4310
|
/**
|
|
4324
|
-
*
|
|
4311
|
+
* Validate conversation ID
|
|
4312
|
+
* @param conversationId - Conversation ID to validate
|
|
4313
|
+
* @returns Validation result
|
|
4325
4314
|
*/
|
|
4326
|
-
declare
|
|
4327
|
-
|
|
4315
|
+
declare function validateConversationId(conversationId: string | undefined): AXConversationValidationResult;
|
|
4328
4316
|
/**
|
|
4329
|
-
*
|
|
4330
|
-
*
|
|
4317
|
+
* Validate message type
|
|
4318
|
+
* @param type - Message type to validate
|
|
4319
|
+
* @returns Validation result
|
|
4331
4320
|
*/
|
|
4332
|
-
|
|
4321
|
+
declare function validateMessageType(type: AXConversationMessageType | undefined): AXConversationValidationResult;
|
|
4333
4322
|
/**
|
|
4334
|
-
*
|
|
4335
|
-
*
|
|
4336
|
-
*
|
|
4323
|
+
* Validate message payload
|
|
4324
|
+
* @param payload - Message payload to validate
|
|
4325
|
+
* @param type - Message type
|
|
4326
|
+
* @returns Validation result
|
|
4337
4327
|
*/
|
|
4338
|
-
declare
|
|
4328
|
+
declare function validateMessagePayload(payload: AXConversationMessagePayload | undefined, type: AXConversationMessageType): Promise<AXConversationValidationResult>;
|
|
4339
4329
|
/**
|
|
4340
|
-
*
|
|
4341
|
-
*
|
|
4330
|
+
* Validate user ID
|
|
4331
|
+
* @param userId - User ID to validate
|
|
4332
|
+
* @returns Validation result
|
|
4342
4333
|
*/
|
|
4343
|
-
declare
|
|
4334
|
+
declare function validateUserId(userId: string | undefined): AXConversationValidationResult;
|
|
4344
4335
|
/**
|
|
4345
|
-
*
|
|
4346
|
-
*
|
|
4336
|
+
* Validate array of user IDs
|
|
4337
|
+
* @param userIds - Array of user IDs to validate
|
|
4338
|
+
* @param minCount - Minimum number of users required
|
|
4339
|
+
* @param maxCount - Maximum number of users allowed
|
|
4340
|
+
* @returns Validation result
|
|
4347
4341
|
*/
|
|
4348
|
-
declare
|
|
4342
|
+
declare function validateUserIds(userIds: string[] | undefined, minCount?: number, maxCount?: number): AXConversationValidationResult;
|
|
4349
4343
|
/**
|
|
4350
|
-
*
|
|
4351
|
-
*
|
|
4344
|
+
* Validate email address
|
|
4345
|
+
* @param email - Email to validate
|
|
4346
|
+
* @returns Validation result
|
|
4352
4347
|
*/
|
|
4353
|
-
declare
|
|
4348
|
+
declare function validateEmail(email: string | undefined): AXConversationValidationResult;
|
|
4354
4349
|
/**
|
|
4355
|
-
*
|
|
4356
|
-
*
|
|
4350
|
+
* Validate URL
|
|
4351
|
+
* @param url - URL to validate
|
|
4352
|
+
* @returns Validation result
|
|
4357
4353
|
*/
|
|
4358
|
-
declare
|
|
4354
|
+
declare function validateUrl(url: string | undefined): AXConversationValidationResult;
|
|
4359
4355
|
/**
|
|
4360
|
-
*
|
|
4361
|
-
*
|
|
4356
|
+
* Sanitize user input to prevent XSS
|
|
4357
|
+
* Note: Angular provides built-in sanitization, but this is an additional layer
|
|
4358
|
+
* @param input - User input to sanitize
|
|
4359
|
+
* @returns Sanitized input
|
|
4362
4360
|
*/
|
|
4363
|
-
declare
|
|
4361
|
+
declare function sanitizeInput(input: string): string;
|
|
4364
4362
|
/**
|
|
4365
|
-
*
|
|
4366
|
-
*
|
|
4363
|
+
* Validate latitude coordinate
|
|
4364
|
+
* @param latitude - Latitude to validate
|
|
4365
|
+
* @returns Validation result
|
|
4367
4366
|
*/
|
|
4368
|
-
declare
|
|
4367
|
+
declare function validateLatitude(latitude: number | undefined | null): AXConversationValidationResult;
|
|
4369
4368
|
/**
|
|
4370
|
-
*
|
|
4369
|
+
* Validate longitude coordinate
|
|
4370
|
+
* @param longitude - Longitude to validate
|
|
4371
|
+
* @returns Validation result
|
|
4371
4372
|
*/
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4373
|
+
declare function validateLongitude(longitude: number | undefined | null): AXConversationValidationResult;
|
|
4374
|
+
|
|
4375
|
+
/** Infer extension/MIME hints from a persisted message payload. */
|
|
4376
|
+
declare function inferFileExtensionHintFromMessage(message: AXConversationMessage): AXFileTypeExtensionHint;
|
|
4377
|
+
/** Use file-type `copy` on the message when `message.fileType` is set; otherwise fallback. */
|
|
4378
|
+
declare function copyWithFileTypeFallback(message: AXConversationMessage, registry: AXFileTypeRegistryService, fallback: () => string): Promise<string>;
|
|
4379
|
+
/** Use file-type `open` on the message when `message.fileType` is set. */
|
|
4380
|
+
declare function openWithFileType(message: AXConversationMessage, registry: AXFileTypeRegistryService, ctx: AXFileTypeOpenContext): Promise<boolean>;
|
|
4381
|
+
|
|
4382
|
+
interface AXConversationInfoProfileField {
|
|
4383
|
+
id: string;
|
|
4384
|
+
labelKey: string;
|
|
4385
|
+
value: string;
|
|
4386
|
+
icon: string;
|
|
4387
|
+
}
|
|
4388
|
+
type AXConversationMediaCategoryId = 'image' | 'video' | 'file' | 'audio' | 'voice' | 'sticker' | 'location' | 'link';
|
|
4389
|
+
interface AXConversationMediaCategory {
|
|
4390
|
+
id: AXConversationMediaCategoryId;
|
|
4391
|
+
labelKey: string;
|
|
4392
|
+
countLabelKey: string;
|
|
4393
|
+
icon: string;
|
|
4394
|
+
count: number;
|
|
4395
|
+
}
|
|
4396
|
+
declare function messageContainsLink(message: AXConversationMessage): boolean;
|
|
4397
|
+
declare function getPrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
4398
|
+
declare function getConversationProfileFields(conversation: AXConversation, currentUserId?: string): AXConversationInfoProfileField[];
|
|
4399
|
+
declare function getConversationMediaCategories(messages: AXConversationMessage[]): AXConversationMediaCategory[];
|
|
4400
|
+
declare function filterMessagesByMediaCategory(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMessage[];
|
|
4401
|
+
declare function isGridMediaCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
4402
|
+
declare function isAttachmentListCategory(categoryId: AXConversationMediaCategoryId): boolean;
|
|
4403
|
+
interface AXConversationMediaGalleryTile {
|
|
4404
|
+
key: string;
|
|
4405
|
+
message: AXConversationMessage;
|
|
4406
|
+
kind: 'image' | 'video' | 'sticker';
|
|
4407
|
+
image?: AXConversationImageMediaItem;
|
|
4408
|
+
video?: AXConversationVideoMediaItem;
|
|
4409
|
+
stickerUrl?: string;
|
|
4410
|
+
stickerAlt?: string;
|
|
4411
|
+
}
|
|
4412
|
+
declare function buildMediaGalleryTiles(messages: AXConversationMessage[], categoryId: AXConversationMediaCategoryId): AXConversationMediaGalleryTile[];
|
|
4413
|
+
declare function resolveVideoThumbnailUrl(video: AXConversationVideoMediaItem): string | undefined;
|
|
4414
|
+
declare function resolveGalleryImageUrl(image: AXConversationImageMediaItem): string | undefined;
|
|
4415
|
+
declare function getMessageVideoItems(message: AXConversationMessage): AXConversationVideoMediaItem[];
|
|
4416
|
+
declare function getMessageAudioItems(message: AXConversationMessage): AXConversationAudioMediaItem[];
|
|
4417
|
+
interface AXConversationMediaPageResult {
|
|
4418
|
+
items: AXConversationMessage[];
|
|
4419
|
+
hasMore: boolean;
|
|
4420
|
+
nextCursor?: string;
|
|
4421
|
+
page: number;
|
|
4422
|
+
}
|
|
4423
|
+
declare function fetchConversationMediaPage(conversationApi: AXConversationApi, conversationId: string, page: number, pageSize?: number, cursor?: string): Promise<AXConversationMediaPageResult>;
|
|
4424
|
+
/** Merge media API results with in-memory messages needed for link/sticker/voice/location tabs. */
|
|
4425
|
+
declare function mergeInfoPanelMessages(mediaMessages: AXConversationMessage[], supplemental: AXConversationMessage[]): AXConversationMessage[];
|
|
4426
|
+
declare function filterSupplementalInfoPanelMessages(messages: AXConversationMessage[]): AXConversationMessage[];
|
|
4427
|
+
|
|
4428
|
+
interface AXConversationMessageDateGroup {
|
|
4429
|
+
date: string;
|
|
4430
|
+
dateKind: AXConversationDateSeparatorKind;
|
|
4431
|
+
dateLabel?: string;
|
|
4432
|
+
messages: AXConversationMessage[];
|
|
4433
|
+
}
|
|
4434
|
+
declare class AXConversationMessageListService {
|
|
4435
|
+
private readonly conversationService;
|
|
4436
|
+
private readonly translation;
|
|
4437
|
+
private readonly eventService;
|
|
4438
|
+
private readonly activeLocale;
|
|
4439
|
+
private readonly translationRevision;
|
|
4440
|
+
private get registry();
|
|
4441
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
4442
|
+
readonly activeMessages: _angular_core.Signal<AXConversationMessage[]>;
|
|
4443
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
|
|
4444
|
+
/** Initial message history load (conversation switch) */
|
|
4445
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4446
|
+
/** Loading older messages (scroll-up pagination) */
|
|
4447
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4448
|
+
/** Whether older messages can be loaded */
|
|
4449
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
4450
|
+
/** Show scroll to bottom button */
|
|
4451
|
+
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
4452
|
+
/** Scroll requests counter */
|
|
4453
|
+
readonly scrollRequests: _angular_core.WritableSignal<number>;
|
|
4454
|
+
/** Live renderer instances keyed by message id (for message actions). */
|
|
4455
|
+
private readonly _rendererInstances;
|
|
4456
|
+
/**
|
|
4457
|
+
* Reply counts merged from API fields and loaded messages.
|
|
4458
|
+
*/
|
|
4459
|
+
readonly replyCounts: _angular_core.Signal<Map<string, number>>;
|
|
4460
|
+
/**
|
|
4461
|
+
* Forward counts merged from API fields and loaded messages.
|
|
4462
|
+
*/
|
|
4463
|
+
readonly forwardCounts: _angular_core.Signal<Map<string, number>>;
|
|
4464
|
+
registerRendererInstance(messageId: string, instance: AXConversationMessageRendererComponent): void;
|
|
4465
|
+
unregisterRendererInstance(messageId: string): void;
|
|
4466
|
+
getRendererInstance(messageId: string): AXConversationMessageRendererComponent | undefined;
|
|
4467
|
+
getReplyCount(messageId: string): number;
|
|
4468
|
+
getForwardCount(messageId: string): number;
|
|
4469
|
+
/** Message grouped by date */
|
|
4470
|
+
readonly messageGroups: _angular_core.Signal<AXConversationMessageDateGroup[]>;
|
|
4471
|
+
/**
|
|
4472
|
+
* Load older messages when the user scrolls near the top.
|
|
4473
|
+
*/
|
|
4474
|
+
loadMoreMessages(): Promise<boolean>;
|
|
4475
|
+
/**
|
|
4476
|
+
* Reset pagination when switching conversations (page 0 is loaded by {@link AXConversationService.selectConversation}).
|
|
4477
|
+
*/
|
|
4478
|
+
resetPagination(): void;
|
|
4479
|
+
getMenuActions(message: AXConversationMessage): _acorex_components_conversation.AXConversationMessageAction[];
|
|
4480
|
+
executeAction(message: AXConversationMessage, actionId: string): Promise<void>;
|
|
4481
|
+
reactToMessage(messageId: string, emoji: string): Promise<void>;
|
|
4482
|
+
/** Request message list to scroll to bottom */
|
|
4483
|
+
requestScrollToBottom(): void;
|
|
4484
|
+
private buildCountMap;
|
|
4485
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageListService, never>;
|
|
4486
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4487
|
+
}
|
|
4488
|
+
|
|
4489
|
+
declare class AXConversationMessageListComponent implements OnDestroy {
|
|
4490
|
+
private readonly conversationService;
|
|
4491
|
+
private readonly messageListService;
|
|
4492
|
+
private readonly composerService;
|
|
4493
|
+
private readonly fileService;
|
|
4494
|
+
private readonly toast;
|
|
4495
|
+
private readonly infoBarService;
|
|
4496
|
+
protected readonly translation: AXTranslationService;
|
|
4497
|
+
private readonly document;
|
|
4498
|
+
private readonly platform;
|
|
4499
|
+
private readonly actionSheetService;
|
|
4500
|
+
private readonly ngZone;
|
|
4501
|
+
private readonly cdr;
|
|
4502
|
+
protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
|
|
4503
|
+
/**
|
|
4504
|
+
* Background for the message list scroll area from config, or the built-in soft wash when unset/empty.
|
|
4505
|
+
* Set `messageListBackground` to `transparent` or `none` for a flat look.
|
|
4506
|
+
* Supports `{ light, dark }` for theme-specific backgrounds.
|
|
4507
|
+
*/
|
|
4508
|
+
readonly messageListUsesDefaultWallpaper: _angular_core.Signal<boolean>;
|
|
4509
|
+
readonly messageListWallpaperDark: _angular_core.Signal<boolean>;
|
|
4510
|
+
readonly messageListBackgroundStyle: _angular_core.Signal<string>;
|
|
4511
|
+
resolvedEmptyStateComponent(): Type<AXConversationMessageListEmptyComponent>;
|
|
4512
|
+
/** Fallback when no conversation is active and no `ax-conversation-message-list-no-active` content is projected. */
|
|
4513
|
+
protected readonly noActiveFallbackComponent: typeof AXConversationMessageListNoActiveDefaultComponent;
|
|
4514
|
+
private readonly timeouts;
|
|
4515
|
+
private dateSeparatorFadeTimer;
|
|
4516
|
+
readonly reactionPickerTarget: _angular_core.WritableSignal<string>;
|
|
4517
|
+
readonly reactionPickerElement: _angular_core.WritableSignal<HTMLElement>;
|
|
4518
|
+
readonly reactionPickerPlacement: _angular_core.WritableSignal<AXPlacement>;
|
|
4519
|
+
readonly reactionPopover: _angular_core.Signal<any>;
|
|
4520
|
+
/** Message id whose context menu is open (for active row styling). */
|
|
4521
|
+
readonly contextMenuMessageId: _angular_core.WritableSignal<string>;
|
|
4522
|
+
private readonly contextMenuMessage;
|
|
4523
|
+
private readonly messageActionsMenu;
|
|
4524
|
+
/** True while files are dragged over the message list drop zone. */
|
|
4525
|
+
readonly messageListDragging: _angular_core.WritableSignal<boolean>;
|
|
4526
|
+
/** True when the message list uses single-column adaptive layout (matches CSS container query). */
|
|
4527
|
+
readonly isAdaptiveWideLayout: _angular_core.WritableSignal<boolean>;
|
|
4528
|
+
/** While true, older history is being prepended — do not auto-scroll to the latest message. */
|
|
4529
|
+
private restoringScrollAfterPrepend;
|
|
4530
|
+
/**
|
|
4531
|
+
* Stick to the latest message across layout shifts (media decode, lazy outlets).
|
|
4532
|
+
* Cleared as soon as the user scrolls up — even within `scrollThreshold` —
|
|
4533
|
+
* otherwise ResizeObserver keeps yanking the feed back to the bottom.
|
|
4534
|
+
*/
|
|
4535
|
+
private pinnedToBottom;
|
|
4536
|
+
/**
|
|
4537
|
+
* True while we assign `scrollTop`. Kept until the following animation frame
|
|
4538
|
+
* because some browsers dispatch `scroll` asynchronously after `scrollTop` writes.
|
|
4539
|
+
*/
|
|
4540
|
+
private programmaticScroll;
|
|
4541
|
+
private programmaticScrollGen;
|
|
4542
|
+
private adaptiveLayoutResizeObserver?;
|
|
4543
|
+
private documentClickListener?;
|
|
4544
|
+
readonly availableReactions: _angular_core.WritableSignal<string[]>;
|
|
4545
|
+
private reactionsLoading;
|
|
4546
|
+
private get registry();
|
|
4547
|
+
/** Message list element reference */
|
|
4548
|
+
private readonly messageListRef;
|
|
4549
|
+
/** Messages container element reference */
|
|
4550
|
+
private readonly messagesContainerRef;
|
|
4551
|
+
/** Loading state - use service */
|
|
4552
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4553
|
+
/** Loading more messages state - use service */
|
|
4554
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4555
|
+
/** Whether older messages remain on the server */
|
|
4556
|
+
readonly hasMoreMessages: _angular_core.Signal<boolean>;
|
|
4557
|
+
/** Show scroll to bottom button - use service */
|
|
4558
|
+
readonly showScrollButton: _angular_core.WritableSignal<boolean>;
|
|
4559
|
+
/** Active conversation */
|
|
4560
|
+
readonly activeConversation: _angular_core.Signal<_acorex_components_conversation.AXConversation>;
|
|
4561
|
+
readonly isGroupConversation: _angular_core.Signal<boolean>;
|
|
4562
|
+
/** Placeholder rows for the initial message list skeleton. */
|
|
4563
|
+
protected readonly loadingSkeletonItems: readonly [0, 1, 2, 3, 4, 5, 6, 7];
|
|
4564
|
+
/**
|
|
4565
|
+
* Conversation whose feed has already been pinned to the latest message.
|
|
4566
|
+
* Compared with the active id in `feedReady` so a chat switch hides the list
|
|
4567
|
+
* in the same render — before the effect that pins the new history.
|
|
4568
|
+
*/
|
|
4569
|
+
private readonly pinnedConversationId;
|
|
4570
|
+
private feedRevealGeneration;
|
|
4571
|
+
private feedRevealRaf;
|
|
4572
|
+
/** False until this conversation is pinned to the bottom (never shows history from the top). */
|
|
4573
|
+
readonly feedReady: _angular_core.Signal<boolean>;
|
|
4574
|
+
/**
|
|
4575
|
+
* Keep the skeleton up until the feed is pinned. The real list stays
|
|
4576
|
+
* `visibility: hidden` underneath so bubbles never show through the cover.
|
|
4577
|
+
*/
|
|
4578
|
+
readonly showOpenCover: _angular_core.Signal<boolean>;
|
|
4579
|
+
/** Whether the active conversation allows message reactions. */
|
|
4580
|
+
readonly reactionsEnabled: _angular_core.Signal<boolean>;
|
|
4581
|
+
/** Messages */
|
|
4582
|
+
readonly messages: _angular_core.Signal<AXConversationMessage[]>;
|
|
4583
|
+
/** Messages keyed by id for O(1) lookups during intersection callbacks. */
|
|
4584
|
+
private readonly messagesById;
|
|
4585
|
+
/** Message action event */
|
|
4586
|
+
readonly messageAction: _angular_core.OutputEmitterRef<{
|
|
4587
|
+
message: AXConversationMessage;
|
|
4588
|
+
action: string;
|
|
4589
|
+
}>;
|
|
4590
|
+
/** Current user from service */
|
|
4591
|
+
readonly currentUser: _angular_core.Signal<_acorex_components_conversation.AXConversationUser>;
|
|
4592
|
+
/** Message grouped by date - use service */
|
|
4593
|
+
readonly messageGroups: _angular_core.Signal<AXConversationMessageDateGroup[]>;
|
|
4594
|
+
constructor();
|
|
4595
|
+
private intersectionObserver?;
|
|
4596
|
+
private readonly readIntersectionObserver;
|
|
4597
|
+
private readonly observedReadMessageIds;
|
|
4598
|
+
/**
|
|
4599
|
+
* Setup intersection observer to mark messages as read when visible
|
|
4600
|
+
*/
|
|
4601
|
+
private setupIntersectionObserver;
|
|
4602
|
+
/**
|
|
4603
|
+
* Keep the viewport stable when layout changes.
|
|
4604
|
+
* ResizeObserver runs after layout and before paint — apply scrollTop in the
|
|
4605
|
+
* callback (not rAF) so the browser never paints a jump.
|
|
4606
|
+
*
|
|
4607
|
+
* Near the bottom, pin to the latest message (media decode, lazy outlets).
|
|
4608
|
+
* Further up, only compensate rows that grew fully above the viewport.
|
|
4609
|
+
*/
|
|
4610
|
+
private setupMediaScrollCompensation;
|
|
4611
|
+
/**
|
|
4612
|
+
* Mark message as read
|
|
4613
|
+
*/
|
|
4614
|
+
private markMessageAsRead;
|
|
4615
|
+
/** Check if message is from current user */
|
|
4616
|
+
isOwnMessage(message: AXConversationMessage): boolean;
|
|
4617
|
+
/** Get first unread message ID */
|
|
4618
|
+
readonly firstUnreadMessageId: _angular_core.Signal<string>;
|
|
4619
|
+
/** Whether reactions can be shown or added for a message in the active conversation. */
|
|
4620
|
+
messageSupportsReactions(message: AXConversationMessage): boolean;
|
|
4621
|
+
/** Toggle reaction picker */
|
|
4622
|
+
toggleReactionPicker(message: AXConversationMessage, event: MouseEvent): void;
|
|
4623
|
+
/** Close reaction picker */
|
|
4624
|
+
closeReactionPicker(): void;
|
|
4625
|
+
/** Check if current user has reacted with specific emoji */
|
|
4626
|
+
hasUserReacted(message: AXConversationMessage, emoji: string): boolean;
|
|
4627
|
+
/** Check if current user has reacted with specific emoji by message ID */
|
|
4628
|
+
hasUserReactedById(messageId: string, emoji: string): boolean;
|
|
4629
|
+
/** Handle reaction click by message ID */
|
|
4630
|
+
onReactionClickById(messageId: string, emoji: string): void;
|
|
4631
|
+
/** Get message by ID */
|
|
4632
|
+
getMessageById(messageId: string): AXConversationMessage | undefined;
|
|
4633
|
+
/** Load available reactions when the picker is opened (session-cached in service). */
|
|
4634
|
+
private ensureAvailableReactions;
|
|
4635
|
+
/** Get message actions from registry */
|
|
4636
|
+
getMessageActions(message: AXConversationMessage): _acorex_components_conversation.AXConversationMessageAction[];
|
|
4637
|
+
/** Handle reaction click */
|
|
4638
|
+
onReactionClick(message: AXConversationMessage, emoji: string): void;
|
|
4639
|
+
/** Handle message action */
|
|
4640
|
+
onMessageAction(message: AXConversationMessage, action: any): Promise<void>;
|
|
4641
|
+
/** Handle infinite scroll threshold */
|
|
4642
|
+
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4643
|
+
/** Load older messages - delegate to service and preserve scroll anchor */
|
|
4644
|
+
private loadOlderMessages;
|
|
4645
|
+
/**
|
|
4646
|
+
* Keep the user's viewport on the same messages after older rows are inserted above.
|
|
4647
|
+
*/
|
|
4648
|
+
private applyPrependScrollRestore;
|
|
4649
|
+
private revealStuckDateSeparators;
|
|
4650
|
+
private syncDateSeparatorStuckState;
|
|
4651
|
+
private scheduleDateSeparatorFade;
|
|
4652
|
+
private clearDateSeparatorFadeTimer;
|
|
4653
|
+
/** Distance from the last pixel of the feed. */
|
|
4654
|
+
private distanceFromBottom;
|
|
4655
|
+
/** True when the viewport is at the latest message (not merely within `scrollThreshold`). */
|
|
4656
|
+
private isStuckToBottom;
|
|
4657
|
+
/**
|
|
4658
|
+
* Assign scrollTop without the listener treating it as a user scroll.
|
|
4659
|
+
* The flag stays set until the next frame so async `scroll` events are ignored.
|
|
4660
|
+
*/
|
|
4661
|
+
private writeScrollTop;
|
|
4662
|
+
/** Pin the feed to the latest message before the next paint. */
|
|
4663
|
+
private pinFeedToBottom;
|
|
4664
|
+
/** Hide the feed and pin to the latest message before the first visible paint. */
|
|
4665
|
+
private beginFeedReveal;
|
|
4666
|
+
private cancelFeedReveal;
|
|
4667
|
+
/**
|
|
4668
|
+
* Pin to the latest message, then reveal. Two frames is enough — stick-to-bottom
|
|
4669
|
+
* holds later media growth. Waiting for loaders here left a blank gap after the skeleton.
|
|
4670
|
+
*/
|
|
4671
|
+
private scheduleFeedPin;
|
|
4672
|
+
/** Start nearby lazy images so they decode while stick-to-bottom holds the viewport. */
|
|
4673
|
+
private primeOpenViewportMedia;
|
|
4674
|
+
/** Scroll to bottom */
|
|
4675
|
+
scrollToBottom(smooth?: boolean): void;
|
|
4676
|
+
/** Scroll to specific message */
|
|
4677
|
+
scrollToMessage(messageId: string): void;
|
|
4678
|
+
/** Cleanup timeouts and observers on destroy */
|
|
4679
|
+
ngOnDestroy(): void;
|
|
4680
|
+
/** Get ARIA label for a date separator. */
|
|
4681
|
+
getDateSeparatorAriaLabel(group: AXConversationMessageDateGroup): string;
|
|
4682
|
+
resolveDateSeparatorLabel(group: AXConversationMessageDateGroup): string;
|
|
4683
|
+
onMessageListDragEnter(): void;
|
|
4684
|
+
onMessageListDragLeave(): void;
|
|
4685
|
+
/** Open the matching composer picker popup when files are dropped on the message list. */
|
|
4686
|
+
onMessageListFilesDropped(event: AXUploaderFileChangeEvent): Promise<void>;
|
|
4687
|
+
private composerPickerDeps;
|
|
4688
|
+
/**
|
|
4689
|
+
* Open the shared message-actions menu from a single delegated listener.
|
|
4690
|
+
* Per-row `ax-context-menu` instances each register capture-phase scroll listeners
|
|
4691
|
+
* and were the main source of scroll jank.
|
|
4692
|
+
*/
|
|
4693
|
+
onMessagesFeedContextMenu(event: MouseEvent): void;
|
|
4694
|
+
onMessageContextMenuClose(): void;
|
|
4695
|
+
/** Handle context menu opening for messages */
|
|
4696
|
+
handleMessageContextMenuOpening(event: AXContextMenuOpeningEvent): void;
|
|
4697
|
+
/** Handle context menu item click for messages */
|
|
4698
|
+
handleMessageContextMenuItemClick(event: AXContextMenuItemsClickEvent): void;
|
|
4699
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMessageListComponent, never>;
|
|
4700
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMessageListComponent, "ax-conversation-message-list", never, {}, { "messageAction": "messageAction"; }, never, ["ax-conversation-message-list-empty, [ax-conversation-message-list-empty]", "ax-conversation-message-list-no-active, [ax-conversation-message-list-no-active]"], true, never>;
|
|
4701
|
+
}
|
|
4702
|
+
|
|
4703
|
+
declare class AXConversationAvatarPickerComponent {
|
|
4704
|
+
readonly fileInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
|
|
4705
|
+
readonly showClearButton: _angular_core.InputSignal<boolean>;
|
|
4706
|
+
readonly avatarUrl: _angular_core.ModelSignal<string>;
|
|
4707
|
+
readonly onFileSelected: _angular_core.OutputEmitterRef<string>;
|
|
4708
|
+
triggerFileInput(): void;
|
|
4709
|
+
onFileInputChange(event: Event): Promise<void>;
|
|
4710
|
+
clearAvatar(): void;
|
|
4711
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarPickerComponent, never>;
|
|
4712
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarPickerComponent, "ax-conversation-avatar-picker", never, { "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; "isSignal": true; }; }, { "avatarUrl": "avatarUrlChange"; "onFileSelected": "onFileSelected"; }, never, never, true, never>;
|
|
4390
4713
|
}
|
|
4391
|
-
/**
|
|
4392
|
-
* Complete registry configuration token
|
|
4393
|
-
* Provide this for comprehensive registry configuration
|
|
4394
|
-
*/
|
|
4395
|
-
declare const AX_CONVERSATION_REGISTRY_CONFIG: InjectionToken<AXConversationRegistryConfiguration>;
|
|
4396
4714
|
|
|
4397
|
-
declare
|
|
4398
|
-
readonly
|
|
4399
|
-
readonly
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4715
|
+
declare class AXConversationAvatarComponent {
|
|
4716
|
+
private readonly conversationService;
|
|
4717
|
+
private readonly userAvatarComponent;
|
|
4718
|
+
private readonly conversationAvatarComponent;
|
|
4719
|
+
readonly kind: _angular_core.InputSignal<AXConversationAvatarKind>;
|
|
4720
|
+
readonly userId: _angular_core.InputSignal<string>;
|
|
4721
|
+
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4722
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
4723
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
4724
|
+
readonly showStatus: _angular_core.InputSignal<boolean>;
|
|
4725
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
4726
|
+
readonly avatar: _angular_core.InputSignal<string>;
|
|
4727
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
4728
|
+
private readonly currentUserId;
|
|
4729
|
+
readonly resolvedKind: _angular_core.Signal<"user" | "conversation">;
|
|
4730
|
+
readonly resolvedUserId: _angular_core.Signal<string>;
|
|
4731
|
+
readonly customComponent: _angular_core.Signal<Type<unknown>>;
|
|
4732
|
+
readonly customInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4733
|
+
readonly filteredCustomInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
4734
|
+
readonly fallbackDisplay: _angular_core.Signal<{
|
|
4735
|
+
name: string;
|
|
4736
|
+
avatar: string;
|
|
4737
|
+
icon: string;
|
|
4738
|
+
}>;
|
|
4739
|
+
readonly fallbackInitials: _angular_core.Signal<string>;
|
|
4740
|
+
readonly resolvedStatus: _angular_core.Signal<_acorex_components_conversation.AXConversationPresenceStatus>;
|
|
4741
|
+
readonly statusBadgePresence: _angular_core.Signal<"online" | "offline" | "away" | "busy">;
|
|
4742
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAvatarComponent, never>;
|
|
4743
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAvatarComponent, "ax-conversation-avatar", never, { "kind": { "alias": "kind"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; "conversation": { "alias": "conversation"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showStatus": { "alias": "showStatus"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4409
4744
|
}
|
|
4410
4745
|
|
|
4411
|
-
|
|
4412
|
-
|
|
4413
|
-
|
|
4746
|
+
interface AXConversationRegistryComponentRef {
|
|
4747
|
+
component?: Type<unknown>;
|
|
4748
|
+
componentLoader?: () => Promise<Type<unknown>>;
|
|
4749
|
+
}
|
|
4750
|
+
/** Placeholder shown while a lazy registry component is loading. */
|
|
4751
|
+
type AXConversationOutletSkeleton = 'auto' | 'text' | 'media' | 'none';
|
|
4752
|
+
declare class AXConversationRegistryComponentOutletComponent {
|
|
4753
|
+
readonly component: _angular_core.InputSignal<Type<unknown>>;
|
|
4754
|
+
readonly componentLoader: _angular_core.InputSignal<() => Promise<Type<unknown>>>;
|
|
4755
|
+
readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
|
|
4756
|
+
/**
|
|
4757
|
+
* Skeleton while a `componentLoader` is in flight.
|
|
4758
|
+
* `auto` uses `inputs.message.type`: text/system → single line, other types → multi-line.
|
|
4759
|
+
*/
|
|
4760
|
+
readonly skeleton: _angular_core.InputSignal<AXConversationOutletSkeleton>;
|
|
4761
|
+
readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
|
|
4762
|
+
private readonly pending;
|
|
4763
|
+
readonly isLoading: _angular_core.Signal<boolean>;
|
|
4764
|
+
protected readonly skeletonVariant: _angular_core.Signal<"text" | "none" | "media" | "lines">;
|
|
4765
|
+
/** Avoid re-loading when the parent re-binds the same lazy loader reference. */
|
|
4766
|
+
private activeLoader;
|
|
4767
|
+
constructor();
|
|
4768
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationRegistryComponentOutletComponent, never>;
|
|
4769
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationRegistryComponentOutletComponent, "ax-conversation-registry-component-outlet", never, { "component": { "alias": "component"; "required": false; "isSignal": true; }; "componentLoader": { "alias": "componentLoader"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; "skeleton": { "alias": "skeleton"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4770
|
+
}
|
|
4771
|
+
/** Resolve a registry component reference, preferring lazy loaders when provided. */
|
|
4772
|
+
declare function hasRegistryComponent(ref?: AXConversationRegistryComponentRef): boolean;
|
|
4414
4773
|
|
|
4415
|
-
|
|
4416
|
-
|
|
4417
|
-
|
|
4774
|
+
declare class AXConversationSidebarService {
|
|
4775
|
+
private readonly conversationService;
|
|
4776
|
+
constructor();
|
|
4777
|
+
private get registry();
|
|
4778
|
+
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4779
|
+
readonly activeTabId: _angular_core.WritableSignal<string>;
|
|
4780
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4781
|
+
readonly conversations: _angular_core.Signal<AXConversation[]>;
|
|
4782
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4783
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
4784
|
+
readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation.AXConversationTab[]>;
|
|
4785
|
+
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
4786
|
+
/**
|
|
4787
|
+
* Filter and sort conversations
|
|
4788
|
+
*/
|
|
4789
|
+
private filterAndSort;
|
|
4790
|
+
setSearchQuery(q: string): void;
|
|
4791
|
+
setActiveTab(tabId: string): void;
|
|
4792
|
+
selectConversation(conversation: AXConversation): void;
|
|
4793
|
+
getBadgeValue(tabId: string): string | undefined;
|
|
4794
|
+
/**
|
|
4795
|
+
* Load more conversations when the user scrolls near the bottom of the sidebar list.
|
|
4796
|
+
*/
|
|
4797
|
+
loadMoreConversations(): Promise<void>;
|
|
4798
|
+
/**
|
|
4799
|
+
* Handle scroll threshold (for infinite scroll)
|
|
4800
|
+
*/
|
|
4801
|
+
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4802
|
+
/**
|
|
4803
|
+
* Reload conversation list from the first page (e.g. pull-to-refresh).
|
|
4804
|
+
*/
|
|
4805
|
+
reloadConversations(): Promise<void>;
|
|
4806
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSidebarService, never>;
|
|
4807
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4808
|
+
}
|
|
4418
4809
|
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
|
|
4427
|
-
|
|
4428
|
-
|
|
4429
|
-
|
|
4430
|
-
|
|
4431
|
-
|
|
4432
|
-
|
|
4810
|
+
declare class AXConversationSidebarComponent implements OnDestroy {
|
|
4811
|
+
readonly sidebar: AXConversationSidebarService;
|
|
4812
|
+
protected readonly config: Required<_acorex_components_conversation.AXConversationConfig>;
|
|
4813
|
+
private readonly conversationService;
|
|
4814
|
+
private readonly popupService;
|
|
4815
|
+
private readonly translation;
|
|
4816
|
+
private readonly ngZone;
|
|
4817
|
+
private readonly cdr;
|
|
4818
|
+
/** Conversation selected event */
|
|
4819
|
+
readonly conversationSelected: _angular_core.OutputEmitterRef<AXConversation>;
|
|
4820
|
+
/** Search debouncing */
|
|
4821
|
+
private readonly searchSubject;
|
|
4822
|
+
/** Derived state for template */
|
|
4823
|
+
readonly enabledTabs: _angular_core.Signal<_acorex_components_conversation.AXConversationTab[]>;
|
|
4824
|
+
readonly filteredConversations: _angular_core.Signal<AXConversation[]>;
|
|
4825
|
+
readonly loading: _angular_core.Signal<boolean>;
|
|
4826
|
+
readonly loadingMore: _angular_core.WritableSignal<boolean>;
|
|
4827
|
+
readonly hasMoreConversations: _angular_core.Signal<boolean>;
|
|
4828
|
+
readonly isSidebarTabsHorizontal: _angular_core.Signal<boolean>;
|
|
4829
|
+
readonly sidebarTabLocation: _angular_core.Signal<AXTabLocation>;
|
|
4830
|
+
constructor();
|
|
4831
|
+
/** Handle search input change with debouncing */
|
|
4832
|
+
onSearchChange(value: string): void;
|
|
4833
|
+
/** Handle tab change from ax-tabs */
|
|
4834
|
+
onTabChange(event: {
|
|
4835
|
+
tab?: {
|
|
4836
|
+
key?: string;
|
|
4837
|
+
};
|
|
4838
|
+
}): void;
|
|
4839
|
+
/** Select a conversation */
|
|
4840
|
+
selectConversation(conversation: AXConversation): void;
|
|
4841
|
+
/** Get badge value for tab */
|
|
4842
|
+
getBadgeValue(tabId: string): string | undefined;
|
|
4843
|
+
getTabLabel(tabId: string): string;
|
|
4844
|
+
openNewConversationPopup(): Promise<void>;
|
|
4845
|
+
/** Handle infinite scroll threshold - delegate to service */
|
|
4846
|
+
onScrollThreshold(edge: 'top' | 'bottom'): Promise<void>;
|
|
4847
|
+
/** Cleanup on destroy */
|
|
4848
|
+
ngOnDestroy(): void;
|
|
4849
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSidebarComponent, never>;
|
|
4850
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationSidebarComponent, "ax-conversation-sidebar", never, {}, { "conversationSelected": "conversationSelected"; }, never, ["ax-suffix"], true, never>;
|
|
4851
|
+
}
|
|
4852
|
+
|
|
4853
|
+
type AXConversationNewWizardStep = 'selectUsers' | 'groupDetails';
|
|
4854
|
+
declare class AXConversationNewDialogComponent extends AXBasePageComponent {
|
|
4855
|
+
/**
|
|
4856
|
+
* Assigned by {@link AXPopupComponent} from `open(..., { data: { conversationService } })`.
|
|
4857
|
+
* Not injected: popup content is created on the root view container, so route-scoped providers
|
|
4858
|
+
* would not see the same `AXConversationService` instance as the conversation feature.
|
|
4859
|
+
*/
|
|
4860
|
+
conversationService: AXConversationService;
|
|
4861
|
+
private readonly toastService;
|
|
4862
|
+
private readonly translation;
|
|
4863
|
+
private readonly config;
|
|
4864
|
+
private readonly destroyRef;
|
|
4865
|
+
private readonly popupService;
|
|
4866
|
+
private searchDebounceTimer?;
|
|
4867
|
+
constructor();
|
|
4868
|
+
/**
|
|
4869
|
+
* Injected by {@link AXPopupComponent} when this dialog is opened via {@link AXPopupService}.
|
|
4870
|
+
* Required for `setTitle` / dynamic header — {@link AXBasePageComponent#setTitle} is otherwise unset.
|
|
4871
|
+
*/
|
|
4872
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4873
|
+
readonly availableUsers: _angular_core.WritableSignal<AXConversationParticipant[]>;
|
|
4874
|
+
readonly selectedUserIds: _angular_core.WritableSignal<string[]>;
|
|
4875
|
+
readonly groupTitle: _angular_core.WritableSignal<string>;
|
|
4876
|
+
readonly groupAvatar: _angular_core.WritableSignal<string>;
|
|
4877
|
+
readonly groupAvatarFileName: _angular_core.WritableSignal<string>;
|
|
4878
|
+
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4879
|
+
readonly creating: _angular_core.WritableSignal<boolean>;
|
|
4880
|
+
/** For 2+ users: step 1 = pick users, step 2 = title + avatar. */
|
|
4881
|
+
readonly wizardStep: _angular_core.WritableSignal<AXConversationNewWizardStep>;
|
|
4882
|
+
readonly showUserPickerStep: _angular_core.Signal<boolean>;
|
|
4883
|
+
readonly showGroupDetailsStep: _angular_core.Signal<boolean>;
|
|
4884
|
+
readonly showNextButton: _angular_core.Signal<boolean>;
|
|
4885
|
+
readonly showGroupBackButton: _angular_core.Signal<boolean>;
|
|
4886
|
+
readonly showCreateButton: _angular_core.Signal<boolean>;
|
|
4887
|
+
readonly canGoNextToGroupDetails: _angular_core.Signal<boolean>;
|
|
4888
|
+
readonly canCreate: _angular_core.Signal<boolean>;
|
|
4889
|
+
private readonly _resetWizardWhenSingleEffect;
|
|
4890
|
+
private readonly _syncPopupTitleEffect;
|
|
4891
|
+
readonly usersListEmptyTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
4892
|
+
readonly usersListLoadingTpl: _angular_core.Signal<TemplateRef<unknown>>;
|
|
4893
|
+
readonly usersList: _angular_core.Signal<AXListComponent>;
|
|
4894
|
+
private readonly groupNameInput;
|
|
4895
|
+
private readonly groupPhotoInput;
|
|
4896
|
+
readonly groupPhotoAriaLabel: _angular_core.Signal<string>;
|
|
4897
|
+
readonly usersListDataSource: AXDataSource<unknown>;
|
|
4898
|
+
onCancel(): void;
|
|
4899
|
+
onSelectedUsersChange(ids: string[]): void;
|
|
4900
|
+
onNextToGroupDetails(): void;
|
|
4901
|
+
onBackFromGroupDetails(): void;
|
|
4902
|
+
onPickGroupPhoto(): void;
|
|
4903
|
+
onClearGroupPhoto(): void;
|
|
4904
|
+
onEditGroupPhoto(): Promise<void>;
|
|
4905
|
+
onGroupPhotoSelected(event: Event): Promise<void>;
|
|
4906
|
+
private openGroupPhotoEditor;
|
|
4907
|
+
onSearchChange(value: string): void;
|
|
4908
|
+
isUserSelected(id: string): boolean;
|
|
4909
|
+
userFromItem(item: unknown): AXConversationParticipant | null;
|
|
4910
|
+
private mergeUsersCache;
|
|
4911
|
+
onCreateConversation(): Promise<void>;
|
|
4912
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationNewDialogComponent, never>;
|
|
4913
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationNewDialogComponent, "ax-conversation-new-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4914
|
+
}
|
|
4915
|
+
|
|
4916
|
+
type AXConversationDeleteDialogMode = 'private' | 'leave' | 'destroy-room';
|
|
4917
|
+
interface AXConversationDeleteDialogResult {
|
|
4918
|
+
confirmed: boolean;
|
|
4919
|
+
forEveryone: boolean;
|
|
4920
|
+
}
|
|
4921
|
+
declare class AXConversationDeleteDialogComponent {
|
|
4922
|
+
private readonly translation;
|
|
4923
|
+
/**
|
|
4924
|
+
* Assigned by {@link AXPopupComponent} from `open(..., { data })`.
|
|
4925
|
+
*/
|
|
4926
|
+
conversation: AXConversation;
|
|
4927
|
+
mode: AXConversationDeleteDialogMode;
|
|
4928
|
+
peerName?: string;
|
|
4929
|
+
readonly __popup__: _angular_core.InputSignal<AXPopupRef<any>>;
|
|
4930
|
+
forEveryone: boolean;
|
|
4931
|
+
readonly onClosed: EventEmitter<AXComponentCloseEvent>;
|
|
4932
|
+
readonly showCheckbox: _angular_core.Signal<boolean>;
|
|
4933
|
+
readonly messageText: _angular_core.Signal<string>;
|
|
4934
|
+
readonly checkboxLabel: _angular_core.Signal<string>;
|
|
4935
|
+
readonly confirmLabel: _angular_core.Signal<string>;
|
|
4936
|
+
confirm(): void;
|
|
4937
|
+
cancel(): void;
|
|
4938
|
+
private close;
|
|
4939
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationDeleteDialogComponent, never>;
|
|
4940
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationDeleteDialogComponent, "ax-conversation-delete-dialog", never, { "__popup__": { "alias": "__popup__"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4941
|
+
}
|
|
4942
|
+
|
|
4943
|
+
declare class AXConversationInfiniteScrollDirective {
|
|
4944
|
+
private readonly elementRef;
|
|
4945
|
+
private readonly platformId;
|
|
4946
|
+
private readonly ngZone;
|
|
4947
|
+
private readonly destroyRef;
|
|
4948
|
+
/** Threshold in pixels from the edge to trigger the event */
|
|
4949
|
+
readonly threshold: _angular_core.InputSignal<number>;
|
|
4950
|
+
/** Which edge to watch: 'top', 'bottom', or 'both' */
|
|
4951
|
+
readonly edge: _angular_core.InputSignal<"top" | "bottom" | "both">;
|
|
4952
|
+
/** When true, scroll events are ignored (e.g. while a page is loading). */
|
|
4953
|
+
readonly scrollDisabled: _angular_core.InputSignal<boolean>;
|
|
4954
|
+
/** Minimum time between emissions (ms) to avoid duplicate API calls. */
|
|
4955
|
+
readonly cooldownMs: _angular_core.InputSignal<number>;
|
|
4956
|
+
/** Event emitted when scrolling reaches the threshold */
|
|
4957
|
+
readonly scrollThreshold: _angular_core.OutputEmitterRef<"top" | "bottom">;
|
|
4958
|
+
private lastScrollTop;
|
|
4959
|
+
private ticking;
|
|
4960
|
+
private lastEmitAt;
|
|
4961
|
+
private pendingEmit;
|
|
4962
|
+
constructor();
|
|
4963
|
+
private setupScrollListener;
|
|
4964
|
+
private handleScroll;
|
|
4965
|
+
private emitThreshold;
|
|
4966
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationInfiniteScrollDirective, never>;
|
|
4967
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXConversationInfiniteScrollDirective, "[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>;
|
|
4433
4968
|
}
|
|
4434
|
-
|
|
4435
|
-
declare
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
|
|
4969
|
+
|
|
4970
|
+
declare const AX_CONVERSATION_AUDIO_PRESENTATION: {
|
|
4971
|
+
readonly icon: "fa-light fa-music text-amber-500";
|
|
4972
|
+
readonly title: "Audio";
|
|
4973
|
+
};
|
|
4974
|
+
declare function conversationAudioUtilities(): NonNullable<AXFileType['utilities']>;
|
|
4975
|
+
declare function createConversationAudioFileType(): AXFileType;
|
|
4976
|
+
declare class AXConversationAudioFileTypeProvider extends AXFileTypeInfoProvider {
|
|
4977
|
+
items(): Promise<AXFileType<{
|
|
4978
|
+
[x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
|
|
4979
|
+
}>[]>;
|
|
4980
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioFileTypeProvider, never>;
|
|
4981
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4440
4982
|
}
|
|
4441
|
-
|
|
4442
|
-
declare function
|
|
4443
|
-
|
|
4444
|
-
declare function
|
|
4445
|
-
url: string;
|
|
4446
|
-
mediaId?: string;
|
|
4447
|
-
mimeType: string;
|
|
4448
|
-
size: number;
|
|
4449
|
-
} | null;
|
|
4450
|
-
declare function pickerItemToMediaReference(item: Pick<AXConversationComposerPickerUploadItem, 'uploaded' | 'uploadedUrl' | 'mediaId' | 'file'>): AXConversationUploaderReference | null;
|
|
4451
|
-
declare function deleteUploadedPickerMedia(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>): Promise<void>;
|
|
4452
|
-
declare function cleanupPickerUploads(uploader: AXUploaderService, items: Iterable<AXConversationComposerPickerUploadItem | null | undefined>, options?: AXConversationCleanupPickerUploadsOptions): void;
|
|
4453
|
-
declare function revokePickerBlobPreviews(items: Iterable<{
|
|
4454
|
-
preview?: string;
|
|
4455
|
-
} | null | undefined>): void;
|
|
4456
|
-
declare function isUploadAborted(error: unknown, signal?: AbortSignal): boolean;
|
|
4457
|
-
declare function limitFilesToCapacity(files: File[], currentCount: number, maxFiles: number): File[];
|
|
4458
|
-
declare function uploadPickerFile(uploader: AXUploaderService, conversationId: string, file: File, onProgress: (percent: number) => void, signal?: AbortSignal): Promise<{
|
|
4459
|
-
url: string;
|
|
4460
|
-
mediaId?: string;
|
|
4461
|
-
mimeType: string;
|
|
4462
|
-
size: number;
|
|
4463
|
-
}>;
|
|
4464
|
-
declare function notifyMaxFilesCapacityExceeded(toast: AXToastService, translation: AXTranslationService, maxFiles: number): void;
|
|
4465
|
-
/** User-facing message for a file validation failure. */
|
|
4466
|
-
declare function formatPickerValidationMessage(translation: AXTranslationService, file: File, error: AXValidationRuleResult | undefined): string;
|
|
4467
|
-
/** Show a warning toast for each failed validation rule result. */
|
|
4468
|
-
declare function notifyPickerValidationErrors(toast: AXToastService, translation: AXTranslationService, rejected: {
|
|
4469
|
-
file: File;
|
|
4470
|
-
errors: AXValidationRuleResult[];
|
|
4471
|
-
}[]): void;
|
|
4472
|
-
/** Close popup/action-sheet host or inline composer shell after send/cancel. */
|
|
4473
|
-
declare function dismissComposerPickerHost(composerService: AXConversationComposerService, popupRef?: AXPopupRef | null, actionSheetRef?: AXActionSheetRef | null): void;
|
|
4983
|
+
|
|
4984
|
+
declare function audioItemFromUpload(file: File, result: AXConversationUploaderResult, duration: number): AXConversationAudioMediaItem;
|
|
4985
|
+
declare function mergeAudioUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
|
|
4986
|
+
declare function applyAudioLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
|
|
4474
4987
|
|
|
4475
4988
|
interface AXConversationAudioFile extends AXConversationComposerPickerUploadItem {
|
|
4476
4989
|
duration?: number;
|
|
@@ -4487,6 +5000,7 @@ declare class AXConversationAudioPickerComponent implements OnDestroy, AXConvers
|
|
|
4487
5000
|
private readonly fileTypeRegistry;
|
|
4488
5001
|
private readonly platformId;
|
|
4489
5002
|
private readonly toast;
|
|
5003
|
+
private readonly popupService;
|
|
4490
5004
|
readonly translation: AXTranslationService;
|
|
4491
5005
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4492
5006
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
@@ -4498,10 +5012,11 @@ declare class AXConversationAudioPickerComponent implements OnDestroy, AXConvers
|
|
|
4498
5012
|
readonly audioFiles: _angular_core.WritableSignal<AXConversationAudioFile[]>;
|
|
4499
5013
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4500
5014
|
private readonly pickerShell;
|
|
4501
|
-
readonly typeIconClass: "fa-light fa-music text-amber-500";
|
|
4502
5015
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-music text-amber-500" | "fa-light fa-cloud-arrow-up">;
|
|
4503
5016
|
private catalogFileTypeDef?;
|
|
4504
5017
|
caption: string;
|
|
5018
|
+
groupItems: boolean;
|
|
5019
|
+
sendAsDocuments: boolean;
|
|
4505
5020
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
4506
5021
|
constructor();
|
|
4507
5022
|
activate(): Promise<void>;
|
|
@@ -4512,11 +5027,15 @@ declare class AXConversationAudioPickerComponent implements OnDestroy, AXConvers
|
|
|
4512
5027
|
private uploadAudioAt;
|
|
4513
5028
|
private patchAudio;
|
|
4514
5029
|
removeAudio(index: number): void;
|
|
5030
|
+
renameAudio(index: number): Promise<void>;
|
|
5031
|
+
replaceAttachment(index: number): Promise<void>;
|
|
4515
5032
|
sendAudio(): Promise<void>;
|
|
5033
|
+
private sendAudioAsDocuments;
|
|
4516
5034
|
canSend(): boolean;
|
|
4517
5035
|
getUploadingLabel(progress: number): string;
|
|
4518
5036
|
getCancelUploadLabel(): string;
|
|
4519
5037
|
getHeaderTitle(): string;
|
|
5038
|
+
truncateFileName(fileName: string): string;
|
|
4520
5039
|
onAddMoreFiles(): void;
|
|
4521
5040
|
cancel(): void;
|
|
4522
5041
|
ngOnDestroy(): void;
|
|
@@ -4583,18 +5102,15 @@ declare class AXConversationFileFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
4583
5102
|
[x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
|
|
4584
5103
|
}>[]>;
|
|
4585
5104
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileFileTypeProvider, never>;
|
|
4586
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
5105
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4587
5106
|
}
|
|
4588
5107
|
|
|
4589
|
-
declare function fileItemFromUpload(file: File, result: AXConversationUploaderResult
|
|
5108
|
+
declare function fileItemFromUpload(file: File, result: AXConversationUploaderResult, extras?: {
|
|
5109
|
+
duration?: number;
|
|
5110
|
+
}): AXConversationFileMediaItem;
|
|
4590
5111
|
declare function mergeFileUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
|
|
4591
5112
|
declare function applyFileLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
|
|
4592
5113
|
|
|
4593
|
-
interface AXConversationPickerFileBadge {
|
|
4594
|
-
ext: string;
|
|
4595
|
-
color: string;
|
|
4596
|
-
}
|
|
4597
|
-
|
|
4598
5114
|
interface AXConversationAttachedFile extends AXConversationComposerPickerUploadItem {
|
|
4599
5115
|
icon: string;
|
|
4600
5116
|
type: 'image' | 'video' | 'audio' | 'file';
|
|
@@ -4610,6 +5126,7 @@ declare class AXConversationFilePickerComponent implements OnDestroy, AXConversa
|
|
|
4610
5126
|
private readonly composerServiceFromInjector;
|
|
4611
5127
|
private get composerService();
|
|
4612
5128
|
private readonly toast;
|
|
5129
|
+
private readonly popupService;
|
|
4613
5130
|
readonly translation: AXTranslationService;
|
|
4614
5131
|
readonly conversation: _angular_core.InputSignal<AXConversation>;
|
|
4615
5132
|
readonly maxFiles: _angular_core.InputSignal<number>;
|
|
@@ -4626,22 +5143,27 @@ declare class AXConversationFilePickerComponent implements OnDestroy, AXConversa
|
|
|
4626
5143
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-file text-neutral-500" | "fa-light fa-cloud-arrow-up">;
|
|
4627
5144
|
private catalogFileTypeDef?;
|
|
4628
5145
|
caption: string;
|
|
5146
|
+
groupItems: boolean;
|
|
4629
5147
|
constructor();
|
|
4630
5148
|
activate(): Promise<void>;
|
|
4631
5149
|
private createUtilityContext;
|
|
4632
5150
|
private getCatalogFileTypeDef;
|
|
4633
5151
|
private pickerKind;
|
|
4634
5152
|
handleFiles(fileList: File[]): Promise<void>;
|
|
5153
|
+
private buildAttachedFileEntry;
|
|
4635
5154
|
private uploadFile;
|
|
4636
5155
|
removeFile(index: number): void;
|
|
5156
|
+
renameFile(index: number): Promise<void>;
|
|
5157
|
+
replaceAttachment(index: number): Promise<void>;
|
|
4637
5158
|
sendFiles(): Promise<void>;
|
|
4638
5159
|
private updateFileProgress;
|
|
4639
5160
|
private uploadFileWithProgress;
|
|
4640
5161
|
cancel(): void;
|
|
4641
5162
|
ngOnDestroy(): void;
|
|
4642
5163
|
private dismissPicker;
|
|
5164
|
+
private revokePreview;
|
|
4643
5165
|
getHeaderTitle(): string;
|
|
4644
|
-
|
|
5166
|
+
truncateFileName(fileName: string): string;
|
|
4645
5167
|
onAddMoreFiles(): void;
|
|
4646
5168
|
getCancelUploadLabel(): string;
|
|
4647
5169
|
formatFileSize(bytes: number): string;
|
|
@@ -4666,7 +5188,13 @@ declare class AXConversationImageFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
4666
5188
|
[x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
|
|
4667
5189
|
}>[]>;
|
|
4668
5190
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageFileTypeProvider, never>;
|
|
4669
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
5191
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
5192
|
+
}
|
|
5193
|
+
|
|
5194
|
+
type AXConversationMediaGalleryLayoutMode = 'single' | 'dual' | 'triple' | 'masonry';
|
|
5195
|
+
interface AXConversationMediaGalleryRow<T> {
|
|
5196
|
+
items: T[];
|
|
5197
|
+
startIndex: number;
|
|
4670
5198
|
}
|
|
4671
5199
|
|
|
4672
5200
|
interface AXConversationImageFile extends AXConversationComposerPickerUploadItem {
|
|
@@ -4680,6 +5208,7 @@ declare class AXConversationImagePickerComponent implements OnDestroy, AXConvers
|
|
|
4680
5208
|
private readonly composerServiceFromInjector;
|
|
4681
5209
|
private get composerService();
|
|
4682
5210
|
private readonly uploader;
|
|
5211
|
+
private readonly popupService;
|
|
4683
5212
|
private readonly fileService;
|
|
4684
5213
|
private readonly fileTypeRegistry;
|
|
4685
5214
|
private readonly platformId;
|
|
@@ -4697,7 +5226,11 @@ declare class AXConversationImagePickerComponent implements OnDestroy, AXConvers
|
|
|
4697
5226
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4698
5227
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-image text-purple-500" | "fa-light fa-cloud-arrow-up">;
|
|
4699
5228
|
caption: string;
|
|
5229
|
+
groupItems: boolean;
|
|
5230
|
+
sendAsDocuments: boolean;
|
|
4700
5231
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5232
|
+
readonly layoutMode: _angular_core.Signal<AXConversationMediaGalleryLayoutMode>;
|
|
5233
|
+
readonly mediaRows: _angular_core.Signal<AXConversationMediaGalleryRow<AXConversationImageFile>[]>;
|
|
4701
5234
|
private imageFileType?;
|
|
4702
5235
|
constructor();
|
|
4703
5236
|
activate(): Promise<void>;
|
|
@@ -4707,7 +5240,11 @@ declare class AXConversationImagePickerComponent implements OnDestroy, AXConvers
|
|
|
4707
5240
|
private uploadImageAt;
|
|
4708
5241
|
private patchImage;
|
|
4709
5242
|
removeImage(index: number): void;
|
|
5243
|
+
replaceAttachment(index: number): Promise<void>;
|
|
5244
|
+
editImage(index: number): Promise<void>;
|
|
5245
|
+
private applyReplacementFile;
|
|
4710
5246
|
sendImages(): Promise<void>;
|
|
5247
|
+
private sendImagesAsDocuments;
|
|
4711
5248
|
canSend(): boolean;
|
|
4712
5249
|
getUploadingLabel(progress: number): string;
|
|
4713
5250
|
getCancelUploadLabel(): string;
|
|
@@ -4741,23 +5278,43 @@ declare class AXConversationLocationPickerComponent {
|
|
|
4741
5278
|
}
|
|
4742
5279
|
|
|
4743
5280
|
declare class AXConversationPickerFooterComponent {
|
|
4744
|
-
readonly
|
|
5281
|
+
readonly showAdd: _angular_core.InputSignal<boolean>;
|
|
5282
|
+
readonly addLabel: _angular_core.InputSignal<string>;
|
|
5283
|
+
readonly cancelLabel: _angular_core.InputSignal<string>;
|
|
5284
|
+
readonly sendLabel: _angular_core.InputSignal<string>;
|
|
4745
5285
|
readonly sendDisabled: _angular_core.InputSignal<boolean>;
|
|
5286
|
+
readonly onAdd: _angular_core.OutputEmitterRef<void>;
|
|
4746
5287
|
readonly onCancel: _angular_core.OutputEmitterRef<void>;
|
|
4747
5288
|
readonly onSend: _angular_core.OutputEmitterRef<void>;
|
|
4748
5289
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerFooterComponent, never>;
|
|
4749
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerFooterComponent, "ax-conversation-picker-footer", never, { "
|
|
5290
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerFooterComponent, "ax-conversation-picker-footer", never, { "showAdd": { "alias": "showAdd"; "required": false; "isSignal": true; }; "addLabel": { "alias": "addLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": true; "isSignal": true; }; "sendLabel": { "alias": "sendLabel"; "required": true; "isSignal": true; }; "sendDisabled": { "alias": "sendDisabled"; "required": false; "isSignal": true; }; }, { "onAdd": "onAdd"; "onCancel": "onCancel"; "onSend": "onSend"; }, never, never, true, never>;
|
|
4750
5291
|
}
|
|
4751
5292
|
|
|
4752
5293
|
declare class AXConversationPickerHeaderComponent {
|
|
5294
|
+
private readonly translation;
|
|
4753
5295
|
readonly title: _angular_core.InputSignal<string>;
|
|
4754
5296
|
readonly showMenu: _angular_core.InputSignal<boolean>;
|
|
4755
5297
|
readonly addMoreLabel: _angular_core.InputSignal<string>;
|
|
5298
|
+
readonly closeLabel: _angular_core.InputSignal<string>;
|
|
4756
5299
|
readonly onClose: _angular_core.OutputEmitterRef<void>;
|
|
4757
5300
|
readonly onAddMore: _angular_core.OutputEmitterRef<void>;
|
|
4758
5301
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerHeaderComponent, never>;
|
|
4759
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerHeaderComponent, "ax-conversation-picker-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "showMenu": { "alias": "showMenu"; "required": false; "isSignal": true; }; "addMoreLabel": { "alias": "addMoreLabel"; "required": false; "isSignal": true; }; }, { "onClose": "onClose"; "onAddMore": "onAddMore"; }, never, never, true, never>;
|
|
5302
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerHeaderComponent, "ax-conversation-picker-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "showMenu": { "alias": "showMenu"; "required": false; "isSignal": true; }; "addMoreLabel": { "alias": "addMoreLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; }, { "onClose": "onClose"; "onAddMore": "onAddMore"; }, never, never, true, never>;
|
|
5303
|
+
}
|
|
5304
|
+
|
|
5305
|
+
/** Explorer/OS paste often has an empty MIME type; catalogs reject that. */
|
|
5306
|
+
declare function normalizeConversationInboundFile(file: File): File;
|
|
5307
|
+
/** Extract OS-copied files from a paste event (e.g. Ctrl+V after copying a file in Explorer). */
|
|
5308
|
+
declare function filesFromClipboardEvent(event: ClipboardEvent): File[];
|
|
5309
|
+
|
|
5310
|
+
interface AXConversationMediaDimensions {
|
|
5311
|
+
width: number;
|
|
5312
|
+
height: number;
|
|
5313
|
+
duration: number;
|
|
4760
5314
|
}
|
|
5315
|
+
declare function probeImageDimensions(source: Blob | string): Promise<Pick<AXConversationMediaDimensions, 'width' | 'height'>>;
|
|
5316
|
+
declare function probeAudioDuration(source: Blob): Promise<number>;
|
|
5317
|
+
declare function probeVideoMedia(source: Blob): Promise<AXConversationMediaDimensions>;
|
|
4761
5318
|
|
|
4762
5319
|
declare function formatFileSize(bytes: number): string;
|
|
4763
5320
|
declare function formatDuration(seconds: number): string;
|
|
@@ -4771,14 +5328,29 @@ declare function resolvePersistableMediaUrl(url: string | undefined): string | u
|
|
|
4771
5328
|
/** First non-empty URL for img/video/audio at runtime (includes resolved blob: URLs). */
|
|
4772
5329
|
declare function pickDisplayMediaUrl(...candidates: (string | null | undefined)[]): string;
|
|
4773
5330
|
|
|
4774
|
-
/**
|
|
5331
|
+
/** Caption field with emoji picker for composer media pickers. */
|
|
4775
5332
|
declare class AXConversationPickerCaptionComponent {
|
|
4776
5333
|
readonly translation: AXTranslationService;
|
|
4777
5334
|
readonly caption: _angular_core.ModelSignal<string>;
|
|
5335
|
+
readonly showInlineSend: _angular_core.InputSignal<boolean>;
|
|
4778
5336
|
readonly sendDisabled: _angular_core.InputSignal<boolean>;
|
|
4779
5337
|
readonly onSend: _angular_core.OutputEmitterRef<void>;
|
|
5338
|
+
private readonly emojiPopoverRef;
|
|
5339
|
+
onEmojiClick(event: AXClickEvent): void;
|
|
5340
|
+
onEmojiSelected(emoji: string): void;
|
|
5341
|
+
onCaptionKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
|
|
4780
5342
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerCaptionComponent, never>;
|
|
4781
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerCaptionComponent, "ax-conversation-picker-caption", never, { "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "sendDisabled": { "alias": "sendDisabled"; "required": false; "isSignal": true; }; }, { "caption": "captionChange"; "onSend": "onSend"; }, never, never, true, never>;
|
|
5343
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerCaptionComponent, "ax-conversation-picker-caption", never, { "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "showInlineSend": { "alias": "showInlineSend"; "required": false; "isSignal": true; }; "sendDisabled": { "alias": "sendDisabled"; "required": false; "isSignal": true; }; }, { "caption": "captionChange"; "onSend": "onSend"; }, never, never, true, never>;
|
|
5344
|
+
}
|
|
5345
|
+
|
|
5346
|
+
/** Grouping and delivery options shown below composer picker previews. */
|
|
5347
|
+
declare class AXConversationPickerOptionsComponent {
|
|
5348
|
+
readonly showGroupItems: _angular_core.InputSignal<boolean>;
|
|
5349
|
+
readonly showSendAsDocuments: _angular_core.InputSignal<boolean>;
|
|
5350
|
+
readonly groupItems: _angular_core.ModelSignal<boolean>;
|
|
5351
|
+
readonly sendAsDocuments: _angular_core.ModelSignal<boolean>;
|
|
5352
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerOptionsComponent, never>;
|
|
5353
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerOptionsComponent, "ax-conversation-picker-options", never, { "showGroupItems": { "alias": "showGroupItems"; "required": false; "isSignal": true; }; "showSendAsDocuments": { "alias": "showSendAsDocuments"; "required": false; "isSignal": true; }; "groupItems": { "alias": "groupItems"; "required": false; "isSignal": true; }; "sendAsDocuments": { "alias": "sendAsDocuments"; "required": false; "isSignal": true; }; }, { "groupItems": "groupItemsChange"; "sendAsDocuments": "sendAsDocumentsChange"; }, never, never, true, never>;
|
|
4782
5354
|
}
|
|
4783
5355
|
|
|
4784
5356
|
/** Shared drag-and-drop handlers for composer pickers. */
|
|
@@ -4800,12 +5372,19 @@ declare class AXConversationPickerEmptyComponent {
|
|
|
4800
5372
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerEmptyComponent, "ax-conversation-picker-empty", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": true; "isSignal": true; }; "iconClass": { "alias": "iconClass"; "required": true; "isSignal": true; }; "dragOver": { "alias": "dragOver"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4801
5373
|
}
|
|
4802
5374
|
|
|
5375
|
+
/** Active composer picker paste handlers (top-most popup wins). */
|
|
5376
|
+
type AXConversationPickerPasteHandler = (files: File[]) => void;
|
|
5377
|
+
declare function registerComposerPickerPasteHandler(handler: AXConversationPickerPasteHandler): () => void;
|
|
5378
|
+
declare function getActiveComposerPickerPasteHandler(): AXConversationPickerPasteHandler | undefined;
|
|
5379
|
+
|
|
4803
5380
|
/**
|
|
4804
5381
|
* Wraps composer pickers with {@link AXUploaderZoneDirective} for browse, drop, and validation.
|
|
4805
5382
|
*/
|
|
4806
5383
|
declare class AXConversationPickerShellComponent {
|
|
4807
5384
|
private readonly toast;
|
|
4808
5385
|
private readonly translation;
|
|
5386
|
+
private readonly uploader;
|
|
5387
|
+
private readonly destroyRef;
|
|
4809
5388
|
private readonly zone;
|
|
4810
5389
|
readonly fileType: _angular_core.InputSignal<string>;
|
|
4811
5390
|
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
@@ -4813,9 +5392,13 @@ declare class AXConversationPickerShellComponent {
|
|
|
4813
5392
|
readonly dragEnter: _angular_core.OutputEmitterRef<DragEvent>;
|
|
4814
5393
|
readonly dragLeave: _angular_core.OutputEmitterRef<DragEvent>;
|
|
4815
5394
|
readonly dragOver: _angular_core.OutputEmitterRef<DragEvent>;
|
|
5395
|
+
constructor();
|
|
4816
5396
|
/** Open the OS file picker for this shell's catalog. */
|
|
4817
5397
|
browse(): Promise<void>;
|
|
5398
|
+
protected onHostPaste(event: ClipboardEvent): void;
|
|
4818
5399
|
protected onZoneFileChange(event: AXUploaderFileChangeEvent): void;
|
|
5400
|
+
private ingestPastedFiles;
|
|
5401
|
+
private emitValidatedFiles;
|
|
4819
5402
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationPickerShellComponent, never>;
|
|
4820
5403
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationPickerShellComponent, "ax-conversation-picker-shell", never, { "fileType": { "alias": "fileType"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "dragEnter": "dragEnter"; "dragLeave": "dragLeave"; "dragOver": "dragOver"; }, never, ["*"], true, never>;
|
|
4821
5404
|
}
|
|
@@ -4838,6 +5421,7 @@ declare class AXConversationStickerTabComponent {
|
|
|
4838
5421
|
private readonly http;
|
|
4839
5422
|
private readonly destroyRef;
|
|
4840
5423
|
private readonly apiKey;
|
|
5424
|
+
protected readonly translation: AXTranslationService;
|
|
4841
5425
|
readonly itemSelected: _angular_core.OutputEmitterRef<AXConversationStickerPayload>;
|
|
4842
5426
|
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
4843
5427
|
readonly activeStickers: _angular_core.WritableSignal<AXConversationStickerPayload[]>;
|
|
@@ -4873,16 +5457,21 @@ declare class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
4873
5457
|
[x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
|
|
4874
5458
|
}>[]>;
|
|
4875
5459
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoFileTypeProvider, never>;
|
|
4876
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
5460
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4877
5461
|
}
|
|
4878
5462
|
|
|
4879
|
-
declare function videoItemFromUpload(file: File, result: AXConversationUploaderResult, duration: number
|
|
5463
|
+
declare function videoItemFromUpload(file: File, result: AXConversationUploaderResult, duration: number, size?: {
|
|
5464
|
+
width?: number;
|
|
5465
|
+
height?: number;
|
|
5466
|
+
}): Promise<AXConversationVideoMediaItem>;
|
|
4880
5467
|
declare function mergeVideoUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
|
|
4881
5468
|
declare function applyVideoLocalPreview(payload: AXConversationMessagePayload, localUrl: string, mimeType?: string): AXConversationMessagePayload;
|
|
4882
5469
|
|
|
4883
5470
|
interface AXConversationVideoFile extends AXConversationComposerPickerUploadItem {
|
|
4884
5471
|
preview?: string;
|
|
4885
5472
|
duration?: number;
|
|
5473
|
+
width?: number;
|
|
5474
|
+
height?: number;
|
|
4886
5475
|
}
|
|
4887
5476
|
declare class AXConversationVideoPickerComponent implements OnDestroy, AXConversationComposerActionComponent {
|
|
4888
5477
|
private uploadsDismissed;
|
|
@@ -4907,7 +5496,11 @@ declare class AXConversationVideoPickerComponent implements OnDestroy, AXConvers
|
|
|
4907
5496
|
readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
4908
5497
|
private readonly pickerShell;
|
|
4909
5498
|
caption: string;
|
|
5499
|
+
groupItems: boolean;
|
|
5500
|
+
sendAsDocuments: boolean;
|
|
4910
5501
|
readonly allowMultiple: _angular_core.Signal<boolean>;
|
|
5502
|
+
readonly layoutMode: _angular_core.Signal<AXConversationMediaGalleryLayoutMode>;
|
|
5503
|
+
readonly mediaRows: _angular_core.Signal<AXConversationMediaGalleryRow<AXConversationVideoFile>[]>;
|
|
4911
5504
|
readonly typeIconClass: "fa-light fa-video ax-text-blue-500";
|
|
4912
5505
|
readonly emptyIconClass: _angular_core.Signal<"fa-light fa-video ax-text-blue-500" | "fa-light fa-cloud-arrow-up">;
|
|
4913
5506
|
private catalogFileTypeDef?;
|
|
@@ -4920,7 +5513,9 @@ declare class AXConversationVideoPickerComponent implements OnDestroy, AXConvers
|
|
|
4920
5513
|
private uploadVideoAt;
|
|
4921
5514
|
private patchVideo;
|
|
4922
5515
|
removeVideo(index: number): void;
|
|
5516
|
+
replaceAttachment(index: number): Promise<void>;
|
|
4923
5517
|
sendVideos(): Promise<void>;
|
|
5518
|
+
private sendVideosAsDocuments;
|
|
4924
5519
|
canSend(): boolean;
|
|
4925
5520
|
getUploadingLabel(progress: number): string;
|
|
4926
5521
|
getCancelUploadLabel(): string;
|
|
@@ -4950,7 +5545,7 @@ declare class AXConversationVoiceFileTypeProvider extends AXFileTypeInfoProvider
|
|
|
4950
5545
|
[x: string]: (ctx: _acorex_core_file.AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown;
|
|
4951
5546
|
}>[]>;
|
|
4952
5547
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceFileTypeProvider, never>;
|
|
4953
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
5548
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
4954
5549
|
}
|
|
4955
5550
|
|
|
4956
5551
|
declare function mergeVoiceUploadResult(payload: AXConversationMessagePayload, result: AXUploadResult): AXConversationMessagePayload;
|
|
@@ -4974,31 +5569,71 @@ declare class AXConversationVoiceRecorderComponent implements AXConversationComp
|
|
|
4974
5569
|
readonly recordingComplete: _angular_core.OutputEmitterRef<Blob>;
|
|
4975
5570
|
readonly recordingCancelled: _angular_core.OutputEmitterRef<void>;
|
|
4976
5571
|
readonly isRecording: _angular_core.WritableSignal<boolean>;
|
|
5572
|
+
readonly isPreview: _angular_core.WritableSignal<boolean>;
|
|
5573
|
+
readonly isPlayingPreview: _angular_core.WritableSignal<boolean>;
|
|
4977
5574
|
readonly isUploading: _angular_core.WritableSignal<boolean>;
|
|
4978
5575
|
readonly uploadProgress: _angular_core.WritableSignal<number>;
|
|
4979
5576
|
readonly recordingDuration: _angular_core.WritableSignal<number>;
|
|
5577
|
+
readonly previewUrl: _angular_core.WritableSignal<string>;
|
|
5578
|
+
readonly livePeaks: _angular_core.WritableSignal<number[]>;
|
|
5579
|
+
readonly liveBarCount: _angular_core.WritableSignal<number>;
|
|
4980
5580
|
private recordingStartTime;
|
|
4981
5581
|
private timerInterval?;
|
|
4982
5582
|
private mediaRecorder?;
|
|
4983
5583
|
private audioChunks;
|
|
4984
5584
|
private activeStream?;
|
|
4985
5585
|
private cancelled;
|
|
5586
|
+
private sendAfterStop;
|
|
5587
|
+
private sendInFlight;
|
|
5588
|
+
private awaitingPreviewData;
|
|
5589
|
+
private previewBlob;
|
|
4986
5590
|
private uploadAbortController?;
|
|
5591
|
+
private audioContext?;
|
|
5592
|
+
private analyser?;
|
|
5593
|
+
private timeDomain;
|
|
5594
|
+
private rafId;
|
|
5595
|
+
private lastLivePeakAt;
|
|
5596
|
+
private waveResizeObserver?;
|
|
5597
|
+
private readonly waveWrapRef;
|
|
5598
|
+
private readonly waveRef;
|
|
4987
5599
|
readonly formattedTime: _angular_core.Signal<string>;
|
|
5600
|
+
readonly canSend: _angular_core.Signal<boolean>;
|
|
5601
|
+
readonly liveDisplayBars: _angular_core.Signal<{
|
|
5602
|
+
index: number;
|
|
5603
|
+
recorded: boolean;
|
|
5604
|
+
height: number;
|
|
5605
|
+
}[]>;
|
|
5606
|
+
readonly waveConfig: _angular_core.Signal<AXWaveConfig>;
|
|
4988
5607
|
constructor();
|
|
4989
5608
|
activate(): Promise<void>;
|
|
4990
5609
|
startRecording(): Promise<void>;
|
|
4991
5610
|
private dismissHost;
|
|
4992
|
-
|
|
5611
|
+
toggleStopOrContinue(): void;
|
|
4993
5612
|
stopRecording(): void;
|
|
5613
|
+
sendRecording(): void;
|
|
5614
|
+
deleteRecording(): void;
|
|
4994
5615
|
cancelRecording(): void;
|
|
4995
|
-
/** Close the voice recorder */
|
|
4996
5616
|
cancel(): void;
|
|
5617
|
+
togglePreview(): void;
|
|
5618
|
+
onWaveStatusChanged(event: AXAudioWaveChangeEvent): void;
|
|
4997
5619
|
abortInProgressUploads(): void;
|
|
4998
|
-
|
|
5620
|
+
private pauseRecording;
|
|
5621
|
+
private continueRecording;
|
|
5622
|
+
private flushPreviewIfWaiting;
|
|
5623
|
+
private buildRecordingBlob;
|
|
5624
|
+
private discardActiveRecorder;
|
|
5625
|
+
private releaseStream;
|
|
5626
|
+
private startLiveWave;
|
|
5627
|
+
private observeWaveWidth;
|
|
5628
|
+
private updateBarCount;
|
|
5629
|
+
private tickLiveWave;
|
|
5630
|
+
private stopLiveWave;
|
|
5631
|
+
private enterPreview;
|
|
5632
|
+
private pausePreview;
|
|
5633
|
+
private clearPreview;
|
|
5634
|
+
private clearPreviewUrl;
|
|
4999
5635
|
private clearTimer;
|
|
5000
5636
|
getUploadingLabel(): string;
|
|
5001
|
-
/** Send voice message */
|
|
5002
5637
|
private sendVoiceMessage;
|
|
5003
5638
|
private stopAndCleanup;
|
|
5004
5639
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRecorderComponent, never>;
|
|
@@ -5034,7 +5669,7 @@ declare function ensureConversationFileCatalogRegistered(registry: AXFileTypeReg
|
|
|
5034
5669
|
declare class AXConversationComposerFileTypesProvider extends AXFileTypeInfoProvider {
|
|
5035
5670
|
items(): Promise<AXFileType[]>;
|
|
5036
5671
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerFileTypesProvider, never>;
|
|
5037
|
-
static ɵprov: _angular_core.ɵɵInjectableDeclaration<
|
|
5672
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
5038
5673
|
}
|
|
5039
5674
|
|
|
5040
5675
|
declare function mergeUploadResult(type: AXConversationMessageType, payload: AXConversationMessagePayload, result: AXUploadResult): Promise<AXConversationMessagePayload>;
|
|
@@ -5106,6 +5741,7 @@ declare const AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION: AXConversationInfoBarActi
|
|
|
5106
5741
|
/**
|
|
5107
5742
|
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5108
5743
|
* - Private: "Delete" - Deletes the conversation
|
|
5744
|
+
* - Bot: "Delete" - Deletes for both sides without a confirmation prompt
|
|
5109
5745
|
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5110
5746
|
*/
|
|
5111
5747
|
declare const AX_CONVERSATION_INFO_BAR_DELETE_ACTION: AXConversationInfoBarAction;
|
|
@@ -5117,7 +5753,10 @@ declare const AX_CONVERSATION_INFO_BAR_BLOCK_ACTION: AXConversationInfoBarAction
|
|
|
5117
5753
|
declare function toUploaderReference(item: AXConversationMediaItemFields): AXConversationUploaderReference;
|
|
5118
5754
|
|
|
5119
5755
|
declare class AXConversationAudioAttachmentComponent {
|
|
5756
|
+
private readonly platformId;
|
|
5757
|
+
protected readonly translation: AXTranslationService;
|
|
5120
5758
|
readonly item: _angular_core.InputSignal<AXConversationAudioMediaItem>;
|
|
5759
|
+
readonly look: _angular_core.InputSignal<"file" | "player">;
|
|
5121
5760
|
readonly playingChange: _angular_core.OutputEmitterRef<boolean>;
|
|
5122
5761
|
readonly timeUpdate: _angular_core.OutputEmitterRef<number>;
|
|
5123
5762
|
readonly durationChange: _angular_core.OutputEmitterRef<number>;
|
|
@@ -5126,23 +5765,45 @@ declare class AXConversationAudioAttachmentComponent {
|
|
|
5126
5765
|
private readonly audioElementRef;
|
|
5127
5766
|
private readonly mediaReference;
|
|
5128
5767
|
private readonly resolvedUrl;
|
|
5768
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
5769
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
5770
|
+
readonly liveDuration: _angular_core.WritableSignal<number>;
|
|
5771
|
+
readonly coverVisible: _angular_core.WritableSignal<boolean>;
|
|
5129
5772
|
readonly audioUrl: _angular_core.Signal<string>;
|
|
5130
5773
|
readonly title: _angular_core.Signal<string>;
|
|
5774
|
+
readonly coverUrl: _angular_core.Signal<string>;
|
|
5131
5775
|
readonly duration: _angular_core.Signal<number>;
|
|
5776
|
+
readonly effectiveDuration: _angular_core.Signal<number>;
|
|
5777
|
+
readonly sliderMax: _angular_core.Signal<number>;
|
|
5778
|
+
readonly currentTimeLabel: _angular_core.Signal<string>;
|
|
5132
5779
|
readonly durationLabel: _angular_core.Signal<string>;
|
|
5780
|
+
readonly downloadName: _angular_core.Signal<string>;
|
|
5781
|
+
constructor();
|
|
5133
5782
|
togglePlay(): void;
|
|
5783
|
+
onPlayClick(event: AXClickEvent): void;
|
|
5784
|
+
onNativePlayClick(event: Event): void;
|
|
5134
5785
|
pause(): void;
|
|
5786
|
+
setPlaybackRate(rate: number): void;
|
|
5787
|
+
setMuted(muted: boolean): void;
|
|
5788
|
+
onSeek(value: AXRangeSliderValue): void;
|
|
5135
5789
|
onPlay(): void;
|
|
5136
5790
|
onPause(): void;
|
|
5137
5791
|
onTimeUpdate(): void;
|
|
5138
5792
|
onLoadedMetadata(): void;
|
|
5139
5793
|
onEnded(): void;
|
|
5140
5794
|
onError(): void;
|
|
5795
|
+
onCoverError(): void;
|
|
5141
5796
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioAttachmentComponent, never>;
|
|
5142
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioAttachmentComponent, "ax-conversation-audio-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
|
|
5797
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioAttachmentComponent, "ax-conversation-audio-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
|
|
5143
5798
|
}
|
|
5144
5799
|
|
|
5800
|
+
type AXConversationFileVisualKind = 'image' | 'video' | 'audio' | 'file';
|
|
5801
|
+
|
|
5145
5802
|
declare class AXConversationFileAttachmentComponent {
|
|
5803
|
+
private readonly platformId;
|
|
5804
|
+
private readonly document;
|
|
5805
|
+
protected readonly translation: AXTranslationService;
|
|
5806
|
+
private readonly thumbImage;
|
|
5146
5807
|
readonly item: _angular_core.InputSignal<AXConversationFileMediaItem>;
|
|
5147
5808
|
private readonly mediaReference;
|
|
5148
5809
|
private readonly resolvedUrl;
|
|
@@ -5150,8 +5811,12 @@ declare class AXConversationFileAttachmentComponent {
|
|
|
5150
5811
|
readonly fileName: _angular_core.Signal<string>;
|
|
5151
5812
|
readonly fileSize: _angular_core.Signal<number>;
|
|
5152
5813
|
readonly fileExtension: _angular_core.Signal<string>;
|
|
5153
|
-
readonly swatchColor: _angular_core.Signal<string>;
|
|
5154
5814
|
readonly formattedSize: _angular_core.Signal<string>;
|
|
5815
|
+
readonly kind: _angular_core.Signal<AXConversationFileVisualKind>;
|
|
5816
|
+
readonly isMedia: _angular_core.Signal<boolean>;
|
|
5817
|
+
readonly thumbUrl: _angular_core.Signal<string>;
|
|
5818
|
+
readonly previewSrc: _angular_core.Signal<string>;
|
|
5819
|
+
openImage(event: Event): void;
|
|
5155
5820
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileAttachmentComponent, never>;
|
|
5156
5821
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFileAttachmentComponent, "ax-conversation-file-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5157
5822
|
}
|
|
@@ -5165,16 +5830,19 @@ declare class AXConversationImageAttachmentComponent {
|
|
|
5165
5830
|
private readonly document;
|
|
5166
5831
|
readonly item: _angular_core.InputSignal<AXConversationImageMediaItem>;
|
|
5167
5832
|
readonly alt: _angular_core.InputSignal<string>;
|
|
5833
|
+
/** When false, skip aspect-ratio reservation (gallery cells already have a fixed size). */
|
|
5834
|
+
readonly reserveAspect: _angular_core.InputSignal<boolean>;
|
|
5168
5835
|
readonly ready: _angular_core.WritableSignal<boolean>;
|
|
5836
|
+
readonly aspectRatio: _angular_core.Signal<string>;
|
|
5169
5837
|
private readonly mediaReference;
|
|
5170
5838
|
private readonly resolvedUrl;
|
|
5171
5839
|
readonly displayUrl: _angular_core.Signal<string>;
|
|
5172
5840
|
constructor();
|
|
5173
5841
|
onImageLoad(): void;
|
|
5174
5842
|
onImageError(): void;
|
|
5175
|
-
toggleFullscreen(event:
|
|
5843
|
+
toggleFullscreen(event: AXClickEvent): void;
|
|
5176
5844
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageAttachmentComponent, never>;
|
|
5177
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageAttachmentComponent, "ax-conversation-image-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5845
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageAttachmentComponent, "ax-conversation-image-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "reserveAspect": { "alias": "reserveAspect"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5178
5846
|
}
|
|
5179
5847
|
|
|
5180
5848
|
interface AXConversationPlaybackBannerInputs {
|
|
@@ -5187,8 +5855,12 @@ interface AXConversationPlaybackBannerInputs {
|
|
|
5187
5855
|
playbackSpeed?: number;
|
|
5188
5856
|
onCycleSpeed?: () => void;
|
|
5189
5857
|
showSpeedControl?: boolean;
|
|
5858
|
+
isMuted?: boolean;
|
|
5859
|
+
onToggleMute?: () => void;
|
|
5860
|
+
showMuteControl?: boolean;
|
|
5190
5861
|
}
|
|
5191
5862
|
declare class AXConversationMediaPlaybackInfoBarBannerComponent implements AXConversationMessageInfoBarBannerComponent {
|
|
5863
|
+
protected readonly translation: AXTranslationService;
|
|
5192
5864
|
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5193
5865
|
readonly title: _angular_core.InputSignal<string>;
|
|
5194
5866
|
readonly currentTime: _angular_core.InputSignal<number>;
|
|
@@ -5198,14 +5870,18 @@ declare class AXConversationMediaPlaybackInfoBarBannerComponent implements AXCon
|
|
|
5198
5870
|
readonly playbackSpeed: _angular_core.InputSignal<number>;
|
|
5199
5871
|
readonly onCycleSpeed: _angular_core.InputSignal<() => void>;
|
|
5200
5872
|
readonly showSpeedControl: _angular_core.InputSignal<boolean>;
|
|
5873
|
+
readonly isMuted: _angular_core.InputSignal<boolean>;
|
|
5874
|
+
readonly onToggleMute: _angular_core.InputSignal<() => void>;
|
|
5875
|
+
readonly showMuteControl: _angular_core.InputSignal<boolean>;
|
|
5201
5876
|
readonly iconClass: _angular_core.Signal<string>;
|
|
5202
5877
|
readonly resolvedTitle: _angular_core.Signal<string>;
|
|
5203
5878
|
readonly progressPercent: _angular_core.Signal<number>;
|
|
5204
5879
|
readonly timeLabel: _angular_core.Signal<string>;
|
|
5205
5880
|
onTogglePlayClick(): void;
|
|
5206
5881
|
onCycleSpeedClick(): void;
|
|
5882
|
+
onToggleMuteClick(): void;
|
|
5207
5883
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationMediaPlaybackInfoBarBannerComponent, never>;
|
|
5208
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMediaPlaybackInfoBarBannerComponent, "ax-conversation-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>;
|
|
5884
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationMediaPlaybackInfoBarBannerComponent, "ax-conversation-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; }; "isMuted": { "alias": "isMuted"; "required": false; "isSignal": true; }; "onToggleMute": { "alias": "onToggleMute"; "required": false; "isSignal": true; }; "showMuteControl": { "alias": "showMuteControl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5209
5885
|
}
|
|
5210
5886
|
|
|
5211
5887
|
/**
|
|
@@ -5255,10 +5931,11 @@ declare class AXConversationMessageRendererStateComponent {
|
|
|
5255
5931
|
readonly contentRetry: _angular_core.OutputEmitterRef<void>;
|
|
5256
5932
|
readonly retryBusy: _angular_core.WritableSignal<boolean>;
|
|
5257
5933
|
private readonly currentUser;
|
|
5258
|
-
|
|
5934
|
+
readonly isOwn: _angular_core.Signal<boolean>;
|
|
5259
5935
|
readonly showFailed: _angular_core.Signal<boolean>;
|
|
5260
5936
|
readonly showContentError: _angular_core.Signal<boolean>;
|
|
5261
5937
|
readonly hasVisibleChrome: _angular_core.Signal<boolean>;
|
|
5938
|
+
readonly resolvedContentErrorIconClass: _angular_core.Signal<string>;
|
|
5262
5939
|
readonly contentErrorText: _angular_core.Signal<string>;
|
|
5263
5940
|
readonly deliveryFailedText: _angular_core.Signal<string>;
|
|
5264
5941
|
onRetry(): Promise<void>;
|
|
@@ -5276,6 +5953,8 @@ declare function syncPlaybackInfoBarBanner(infoBar: AXConversationInfoBarService
|
|
|
5276
5953
|
|
|
5277
5954
|
declare class AXConversationVideoAttachmentComponent {
|
|
5278
5955
|
readonly item: _angular_core.InputSignal<AXConversationVideoMediaItem>;
|
|
5956
|
+
/** When false, skip aspect-ratio reservation (gallery cells already have a fixed size). */
|
|
5957
|
+
readonly reserveAspect: _angular_core.InputSignal<boolean>;
|
|
5279
5958
|
readonly playingChange: _angular_core.OutputEmitterRef<boolean>;
|
|
5280
5959
|
readonly timeUpdate: _angular_core.OutputEmitterRef<number>;
|
|
5281
5960
|
readonly durationChange: _angular_core.OutputEmitterRef<number>;
|
|
@@ -5287,6 +5966,7 @@ declare class AXConversationVideoAttachmentComponent {
|
|
|
5287
5966
|
readonly playbackUrl: _angular_core.Signal<string>;
|
|
5288
5967
|
readonly duration: _angular_core.Signal<number>;
|
|
5289
5968
|
readonly durationLabel: _angular_core.Signal<string>;
|
|
5969
|
+
readonly aspectRatio: _angular_core.Signal<string>;
|
|
5290
5970
|
togglePlay(): void;
|
|
5291
5971
|
pause(): void;
|
|
5292
5972
|
onLoadedMetadata(): void;
|
|
@@ -5296,195 +5976,37 @@ declare class AXConversationVideoAttachmentComponent {
|
|
|
5296
5976
|
onEnded(): void;
|
|
5297
5977
|
onError(): void;
|
|
5298
5978
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoAttachmentComponent, never>;
|
|
5299
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoAttachmentComponent, "ax-conversation-video-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
|
|
5300
|
-
}
|
|
5301
|
-
|
|
5302
|
-
declare class AXConversationAudioRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5303
|
-
private readonly fileTypes;
|
|
5304
|
-
private readonly translation;
|
|
5305
|
-
private readonly destroyRef;
|
|
5306
|
-
private readonly infoBarService;
|
|
5307
|
-
private readonly attachments;
|
|
5308
|
-
private readonly _contentState;
|
|
5309
|
-
private readonly activeTrackIndex;
|
|
5310
|
-
private readonly isPlaying;
|
|
5311
|
-
private readonly currentTime;
|
|
5312
|
-
private readonly duration;
|
|
5313
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5314
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5315
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5316
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5317
|
-
}>;
|
|
5318
|
-
readonly payload: _angular_core.Signal<AXConversationAudioPayload>;
|
|
5319
|
-
readonly audios: _angular_core.Signal<_acorex_components_conversation.AXConversationAudioMediaItem[]>;
|
|
5320
|
-
readonly caption: _angular_core.Signal<string>;
|
|
5321
|
-
readonly audioLoadErrorLabel: _angular_core.Signal<string>;
|
|
5322
|
-
copy(): Promise<string>;
|
|
5323
|
-
constructor();
|
|
5324
|
-
onPlayingChange(index: number, playing: boolean): void;
|
|
5325
|
-
onTimeUpdate(index: number, time: number): void;
|
|
5326
|
-
onDurationChange(index: number, duration: number): void;
|
|
5327
|
-
onPlaybackEnded(index: number): void;
|
|
5328
|
-
onPlaybackError(): void;
|
|
5329
|
-
togglePlay(): void;
|
|
5330
|
-
private pauseOtherTracks;
|
|
5331
|
-
private pausePlayback;
|
|
5332
|
-
private syncInfoBarBanner;
|
|
5333
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioRendererComponent, never>;
|
|
5334
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5335
|
-
}
|
|
5336
|
-
|
|
5337
|
-
declare function normalizeAudioPayload(payload: AXConversationAudioPayload): AXConversationAudioPayload;
|
|
5338
|
-
|
|
5339
|
-
declare class AXConversationFallbackRendererComponent implements AXConversationMessageRendererComponent {
|
|
5340
|
-
private readonly _contentState;
|
|
5341
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5342
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5343
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5344
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5345
|
-
}>;
|
|
5346
|
-
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
5347
|
-
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
5348
|
-
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
5349
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFallbackRendererComponent, never>;
|
|
5350
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5351
|
-
}
|
|
5352
|
-
|
|
5353
|
-
declare class AXConversationFileRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5354
|
-
private readonly fileTypes;
|
|
5355
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5356
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5357
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5358
|
-
contentState: "ready";
|
|
5359
|
-
}>;
|
|
5360
|
-
readonly payload: _angular_core.Signal<AXConversationFilePayload>;
|
|
5361
|
-
readonly files: _angular_core.Signal<_acorex_components_conversation.AXConversationFileMediaItem[]>;
|
|
5362
|
-
readonly caption: _angular_core.Signal<string>;
|
|
5363
|
-
copy(): Promise<string>;
|
|
5364
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileRendererComponent, never>;
|
|
5365
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5366
|
-
}
|
|
5367
|
-
|
|
5368
|
-
declare function normalizeFilePayload(payload: AXConversationFilePayload): AXConversationFilePayload;
|
|
5369
|
-
|
|
5370
|
-
declare class AXConversationImageRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5371
|
-
private readonly fileTypes;
|
|
5372
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5373
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5374
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5375
|
-
contentState: "ready";
|
|
5376
|
-
}>;
|
|
5377
|
-
readonly payload: _angular_core.Signal<AXConversationImagePayload>;
|
|
5378
|
-
readonly images: _angular_core.Signal<_acorex_components_conversation.AXConversationImageMediaItem[]>;
|
|
5379
|
-
readonly caption: _angular_core.Signal<string>;
|
|
5380
|
-
copy(): Promise<string>;
|
|
5381
|
-
readonly gridModeClass: _angular_core.Signal<"ax-conversation-msg__grid--single" | "ax-conversation-msg__grid--dual" | "ax-conversation-msg__grid--multi">;
|
|
5382
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageRendererComponent, never>;
|
|
5383
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5384
|
-
}
|
|
5385
|
-
|
|
5386
|
-
/** Format image message payload for rendering (array shape, safe thumbnails). */
|
|
5387
|
-
declare function normalizeImagePayload(payload: AXConversationImagePayload): AXConversationImagePayload;
|
|
5388
|
-
/** Preferred URL for grid / lightbox (never inline base64 thumbnails). */
|
|
5389
|
-
declare function resolveImageDisplayUrl(image: AXConversationImageMediaItem): string | undefined;
|
|
5390
|
-
|
|
5391
|
-
declare class AXConversationLocationRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5392
|
-
private readonly _contentState;
|
|
5393
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5394
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5395
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5396
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5397
|
-
}>;
|
|
5398
|
-
readonly payload: _angular_core.Signal<AXConversationLocationPayload>;
|
|
5399
|
-
readonly latitude: _angular_core.Signal<number>;
|
|
5400
|
-
readonly longitude: _angular_core.Signal<number>;
|
|
5401
|
-
readonly locationName: _angular_core.Signal<string>;
|
|
5402
|
-
readonly address: _angular_core.Signal<string>;
|
|
5403
|
-
readonly coordinatesText: _angular_core.Signal<string>;
|
|
5404
|
-
readonly mapsUrl: _angular_core.Signal<string>;
|
|
5405
|
-
copy(): string;
|
|
5406
|
-
readonly markers: _angular_core.Signal<{
|
|
5407
|
-
latitude: number;
|
|
5408
|
-
longitude: number;
|
|
5409
|
-
popup: string;
|
|
5410
|
-
popupOpen: boolean;
|
|
5411
|
-
popupCloseButton: boolean;
|
|
5412
|
-
}[]>;
|
|
5413
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationRendererComponent, never>;
|
|
5414
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5415
|
-
}
|
|
5416
|
-
|
|
5417
|
-
declare class AXConversationStickerRendererComponent implements AXConversationMessageRendererComponent {
|
|
5418
|
-
private readonly _contentState;
|
|
5419
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5420
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5421
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5422
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5423
|
-
}>;
|
|
5424
|
-
readonly payload: _angular_core.Signal<AXConversationStickerPayload>;
|
|
5425
|
-
private readonly mediaReference;
|
|
5426
|
-
private readonly resolvedUrl;
|
|
5427
|
-
readonly stickerUrl: _angular_core.Signal<string>;
|
|
5428
|
-
readonly alt: _angular_core.Signal<string>;
|
|
5429
|
-
constructor();
|
|
5430
|
-
onLoad(): void;
|
|
5431
|
-
onError(): void;
|
|
5432
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationStickerRendererComponent, never>;
|
|
5433
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5979
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoAttachmentComponent, "ax-conversation-video-attachment", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "reserveAspect": { "alias": "reserveAspect"; "required": false; "isSignal": true; }; }, { "playingChange": "playingChange"; "timeUpdate": "timeUpdate"; "durationChange": "durationChange"; "playbackEnded": "playbackEnded"; "playbackError": "playbackError"; }, never, never, true, never>;
|
|
5434
5980
|
}
|
|
5435
5981
|
|
|
5436
|
-
declare class
|
|
5437
|
-
private readonly _contentState;
|
|
5438
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5439
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5440
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5441
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5442
|
-
}>;
|
|
5443
|
-
readonly payload: _angular_core.Signal<AXConversationSystemPayload>;
|
|
5444
|
-
readonly iconClass: _angular_core.Signal<string>;
|
|
5445
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSystemRendererComponent, never>;
|
|
5446
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5447
|
-
}
|
|
5448
|
-
|
|
5449
|
-
declare class AXConversationTextRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5450
|
-
private readonly infoBarService;
|
|
5451
|
-
private readonly sanitizer;
|
|
5452
|
-
private readonly _contentState;
|
|
5453
|
-
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5454
|
-
readonly rendererState: _angular_core.Signal<{
|
|
5455
|
-
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5456
|
-
contentState: AXConversationMessageRendererContentState;
|
|
5457
|
-
}>;
|
|
5458
|
-
readonly searchQuery: _angular_core.Signal<string>;
|
|
5459
|
-
copy(): string;
|
|
5460
|
-
readonly formattedText: _angular_core.Signal<SafeHtml>;
|
|
5461
|
-
private linkify;
|
|
5462
|
-
private highlightSearch;
|
|
5463
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationTextRendererComponent, never>;
|
|
5464
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5465
|
-
}
|
|
5466
|
-
|
|
5467
|
-
declare class AXConversationVideoRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5982
|
+
declare class AXConversationAudioRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5468
5983
|
private readonly fileTypes;
|
|
5469
5984
|
private readonly translation;
|
|
5470
|
-
private readonly platformId;
|
|
5471
5985
|
private readonly destroyRef;
|
|
5472
5986
|
private readonly infoBarService;
|
|
5473
5987
|
private readonly attachments;
|
|
5474
5988
|
private readonly _contentState;
|
|
5475
|
-
private readonly
|
|
5989
|
+
private readonly activeTrackIndex;
|
|
5990
|
+
private readonly isPlaying;
|
|
5991
|
+
private readonly currentTime;
|
|
5992
|
+
private readonly duration;
|
|
5993
|
+
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
5994
|
+
readonly isMuted: _angular_core.WritableSignal<boolean>;
|
|
5995
|
+
private lastBannerSyncAt;
|
|
5996
|
+
private readonly speeds;
|
|
5997
|
+
private readonly bannerTogglePlay;
|
|
5998
|
+
private readonly bannerClose;
|
|
5999
|
+
private readonly bannerCycleSpeed;
|
|
6000
|
+
private readonly bannerToggleMute;
|
|
5476
6001
|
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5477
6002
|
readonly rendererState: _angular_core.Signal<{
|
|
5478
6003
|
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5479
6004
|
contentState: AXConversationMessageRendererContentState;
|
|
5480
6005
|
}>;
|
|
5481
|
-
readonly
|
|
5482
|
-
readonly
|
|
5483
|
-
readonly duration: _angular_core.WritableSignal<number>;
|
|
5484
|
-
readonly payload: _angular_core.Signal<AXConversationVideoPayload>;
|
|
5485
|
-
readonly videos: _angular_core.Signal<_acorex_components_conversation.AXConversationVideoMediaItem[]>;
|
|
6006
|
+
readonly payload: _angular_core.Signal<AXConversationAudioPayload>;
|
|
6007
|
+
readonly audios: _angular_core.Signal<_acorex_components_conversation.AXConversationAudioMediaItem[]>;
|
|
5486
6008
|
readonly caption: _angular_core.Signal<string>;
|
|
5487
|
-
readonly
|
|
6009
|
+
readonly audioLoadErrorLabel: _angular_core.Signal<string>;
|
|
5488
6010
|
copy(): Promise<string>;
|
|
5489
6011
|
constructor();
|
|
5490
6012
|
onPlayingChange(index: number, playing: boolean): void;
|
|
@@ -5493,498 +6015,473 @@ declare class AXConversationVideoRendererComponent extends AXConversationMessage
|
|
|
5493
6015
|
onPlaybackEnded(index: number): void;
|
|
5494
6016
|
onPlaybackError(): void;
|
|
5495
6017
|
togglePlay(): void;
|
|
5496
|
-
|
|
6018
|
+
cyclePlaybackSpeed(): void;
|
|
6019
|
+
toggleMute(): void;
|
|
6020
|
+
private pauseOtherTracks;
|
|
5497
6021
|
private pausePlayback;
|
|
6022
|
+
private applyPlaybackSettings;
|
|
5498
6023
|
private syncInfoBarBanner;
|
|
5499
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
5500
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
6024
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationAudioRendererComponent, never>;
|
|
6025
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationAudioRendererComponent, "ax-conversation-audio-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5501
6026
|
}
|
|
5502
6027
|
|
|
5503
|
-
declare function
|
|
6028
|
+
declare function normalizeAudioPayload(payload: AXConversationAudioPayload): AXConversationAudioPayload;
|
|
5504
6029
|
|
|
5505
|
-
declare class
|
|
6030
|
+
declare class AXConversationFallbackRendererComponent implements AXConversationMessageRendererComponent {
|
|
6031
|
+
private readonly _contentState;
|
|
6032
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6033
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6034
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6035
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6036
|
+
}>;
|
|
6037
|
+
readonly messageTypeLabel: _angular_core.Signal<string>;
|
|
6038
|
+
/** Same tone as content-error default in {@link AXConversationMessageRendererStateComponent}. */
|
|
6039
|
+
readonly fallbackDescription: _angular_core.Signal<string>;
|
|
6040
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFallbackRendererComponent, never>;
|
|
6041
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFallbackRendererComponent, "ax-conversation-fallback-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6042
|
+
}
|
|
6043
|
+
|
|
6044
|
+
declare class AXConversationFileRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
5506
6045
|
private readonly fileTypes;
|
|
5507
6046
|
private readonly translation;
|
|
5508
|
-
private readonly platformId;
|
|
5509
6047
|
private readonly destroyRef;
|
|
5510
6048
|
private readonly infoBarService;
|
|
5511
|
-
private readonly
|
|
6049
|
+
private readonly audioAttachments;
|
|
5512
6050
|
private readonly _contentState;
|
|
6051
|
+
private readonly activeTrackIndex;
|
|
6052
|
+
private readonly isPlaying;
|
|
6053
|
+
private readonly currentTime;
|
|
6054
|
+
private readonly duration;
|
|
6055
|
+
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
6056
|
+
readonly isMuted: _angular_core.WritableSignal<boolean>;
|
|
6057
|
+
private lastBannerSyncAt;
|
|
6058
|
+
private readonly speeds;
|
|
6059
|
+
private readonly bannerTogglePlay;
|
|
6060
|
+
private readonly bannerClose;
|
|
6061
|
+
private readonly bannerCycleSpeed;
|
|
6062
|
+
private readonly bannerToggleMute;
|
|
5513
6063
|
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
5514
6064
|
readonly rendererState: _angular_core.Signal<{
|
|
5515
6065
|
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
5516
6066
|
contentState: AXConversationMessageRendererContentState;
|
|
5517
6067
|
}>;
|
|
5518
|
-
readonly
|
|
5519
|
-
readonly
|
|
5520
|
-
readonly
|
|
5521
|
-
readonly
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5526
|
-
|
|
5527
|
-
readonly waveformBars: _angular_core.Signal<number[]>;
|
|
5528
|
-
readonly activeBarIndex: _angular_core.Signal<number>;
|
|
5529
|
-
readonly timeLabel: _angular_core.Signal<string>;
|
|
5530
|
-
readonly voiceLoadErrorLabel: _angular_core.Signal<string>;
|
|
6068
|
+
readonly payload: _angular_core.Signal<AXConversationFilePayload>;
|
|
6069
|
+
readonly files: _angular_core.Signal<AXConversationFileMediaItem[]>;
|
|
6070
|
+
readonly caption: _angular_core.Signal<string>;
|
|
6071
|
+
readonly fileRows: _angular_core.Signal<{
|
|
6072
|
+
file: AXConversationFileMediaItem;
|
|
6073
|
+
isAudio: boolean;
|
|
6074
|
+
audio: _acorex_components_conversation.AXConversationAudioMediaItem;
|
|
6075
|
+
trackIndex: number;
|
|
6076
|
+
}[]>;
|
|
5531
6077
|
copy(): Promise<string>;
|
|
5532
6078
|
constructor();
|
|
6079
|
+
isAudioFile(file: AXConversationFileMediaItem): boolean;
|
|
6080
|
+
onPlayingChange(trackIndex: number, playing: boolean): void;
|
|
6081
|
+
onTimeUpdate(trackIndex: number, time: number): void;
|
|
6082
|
+
onDurationChange(trackIndex: number, duration: number): void;
|
|
6083
|
+
onPlaybackEnded(trackIndex: number): void;
|
|
6084
|
+
onPlaybackError(): void;
|
|
5533
6085
|
togglePlay(): void;
|
|
5534
6086
|
cyclePlaybackSpeed(): void;
|
|
5535
|
-
|
|
5536
|
-
|
|
5537
|
-
onError(): void;
|
|
6087
|
+
toggleMute(): void;
|
|
6088
|
+
private pauseOtherTracks;
|
|
5538
6089
|
private pausePlayback;
|
|
6090
|
+
private applyPlaybackSettings;
|
|
5539
6091
|
private syncInfoBarBanner;
|
|
5540
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
5541
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
6092
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationFileRendererComponent, never>;
|
|
6093
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationFileRendererComponent, "ax-conversation-file-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5542
6094
|
}
|
|
5543
6095
|
|
|
5544
|
-
|
|
5545
|
-
|
|
5546
|
-
* Individual message action constants
|
|
5547
|
-
*/
|
|
5548
|
-
|
|
5549
|
-
/**
|
|
5550
|
-
* Reply to message
|
|
5551
|
-
*/
|
|
5552
|
-
declare const AX_CONVERSATION_MESSAGE_REPLY_ACTION: AXConversationMessageAction;
|
|
5553
|
-
/**
|
|
5554
|
-
* Edit own message (text only)
|
|
5555
|
-
*/
|
|
5556
|
-
declare const AX_CONVERSATION_MESSAGE_EDIT_ACTION: AXConversationMessageAction;
|
|
5557
|
-
/**
|
|
5558
|
-
* Delete own message
|
|
5559
|
-
*/
|
|
5560
|
-
declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXConversationMessageAction;
|
|
5561
|
-
/**
|
|
5562
|
-
* Forward message to another conversation
|
|
5563
|
-
*/
|
|
5564
|
-
declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXConversationMessageAction;
|
|
5565
|
-
|
|
5566
|
-
declare const AX_CONVERSATION_TEXT_RENDERER: AXConversationMessageRenderer;
|
|
5567
|
-
|
|
5568
|
-
declare const AX_CONVERSATION_IMAGE_RENDERER: AXConversationMessageRenderer;
|
|
5569
|
-
|
|
5570
|
-
declare const AX_CONVERSATION_VIDEO_RENDERER: AXConversationMessageRenderer;
|
|
5571
|
-
|
|
5572
|
-
declare const AX_CONVERSATION_AUDIO_RENDERER: AXConversationMessageRenderer;
|
|
5573
|
-
|
|
5574
|
-
declare const AX_CONVERSATION_VOICE_RENDERER: AXConversationMessageRenderer;
|
|
5575
|
-
|
|
5576
|
-
declare const AX_CONVERSATION_FILE_RENDERER: AXConversationMessageRenderer;
|
|
5577
|
-
|
|
5578
|
-
declare const AX_CONVERSATION_LOCATION_RENDERER: AXConversationMessageRenderer;
|
|
5579
|
-
|
|
5580
|
-
declare const AX_CONVERSATION_STICKER_RENDERER: AXConversationMessageRenderer;
|
|
5581
|
-
|
|
5582
|
-
declare const AX_CONVERSATION_SYSTEM_RENDERER: AXConversationMessageRenderer;
|
|
5583
|
-
|
|
5584
|
-
declare const AX_CONVERSATION_FALLBACK_RENDERER: AXConversationMessageRenderer;
|
|
5585
|
-
|
|
5586
|
-
/**
|
|
5587
|
-
* Default Conversation Item Actions Plugin
|
|
5588
|
-
* Individual action constants with AX_ prefix naming convention
|
|
5589
|
-
*/
|
|
5590
|
-
|
|
5591
|
-
/**
|
|
5592
|
-
* Mute/Unmute conversation notifications
|
|
5593
|
-
*/
|
|
5594
|
-
declare const AX_CONVERSATION_ITEM_MUTE_ACTION: AXConversationItemAction;
|
|
5595
|
-
/**
|
|
5596
|
-
* Pin/Unpin conversation to top
|
|
5597
|
-
*/
|
|
5598
|
-
declare const AX_CONVERSATION_ITEM_PIN_ACTION: AXConversationItemAction;
|
|
5599
|
-
/**
|
|
5600
|
-
* Mark conversation as read
|
|
5601
|
-
*/
|
|
5602
|
-
declare const AX_CONVERSATION_ITEM_MARK_READ_ACTION: AXConversationItemAction;
|
|
5603
|
-
/**
|
|
5604
|
-
* Divider separator before destructive actions
|
|
5605
|
-
*/
|
|
5606
|
-
declare const AX_CONVERSATION_ITEM_DIVIDER: AXConversationItemAction;
|
|
5607
|
-
/**
|
|
5608
|
-
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
5609
|
-
* - Private: "Delete" - Deletes the conversation
|
|
5610
|
-
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5611
|
-
*/
|
|
5612
|
-
declare const AX_CONVERSATION_ITEM_DELETE_ACTION: AXConversationItemAction;
|
|
5613
|
-
/**
|
|
5614
|
-
* Block/Unblock user (private conversations only)
|
|
5615
|
-
*/
|
|
5616
|
-
declare const AX_CONVERSATION_ITEM_BLOCK_ACTION: AXConversationItemAction;
|
|
5617
|
-
|
|
5618
|
-
/**
|
|
5619
|
-
* Default Conversation Tabs Plugin
|
|
5620
|
-
* Provides sidebar conversation filter tabs (all, private, groups, etc.)
|
|
5621
|
-
*/
|
|
5622
|
-
|
|
5623
|
-
declare const AX_CONVERSATION_TAB_ALL: AXConversationTab;
|
|
5624
|
-
declare const AX_CONVERSATION_TAB_PRIVATE: AXConversationTab;
|
|
5625
|
-
declare const AX_CONVERSATION_TAB_GROUPS: AXConversationTab;
|
|
5626
|
-
declare const AX_CONVERSATION_TAB_CHANNELS: AXConversationTab;
|
|
5627
|
-
declare const AX_CONVERSATION_TAB_BOT: AXConversationTab;
|
|
5628
|
-
declare const AX_CONVERSATION_TAB_UNREAD: AXConversationTab;
|
|
5629
|
-
declare const AX_CONVERSATION_TAB_ARCHIVED: AXConversationTab;
|
|
6096
|
+
declare function fileItemAsAudioMedia(item: AXConversationFileMediaItem): AXConversationAudioMediaItem;
|
|
6097
|
+
declare function normalizeFilePayload(payload: AXConversationFilePayload): AXConversationFilePayload;
|
|
5630
6098
|
|
|
5631
|
-
declare class
|
|
5632
|
-
private readonly
|
|
5633
|
-
|
|
5634
|
-
readonly
|
|
5635
|
-
readonly
|
|
5636
|
-
|
|
5637
|
-
|
|
5638
|
-
readonly peerUserId: _angular_core.Signal<string>;
|
|
5639
|
-
readonly useUserAvatar: _angular_core.Signal<_angular_core.Type<_acorex_components_conversation.AXConversationUserAvatarComponent>>;
|
|
5640
|
-
readonly userAvatarInputs: _angular_core.Signal<{
|
|
5641
|
-
userId: string;
|
|
5642
|
-
size: number;
|
|
5643
|
-
displayName: string;
|
|
5644
|
-
displayAvatar: string;
|
|
5645
|
-
displayIcon: string;
|
|
6099
|
+
declare class AXConversationImageRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
6100
|
+
private readonly fileTypes;
|
|
6101
|
+
protected readonly translation: AXTranslationService;
|
|
6102
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6103
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6104
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6105
|
+
contentState: "ready";
|
|
5646
6106
|
}>;
|
|
5647
|
-
readonly
|
|
5648
|
-
readonly
|
|
5649
|
-
readonly
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
interface AXConversationOptions {
|
|
5658
|
-
/** User API implementation (required) */
|
|
5659
|
-
userApi: Type<AXConversationUserApi>;
|
|
5660
|
-
/** Conversation Management API implementation (required) */
|
|
5661
|
-
conversationApi: Type<AXConversationApi>;
|
|
5662
|
-
/** Message API implementation (required) */
|
|
5663
|
-
messageApi: Type<AXConversationMessageApi>;
|
|
5664
|
-
/** Realtime API implementation (optional) */
|
|
5665
|
-
realtimeApi?: Type<AXConversationRealtimeApi>;
|
|
5666
|
-
/** Configuration overrides */
|
|
5667
|
-
config?: Partial<AXConversationConfig>;
|
|
5668
|
-
/** Registry configuration */
|
|
5669
|
-
registry?: Partial<AXConversationRegistryConfiguration>;
|
|
5670
|
-
/** Optional custom avatar components for the entire conversation UI */
|
|
5671
|
-
avatarComponents?: AXConversationAvatarComponents;
|
|
5672
|
-
}
|
|
5673
|
-
declare class AXConversationModule {
|
|
5674
|
-
/**
|
|
5675
|
-
* Configure module for root module with singleton services.
|
|
5676
|
-
* @deprecated Use standalone components with provideConversation()
|
|
5677
|
-
*/
|
|
5678
|
-
static forRoot(options: AXConversationOptions): ModuleWithProviders<AXConversationModule>;
|
|
5679
|
-
/**
|
|
5680
|
-
* Configure module for lazy-loaded feature modules.
|
|
5681
|
-
* Reuses singleton services from root, optionally overrides config/registry.
|
|
5682
|
-
*/
|
|
5683
|
-
static forChild(options?: Omit<AXConversationOptions, 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi'>): ModuleWithProviders<AXConversationModule>;
|
|
5684
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationModule, never>;
|
|
5685
|
-
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXConversationModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective, typeof AXConversationDefaultConversationAvatarComponent], [typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective]>;
|
|
5686
|
-
static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXConversationModule>;
|
|
5687
|
-
}
|
|
5688
|
-
/**
|
|
5689
|
-
* Provides conversation functionality for standalone applications.
|
|
5690
|
-
* Use in app config or route providers.
|
|
5691
|
-
*
|
|
5692
|
-
* @example
|
|
5693
|
-
* ```typescript
|
|
5694
|
-
* import {
|
|
5695
|
-
* AXConversationIndexedDbUserApi,
|
|
5696
|
-
* AXConversationIndexedDbConversationApi,
|
|
5697
|
-
* AXConversationIndexedDbMessageApi,
|
|
5698
|
-
* AXConversationIndexedDbRealtimeApi
|
|
5699
|
-
* } from '@acorex/components/conversation';
|
|
5700
|
-
*
|
|
5701
|
-
* export const appConfig: ApplicationConfig = {
|
|
5702
|
-
* providers: [
|
|
5703
|
-
* provideConversation({
|
|
5704
|
-
* userApi: AXConversationIndexedDbUserApi,
|
|
5705
|
-
* conversationApi: AXConversationIndexedDbConversationApi,
|
|
5706
|
-
* messageApi: AXConversationIndexedDbMessageApi,
|
|
5707
|
-
* realtimeApi: AXConversationIndexedDbRealtimeApi,
|
|
5708
|
-
* config: { },
|
|
5709
|
-
* registry: { messageActions: [myCustomAction] }
|
|
5710
|
-
* })
|
|
5711
|
-
* ]
|
|
5712
|
-
* };
|
|
5713
|
-
* ```
|
|
5714
|
-
*/
|
|
5715
|
-
declare function provideConversation(options: AXConversationOptions): Provider[];
|
|
5716
|
-
|
|
5717
|
-
interface AXConversationAvatarDisplay {
|
|
5718
|
-
name: string;
|
|
5719
|
-
avatar?: string;
|
|
5720
|
-
icon?: string;
|
|
6107
|
+
readonly payload: _angular_core.Signal<AXConversationImagePayload>;
|
|
6108
|
+
readonly images: _angular_core.Signal<_acorex_components_conversation.AXConversationImageMediaItem[]>;
|
|
6109
|
+
readonly caption: _angular_core.Signal<string>;
|
|
6110
|
+
readonly imageAlt: _angular_core.Signal<string>;
|
|
6111
|
+
readonly imageLoadErrorLabel: _angular_core.Signal<string>;
|
|
6112
|
+
copy(): Promise<string>;
|
|
6113
|
+
readonly layoutMode: _angular_core.Signal<AXConversationMediaGalleryLayoutMode>;
|
|
6114
|
+
readonly imageRows: _angular_core.Signal<AXConversationMediaGalleryRow<_acorex_components_conversation.AXConversationImageMediaItem>[]>;
|
|
6115
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationImageRendererComponent, never>;
|
|
6116
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationImageRendererComponent, "ax-conversation-image-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5721
6117
|
}
|
|
5722
|
-
/** Conversation types that resolve a single peer participant for viewer-scoped avatar/title. */
|
|
5723
|
-
declare const AX_CONVERSATION_PEER_AVATAR_TYPES: ReadonlySet<AXConversationType>;
|
|
5724
|
-
/**
|
|
5725
|
-
* Other participant in a peer-scoped conversation (excludes the current viewer).
|
|
5726
|
-
* Applies to private 1:1 and bot assist chats with exactly one non-viewer participant.
|
|
5727
|
-
*/
|
|
5728
|
-
declare function resolveConversationPeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
|
|
5729
|
-
/** Other participant in a private chat (excludes the current user). */
|
|
5730
|
-
declare function resolvePrivatePeerUserId(conversation: AXConversation, currentUserId?: string): string | undefined;
|
|
5731
|
-
/** Peer participant for private and bot conversations. */
|
|
5732
|
-
declare function resolveConversationPeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
5733
|
-
/** Whether `auto` kind should render a registered user avatar for this conversation. */
|
|
5734
|
-
declare function shouldUseUserAvatarForConversation(conversation: AXConversation, currentUserId?: string): boolean;
|
|
5735
|
-
declare function resolveUserAvatarDisplay(userId: string, conversation: AXConversation | undefined, message?: AXConversationMessage): AXConversationAvatarDisplay;
|
|
5736
|
-
declare function resolveConversationAvatarDisplay(conversation: AXConversation, currentUserId?: string): AXConversationAvatarDisplay;
|
|
5737
6118
|
|
|
5738
|
-
|
|
5739
|
-
|
|
5740
|
-
|
|
6119
|
+
/** Format image message payload for rendering (array shape, safe thumbnails). */
|
|
6120
|
+
declare function normalizeImagePayload(payload: AXConversationImagePayload): AXConversationImagePayload;
|
|
6121
|
+
/** Preferred URL for grid / lightbox (never inline base64 thumbnails). */
|
|
6122
|
+
declare function resolveImageDisplayUrl(image: AXConversationImageMediaItem): string | undefined;
|
|
6123
|
+
|
|
6124
|
+
declare class AXConversationLocationRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
6125
|
+
private readonly _contentState;
|
|
6126
|
+
private readonly platformId;
|
|
6127
|
+
private readonly document;
|
|
6128
|
+
private readonly fullScreen;
|
|
6129
|
+
private readonly destroyRef;
|
|
6130
|
+
private readonly mapHost;
|
|
6131
|
+
private readonly map;
|
|
6132
|
+
protected readonly translation: AXTranslationService;
|
|
6133
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6134
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6135
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6136
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6137
|
+
}>;
|
|
6138
|
+
readonly payload: _angular_core.Signal<AXConversationLocationPayload>;
|
|
6139
|
+
readonly latitude: _angular_core.Signal<number>;
|
|
6140
|
+
readonly longitude: _angular_core.Signal<number>;
|
|
6141
|
+
readonly locationName: _angular_core.Signal<string>;
|
|
6142
|
+
readonly address: _angular_core.Signal<string>;
|
|
6143
|
+
readonly coordinatesText: _angular_core.Signal<string>;
|
|
6144
|
+
readonly mapsUrl: _angular_core.Signal<string>;
|
|
6145
|
+
copy(): string;
|
|
6146
|
+
readonly markers: _angular_core.Signal<{
|
|
6147
|
+
latitude: number;
|
|
6148
|
+
longitude: number;
|
|
6149
|
+
popup: string;
|
|
6150
|
+
popupOpen: boolean;
|
|
6151
|
+
popupCloseButton: boolean;
|
|
6152
|
+
}[]>;
|
|
6153
|
+
readonly mapIsFullscreen: _angular_core.Signal<boolean>;
|
|
6154
|
+
readonly mapFullscreenLabel: _angular_core.Signal<string>;
|
|
6155
|
+
readonly mapFullscreenIconClass: _angular_core.Signal<"fa-light fa-compress" | "fa-light fa-expand">;
|
|
6156
|
+
constructor();
|
|
6157
|
+
openInMaps(event: AXClickEvent): void;
|
|
6158
|
+
toggleMapFullscreen(event: AXClickEvent): void;
|
|
6159
|
+
private exitMapFullscreen;
|
|
6160
|
+
protected scheduleMapResize(): void;
|
|
6161
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationLocationRendererComponent, never>;
|
|
6162
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationLocationRendererComponent, "ax-conversation-location-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5741
6163
|
}
|
|
5742
|
-
/** Library default when no per-conversation or global background is set (pattern-5 tile + gradient wash). */
|
|
5743
|
-
declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND: AXConversationMessageListThemeBackground;
|
|
5744
|
-
/** Predefined chat-area backgrounds for the info panel (light + dark variants). */
|
|
5745
|
-
declare const AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS: AXConversationMessageListBackgroundPreset[];
|
|
5746
|
-
declare const AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID = "solid-default";
|
|
5747
6164
|
|
|
5748
|
-
|
|
5749
|
-
|
|
5750
|
-
|
|
5751
|
-
|
|
5752
|
-
|
|
5753
|
-
|
|
5754
|
-
|
|
5755
|
-
|
|
5756
|
-
|
|
5757
|
-
|
|
5758
|
-
|
|
5759
|
-
|
|
5760
|
-
|
|
6165
|
+
declare class AXConversationStickerRendererComponent implements AXConversationMessageRendererComponent {
|
|
6166
|
+
private readonly _contentState;
|
|
6167
|
+
protected readonly translation: AXTranslationService;
|
|
6168
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6169
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6170
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6171
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6172
|
+
}>;
|
|
6173
|
+
readonly payload: _angular_core.Signal<AXConversationStickerPayload>;
|
|
6174
|
+
private readonly mediaReference;
|
|
6175
|
+
private readonly resolvedUrl;
|
|
6176
|
+
readonly stickerUrl: _angular_core.Signal<string>;
|
|
6177
|
+
readonly alt: _angular_core.Signal<string>;
|
|
6178
|
+
readonly aspectRatio: _angular_core.Signal<string>;
|
|
6179
|
+
constructor();
|
|
6180
|
+
onLoad(): void;
|
|
6181
|
+
onError(): void;
|
|
6182
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationStickerRendererComponent, never>;
|
|
6183
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationStickerRendererComponent, "ax-conversation-sticker-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6184
|
+
}
|
|
5761
6185
|
|
|
5762
|
-
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5767
|
-
|
|
5768
|
-
|
|
5769
|
-
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
|
|
5773
|
-
|
|
5774
|
-
declare function resolvePrivatePeerParticipant(conversation: AXConversation, currentUserId?: string): AXConversationParticipant | undefined;
|
|
5775
|
-
/**
|
|
5776
|
-
* Resolves the display title for the current viewer.
|
|
5777
|
-
* Private and bot peer-scoped chats show the other participant's name when no custom title is set.
|
|
5778
|
-
*/
|
|
5779
|
-
declare function resolveConversationTitleForViewer(conversation: AXConversation, currentUserId?: string): string;
|
|
5780
|
-
/**
|
|
5781
|
-
* Returns a viewer-scoped copy of a conversation with dynamic peer title/avatar/icon.
|
|
5782
|
-
* Does not mutate the source object.
|
|
5783
|
-
*/
|
|
5784
|
-
declare function resolveConversationForViewer(conversation: AXConversation, currentUserId?: string): AXConversation;
|
|
5785
|
-
/** Whether message reactions are enabled for a conversation. Defaults to `true` when omitted. */
|
|
5786
|
-
declare function isConversationReactionsEnabled(conversation?: AXConversation | null): boolean;
|
|
6186
|
+
declare class AXConversationSystemRendererComponent implements AXConversationMessageRendererComponent {
|
|
6187
|
+
private readonly _contentState;
|
|
6188
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6189
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6190
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6191
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6192
|
+
}>;
|
|
6193
|
+
readonly payload: _angular_core.Signal<AXConversationSystemPayload>;
|
|
6194
|
+
readonly iconClass: _angular_core.Signal<string>;
|
|
6195
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationSystemRendererComponent, never>;
|
|
6196
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationSystemRendererComponent, "ax-conversation-system-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6197
|
+
}
|
|
5787
6198
|
|
|
5788
|
-
|
|
5789
|
-
|
|
6199
|
+
declare class AXConversationTextRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
6200
|
+
private readonly infoBarService;
|
|
6201
|
+
private readonly sanitizer;
|
|
6202
|
+
private readonly _contentState;
|
|
6203
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6204
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6205
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6206
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6207
|
+
}>;
|
|
6208
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
6209
|
+
copy(): string;
|
|
6210
|
+
readonly jumboCount: _angular_core.Signal<number>;
|
|
6211
|
+
readonly isJumbo: _angular_core.Signal<boolean>;
|
|
6212
|
+
readonly jumboText: _angular_core.Signal<string>;
|
|
6213
|
+
readonly jumboGraphemes: _angular_core.Signal<string[]>;
|
|
6214
|
+
readonly formattedText: _angular_core.Signal<SafeHtml>;
|
|
6215
|
+
private linkify;
|
|
6216
|
+
private highlightSearch;
|
|
6217
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationTextRendererComponent, never>;
|
|
6218
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationTextRendererComponent, "ax-conversation-text-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
6219
|
+
}
|
|
5790
6220
|
|
|
5791
|
-
declare class
|
|
5792
|
-
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
|
|
5805
|
-
|
|
5806
|
-
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
6221
|
+
declare class AXConversationVideoRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
6222
|
+
private readonly fileTypes;
|
|
6223
|
+
private readonly translation;
|
|
6224
|
+
private readonly platformId;
|
|
6225
|
+
private readonly destroyRef;
|
|
6226
|
+
private readonly infoBarService;
|
|
6227
|
+
private readonly attachments;
|
|
6228
|
+
private readonly _contentState;
|
|
6229
|
+
private readonly activeVideoIndex;
|
|
6230
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6231
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6232
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6233
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6234
|
+
}>;
|
|
6235
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
6236
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
6237
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
6238
|
+
readonly payload: _angular_core.Signal<AXConversationVideoPayload>;
|
|
6239
|
+
readonly videos: _angular_core.Signal<_acorex_components_conversation.AXConversationVideoMediaItem[]>;
|
|
6240
|
+
readonly caption: _angular_core.Signal<string>;
|
|
6241
|
+
readonly videoLoadErrorLabel: _angular_core.Signal<string>;
|
|
6242
|
+
readonly layoutMode: _angular_core.Signal<AXConversationMediaGalleryLayoutMode>;
|
|
6243
|
+
readonly videoRows: _angular_core.Signal<AXConversationMediaGalleryRow<_acorex_components_conversation.AXConversationVideoMediaItem>[]>;
|
|
6244
|
+
copy(): Promise<string>;
|
|
6245
|
+
constructor();
|
|
6246
|
+
onPlayingChange(index: number, playing: boolean): void;
|
|
6247
|
+
onTimeUpdate(index: number, time: number): void;
|
|
6248
|
+
onDurationChange(index: number, duration: number): void;
|
|
6249
|
+
onPlaybackEnded(index: number): void;
|
|
6250
|
+
onPlaybackError(): void;
|
|
6251
|
+
togglePlay(): void;
|
|
6252
|
+
private pauseOtherVideos;
|
|
6253
|
+
private pausePlayback;
|
|
6254
|
+
private syncInfoBarBanner;
|
|
6255
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVideoRendererComponent, never>;
|
|
6256
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVideoRendererComponent, "ax-conversation-video-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5812
6257
|
}
|
|
5813
6258
|
|
|
5814
|
-
|
|
5815
|
-
* Message Utilities Service
|
|
5816
|
-
* Helper functions for message formatting and display
|
|
5817
|
-
*/
|
|
6259
|
+
declare function normalizeVideoPayload(payload: AXConversationVideoPayload): AXConversationVideoPayload;
|
|
5818
6260
|
|
|
5819
|
-
declare class
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
|
|
5825
|
-
|
|
5826
|
-
|
|
5827
|
-
|
|
5828
|
-
|
|
5829
|
-
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
|
|
5834
|
-
|
|
5835
|
-
|
|
5836
|
-
|
|
5837
|
-
|
|
5838
|
-
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5842
|
-
|
|
5843
|
-
|
|
5844
|
-
|
|
5845
|
-
|
|
6261
|
+
declare class AXConversationVoiceRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
6262
|
+
private readonly fileTypes;
|
|
6263
|
+
protected readonly translation: AXTranslationService;
|
|
6264
|
+
private readonly platformId;
|
|
6265
|
+
private readonly destroyRef;
|
|
6266
|
+
private readonly infoBarService;
|
|
6267
|
+
private readonly conversationService;
|
|
6268
|
+
private readonly waveRef;
|
|
6269
|
+
private readonly _contentState;
|
|
6270
|
+
readonly message: _angular_core.InputSignal<AXConversationMessage>;
|
|
6271
|
+
readonly rendererState: _angular_core.Signal<{
|
|
6272
|
+
deliveryStatus: _acorex_components_conversation.AXConversationMessageStatus;
|
|
6273
|
+
contentState: AXConversationMessageRendererContentState;
|
|
6274
|
+
}>;
|
|
6275
|
+
readonly isPlaying: _angular_core.WritableSignal<boolean>;
|
|
6276
|
+
readonly currentTime: _angular_core.WritableSignal<number>;
|
|
6277
|
+
readonly duration: _angular_core.WritableSignal<number>;
|
|
6278
|
+
readonly playbackSpeed: _angular_core.WritableSignal<number>;
|
|
6279
|
+
readonly isMuted: _angular_core.WritableSignal<boolean>;
|
|
6280
|
+
private readonly speeds;
|
|
6281
|
+
private lastBannerSyncAt;
|
|
6282
|
+
private readonly bannerTogglePlay;
|
|
6283
|
+
private readonly bannerClose;
|
|
6284
|
+
private readonly bannerCycleSpeed;
|
|
6285
|
+
private readonly bannerToggleMute;
|
|
6286
|
+
readonly payload: _angular_core.Signal<AXConversationVoicePayload>;
|
|
6287
|
+
private readonly mediaReference;
|
|
6288
|
+
private readonly resolvedUrl;
|
|
6289
|
+
readonly voiceUrl: _angular_core.Signal<string>;
|
|
6290
|
+
readonly isOwnMessage: _angular_core.Signal<boolean>;
|
|
6291
|
+
readonly waveConfig: _angular_core.Signal<AXWaveConfig>;
|
|
6292
|
+
readonly displayDuration: _angular_core.Signal<number>;
|
|
6293
|
+
readonly timeLabel: _angular_core.Signal<string>;
|
|
6294
|
+
readonly voiceLoadErrorLabel: _angular_core.Signal<string>;
|
|
6295
|
+
copy(): Promise<string>;
|
|
6296
|
+
constructor();
|
|
6297
|
+
togglePlay(): void;
|
|
6298
|
+
cyclePlaybackSpeed(): void;
|
|
6299
|
+
toggleMute(): void;
|
|
6300
|
+
onWaveStatusChanged(event: AXAudioWaveChangeEvent): void;
|
|
6301
|
+
onEnded(): void;
|
|
6302
|
+
onError(): void;
|
|
6303
|
+
private pausePlayback;
|
|
6304
|
+
private isWavePlayable;
|
|
6305
|
+
private applyPlaybackSettings;
|
|
6306
|
+
private syncPlaybackTimeFromWave;
|
|
6307
|
+
private syncInfoBarBanner;
|
|
6308
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationVoiceRendererComponent, never>;
|
|
6309
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationVoiceRendererComponent, "ax-conversation-voice-renderer", never, { "message": { "alias": "message"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5846
6310
|
}
|
|
5847
6311
|
|
|
5848
6312
|
/**
|
|
5849
|
-
*
|
|
5850
|
-
*
|
|
6313
|
+
* Default Message Actions Plugin
|
|
6314
|
+
* Individual message action constants
|
|
5851
6315
|
*/
|
|
5852
6316
|
|
|
5853
6317
|
/**
|
|
5854
|
-
*
|
|
6318
|
+
* Reply to message
|
|
5855
6319
|
*/
|
|
5856
|
-
|
|
5857
|
-
/** Whether validation passed */
|
|
5858
|
-
valid: boolean;
|
|
5859
|
-
/** Error message if validation failed */
|
|
5860
|
-
error?: string;
|
|
5861
|
-
/** Error code for programmatic handling */
|
|
5862
|
-
errorCode?: string;
|
|
5863
|
-
}
|
|
6320
|
+
declare const AX_CONVERSATION_MESSAGE_REPLY_ACTION: AXConversationMessageAction;
|
|
5864
6321
|
/**
|
|
5865
|
-
*
|
|
5866
|
-
* @param text - Text to validate
|
|
5867
|
-
* @param config - Configuration for validation rules
|
|
5868
|
-
* @returns Validation result
|
|
6322
|
+
* Edit own message (text only)
|
|
5869
6323
|
*/
|
|
5870
|
-
declare
|
|
6324
|
+
declare const AX_CONVERSATION_MESSAGE_EDIT_ACTION: AXConversationMessageAction;
|
|
5871
6325
|
/**
|
|
5872
|
-
*
|
|
5873
|
-
* @param conversationId - Conversation ID to validate
|
|
5874
|
-
* @returns Validation result
|
|
6326
|
+
* Delete own message
|
|
5875
6327
|
*/
|
|
5876
|
-
declare
|
|
6328
|
+
declare const AX_CONVERSATION_MESSAGE_DELETE_ACTION: AXConversationMessageAction;
|
|
5877
6329
|
/**
|
|
5878
|
-
*
|
|
5879
|
-
* @param type - Message type to validate
|
|
5880
|
-
* @returns Validation result
|
|
6330
|
+
* Forward message to another conversation
|
|
5881
6331
|
*/
|
|
5882
|
-
declare
|
|
6332
|
+
declare const AX_CONVERSATION_MESSAGE_FORWARD_ACTION: AXConversationMessageAction;
|
|
6333
|
+
|
|
6334
|
+
declare const AX_CONVERSATION_TEXT_RENDERER: AXConversationMessageRenderer;
|
|
6335
|
+
|
|
6336
|
+
declare const AX_CONVERSATION_IMAGE_RENDERER: AXConversationMessageRenderer;
|
|
6337
|
+
|
|
6338
|
+
declare const AX_CONVERSATION_VIDEO_RENDERER: AXConversationMessageRenderer;
|
|
6339
|
+
|
|
6340
|
+
declare const AX_CONVERSATION_AUDIO_RENDERER: AXConversationMessageRenderer;
|
|
6341
|
+
|
|
6342
|
+
declare const AX_CONVERSATION_VOICE_RENDERER: AXConversationMessageRenderer;
|
|
6343
|
+
|
|
6344
|
+
declare const AX_CONVERSATION_FILE_RENDERER: AXConversationMessageRenderer;
|
|
6345
|
+
|
|
6346
|
+
declare const AX_CONVERSATION_LOCATION_RENDERER: AXConversationMessageRenderer;
|
|
6347
|
+
|
|
6348
|
+
declare const AX_CONVERSATION_STICKER_RENDERER: AXConversationMessageRenderer;
|
|
6349
|
+
|
|
6350
|
+
declare const AX_CONVERSATION_SYSTEM_RENDERER: AXConversationMessageRenderer;
|
|
6351
|
+
|
|
6352
|
+
declare const AX_CONVERSATION_FALLBACK_RENDERER: AXConversationMessageRenderer;
|
|
6353
|
+
|
|
5883
6354
|
/**
|
|
5884
|
-
*
|
|
5885
|
-
*
|
|
5886
|
-
* @param type - Message type
|
|
5887
|
-
* @returns Validation result
|
|
6355
|
+
* Default Conversation Item Actions Plugin
|
|
6356
|
+
* Individual action constants with AX_ prefix naming convention
|
|
5888
6357
|
*/
|
|
5889
|
-
|
|
6358
|
+
|
|
5890
6359
|
/**
|
|
5891
|
-
*
|
|
5892
|
-
* @param userId - User ID to validate
|
|
5893
|
-
* @returns Validation result
|
|
6360
|
+
* Mute/Unmute conversation notifications
|
|
5894
6361
|
*/
|
|
5895
|
-
declare
|
|
6362
|
+
declare const AX_CONVERSATION_ITEM_MUTE_ACTION: AXConversationItemAction;
|
|
5896
6363
|
/**
|
|
5897
|
-
*
|
|
5898
|
-
* @param userIds - Array of user IDs to validate
|
|
5899
|
-
* @param minCount - Minimum number of users required
|
|
5900
|
-
* @param maxCount - Maximum number of users allowed
|
|
5901
|
-
* @returns Validation result
|
|
6364
|
+
* Pin/Unpin conversation to top
|
|
5902
6365
|
*/
|
|
5903
|
-
declare
|
|
6366
|
+
declare const AX_CONVERSATION_ITEM_PIN_ACTION: AXConversationItemAction;
|
|
5904
6367
|
/**
|
|
5905
|
-
*
|
|
5906
|
-
* @param email - Email to validate
|
|
5907
|
-
* @returns Validation result
|
|
6368
|
+
* Mark conversation as read
|
|
5908
6369
|
*/
|
|
5909
|
-
declare
|
|
6370
|
+
declare const AX_CONVERSATION_ITEM_MARK_READ_ACTION: AXConversationItemAction;
|
|
5910
6371
|
/**
|
|
5911
|
-
*
|
|
5912
|
-
* @param url - URL to validate
|
|
5913
|
-
* @returns Validation result
|
|
6372
|
+
* Divider separator before destructive actions
|
|
5914
6373
|
*/
|
|
5915
|
-
declare
|
|
6374
|
+
declare const AX_CONVERSATION_ITEM_DIVIDER: AXConversationItemAction;
|
|
5916
6375
|
/**
|
|
5917
|
-
*
|
|
5918
|
-
*
|
|
5919
|
-
*
|
|
5920
|
-
*
|
|
6376
|
+
* Delete/Leave conversation action (smart action that adapts based on conversation type)
|
|
6377
|
+
* - Private: "Delete" - Deletes the conversation
|
|
6378
|
+
* - Bot: "Delete" - Deletes for both sides without a confirmation prompt
|
|
6379
|
+
* - Group/Channel: "Leave & Delete" - Leaves the group and removes it from list
|
|
5921
6380
|
*/
|
|
5922
|
-
declare
|
|
6381
|
+
declare const AX_CONVERSATION_ITEM_DELETE_ACTION: AXConversationItemAction;
|
|
5923
6382
|
/**
|
|
5924
|
-
*
|
|
5925
|
-
* @param latitude - Latitude to validate
|
|
5926
|
-
* @returns Validation result
|
|
6383
|
+
* Block/Unblock user (private conversations only)
|
|
5927
6384
|
*/
|
|
5928
|
-
declare
|
|
6385
|
+
declare const AX_CONVERSATION_ITEM_BLOCK_ACTION: AXConversationItemAction;
|
|
6386
|
+
|
|
5929
6387
|
/**
|
|
5930
|
-
*
|
|
5931
|
-
*
|
|
5932
|
-
* @returns Validation result
|
|
6388
|
+
* Default Conversation Tabs Plugin
|
|
6389
|
+
* Provides sidebar conversation filter tabs (all, private, groups, etc.)
|
|
5933
6390
|
*/
|
|
5934
|
-
declare function validateLongitude(longitude: number | undefined | null): AXConversationValidationResult;
|
|
5935
6391
|
|
|
5936
|
-
|
|
5937
|
-
declare
|
|
5938
|
-
|
|
5939
|
-
declare
|
|
5940
|
-
|
|
5941
|
-
declare
|
|
6392
|
+
declare const AX_CONVERSATION_TAB_ALL: AXConversationTab;
|
|
6393
|
+
declare const AX_CONVERSATION_TAB_PRIVATE: AXConversationTab;
|
|
6394
|
+
declare const AX_CONVERSATION_TAB_GROUPS: AXConversationTab;
|
|
6395
|
+
declare const AX_CONVERSATION_TAB_CHANNELS: AXConversationTab;
|
|
6396
|
+
declare const AX_CONVERSATION_TAB_BOT: AXConversationTab;
|
|
6397
|
+
declare const AX_CONVERSATION_TAB_UNREAD: AXConversationTab;
|
|
6398
|
+
declare const AX_CONVERSATION_TAB_ARCHIVED: AXConversationTab;
|
|
5942
6399
|
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
5951
|
-
|
|
5952
|
-
|
|
5953
|
-
|
|
5954
|
-
|
|
5955
|
-
|
|
6400
|
+
declare class AXConversationDefaultConversationAvatarComponent {
|
|
6401
|
+
private readonly conversationService;
|
|
6402
|
+
private readonly userAvatarComponent;
|
|
6403
|
+
readonly conversationId: _angular_core.InputSignal<string>;
|
|
6404
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
6405
|
+
private readonly currentUserId;
|
|
6406
|
+
private readonly conversation;
|
|
6407
|
+
readonly peerUserId: _angular_core.Signal<string>;
|
|
6408
|
+
readonly useUserAvatar: _angular_core.Signal<_angular_core.Type<_acorex_components_conversation.AXConversationUserAvatarComponent>>;
|
|
6409
|
+
readonly userAvatarInputs: _angular_core.Signal<{
|
|
6410
|
+
userId: string;
|
|
6411
|
+
size: number;
|
|
6412
|
+
displayName: string;
|
|
6413
|
+
displayAvatar: string;
|
|
6414
|
+
displayIcon: string;
|
|
6415
|
+
}>;
|
|
6416
|
+
readonly filteredUserAvatarInputs: _angular_core.Signal<Record<string, unknown>>;
|
|
6417
|
+
readonly fallbackDisplay: _angular_core.Signal<_acorex_components_conversation.AXConversationAvatarDisplay>;
|
|
6418
|
+
readonly fallbackInitials: _angular_core.Signal<string>;
|
|
6419
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationDefaultConversationAvatarComponent, never>;
|
|
6420
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationDefaultConversationAvatarComponent, "ax-conversation-default-conversation-avatar", never, { "conversationId": { "alias": "conversationId"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
5956
6421
|
}
|
|
5957
|
-
|
|
5958
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
6422
|
+
|
|
6423
|
+
/**
|
|
6424
|
+
* Configuration options for conversation module
|
|
6425
|
+
*/
|
|
6426
|
+
interface AXConversationOptions {
|
|
6427
|
+
/** User API implementation (required) */
|
|
6428
|
+
userApi: Type<AXConversationUserApi>;
|
|
6429
|
+
/** Conversation Management API implementation (required) */
|
|
6430
|
+
conversationApi: Type<AXConversationApi>;
|
|
6431
|
+
/** Message API implementation (required) */
|
|
6432
|
+
messageApi: Type<AXConversationMessageApi>;
|
|
6433
|
+
/** Realtime API implementation (optional) */
|
|
6434
|
+
realtimeApi?: Type<AXConversationRealtimeApi>;
|
|
6435
|
+
/** Configuration overrides */
|
|
6436
|
+
config?: Partial<AXConversationConfig>;
|
|
6437
|
+
/** Registry configuration */
|
|
6438
|
+
registry?: Partial<AXConversationRegistryConfiguration>;
|
|
6439
|
+
/** Optional custom avatar components for the entire conversation UI */
|
|
6440
|
+
avatarComponents?: AXConversationAvatarComponents;
|
|
5972
6441
|
}
|
|
5973
|
-
declare
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5980
|
-
|
|
5981
|
-
|
|
5982
|
-
|
|
6442
|
+
declare class AXConversationModule {
|
|
6443
|
+
/**
|
|
6444
|
+
* Configure module for root module with singleton services.
|
|
6445
|
+
* @deprecated Use standalone components with provideConversation()
|
|
6446
|
+
*/
|
|
6447
|
+
static forRoot(options: AXConversationOptions): ModuleWithProviders<AXConversationModule>;
|
|
6448
|
+
/**
|
|
6449
|
+
* Configure module for lazy-loaded feature modules.
|
|
6450
|
+
* Reuses singleton services from root, optionally overrides config/registry.
|
|
6451
|
+
*/
|
|
6452
|
+
static forChild(options?: Omit<AXConversationOptions, 'userApi' | 'conversationApi' | 'messageApi' | 'realtimeApi'>): ModuleWithProviders<AXConversationModule>;
|
|
6453
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationModule, never>;
|
|
6454
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXConversationModule, never, [typeof i1.CommonModule, typeof i2.FormsModule, typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective, typeof AXConversationDefaultConversationAvatarComponent], [typeof AXConversationContainerComponent, typeof AXConversationSidebarComponent, typeof AXConversationInfoBarComponent, typeof AXConversationMessageListComponent, typeof AXConversationComposerComponent, typeof AXConversationInfiniteScrollDirective]>;
|
|
6455
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXConversationModule>;
|
|
5983
6456
|
}
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
6457
|
+
/**
|
|
6458
|
+
* Provides conversation functionality for standalone applications.
|
|
6459
|
+
* Use in app config or route providers.
|
|
6460
|
+
*
|
|
6461
|
+
* @example
|
|
6462
|
+
* ```typescript
|
|
6463
|
+
* import {
|
|
6464
|
+
* AXConversationIndexedDbUserApi,
|
|
6465
|
+
* AXConversationIndexedDbConversationApi,
|
|
6466
|
+
* AXConversationIndexedDbMessageApi,
|
|
6467
|
+
* AXConversationIndexedDbRealtimeApi
|
|
6468
|
+
* } from '@acorex/components/conversation';
|
|
6469
|
+
*
|
|
6470
|
+
* export const appConfig: ApplicationConfig = {
|
|
6471
|
+
* providers: [
|
|
6472
|
+
* provideConversation({
|
|
6473
|
+
* userApi: AXConversationIndexedDbUserApi,
|
|
6474
|
+
* conversationApi: AXConversationIndexedDbConversationApi,
|
|
6475
|
+
* messageApi: AXConversationIndexedDbMessageApi,
|
|
6476
|
+
* realtimeApi: AXConversationIndexedDbRealtimeApi,
|
|
6477
|
+
* config: { },
|
|
6478
|
+
* registry: { messageActions: [myCustomAction] }
|
|
6479
|
+
* })
|
|
6480
|
+
* ]
|
|
6481
|
+
* };
|
|
6482
|
+
* ```
|
|
6483
|
+
*/
|
|
6484
|
+
declare function provideConversation(options: AXConversationOptions): Provider[];
|
|
5988
6485
|
|
|
5989
6486
|
/**
|
|
5990
6487
|
* Error Message Constants
|
|
@@ -6378,5 +6875,5 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
|
|
|
6378
6875
|
*/
|
|
6379
6876
|
type AXConversationErrorCode = typeof AX_CONVERSATION_MESSAGE_ERRORS[keyof typeof AX_CONVERSATION_MESSAGE_ERRORS]['code'] | typeof AX_CONVERSATION_FILE_ERRORS[keyof typeof AX_CONVERSATION_FILE_ERRORS]['code'] | typeof AX_CONVERSATION_USER_ERRORS[keyof typeof AX_CONVERSATION_USER_ERRORS]['code'] | typeof AX_CONVERSATION_ERRORS[keyof typeof AX_CONVERSATION_ERRORS]['code'] | typeof AX_CONVERSATION_CONNECTION_ERRORS[keyof typeof AX_CONVERSATION_CONNECTION_ERRORS]['code'] | typeof AX_CONVERSATION_LOCATION_ERRORS[keyof typeof AX_CONVERSATION_LOCATION_ERRORS]['code'] | typeof AX_CONVERSATION_URL_ERRORS[keyof typeof AX_CONVERSATION_URL_ERRORS]['code'];
|
|
6380
6877
|
|
|
6381
|
-
export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createPickerUploadItemId, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, usesDefaultMessageListWallpaper, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
|
|
6382
|
-
export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSidebarTabsOrientation, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
|
|
6878
|
+
export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationDeleteDialogComponent, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerOptionsComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_JUMBO_EMOJI_MAX, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, countLoneEmojis, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createPickerUploadItemId, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemAsAudioMedia, fileItemFromUpload, filesFromClipboardEvent, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getActiveComposerPickerPasteHandler, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerAttachmentBannerEnabled, isComposerTabEnabled, isConversationReactionsEnabled, isConversationRoomCreator, isGenericPrivateConversationTitle, isGridMediaCategory, isGroupLikeConversation, isJumboEmojiText, isJumboEmojiTextMessage, isMessageDeliveryPending, isMessageListThemeBackground, isMessageVisibleAfterHistoryCutoff, isNonPersistableMediaUrl, isPickerItemReadyToSend, isPlainChromeMessage, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, listTextGraphemes, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeConversationInboundFile, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickEarliestJoinedParticipant, pickerItemToMediaReference, pickerItemToUploadResult, probeAudioDuration, probeImageDimensions, probeVideoMedia, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, registerComposerPickerPasteHandler, reportMediaLoadError, resolveComposerAttachmentPresentation, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageChrome, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, sortUsersForForward, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, usesDefaultMessageListWallpaper, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
|
|
6879
|
+
export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerAttachmentPresentation, AXConversationComposerDraftAttachment, AXConversationComposerDraftAttachmentKind, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDateSeparatorKind, AXConversationDeleteDialogMode, AXConversationDeleteDialogResult, AXConversationDeleteMessageCommand, AXConversationDeleteOptions, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationForwardUserSortEntry, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaDimensions, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageChrome, AXConversationMessageClusterRole, AXConversationMessageDateGroup, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationOptions, AXConversationOutletSkeleton, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPickerPasteHandler, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSidebarTabsOrientation, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
|