@acorex/components 20.8.32 → 20.9.0

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.
Files changed (128) hide show
  1. package/conversation/README.md +462 -2
  2. package/conversation/index.d.ts +5400 -485
  3. package/fesm2022/acorex-components-calendar.mjs +3 -2
  4. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  5. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +13711 -0
  6. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +1 -0
  7. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +119 -0
  8. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +1 -0
  9. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +59 -0
  10. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +432 -0
  12. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +177 -0
  14. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +1 -0
  15. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +54 -0
  16. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
  18. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +100 -0
  20. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +1 -0
  21. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +121 -0
  22. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +1 -0
  23. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +84 -0
  24. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +1 -0
  25. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +238 -0
  26. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +1 -0
  27. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +1080 -0
  28. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +1 -0
  29. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +102 -0
  30. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +1 -0
  31. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +90 -0
  32. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +1 -0
  33. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
  34. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
  35. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +44 -0
  36. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +1 -0
  37. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +64 -0
  38. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +1 -0
  39. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +468 -0
  40. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +1 -0
  41. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +125 -0
  42. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +1 -0
  43. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +50 -0
  44. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +1 -0
  45. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
  46. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
  47. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +77 -0
  48. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +1 -0
  49. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +407 -0
  50. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +1 -0
  51. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +83 -0
  52. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +1 -0
  53. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
  54. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
  55. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +266 -0
  56. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +1 -0
  57. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +149 -0
  58. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +1 -0
  59. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +118 -0
  60. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +1 -0
  61. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
  62. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
  63. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +140 -0
  64. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +1 -0
  65. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +33 -0
  66. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +1 -0
  67. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +172 -0
  68. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +1 -0
  69. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs +224 -0
  70. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map +1 -0
  71. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +81 -0
  72. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +1 -0
  73. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
  74. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
  75. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +537 -0
  76. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +1 -0
  77. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
  78. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
  79. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +68 -0
  80. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +1 -0
  81. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +95 -0
  82. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +1 -0
  83. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +187 -0
  84. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +1 -0
  85. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +170 -0
  86. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +1 -0
  87. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +750 -0
  88. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +1 -0
  89. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +103 -0
  90. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +1 -0
  91. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +55 -0
  92. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +1 -0
  93. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +109 -0
  94. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +1 -0
  95. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +105 -0
  96. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +1 -0
  97. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +62 -0
  98. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +1 -0
  99. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +446 -0
  100. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +1 -0
  101. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +181 -0
  102. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +1 -0
  103. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +54 -0
  104. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +1 -0
  105. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
  106. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
  107. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +328 -0
  108. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +1 -0
  109. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +270 -0
  110. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +1 -0
  111. package/fesm2022/acorex-components-conversation.mjs +1 -1402
  112. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  113. package/fesm2022/acorex-components-data-table.mjs +2 -2
  114. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  115. package/fesm2022/acorex-components-rest-api-generator.mjs +2 -2
  116. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  117. package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
  118. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  119. package/fesm2022/acorex-components-step-wizard.mjs +2 -2
  120. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  121. package/fesm2022/acorex-components-tree-view-legacy.mjs +2 -2
  122. package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -1
  123. package/package.json +35 -39
  124. package/scheduler-picker/index.d.ts +2 -0
  125. package/conversation2/README.md +0 -463
  126. package/conversation2/index.d.ts +0 -6410
  127. package/fesm2022/acorex-components-conversation2.mjs +0 -22331
  128. 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-CjVDCoJw.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-D_eAnM6v.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-DSnNoz1N.mjs';
10
+ import { b as bindMediaRendererContentState, r as reportMediaLoadError, s as syncPlaybackInfoBarBanner } from './acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs';
11
+
12
+ /** Decorative bars when payload has no waveform (deterministic, no random). */
13
+ const AX_CONVERSATION_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 : [...AX_CONVERSATION_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-CZpEqbXL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-voice-renderer.component-CZpEqbXL.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 AX_CONVERSATION_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 : [...AX_CONVERSATION_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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Q2pDLENBQUMsWUFBWSxFQUFFLDJDQUEyQyxDQUFDLG1CQUNuRCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIFBMQVRGT1JNX0lELFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvbkluZm9CYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZSwgQVhDb252ZXJzYXRpb25Wb2ljZVBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3JlZ2lzdHJpZXMvbWVzc2FnZS1yZW5kZXJlci5yZWdpc3RyeSc7XG5pbXBvcnQgeyBBWEZpbGVUeXBlUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25NZXNzYWdlUmVuZGVyZXJDb3B5SG9zdENvbXBvbmVudCwgbWVkaWFDb3B5VGV4dCB9IGZyb20gJy4uL3NoYXJlZC9tZXNzYWdlLXJlbmRlcmVyLWNvcHktaG9zdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29weVdpdGhGaWxlVHlwZUZhbGxiYWNrIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZmlsZS10eXBlLW1lc3NhZ2UucmVzb2x2ZSc7XG5pbXBvcnQgeyBwaWNrRGlzcGxheU1lZGlhVXJsIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9zZXIvY29tcG9uZW50cy9zaGFyZWQvcGVyc2lzdGVkLW1lZGlhLXVybCc7XG5pbXBvcnQgeyBmb3JtYXRNZWRpYUR1cmF0aW9uIH0gZnJvbSAnLi4vc2hhcmVkL2Zvcm1hdC1tZWRpYSc7XG5pbXBvcnQgeyBjcmVhdGVSZXNvbHZlZE1lZGlhVXJsU2lnbmFsIH0gZnJvbSAnLi4vc2hhcmVkL21lZGlhLXVybC1yZXNvbHZlJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvbWVzc2FnZS1yZW5kZXJlci1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgYmluZE1lZGlhUmVuZGVyZXJDb250ZW50U3RhdGUsIHJlcG9ydE1lZGlhTG9hZEVycm9yIH0gZnJvbSAnLi4vc2hhcmVkL21lZGlhLXJlbmRlcmVyLWNvbnRlbnQtc3RhdGUnO1xuaW1wb3J0IHsgc3luY1BsYXliYWNrSW5mb0JhckJhbm5lciB9IGZyb20gJy4uL3NoYXJlZC9wbGF5YmFjay1iYW5uZXItc3luYyc7XG5cbi8qKiBEZWNvcmF0aXZlIGJhcnMgd2hlbiBwYXlsb2FkIGhhcyBubyB3YXZlZm9ybSAoZGV0ZXJtaW5pc3RpYywgbm8gcmFuZG9tKS4gKi9cbmNvbnN0IEFYX0NPTlZFUlNBVElPTl9GQUxMQkFDS19XQVZFRk9STTogcmVhZG9ubHkgbnVtYmVyW10gPSBbXG4gIDM4LCA1OCwgNDQsIDcyLCA0OCwgNjQsIDQwLCA2OCwgNTIsIDYwLCA0MiwgNTYsIDQ2LCA3MCwgNTAsIDYyLCAzNiwgNTQsIDQ4LCA2Nixcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWNvbnZlcnNhdGlvbi12b2ljZS1yZW5kZXJlcicsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYQ29udmVyc2F0aW9uTWVzc2FnZVJlbmRlcmVyU3RhdGVDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX19iYXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX19mYWJcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQbGF5KClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNQbGF5aW5nKCkgPyAnUGF1c2UnIDogJ1BsYXkgdm9pY2UgbWVzc2FnZSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZFwiIFtjbGFzcy5mYS1wYXVzZV09XCJpc1BsYXlpbmcoKVwiIFtjbGFzcy5mYS1wbGF5XT1cIiFpc1BsYXlpbmcoKVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tdm9pY2VfX3dhdmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX19jb2xzXCI+XG4gICAgICAgICAgICBAZm9yIChiYXIgb2Ygd2F2ZWZvcm1CYXJzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tdm9pY2VfX2NvbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC4lXT1cImJhclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fY29sLS1vbl09XCIkaW5kZXggPCBhY3RpdmVCYXJJbmRleCgpXCJcbiAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fc2lkZVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1jb252ZXJzYXRpb24tdm9pY2VfX3NwZWVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjeWNsZVBsYXliYWNrU3BlZWQoKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidQbGF5YmFjayBzcGVlZDogJyArIHBsYXliYWNrU3BlZWQoKSArICd4J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcGxheWJhY2tTcGVlZCgpIH19eFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtY29udmVyc2F0aW9uLXZvaWNlX190aW1lXCI+e3sgdGltZUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YXVkaW9cbiAgICAgICAgI2F1ZGlvRWxlbWVudFxuICAgICAgICBjbGFzcz1cImF4LWNvbnZlcnNhdGlvbi12b2ljZV9fZWxcIlxuICAgICAgICBbc3JjXT1cInZvaWNlVXJsKCkgfHwgbnVsbFwiXG4gICAgICAgIChlcnJvcik9XCJvbkVycm9yKClcIlxuICAgICAgICAodGltZXVwZGF0ZSk9XCJvblRpbWVVcGRhdGUoKVwiXG4gICAgICAgIChlbmRlZCk9XCJvbkVuZGVkKClcIlxuICAgICAgPjwvYXVkaW8+XG4gICAgICA8YXgtY29udmVyc2F0aW9uLW1lc3NhZ2UtcmVuZGVyZXItc3RhdGVcbiAgICAgICAgW3JlbmRlcmVyU3RhdGVdPVwicmVuZGVyZXJTdGF0ZSgpXCJcbiAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZSgpXCJcbiAgICAgICAgW2NvbnRlbnRFcnJvckxhYmVsXT1cInZvaWNlTG9hZEVycm9yTGFiZWwoKVwiXG4gICAgICAgIGNvbnRlbnRFcnJvclN0eWxlPVwiaW5saW5lXCJcbiAgICAgICAgY29udGVudEVycm9ySWNvbkNsYXNzPVwiZmEtbGlnaHQgZmEtbWljcm9waG9uZVwiXG4gICAgICAgIHBsYWNlbWVudD1cImJlbG93XCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IG1pbigxMDAlLCAxN3JlbSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2JhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjM3NXJlbSAwLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKHZhcigtLWF4LXN5cy1jb2xvci1ib3JkZXItbGlnaHQtc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAuYXgtY29udmVyc2F0aW9uLXZvaWNlX19mYWIge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgd2lkdGg6IDIuMjVyZW07XG4gICAgICAgIGhlaWdodDogMi4yNXJlbTtcbiAgICAgICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMC4xMnJlbTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tcHJpbWFyeS1zdXJmYWNlKSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG4gICAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2ZhYjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTYwMCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2ZhYjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fd2F2ZSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fY29scyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBoZWlnaHQ6IDEuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2NvbCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMnB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1ib3JkZXItbGlnaHQtc3VyZmFjZSkpO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2NvbC0tb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX3NpZGUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMTI1cmVtO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fc3BlZWQge1xuICAgICAgICBtaW4td2lkdGg6IDIuNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTYwMCkpO1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX3NwZWVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LWxpZ2h0ZXN0LXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLmF4LWNvbnZlcnNhdGlvbi12b2ljZV9fdGltZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICAgIG9wYWNpdHk6IDAuNzI7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNjAwKSk7XG4gICAgICB9XG5cbiAgICAgIC5heC1jb252ZXJzYXRpb24tdm9pY2VfX2VsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWENvbnZlcnNhdGlvblZvaWNlUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvcHlIb3N0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlVHlwZXMgPSBpbmplY3QoQVhGaWxlVHlwZVJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb24gPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5mb0JhclNlcnZpY2UgPSBpbmplY3QoQVhDb252ZXJzYXRpb25JbmZvQmFyU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdWRpb0VsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MQXVkaW9FbGVtZW50Pj4oJ2F1ZGlvRWxlbWVudCcpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnRTdGF0ZSA9IHNpZ25hbDxBWENvbnZlcnNhdGlvbk1lc3NhZ2VSZW5kZXJlckNvbnRlbnRTdGF0ZT4oJ3JlYWR5Jyk7XG5cbiAgcmVhZG9ubHkgbWVzc2FnZSA9IGlucHV0LnJlcXVpcmVkPEFYQ29udmVyc2F0aW9uTWVzc2FnZT4oKTtcbiAgcmVhZG9ubHkgcmVuZGVyZXJTdGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgZGVsaXZlcnlTdGF0dXM6IHRoaXMubWVzc2FnZSgpLnN0YXR1cyxcbiAgICBjb250ZW50U3RhdGU6IHRoaXMuX2NvbnRlbnRTdGF0ZSgpLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgaXNQbGF5aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFRpbWUgPSBzaWduYWwoMCk7XG4gIHJlYWRvbmx5IGR1cmF0aW9uID0gc2lnbmFsKDApO1xuICByZWFkb25seSBwbGF5YmFja1NwZWVkID0gc2lnbmFsKDEuMCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzcGVlZHMgPSBbMC41LCAwLjc1LCAxLCAxLjI1LCAxLjUsIDEuNzUsIDJdIGFzIGNvbnN0O1xuXG4gIHJlYWRvbmx5IHBheWxvYWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1lc3NhZ2UoKS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uVm9pY2VQYXlsb2FkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZWRpYVJlZmVyZW5jZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgdXJsOiB0aGlzLnBheWxvYWQoKS51cmwsXG4gICAgbWVkaWFJZDogdGhpcy5wYXlsb2FkKCkubWVkaWFJZCxcbiAgICBtaW1lVHlwZTogdGhpcy5wYXlsb2FkKCkubWltZVR5cGUsXG4gICAgc2l6ZTogdGhpcy5wYXlsb2FkKCkuc2l6ZSxcbiAgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkVXJsID0gY3JlYXRlUmVzb2x2ZWRNZWRpYVVybFNpZ25hbCh0aGlzLm1lZGlhUmVmZXJlbmNlKTtcbiAgcmVhZG9ubHkgdm9pY2VVcmwgPSBjb21wdXRlZCgoKSA9PiBwaWNrRGlzcGxheU1lZGlhVXJsKHRoaXMucmVzb2x2ZWRVcmwoKSwgdGhpcy5wYXlsb2FkKCkudXJsKSk7XG5cbiAgcmVhZG9ubHkgd2F2ZWZvcm1CYXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHcgPSB0aGlzLnBheWxvYWQoKS53YXZlZm9ybTtcbiAgICByZXR1cm4gdz8ubGVuZ3RoID8gdyA6IFsuLi5BWF9DT05WRVJTQVRJT05fRkFMTEJBQ0tfV0FWRUZPUk1dO1xuICB9KTtcblxuICByZWFkb25seSBhY3RpdmVCYXJJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkdXIgPSB0aGlzLmR1cmF0aW9uKCk7XG4gICAgY29uc3QgbiA9IHRoaXMud2F2ZWZvcm1CYXJzKCkubGVuZ3RoO1xuICAgIHJldHVybiBkdXIgPiAwID8gTWF0aC5mbG9vcigodGhpcy5jdXJyZW50VGltZSgpIC8gZHVyKSAqIG4pIDogMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGltZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gZm9ybWF0TWVkaWFEdXJhdGlvbih0aGlzLmlzUGxheWluZygpID8gdGhpcy5jdXJyZW50VGltZSgpIDogdGhpcy5kdXJhdGlvbigpKSk7XG5cbiAgcmVhZG9ubHkgdm9pY2VMb2FkRXJyb3JMYWJlbCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQucmVuZGVyZXItc3RhdGUuY291bGQtbm90LWxvYWQtdm9pY2UnKSxcbiAgKTtcblxuICBjb3B5KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRmlsZVR5cGVGYWxsYmFjayh0aGlzLm1lc3NhZ2UoKSwgdGhpcy5maWxlVHlwZXMsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMudm9pY2VVcmwoKT8udHJpbSgpO1xuICAgICAgcmV0dXJuIG1lZGlhQ29weVRleHQodW5kZWZpbmVkLCAnVm9pY2UgbWVzc2FnZScsICd2b2ljZSBtZXNzYWdlcycsIDEsIFt1cmxdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYmluZE1lZGlhUmVuZGVyZXJDb250ZW50U3RhdGUodGhpcy5tZXNzYWdlLCB0aGlzLl9jb250ZW50U3RhdGUsICgpID0+IHRoaXMudm9pY2VVcmwoKSk7XG5cbiAgICBlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgY29uc3QgYXVkaW9FbCA9IHRoaXMuYXVkaW9FbGVtZW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWF1ZGlvRWwgfHwgIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb25NZXRhID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmR1cmF0aW9uLnNldChhdWRpb0VsLmR1cmF0aW9uKTtcbiAgICAgIH07XG4gICAgICBhdWRpb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgb25NZXRhKTtcbiAgICAgIG9uQ2xlYW51cCgoKSA9PiBhdWRpb0VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgb25NZXRhKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMubWVzc2FnZSgpPy5pZDtcbiAgICAgIGlmICghbWVzc2FnZUlkIHx8ICF0aGlzLmluZm9CYXJTZXJ2aWNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5mb0JhclNlcnZpY2UuaGlkZU1lc3NhZ2VCYW5uZXIobWVzc2FnZUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVBsYXkoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF1ZGlvRWwgPSB0aGlzLmF1ZGlvRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghYXVkaW9FbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsYXlpbmcoKSkge1xuICAgICAgYXVkaW9FbC5wYXVzZSgpO1xuICAgICAgdGhpcy5pc1BsYXlpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBhdWRpb0VsLnBsYXkoKTtcbiAgICAgIHRoaXMuaXNQbGF5aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY3ljbGVQbGF5YmFja1NwZWVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnBsYXliYWNrU3BlZWQoKTtcbiAgICBjb25zdCBpID0gdGhpcy5zcGVlZHMuZmluZEluZGV4KChzKSA9PiBzID09PSBjdXJyZW50KTtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoaSA8IDAgPyAyIDogaSArIDEpICUgdGhpcy5zcGVlZHMubGVuZ3RoO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnNwZWVkc1tuZXh0SW5kZXhdID8/IDE7XG4gICAgdGhpcy5wbGF5YmFja1NwZWVkLnNldChuZXh0KTtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoYXVkaW9FbCkge1xuICAgICAgYXVkaW9FbC5wbGF5YmFja1JhdGUgPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jSW5mb0JhckJhbm5lcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGltZVVwZGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoYXVkaW9FbCkge1xuICAgICAgdGhpcy5jdXJyZW50VGltZS5zZXQoYXVkaW9FbC5jdXJyZW50VGltZSk7XG4gICAgICB0aGlzLnN5bmNJbmZvQmFyQmFubmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25FbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY3VycmVudFRpbWUuc2V0KDApO1xuICAgIHRoaXMuc3luY0luZm9CYXJCYW5uZXIoKTtcbiAgfVxuXG4gIG9uRXJyb3IoKTogdm9pZCB7XG4gICAgaWYgKCFyZXBvcnRNZWRpYUxvYWRFcnJvcih0aGlzLm1lc3NhZ2UoKSwgdGhpcy5fY29udGVudFN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaW5mb0JhclNlcnZpY2U/LmhpZGVNZXNzYWdlQmFubmVyKHRoaXMubWVzc2FnZSgpLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF1c2VQbGF5YmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBhdWRpb0VsID0gdGhpcy5hdWRpb0VsZW1lbnRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWF1ZGlvRWwpIHtcbiAgICAgIHRoaXMuaXNQbGF5aW5nLnNldChmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF1ZGlvRWwucGF1c2UoKTtcbiAgICB0aGlzLmlzUGxheWluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jSW5mb0JhckJhbm5lcihmb3JjZU9wZW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbmZvQmFyU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucGF5bG9hZCgpO1xuXG4gICAgc3luY1BsYXliYWNrSW5mb0JhckJhbm5lcihcbiAgICAgIHRoaXMuaW5mb0JhclNlcnZpY2UsXG4gICAgICBtZXNzYWdlLFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1ZvaWNlIG1lc3NhZ2UnLFxuICAgICAgICBjdXJyZW50VGltZTogdGhpcy5jdXJyZW50VGltZSgpLFxuICAgICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbigpIHx8IHBheWxvYWQuZHVyYXRpb24gfHwgMCxcbiAgICAgICAgaXNQbGF5aW5nOiB0aGlzLmlzUGxheWluZygpLFxuICAgICAgICBvblRvZ2dsZVBsYXk6ICgpID0+IHRoaXMudG9nZ2xlUGxheSgpLFxuICAgICAgICBvbkNsb3NlOiAoKSA9PiB0aGlzLnBhdXNlUGxheWJhY2soKSxcbiAgICAgICAgcGxheWJhY2tTcGVlZDogdGhpcy5wbGF5YmFja1NwZWVkKCksXG4gICAgICAgIG9uQ3ljbGVTcGVlZDogKCkgPT4gdGhpcy5jeWNsZVBsYXliYWNrU3BlZWQoKSxcbiAgICAgICAgc2hvd1NwZWVkQ29udHJvbDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICB7IGZvcmNlT3BlbiB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ=="],"names":[],"mappings":"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"}