@acorex/components 21.0.3-next.26 → 21.0.3-next.28
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/conversation/README.md +462 -2
- package/conversation/index.d.ts +5386 -471
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs +13711 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs +119 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs +59 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs +432 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs +177 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs +54 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-Bb5KhRuV.mjs +100 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-Bb5KhRuV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs +121 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs +84 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs +238 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs +1080 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs +102 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.mjs +90 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-BXGAL-OM.mjs +44 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-BXGAL-OM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs +64 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs +468 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs +125 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs +50 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs +77 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs +407 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs +83 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs +266 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs +149 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs +118 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs +140 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs +33 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs +172 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs +224 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs +81 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs +537 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs +68 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs +95 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs +187 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs +170 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs +750 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs +103 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs +55 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs +109 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs +105 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs +62 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs +446 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs +181 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs +54 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs +328 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs +270 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +1 -1402
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/package.json +7 -11
- package/conversation2/README.md +0 -463
- package/conversation2/index.d.ts +0 -6410
- package/fesm2022/acorex-components-conversation2.mjs +0 -22331
- package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { isPlatformBrowser, CommonModule } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { inject, PLATFORM_ID, DestroyRef, viewChild, signal, input, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
|
+
import { l as copyWithFileTypeFallback, m as AXConversationInfoBarService, x as createResolvedMediaUrlSignal, y as pickDisplayMediaUrl } from './acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs';
|
|
5
|
+
import { AXFileTypeRegistryService } from '@acorex/core/file';
|
|
6
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
7
|
+
import { A as AXConversationMessageRendererCopyHostComponent, m as mediaCopyText } from './acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs';
|
|
8
|
+
import { f as formatMediaDuration } from './acorex-components-conversation-format-media-DUD4vA6F.mjs';
|
|
9
|
+
import { A as AXConversationMessageRendererStateComponent } from './acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs';
|
|
10
|
+
import { b as bindMediaRendererContentState, r as reportMediaLoadError, s as syncPlaybackInfoBarBanner } from './acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs';
|
|
11
|
+
|
|
12
|
+
/** Decorative bars when payload has no waveform (deterministic, no random). */
|
|
13
|
+
const FALLBACK_WAVEFORM = [
|
|
14
|
+
38, 58, 44, 72, 48, 64, 40, 68, 52, 60, 42, 56, 46, 70, 50, 62, 36, 54, 48, 66,
|
|
15
|
+
];
|
|
16
|
+
class AXConversationVoiceRendererComponent extends AXConversationMessageRendererCopyHostComponent {
|
|
17
|
+
copy() {
|
|
18
|
+
return copyWithFileTypeFallback(this.message(), this.fileTypes, () => {
|
|
19
|
+
const url = this.voiceUrl()?.trim();
|
|
20
|
+
return mediaCopyText(undefined, 'Voice message', 'voice messages', 1, [url]);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
this.fileTypes = inject(AXFileTypeRegistryService);
|
|
26
|
+
this.translation = inject(AXTranslationService);
|
|
27
|
+
this.platformId = inject(PLATFORM_ID);
|
|
28
|
+
this.destroyRef = inject(DestroyRef);
|
|
29
|
+
this.infoBarService = inject(AXConversationInfoBarService, { optional: true });
|
|
30
|
+
this.audioElementRef = viewChild('audioElement', ...(ngDevMode ? [{ debugName: "audioElementRef" }] : []));
|
|
31
|
+
this._contentState = signal('ready', ...(ngDevMode ? [{ debugName: "_contentState" }] : []));
|
|
32
|
+
this.message = input.required(...(ngDevMode ? [{ debugName: "message" }] : []));
|
|
33
|
+
this.rendererState = computed(() => ({
|
|
34
|
+
deliveryStatus: this.message().status,
|
|
35
|
+
contentState: this._contentState(),
|
|
36
|
+
}), ...(ngDevMode ? [{ debugName: "rendererState" }] : []));
|
|
37
|
+
this.isPlaying = signal(false, ...(ngDevMode ? [{ debugName: "isPlaying" }] : []));
|
|
38
|
+
this.currentTime = signal(0, ...(ngDevMode ? [{ debugName: "currentTime" }] : []));
|
|
39
|
+
this.duration = signal(0, ...(ngDevMode ? [{ debugName: "duration" }] : []));
|
|
40
|
+
this.playbackSpeed = signal(1.0, ...(ngDevMode ? [{ debugName: "playbackSpeed" }] : []));
|
|
41
|
+
this.speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
|
|
42
|
+
this.payload = computed(() => this.message().payload, ...(ngDevMode ? [{ debugName: "payload" }] : []));
|
|
43
|
+
this.mediaReference = computed(() => ({
|
|
44
|
+
url: this.payload().url,
|
|
45
|
+
mediaId: this.payload().mediaId,
|
|
46
|
+
mimeType: this.payload().mimeType,
|
|
47
|
+
size: this.payload().size,
|
|
48
|
+
}), ...(ngDevMode ? [{ debugName: "mediaReference" }] : []));
|
|
49
|
+
this.resolvedUrl = createResolvedMediaUrlSignal(this.mediaReference);
|
|
50
|
+
this.voiceUrl = computed(() => pickDisplayMediaUrl(this.resolvedUrl(), this.payload().url), ...(ngDevMode ? [{ debugName: "voiceUrl" }] : []));
|
|
51
|
+
this.waveformBars = computed(() => {
|
|
52
|
+
const w = this.payload().waveform;
|
|
53
|
+
return w?.length ? w : [...FALLBACK_WAVEFORM];
|
|
54
|
+
}, ...(ngDevMode ? [{ debugName: "waveformBars" }] : []));
|
|
55
|
+
this.activeBarIndex = computed(() => {
|
|
56
|
+
const dur = this.duration();
|
|
57
|
+
const n = this.waveformBars().length;
|
|
58
|
+
return dur > 0 ? Math.floor((this.currentTime() / dur) * n) : 0;
|
|
59
|
+
}, ...(ngDevMode ? [{ debugName: "activeBarIndex" }] : []));
|
|
60
|
+
this.timeLabel = computed(() => formatMediaDuration(this.isPlaying() ? this.currentTime() : this.duration()), ...(ngDevMode ? [{ debugName: "timeLabel" }] : []));
|
|
61
|
+
this.voiceLoadErrorLabel = computed(() => this.translation.translateSync('@acorex:chat.renderer-state.could-not-load-voice'), ...(ngDevMode ? [{ debugName: "voiceLoadErrorLabel" }] : []));
|
|
62
|
+
bindMediaRendererContentState(this.message, this._contentState, () => this.voiceUrl());
|
|
63
|
+
effect((onCleanup) => {
|
|
64
|
+
const audioEl = this.audioElementRef()?.nativeElement;
|
|
65
|
+
if (!audioEl || !isPlatformBrowser(this.platformId)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const onMeta = () => {
|
|
69
|
+
this.duration.set(audioEl.duration);
|
|
70
|
+
};
|
|
71
|
+
audioEl.addEventListener('loadedmetadata', onMeta);
|
|
72
|
+
onCleanup(() => audioEl.removeEventListener('loadedmetadata', onMeta));
|
|
73
|
+
});
|
|
74
|
+
this.destroyRef.onDestroy(() => {
|
|
75
|
+
const messageId = this.message()?.id;
|
|
76
|
+
if (!messageId || !this.infoBarService) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.infoBarService.hideMessageBanner(messageId);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
togglePlay() {
|
|
83
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const audioEl = this.audioElementRef()?.nativeElement;
|
|
87
|
+
if (!audioEl) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (this.isPlaying()) {
|
|
91
|
+
audioEl.pause();
|
|
92
|
+
this.isPlaying.set(false);
|
|
93
|
+
this.syncInfoBarBanner();
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
void audioEl.play();
|
|
97
|
+
this.isPlaying.set(true);
|
|
98
|
+
this.syncInfoBarBanner(true);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
cyclePlaybackSpeed() {
|
|
102
|
+
const current = this.playbackSpeed();
|
|
103
|
+
const i = this.speeds.findIndex((s) => s === current);
|
|
104
|
+
const nextIndex = (i < 0 ? 2 : i + 1) % this.speeds.length;
|
|
105
|
+
const next = this.speeds[nextIndex] ?? 1;
|
|
106
|
+
this.playbackSpeed.set(next);
|
|
107
|
+
const audioEl = this.audioElementRef()?.nativeElement;
|
|
108
|
+
if (audioEl) {
|
|
109
|
+
audioEl.playbackRate = next;
|
|
110
|
+
this.syncInfoBarBanner();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
onTimeUpdate() {
|
|
114
|
+
const audioEl = this.audioElementRef()?.nativeElement;
|
|
115
|
+
if (audioEl) {
|
|
116
|
+
this.currentTime.set(audioEl.currentTime);
|
|
117
|
+
this.syncInfoBarBanner();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
onEnded() {
|
|
121
|
+
this.isPlaying.set(false);
|
|
122
|
+
this.currentTime.set(0);
|
|
123
|
+
this.syncInfoBarBanner();
|
|
124
|
+
}
|
|
125
|
+
onError() {
|
|
126
|
+
if (!reportMediaLoadError(this.message(), this._contentState)) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.isPlaying.set(false);
|
|
130
|
+
this.infoBarService?.hideMessageBanner(this.message().id);
|
|
131
|
+
}
|
|
132
|
+
pausePlayback() {
|
|
133
|
+
const audioEl = this.audioElementRef()?.nativeElement;
|
|
134
|
+
if (!audioEl) {
|
|
135
|
+
this.isPlaying.set(false);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
audioEl.pause();
|
|
139
|
+
this.isPlaying.set(false);
|
|
140
|
+
}
|
|
141
|
+
syncInfoBarBanner(forceOpen = false) {
|
|
142
|
+
if (!this.infoBarService) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const message = this.message();
|
|
146
|
+
const payload = this.payload();
|
|
147
|
+
syncPlaybackInfoBarBanner(this.infoBarService, message, {
|
|
148
|
+
title: 'Voice message',
|
|
149
|
+
currentTime: this.currentTime(),
|
|
150
|
+
duration: this.duration() || payload.duration || 0,
|
|
151
|
+
isPlaying: this.isPlaying(),
|
|
152
|
+
onTogglePlay: () => this.togglePlay(),
|
|
153
|
+
onClose: () => this.pausePlayback(),
|
|
154
|
+
playbackSpeed: this.playbackSpeed(),
|
|
155
|
+
onCycleSpeed: () => this.cyclePlaybackSpeed(),
|
|
156
|
+
showSpeedControl: true,
|
|
157
|
+
}, { forceOpen });
|
|
158
|
+
}
|
|
159
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationVoiceRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
160
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.3", type: AXConversationVoiceRendererComponent, isStandalone: true, selector: "ax-conversation-voice-renderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "audioElementRef", first: true, predicate: ["audioElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
161
|
+
<div class="ax-conversation-voice">
|
|
162
|
+
<div class="ax-conversation-voice__bar">
|
|
163
|
+
<button
|
|
164
|
+
type="button"
|
|
165
|
+
class="ax-conversation-voice__fab"
|
|
166
|
+
(click)="togglePlay()"
|
|
167
|
+
[attr.aria-label]="isPlaying() ? 'Pause' : 'Play voice message'"
|
|
168
|
+
>
|
|
169
|
+
<i class="fa-solid" [class.fa-pause]="isPlaying()" [class.fa-play]="!isPlaying()"></i>
|
|
170
|
+
</button>
|
|
171
|
+
<div class="ax-conversation-voice__wave" aria-hidden="true">
|
|
172
|
+
<div class="ax-conversation-voice__cols">
|
|
173
|
+
@for (bar of waveformBars(); track $index) {
|
|
174
|
+
<div
|
|
175
|
+
class="ax-conversation-voice__col"
|
|
176
|
+
[style.height.%]="bar"
|
|
177
|
+
[class.ax-conversation-voice__col--on]="$index < activeBarIndex()"
|
|
178
|
+
></div>
|
|
179
|
+
}
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="ax-conversation-voice__side">
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
class="ax-conversation-voice__speed"
|
|
186
|
+
(click)="cyclePlaybackSpeed()"
|
|
187
|
+
[attr.aria-label]="'Playback speed: ' + playbackSpeed() + 'x'"
|
|
188
|
+
>
|
|
189
|
+
{{ playbackSpeed() }}x
|
|
190
|
+
</button>
|
|
191
|
+
<span class="ax-conversation-voice__time">{{ timeLabel() }}</span>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
<audio
|
|
195
|
+
#audioElement
|
|
196
|
+
class="ax-conversation-voice__el"
|
|
197
|
+
[src]="voiceUrl() || null"
|
|
198
|
+
(error)="onError()"
|
|
199
|
+
(timeupdate)="onTimeUpdate()"
|
|
200
|
+
(ended)="onEnded()"
|
|
201
|
+
></audio>
|
|
202
|
+
<ax-conversation-message-renderer-state
|
|
203
|
+
[rendererState]="rendererState()"
|
|
204
|
+
[message]="message()"
|
|
205
|
+
[contentErrorLabel]="voiceLoadErrorLabel()"
|
|
206
|
+
contentErrorStyle="inline"
|
|
207
|
+
contentErrorIconClass="fa-light fa-microphone"
|
|
208
|
+
placement="below"
|
|
209
|
+
/>
|
|
210
|
+
</div>
|
|
211
|
+
`, isInline: true, styles: [":host{display:block;max-width:100%}.ax-conversation-voice{width:100%;max-width:min(100%,17rem)}.ax-conversation-voice__bar{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-light-surface));border:1px solid rgb(var(--ax-sys-color-border-light-surface))}.ax-conversation-voice__fab{flex-shrink:0;width:2.25rem;height:2.25rem;touch-action:manipulation;display:flex;align-items:center;justify-content:center;padding-inline-start:.12rem;border:none;border-radius:50%;background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));font-size:.75rem;cursor:pointer;transition:background .15s ease}@media (hover: hover){.ax-conversation-voice__fab:hover{background:rgb(var(--ax-sys-color-primary-600))}}.ax-conversation-voice__fab:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:2px}.ax-conversation-voice__wave{flex:1;min-width:0}.ax-conversation-voice__cols{display:flex;align-items:center;gap:2px;height:1.75rem}.ax-conversation-voice__col{flex:1;min-width:2px;max-height:100%;align-self:center;border-radius:2px;background:rgb(var(--ax-sys-color-border-light-surface));transition:background .12s ease}.ax-conversation-voice__col--on{background:rgb(var(--ax-sys-color-primary-500))}.ax-conversation-voice__side{display:flex;flex-direction:column;align-items:center;gap:.125rem;flex-shrink:0}.ax-conversation-voice__speed{min-width:2.5rem;height:1.25rem;padding:0 .25rem;border:1px solid rgb(var(--ax-sys-color-primary-500));border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-600));font-size:.6875rem;font-weight:600;cursor:pointer;transition:background .15s ease}.ax-conversation-voice__speed:hover{background:rgb(var(--ax-sys-color-primary-lightest-surface))}.ax-conversation-voice__time{font-size:.625rem;font-variant-numeric:tabular-nums;opacity:.72;color:rgb(var(--ax-sys-color-primary-600))}.ax-conversation-voice__el{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXConversationMessageRendererStateComponent, selector: "ax-conversation-message-renderer-state", inputs: ["rendererState", "message", "contentErrorLabel", "deliveryFailedLabel", "showContentErrorChrome", "contentErrorStyle", "contentErrorIconClass", "placement", "contentRetryEnabled"], outputs: ["contentRetry"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
212
|
+
}
|
|
213
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationVoiceRendererComponent, decorators: [{
|
|
214
|
+
type: Component,
|
|
215
|
+
args: [{ selector: 'ax-conversation-voice-renderer', imports: [CommonModule, AXConversationMessageRendererStateComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
216
|
+
<div class="ax-conversation-voice">
|
|
217
|
+
<div class="ax-conversation-voice__bar">
|
|
218
|
+
<button
|
|
219
|
+
type="button"
|
|
220
|
+
class="ax-conversation-voice__fab"
|
|
221
|
+
(click)="togglePlay()"
|
|
222
|
+
[attr.aria-label]="isPlaying() ? 'Pause' : 'Play voice message'"
|
|
223
|
+
>
|
|
224
|
+
<i class="fa-solid" [class.fa-pause]="isPlaying()" [class.fa-play]="!isPlaying()"></i>
|
|
225
|
+
</button>
|
|
226
|
+
<div class="ax-conversation-voice__wave" aria-hidden="true">
|
|
227
|
+
<div class="ax-conversation-voice__cols">
|
|
228
|
+
@for (bar of waveformBars(); track $index) {
|
|
229
|
+
<div
|
|
230
|
+
class="ax-conversation-voice__col"
|
|
231
|
+
[style.height.%]="bar"
|
|
232
|
+
[class.ax-conversation-voice__col--on]="$index < activeBarIndex()"
|
|
233
|
+
></div>
|
|
234
|
+
}
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
<div class="ax-conversation-voice__side">
|
|
238
|
+
<button
|
|
239
|
+
type="button"
|
|
240
|
+
class="ax-conversation-voice__speed"
|
|
241
|
+
(click)="cyclePlaybackSpeed()"
|
|
242
|
+
[attr.aria-label]="'Playback speed: ' + playbackSpeed() + 'x'"
|
|
243
|
+
>
|
|
244
|
+
{{ playbackSpeed() }}x
|
|
245
|
+
</button>
|
|
246
|
+
<span class="ax-conversation-voice__time">{{ timeLabel() }}</span>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
<audio
|
|
250
|
+
#audioElement
|
|
251
|
+
class="ax-conversation-voice__el"
|
|
252
|
+
[src]="voiceUrl() || null"
|
|
253
|
+
(error)="onError()"
|
|
254
|
+
(timeupdate)="onTimeUpdate()"
|
|
255
|
+
(ended)="onEnded()"
|
|
256
|
+
></audio>
|
|
257
|
+
<ax-conversation-message-renderer-state
|
|
258
|
+
[rendererState]="rendererState()"
|
|
259
|
+
[message]="message()"
|
|
260
|
+
[contentErrorLabel]="voiceLoadErrorLabel()"
|
|
261
|
+
contentErrorStyle="inline"
|
|
262
|
+
contentErrorIconClass="fa-light fa-microphone"
|
|
263
|
+
placement="below"
|
|
264
|
+
/>
|
|
265
|
+
</div>
|
|
266
|
+
`, styles: [":host{display:block;max-width:100%}.ax-conversation-voice{width:100%;max-width:min(100%,17rem)}.ax-conversation-voice__bar{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-light-surface));border:1px solid rgb(var(--ax-sys-color-border-light-surface))}.ax-conversation-voice__fab{flex-shrink:0;width:2.25rem;height:2.25rem;touch-action:manipulation;display:flex;align-items:center;justify-content:center;padding-inline-start:.12rem;border:none;border-radius:50%;background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));font-size:.75rem;cursor:pointer;transition:background .15s ease}@media (hover: hover){.ax-conversation-voice__fab:hover{background:rgb(var(--ax-sys-color-primary-600))}}.ax-conversation-voice__fab:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:2px}.ax-conversation-voice__wave{flex:1;min-width:0}.ax-conversation-voice__cols{display:flex;align-items:center;gap:2px;height:1.75rem}.ax-conversation-voice__col{flex:1;min-width:2px;max-height:100%;align-self:center;border-radius:2px;background:rgb(var(--ax-sys-color-border-light-surface));transition:background .12s ease}.ax-conversation-voice__col--on{background:rgb(var(--ax-sys-color-primary-500))}.ax-conversation-voice__side{display:flex;flex-direction:column;align-items:center;gap:.125rem;flex-shrink:0}.ax-conversation-voice__speed{min-width:2.5rem;height:1.25rem;padding:0 .25rem;border:1px solid rgb(var(--ax-sys-color-primary-500));border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-600));font-size:.6875rem;font-weight:600;cursor:pointer;transition:background .15s ease}.ax-conversation-voice__speed:hover{background:rgb(var(--ax-sys-color-primary-lightest-surface))}.ax-conversation-voice__time{font-size:.625rem;font-variant-numeric:tabular-nums;opacity:.72;color:rgb(var(--ax-sys-color-primary-600))}.ax-conversation-voice__el{display:none}\n"] }]
|
|
267
|
+
}], ctorParameters: () => [] });
|
|
268
|
+
|
|
269
|
+
export { AXConversationVoiceRendererComponent };
|
|
270
|
+
//# sourceMappingURL=acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/message-list/components/voice-renderer/voice-renderer.component.js"],"sourcesContent":["import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, PLATFORM_ID, computed, effect, inject, input, signal, viewChild, } from '@angular/core';\nimport { AXConversationInfoBarService } from '../../../../components';\nimport { AXFileTypeRegistryService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXConversationMessageRendererCopyHostComponent, mediaCopyText } from '../shared/message-renderer-copy-host.component';\nimport { copyWithFileTypeFallback } from '../../../../utils/file-type-message.resolve';\nimport { pickDisplayMediaUrl } from '../../../composer/components/shared/persisted-media-url';\nimport { formatMediaDuration } from '../shared/format-media';\nimport { createResolvedMediaUrlSignal } from '../shared/media-url-resolve';\nimport { AXConversationMessageRendererStateComponent } from '../shared/message-renderer-state.component';\nimport { bindMediaRendererContentState, reportMediaLoadError } from '../shared/media-renderer-content-state';\nimport { syncPlaybackInfoBarBanner } from '../shared/playback-banner-sync';\nimport * as i0 from \"@angular/core\";\n/** Decorative bars when payload has no waveform (deterministic, no random). */\nconst FALLBACK_WAVEFORM = [\n 38, 58, 44, 72, 48, 64, 40, 68, 52, 60, 42, 56, 46, 70, 50, 62, 36, 54, 48, 66,\n];\nexport class AXConversationVoiceRendererComponent extends AXConversationMessageRendererCopyHostComponent {\n copy() {\n return copyWithFileTypeFallback(this.message(), this.fileTypes, () => {\n const url = this.voiceUrl()?.trim();\n return mediaCopyText(undefined, 'Voice message', 'voice messages', 1, [url]);\n });\n }\n constructor() {\n super();\n this.fileTypes = inject(AXFileTypeRegistryService);\n this.translation = inject(AXTranslationService);\n this.platformId = inject(PLATFORM_ID);\n this.destroyRef = inject(DestroyRef);\n this.infoBarService = inject(AXConversationInfoBarService, { optional: true });\n this.audioElementRef = viewChild('audioElement', ...(ngDevMode ? [{ debugName: \"audioElementRef\" }] : []));\n this._contentState = signal('ready', ...(ngDevMode ? [{ debugName: \"_contentState\" }] : []));\n this.message = input.required(...(ngDevMode ? [{ debugName: \"message\" }] : []));\n this.rendererState = computed(() => ({\n deliveryStatus: this.message().status,\n contentState: this._contentState(),\n }), ...(ngDevMode ? [{ debugName: \"rendererState\" }] : []));\n this.isPlaying = signal(false, ...(ngDevMode ? [{ debugName: \"isPlaying\" }] : []));\n this.currentTime = signal(0, ...(ngDevMode ? [{ debugName: \"currentTime\" }] : []));\n this.duration = signal(0, ...(ngDevMode ? [{ debugName: \"duration\" }] : []));\n this.playbackSpeed = signal(1.0, ...(ngDevMode ? [{ debugName: \"playbackSpeed\" }] : []));\n this.speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n this.payload = computed(() => this.message().payload, ...(ngDevMode ? [{ debugName: \"payload\" }] : []));\n this.mediaReference = computed(() => ({\n url: this.payload().url,\n mediaId: this.payload().mediaId,\n mimeType: this.payload().mimeType,\n size: this.payload().size,\n }), ...(ngDevMode ? [{ debugName: \"mediaReference\" }] : []));\n this.resolvedUrl = createResolvedMediaUrlSignal(this.mediaReference);\n this.voiceUrl = computed(() => pickDisplayMediaUrl(this.resolvedUrl(), this.payload().url), ...(ngDevMode ? [{ debugName: \"voiceUrl\" }] : []));\n this.waveformBars = computed(() => {\n const w = this.payload().waveform;\n return w?.length ? w : [...FALLBACK_WAVEFORM];\n }, ...(ngDevMode ? [{ debugName: \"waveformBars\" }] : []));\n this.activeBarIndex = computed(() => {\n const dur = this.duration();\n const n = this.waveformBars().length;\n return dur > 0 ? Math.floor((this.currentTime() / dur) * n) : 0;\n }, ...(ngDevMode ? [{ debugName: \"activeBarIndex\" }] : []));\n this.timeLabel = computed(() => formatMediaDuration(this.isPlaying() ? this.currentTime() : this.duration()), ...(ngDevMode ? [{ debugName: \"timeLabel\" }] : []));\n this.voiceLoadErrorLabel = computed(() => this.translation.translateSync('@acorex:chat.renderer-state.could-not-load-voice'), ...(ngDevMode ? [{ debugName: \"voiceLoadErrorLabel\" }] : []));\n bindMediaRendererContentState(this.message, this._contentState, () => this.voiceUrl());\n effect((onCleanup) => {\n const audioEl = this.audioElementRef()?.nativeElement;\n if (!audioEl || !isPlatformBrowser(this.platformId)) {\n return;\n }\n const onMeta = () => {\n this.duration.set(audioEl.duration);\n };\n audioEl.addEventListener('loadedmetadata', onMeta);\n onCleanup(() => audioEl.removeEventListener('loadedmetadata', onMeta));\n });\n this.destroyRef.onDestroy(() => {\n const messageId = this.message()?.id;\n if (!messageId || !this.infoBarService) {\n return;\n }\n this.infoBarService.hideMessageBanner(messageId);\n });\n }\n togglePlay() {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const audioEl = this.audioElementRef()?.nativeElement;\n if (!audioEl) {\n return;\n }\n if (this.isPlaying()) {\n audioEl.pause();\n this.isPlaying.set(false);\n this.syncInfoBarBanner();\n }\n else {\n void audioEl.play();\n this.isPlaying.set(true);\n this.syncInfoBarBanner(true);\n }\n }\n cyclePlaybackSpeed() {\n const current = this.playbackSpeed();\n const i = this.speeds.findIndex((s) => s === current);\n const nextIndex = (i < 0 ? 2 : i + 1) % this.speeds.length;\n const next = this.speeds[nextIndex] ?? 1;\n this.playbackSpeed.set(next);\n const audioEl = this.audioElementRef()?.nativeElement;\n if (audioEl) {\n audioEl.playbackRate = next;\n this.syncInfoBarBanner();\n }\n }\n onTimeUpdate() {\n const audioEl = this.audioElementRef()?.nativeElement;\n if (audioEl) {\n this.currentTime.set(audioEl.currentTime);\n this.syncInfoBarBanner();\n }\n }\n onEnded() {\n this.isPlaying.set(false);\n this.currentTime.set(0);\n this.syncInfoBarBanner();\n }\n onError() {\n if (!reportMediaLoadError(this.message(), this._contentState)) {\n return;\n }\n this.isPlaying.set(false);\n this.infoBarService?.hideMessageBanner(this.message().id);\n }\n pausePlayback() {\n const audioEl = this.audioElementRef()?.nativeElement;\n if (!audioEl) {\n this.isPlaying.set(false);\n return;\n }\n audioEl.pause();\n this.isPlaying.set(false);\n }\n syncInfoBarBanner(forceOpen = false) {\n if (!this.infoBarService) {\n return;\n }\n const message = this.message();\n const payload = this.payload();\n syncPlaybackInfoBarBanner(this.infoBarService, message, {\n title: 'Voice message',\n currentTime: this.currentTime(),\n duration: this.duration() || payload.duration || 0,\n isPlaying: this.isPlaying(),\n onTogglePlay: () => this.togglePlay(),\n onClose: () => this.pausePlayback(),\n playbackSpeed: this.playbackSpeed(),\n onCycleSpeed: () => this.cyclePlaybackSpeed(),\n showSpeedControl: true,\n }, { forceOpen });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationVoiceRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXConversationVoiceRendererComponent, isStandalone: true, selector: \"ax-conversation-voice-renderer\", inputs: { message: { classPropertyName: \"message\", publicName: \"message\", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: \"audioElementRef\", first: true, predicate: [\"audioElement\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `\n <div class=\"ax-conversation-voice\">\n <div class=\"ax-conversation-voice__bar\">\n <button\n type=\"button\"\n class=\"ax-conversation-voice__fab\"\n (click)=\"togglePlay()\"\n [attr.aria-label]=\"isPlaying() ? 'Pause' : 'Play voice message'\"\n >\n <i class=\"fa-solid\" [class.fa-pause]=\"isPlaying()\" [class.fa-play]=\"!isPlaying()\"></i>\n </button>\n <div class=\"ax-conversation-voice__wave\" aria-hidden=\"true\">\n <div class=\"ax-conversation-voice__cols\">\n @for (bar of waveformBars(); track $index) {\n <div\n class=\"ax-conversation-voice__col\"\n [style.height.%]=\"bar\"\n [class.ax-conversation-voice__col--on]=\"$index < activeBarIndex()\"\n ></div>\n }\n </div>\n </div>\n <div class=\"ax-conversation-voice__side\">\n <button\n type=\"button\"\n class=\"ax-conversation-voice__speed\"\n (click)=\"cyclePlaybackSpeed()\"\n [attr.aria-label]=\"'Playback speed: ' + playbackSpeed() + 'x'\"\n >\n {{ playbackSpeed() }}x\n </button>\n <span class=\"ax-conversation-voice__time\">{{ timeLabel() }}</span>\n </div>\n </div>\n <audio\n #audioElement\n class=\"ax-conversation-voice__el\"\n [src]=\"voiceUrl() || null\"\n (error)=\"onError()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n ></audio>\n <ax-conversation-message-renderer-state\n [rendererState]=\"rendererState()\"\n [message]=\"message()\"\n [contentErrorLabel]=\"voiceLoadErrorLabel()\"\n contentErrorStyle=\"inline\"\n contentErrorIconClass=\"fa-light fa-microphone\"\n placement=\"below\"\n />\n </div>\n `, isInline: true, styles: [\":host{display:block;max-width:100%}.ax-conversation-voice{width:100%;max-width:min(100%,17rem)}.ax-conversation-voice__bar{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-light-surface));border:1px solid rgb(var(--ax-sys-color-border-light-surface))}.ax-conversation-voice__fab{flex-shrink:0;width:2.25rem;height:2.25rem;touch-action:manipulation;display:flex;align-items:center;justify-content:center;padding-inline-start:.12rem;border:none;border-radius:50%;background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));font-size:.75rem;cursor:pointer;transition:background .15s ease}@media (hover: hover){.ax-conversation-voice__fab:hover{background:rgb(var(--ax-sys-color-primary-600))}}.ax-conversation-voice__fab:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:2px}.ax-conversation-voice__wave{flex:1;min-width:0}.ax-conversation-voice__cols{display:flex;align-items:center;gap:2px;height:1.75rem}.ax-conversation-voice__col{flex:1;min-width:2px;max-height:100%;align-self:center;border-radius:2px;background:rgb(var(--ax-sys-color-border-light-surface));transition:background .12s ease}.ax-conversation-voice__col--on{background:rgb(var(--ax-sys-color-primary-500))}.ax-conversation-voice__side{display:flex;flex-direction:column;align-items:center;gap:.125rem;flex-shrink:0}.ax-conversation-voice__speed{min-width:2.5rem;height:1.25rem;padding:0 .25rem;border:1px solid rgb(var(--ax-sys-color-primary-500));border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-600));font-size:.6875rem;font-weight:600;cursor:pointer;transition:background .15s ease}.ax-conversation-voice__speed:hover{background:rgb(var(--ax-sys-color-primary-lightest-surface))}.ax-conversation-voice__time{font-size:.625rem;font-variant-numeric:tabular-nums;opacity:.72;color:rgb(var(--ax-sys-color-primary-600))}.ax-conversation-voice__el{display:none}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXConversationMessageRendererStateComponent, selector: \"ax-conversation-message-renderer-state\", inputs: [\"rendererState\", \"message\", \"contentErrorLabel\", \"deliveryFailedLabel\", \"showContentErrorChrome\", \"contentErrorStyle\", \"contentErrorIconClass\", \"placement\", \"contentRetryEnabled\"], outputs: [\"contentRetry\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationVoiceRendererComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-conversation-voice-renderer', imports: [CommonModule, AXConversationMessageRendererStateComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `\n <div class=\"ax-conversation-voice\">\n <div class=\"ax-conversation-voice__bar\">\n <button\n type=\"button\"\n class=\"ax-conversation-voice__fab\"\n (click)=\"togglePlay()\"\n [attr.aria-label]=\"isPlaying() ? 'Pause' : 'Play voice message'\"\n >\n <i class=\"fa-solid\" [class.fa-pause]=\"isPlaying()\" [class.fa-play]=\"!isPlaying()\"></i>\n </button>\n <div class=\"ax-conversation-voice__wave\" aria-hidden=\"true\">\n <div class=\"ax-conversation-voice__cols\">\n @for (bar of waveformBars(); track $index) {\n <div\n class=\"ax-conversation-voice__col\"\n [style.height.%]=\"bar\"\n [class.ax-conversation-voice__col--on]=\"$index < activeBarIndex()\"\n ></div>\n }\n </div>\n </div>\n <div class=\"ax-conversation-voice__side\">\n <button\n type=\"button\"\n class=\"ax-conversation-voice__speed\"\n (click)=\"cyclePlaybackSpeed()\"\n [attr.aria-label]=\"'Playback speed: ' + playbackSpeed() + 'x'\"\n >\n {{ playbackSpeed() }}x\n </button>\n <span class=\"ax-conversation-voice__time\">{{ timeLabel() }}</span>\n </div>\n </div>\n <audio\n #audioElement\n class=\"ax-conversation-voice__el\"\n [src]=\"voiceUrl() || null\"\n (error)=\"onError()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n ></audio>\n <ax-conversation-message-renderer-state\n [rendererState]=\"rendererState()\"\n [message]=\"message()\"\n [contentErrorLabel]=\"voiceLoadErrorLabel()\"\n contentErrorStyle=\"inline\"\n contentErrorIconClass=\"fa-light fa-microphone\"\n placement=\"below\"\n />\n </div>\n `, styles: [\":host{display:block;max-width:100%}.ax-conversation-voice{width:100%;max-width:min(100%,17rem)}.ax-conversation-voice__bar{display:flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:999px;background:rgb(var(--ax-sys-color-light-surface));border:1px solid rgb(var(--ax-sys-color-border-light-surface))}.ax-conversation-voice__fab{flex-shrink:0;width:2.25rem;height:2.25rem;touch-action:manipulation;display:flex;align-items:center;justify-content:center;padding-inline-start:.12rem;border:none;border-radius:50%;background:rgb(var(--ax-sys-color-primary-500));color:rgb(var(--ax-sys-color-on-primary-surface));font-size:.75rem;cursor:pointer;transition:background .15s ease}@media (hover: hover){.ax-conversation-voice__fab:hover{background:rgb(var(--ax-sys-color-primary-600))}}.ax-conversation-voice__fab:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-500));outline-offset:2px}.ax-conversation-voice__wave{flex:1;min-width:0}.ax-conversation-voice__cols{display:flex;align-items:center;gap:2px;height:1.75rem}.ax-conversation-voice__col{flex:1;min-width:2px;max-height:100%;align-self:center;border-radius:2px;background:rgb(var(--ax-sys-color-border-light-surface));transition:background .12s ease}.ax-conversation-voice__col--on{background:rgb(var(--ax-sys-color-primary-500))}.ax-conversation-voice__side{display:flex;flex-direction:column;align-items:center;gap:.125rem;flex-shrink:0}.ax-conversation-voice__speed{min-width:2.5rem;height:1.25rem;padding:0 .25rem;border:1px solid rgb(var(--ax-sys-color-primary-500));border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-600));font-size:.6875rem;font-weight:600;cursor:pointer;transition:background .15s ease}.ax-conversation-voice__speed:hover{background:rgb(var(--ax-sys-color-primary-lightest-surface))}.ax-conversation-voice__time{font-size:.625rem;font-variant-numeric:tabular-nums;opacity:.72;color:rgb(var(--ax-sys-color-primary-600))}.ax-conversation-voice__el{display:none}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9wbHVnaW5zL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL3ZvaWNlLXJlbmRlcmVyL3ZvaWNlLXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLFdBQVcsRUFDWCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd0RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0gsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NB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akMsQ0FBQyxZQUFZLEVBQUUsMkNBQTJDLENBQUMsbUJBQ25ELHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1EVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgUExBVEZPUk1fSUQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uSW5mb0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB0eXBlIHsgQVhNZXNzYWdlLCBBWFZvaWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyQ29udGVudFN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcmVnaXN0cmllcy9tZXNzYWdlLXJlbmRlcmVyLnJlZ2lzdHJ5JztcbmltcG9ydCB7IEFYRmlsZVR5cGVSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZmlsZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvcHlIb3N0Q29tcG9uZW50LCBtZWRpYUNvcHlUZXh0IH0gZnJvbSAnLi4vc2hhcmVkL21lc3NhZ2UtcmVuZGVyZXItY29weS1ob3N0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjb3B5V2l0aEZpbGVUeXBlRmFsbGJhY2sgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9maWxlLXR5cGUtbWVzc2FnZS5yZXNvbHZlJztcbmltcG9ydCB7IHBpY2tEaXNwbGF5TWVkaWFVcmwgfSBmcm9tICcuLi8uLi8uLi9jb21wb3Nlci9jb21wb25lbnRzL3NoYXJlZC9wZXJzaXN0ZWQtbWVkaWEtdXJsJztcbmltcG9ydCB7IGZvcm1hdE1lZGlhRHVyYXRpb24gfSBmcm9tICcuLi9zaGFyZWQvZm9ybWF0LW1lZGlhJztcbmltcG9ydCB7IGNyZWF0ZVJlc29sdmVkTWVkaWFVcmxTaWduYWwgfSBmcm9tICcuLi9zaGFyZWQvbWVkaWEtdXJsLXJlc29sdmUnO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25NZXNzYWdlUmVuZGVyZXJTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9tZXNzYWdlLXJlbmRlcmVyLXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBiaW5kTWVkaWFSZW5kZXJlckNvbnRlbnRTdGF0ZSwgcmVwb3J0TWVkaWFMb2FkRXJyb3IgfSBmcm9tICcuLi9zaGFyZWQvbWVkaWEtcmVuZGVyZXItY29udGVudC1zdGF0ZSc7XG5pbXBvcnQgeyBzeW5jUGxheWJhY2tJbmZvQmFyQmFubmVyIH0gZnJvbSAnLi4vc2hhcmVkL3BsYXliYWNrLWJhbm5lci1zeW5jJztcblxuLyoqIERlY29yYXRpdmUgYmFycyB3aGVuIHBheWxvYWQgaGFzIG5vIHdhdmVmb3JtIChkZXRlcm1pbmlzdGljLCBubyByYW5kb20pLiAqL1xuY29uc3QgRkFMTEJBQ0tfV0FWRUZPUk06IHJlYWRvbmx5IG51bWJlcltdID0gW1xuICAzOCwgNTgsIDQ0LCA3MiwgNDgsIDY0LCA0MCwgNjgsIDUyLCA2MCwgNDIsIDU2LCA0NiwgNzAsIDUwLCA2MiwgMzYsIDU0LCA0OCwgNjYsXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1jb252ZXJzYXRpb24tdm9pY2UtcmVuZGVyZXInLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlclN0YXRlQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fYmFyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fZmFiXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGxheSgpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzUGxheWluZygpID8gJ1BhdXNlJyA6ICdQbGF5IHZvaWNlIG1lc3NhZ2UnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWRcIiBbY2xhc3MuZmEtcGF1c2VdPVwiaXNQbGF5aW5nKClcIiBbY2xhc3MuZmEtcGxheV09XCIhaXNQbGF5aW5nKClcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX193YXZlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fY29sc1wiPlxuICAgICAgICAgICAgQGZvciAoYmFyIG9mIHdhdmVmb3JtQmFycygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX19jb2xcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJiYXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1jb252ZXJzYXRpb24tdm9pY2VfX2NvbC0tb25dPVwiJGluZGV4IDwgYWN0aXZlQmFySW5kZXgoKVwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tdm9pY2VfX3NpZGVcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX19zcGVlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY3ljbGVQbGF5YmFja1NwZWVkKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUGxheWJhY2sgc3BlZWQ6ICcgKyBwbGF5YmFja1NwZWVkKCkgKyAneCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHBsYXliYWNrU3BlZWQoKSB9fXhcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fdGltZVwiPnt7IHRpbWVMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGF1ZGlvXG4gICAgICAgICNhdWRpb0VsZW1lbnRcbiAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tdm9pY2VfX2VsXCJcbiAgICAgICAgW3NyY109XCJ2b2ljZVVybCgpIHx8IG51bGxcIlxuICAgICAgICAoZXJyb3IpPVwib25FcnJvcigpXCJcbiAgICAgICAgKHRpbWV1cGRhdGUpPVwib25UaW1lVXBkYXRlKClcIlxuICAgICAgICAoZW5kZWQpPVwib25FbmRlZCgpXCJcbiAgICAgID48L2F1ZGlvPlxuICAgICAgPGF4LWNvbnZlcnNhdGlvbi1tZXNzYWdlLXJlbmRlcmVyLXN0YXRlXG4gICAgICAgIFtyZW5kZXJlclN0YXRlXT1cInJlbmRlcmVyU3RhdGUoKVwiXG4gICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2UoKVwiXG4gICAgICAgIFtjb250ZW50RXJyb3JMYWJlbF09XCJ2b2ljZUxvYWRFcnJvckxhYmVsKClcIlxuICAgICAgICBjb250ZW50RXJyb3JTdHlsZT1cImlubGluZVwiXG4gICAgICAgIGNvbnRlbnRFcnJvckljb25DbGFzcz1cImZhLWxpZ2h0IGZhLW1pY3JvcGhvbmVcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJiZWxvd1wiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2Uge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiBtaW4oMTAwJSwgMTdyZW0pO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4zNzVyZW0gMC41cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1saWdodC1zdXJmYWNlKSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYih2YXIoLS1heC1zeXMtY29sb3ItYm9yZGVyLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fZmFiIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHdpZHRoOiAyLjI1cmVtO1xuICAgICAgICBoZWlnaHQ6IDIuMjVyZW07XG4gICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDAuMTJyZW07XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXByaW1hcnktc3VyZmFjZSkpO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKGhvdmVyOiBob3Zlcikge1xuICAgICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19mYWI6aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS02MDApKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19mYWI6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX3dhdmUge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2NvbHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgaGVpZ2h0OiAxLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19jb2wge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDJweDtcbiAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItYm9yZGVyLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEycyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19jb2wtLW9uIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19zaWRlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjEyNXJlbTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX3NwZWVkIHtcbiAgICAgICAgbWluLXdpZHRoOiAyLjVyZW07XG4gICAgICAgIGhlaWdodDogMS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjI1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS02MDApKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19zcGVlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS1saWdodGVzdC1zdXJmYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX3RpbWUge1xuICAgICAgICBmb250LXNpemU6IDAuNjI1cmVtO1xuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgICBvcGFjaXR5OiAwLjcyO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTYwMCkpO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19lbCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhDb252ZXJzYXRpb25Wb2ljZVJlbmRlcmVyQ29tcG9uZW50IGV4dGVuZHMgQVhDb252ZXJzYXRpb25NZXNzYWdlUmVuZGVyZXJDb3B5SG9zdENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZVR5cGVzID0gaW5qZWN0KEFYRmlsZVR5cGVSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluZm9CYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ29udmVyc2F0aW9uSW5mb0JhclNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXVkaW9FbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTEF1ZGlvRWxlbWVudD4+KCdhdWRpb0VsZW1lbnQnKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50U3RhdGUgPSBzaWduYWw8QVhDb252ZXJzYXRpb25NZXNzYWdlUmVuZGVyZXJDb250ZW50U3RhdGU+KCdyZWFkeScpO1xuXG4gIHJlYWRvbmx5IG1lc3NhZ2UgPSBpbnB1dC5yZXF1aXJlZDxBWE1lc3NhZ2U+KCk7XG4gIHJlYWRvbmx5IHJlbmRlcmVyU3RhdGUgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIGRlbGl2ZXJ5U3RhdHVzOiB0aGlzLm1lc3NhZ2UoKS5zdGF0dXMsXG4gICAgY29udGVudFN0YXRlOiB0aGlzLl9jb250ZW50U3RhdGUoKSxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGlzUGxheWluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGN1cnJlbnRUaW1lID0gc2lnbmFsKDApO1xuICByZWFkb25seSBkdXJhdGlvbiA9IHNpZ25hbCgwKTtcbiAgcmVhZG9ubHkgcGxheWJhY2tTcGVlZCA9IHNpZ25hbCgxLjApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3BlZWRzID0gWzAuNSwgMC43NSwgMSwgMS4yNSwgMS41LCAxLjc1LCAyXSBhcyBjb25zdDtcblxuICByZWFkb25seSBwYXlsb2FkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZXNzYWdlKCkucGF5bG9hZCBhcyBBWFZvaWNlUGF5bG9hZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFSZWZlcmVuY2UgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIHVybDogdGhpcy5wYXlsb2FkKCkudXJsLFxuICAgIG1lZGlhSWQ6IHRoaXMucGF5bG9hZCgpLm1lZGlhSWQsXG4gICAgbWltZVR5cGU6IHRoaXMucGF5bG9hZCgpLm1pbWVUeXBlLFxuICAgIHNpemU6IHRoaXMucGF5bG9hZCgpLnNpemUsXG4gIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZFVybCA9IGNyZWF0ZVJlc29sdmVkTWVkaWFVcmxTaWduYWwodGhpcy5tZWRpYVJlZmVyZW5jZSk7XG4gIHJlYWRvbmx5IHZvaWNlVXJsID0gY29tcHV0ZWQoKCkgPT4gcGlja0Rpc3BsYXlNZWRpYVVybCh0aGlzLnJlc29sdmVkVXJsKCksIHRoaXMucGF5bG9hZCgpLnVybCkpO1xuXG4gIHJlYWRvbmx5IHdhdmVmb3JtQmFycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB3ID0gdGhpcy5wYXlsb2FkKCkud2F2ZWZvcm07XG4gICAgcmV0dXJuIHc/Lmxlbmd0aCA/IHcgOiBbLi4uRkFMTEJBQ0tfV0FWRUZPUk1dO1xuICB9KTtcblxuICByZWFkb25seSBhY3RpdmVCYXJJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkdXIgPSB0aGlzLmR1cmF0aW9uKCk7XG4gICAgY29uc3QgbiA9IHRoaXMud2F2ZWZvcm1CYXJzKCkubGVuZ3RoO1xuICAgIHJldHVybiBkdXIgPiAwID8gTWF0aC5mbG9vcigodGhpcy5jdXJyZW50VGltZSgpIC8gZHVyKSAqIG4pIDogMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGltZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gZm9ybWF0TWVkaWFEdXJhdGlvbih0aGlzLmlzUGxheWluZygpID8gdGhpcy5jdXJyZW50VGltZSgpIDogdGhpcy5kdXJhdGlvbigpKSk7XG5cbiAgcmVhZG9ubHkgdm9pY2VMb2FkRXJyb3JMYWJlbCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUuY291bGQtbm90LWxvYWQtdm9pY2UnKSxcbiAgKTtcblxuICBjb3B5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRmlsZVR5cGVGYWxsYmFjayh0aGlzLm1lc3NhZ2UoKSwgdGhpcy5maWxlVHlwZXMsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMudm9pY2VVcmwoKT8udHJpbSgpO1xuICAgICAgcmV0dXJuIG1lZGlhQ29weVRleHQodW5kZWZpbmVkLCAnVm9pY2UgbWVzc2FnZScsICd2b2ljZSBtZXNzYWdlcycsIDEsIFt1cmxdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYmluZE1lZGlhUmVuZGVyZXJDb250ZW50U3RhdGUodGhpcy5tZXNzYWdlLCB0aGlzLl9jb250ZW50U3RhdGUsICgpID0+IHRoaXMudm9pY2VVcmwoKSk7XG5cbiAgICBlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgY29uc3QgYXVkaW9FbCA9IHRoaXMuYXVkaW9FbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWF1ZGlvRWwgfHwgIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb25NZXRhID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmR1cmF0aW9uLnNldChhdWRpb0VsLmR1cmF0aW9uKTtcbiAgICAgIH07XG4gICAgICBhdWRpb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgb25NZXRhKTtcbiAgICAgIG9uQ2xlYW51cCgoKSA9PiBhdWRpb0VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgb25NZXRhKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMubWVzc2FnZSgpPy5pZDtcbiAgICAgIGlmICghbWVzc2FnZUlkIHx8ICF0aGlzLmluZm9CYXJTZXJ2aWNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5mb0JhclNlcnZpY2UuaGlkZU1lc3NhZ2VCYW5uZXIobWVzc2FnZUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVBsYXkoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvRWwgPSB0aGlzLmF1ZGlvRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghYXVkaW9FbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsYXlpbmcoKSkge1xuICAgICAgYXVkaW9FbC5wYXVzZSgpO1xuICAgICAgdGhpcy5pc1BsYXlpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBhdWRpb0VsLnBsYXkoKTtcbiAgICAgIHRoaXMuaXNQbGF5aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY3ljbGVQbGF5YmFja1NwZWVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnBsYXliYWNrU3BlZWQoKTtcbiAgICBjb25zdCBpID0gdGhpcy5zcGVlZHMuZmluZEluZGV4KChzKSA9PiBzID09PSBjdXJyZW50KTtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoaSA8IDAgPyAyIDogaSArIDEpICUgdGhpcy5zcGVlZHMubGVuZ3RoO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnNwZWVkc1tuZXh0SW5kZXhdID8/IDE7XG4gICAgdGhpcy5wbGF5YmFja1NwZWVkLnNldChuZXh0KTtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoYXVkaW9FbCkge1xuICAgICAgYXVkaW9FbC5wbGF5YmFja1JhdGUgPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jSW5mb0JhckJhbm5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGltZVVwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoYXVkaW9FbCkge1xuICAgICAgdGhpcy5jdXJyZW50VGltZS5zZXQoYXVkaW9FbC5jdXJyZW50VGltZSk7XG4gICAgICB0aGlzLnN5bmNJbmZvQmFyQmFubmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25FbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY3VycmVudFRpbWUuc2V0KDApO1xuICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIoKTtcbiAgfVxuXG4gIG9uRXJyb3IoKTogdm9pZCB7XG4gICAgaWYgKCFyZXBvcnRNZWRpYUxvYWRFcnJvcih0aGlzLm1lc3NhZ2UoKSwgdGhpcy5fY29udGVudFN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaW5mb0JhclNlcnZpY2U/LmhpZGVNZXNzYWdlQmFubmVyKHRoaXMubWVzc2FnZSgpLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2VQbGF5YmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWF1ZGlvRWwpIHtcbiAgICAgIHRoaXMuaXNQbGF5aW5nLnNldChmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF1ZGlvRWwucGF1c2UoKTtcbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jSW5mb0JhckJhbm5lcihmb3JjZU9wZW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbmZvQmFyU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZCgpO1xuXG4gICAgc3luY1BsYXliYWNrSW5mb0JhckJhbm5lcihcbiAgICAgIHRoaXMuaW5mb0JhclNlcnZpY2UsXG4gICAgICBtZXNzYWdlLFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1ZvaWNlIG1lc3NhZ2UnLFxuICAgICAgICBjdXJyZW50VGltZTogdGhpcy5jdXJyZW50VGltZSgpLFxuICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbigpIHx8IHBheWxvYWQuZHVyYXRpb24gfHwgMCxcbiAgICAgICAgaXNQbGF5aW5nOiB0aGlzLmlzUGxheWluZygpLFxuICAgICAgICBvblRvZ2dsZVBsYXk6ICgpID0+IHRoaXMudG9nZ2xlUGxheSgpLFxuICAgICAgICBvbkNsb3NlOiAoKSA9PiB0aGlzLnBhdXNlUGxheWJhY2soKSxcbiAgICAgICAgcGxheWJhY2tTcGVlZDogdGhpcy5wbGF5YmFja1NwZWVkKCksXG4gICAgICAgIG9uQ3ljbGVTcGVlZDogKCkgPT4gdGhpcy5jeWNsZVBsYXliYWNrU3BlZWQoKSxcbiAgICAgICAgc2hvd1NwZWVkQ29udHJvbDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7IGZvcmNlT3BlbiB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ=="],"names":[],"mappings":"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"}
|