@edvak99/voice-receptionist-widget 1.1.2 → 1.1.3
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/README.md +3 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-analytics-page.component-CW5OKmik.mjs → edvak99-voice-receptionist-widget-analytics-page.component-Dsujn5az.mjs} +4 -4
- package/fesm2022/{edvak99-voice-receptionist-widget-analytics-page.component-CW5OKmik.mjs.map → edvak99-voice-receptionist-widget-analytics-page.component-Dsujn5az.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-xoLlHj8K.mjs +67 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-xoLlHj8K.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-history-detail-page.component-CTwfUHUf.mjs → edvak99-voice-receptionist-widget-call-history-detail-page.component-2K9W77As.mjs} +11 -11
- package/fesm2022/{edvak99-voice-receptionist-widget-call-history-detail-page.component-CTwfUHUf.mjs.map → edvak99-voice-receptionist-widget-call-history-detail-page.component-2K9W77As.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-call-history-page.component-Cj4wxd4e.mjs → edvak99-voice-receptionist-widget-call-history-page.component-B5AnEjoh.mjs} +62 -26
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-B5AnEjoh.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-AN6GcSDq.mjs → edvak99-voice-receptionist-widget-call-recording-player.component-B8_qp7Fe.mjs} +4 -4
- package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-AN6GcSDq.mjs.map → edvak99-voice-receptionist-widget-call-recording-player.component-B8_qp7Fe.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cy_Bf7AO.mjs → edvak99-voice-receptionist-widget-call-review.service-Cj2XTeK4.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cy_Bf7AO.mjs.map → edvak99-voice-receptionist-widget-call-review.service-Cj2XTeK4.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs → edvak99-voice-receptionist-widget-call-review.util-BgsBCKgZ.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs.map → edvak99-voice-receptionist-widget-call-review.util-BgsBCKgZ.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-dashboard-page.component-DzdIt2A7.mjs → edvak99-voice-receptionist-widget-dashboard-page.component-BNdnbAVM.mjs} +10 -10
- package/fesm2022/{edvak99-voice-receptionist-widget-dashboard-page.component-DzdIt2A7.mjs.map → edvak99-voice-receptionist-widget-dashboard-page.component-BNdnbAVM.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs → edvak99-voice-receptionist-widget-eds-avatar.component-CbphhP6o.mjs} +3 -3
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs.map → edvak99-voice-receptionist-widget-eds-avatar.component-CbphhP6o.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-elapsed.pipe-ouRlPpwT.mjs → edvak99-voice-receptionist-widget-eds-elapsed.pipe-BgLsnq6A.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-elapsed.pipe-ouRlPpwT.mjs.map → edvak99-voice-receptionist-widget-eds-elapsed.pipe-BgLsnq6A.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CMhknpGf.mjs → edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs} +106 -48
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-knowledge-hub.page-cZqBuull.mjs → edvak99-voice-receptionist-widget-knowledge-hub.page-BngGx_Lc.mjs} +70 -36
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-BngGx_Lc.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-list.service-CDtFRW8w.mjs → edvak99-voice-receptionist-widget-live-calls-list.service-0kGWO6sh.mjs} +3 -3
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-list.service-CDtFRW8w.mjs.map → edvak99-voice-receptionist-widget-live-calls-list.service-0kGWO6sh.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-page.component-DrYzXJQW.mjs → edvak99-voice-receptionist-widget-live-calls-page.component-DfLmK89M.mjs} +7 -7
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-page.component-DrYzXJQW.mjs.map → edvak99-voice-receptionist-widget-live-calls-page.component-DfLmK89M.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-live-monitor-page.component-D7dlk0y2.mjs → edvak99-voice-receptionist-widget-live-monitor-page.component-DNpLFqBw.mjs} +11 -11
- package/fesm2022/{edvak99-voice-receptionist-widget-live-monitor-page.component-D7dlk0y2.mjs.map → edvak99-voice-receptionist-widget-live-monitor-page.component-DNpLFqBw.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-outbound-purposes-page.component-CJ8NEjcj.mjs → edvak99-voice-receptionist-widget-outbound-purposes-page.component-CYSZ832p.mjs} +6 -6
- package/fesm2022/{edvak99-voice-receptionist-widget-outbound-purposes-page.component-CJ8NEjcj.mjs.map → edvak99-voice-receptionist-widget-outbound-purposes-page.component-CYSZ832p.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-settings-page.component-Bo3XNK3b.mjs → edvak99-voice-receptionist-widget-settings-page.component-B9nv6wtB.mjs} +4 -4
- package/fesm2022/{edvak99-voice-receptionist-widget-settings-page.component-Bo3XNK3b.mjs.map → edvak99-voice-receptionist-widget-settings-page.component-B9nv6wtB.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-tasks-page.component-CBwl15NP.mjs → edvak99-voice-receptionist-widget-tasks-page.component-DXxjMVUv.mjs} +40 -11
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-DXxjMVUv.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CJLa5pia.mjs → edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs} +4 -4
- package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CJLa5pia.mjs.map → edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
- package/lib/knowledge/models/practice-faq.model.d.ts +3 -0
- package/lib/knowledge/pages/knowledge-hub.page.d.ts +8 -1
- package/lib/knowledge/services/practice-faq-api.service.d.ts +6 -2
- package/lib/models/ai-receptionist.types.d.ts +1 -0
- package/lib/models/pagination.d.ts +11 -0
- package/lib/pages/audit-page/audit-page.component.d.ts +7 -0
- package/lib/pages/call-history-page/call-history-page.component.d.ts +7 -3
- package/lib/pages/tasks-page/tasks-page.component.d.ts +6 -0
- package/lib/services/ai-receptionist-api.mock.d.ts +10 -9
- package/lib/services/ai-receptionist-api.service.d.ts +9 -9
- package/package.json +1 -1
- package/styles/_index.scss +5 -40
- package/styles/chat-ui.scss +18 -18
- package/styles/eds.scss +135 -95
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DL1GfQyF.mjs +0 -35
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DL1GfQyF.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cj4wxd4e.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CMhknpGf.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-cZqBuull.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-CBwl15NP.mjs.map +0 -1
|
@@ -4,10 +4,10 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
4
4
|
import { ActivatedRoute, RouterLink } from '@angular/router';
|
|
5
5
|
import * as i1 from '@angular/forms';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
|
-
import { r as resolveToolKey, d as resolveToolDisplayName, V as VOICE_RECEPTIONIST_CONFIG, b as EdsIconComponent, A as AiReceptionistApiService, t as toolEventTrackKey } from './edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-
|
|
8
|
-
import { D as DashboardSocketService, E as EdsElapsedPipe } from './edvak99-voice-receptionist-widget-eds-elapsed.pipe-
|
|
9
|
-
import { C as CallRecordingPlayerComponent } from './edvak99-voice-receptionist-widget-call-recording-player.component-
|
|
10
|
-
import { E as EdsAvatarComponent } from './edvak99-voice-receptionist-widget-eds-avatar.component-
|
|
7
|
+
import { r as resolveToolKey, d as resolveToolDisplayName, V as VOICE_RECEPTIONIST_CONFIG, b as EdsIconComponent, A as AiReceptionistApiService, t as toolEventTrackKey } from './edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs';
|
|
8
|
+
import { D as DashboardSocketService, E as EdsElapsedPipe } from './edvak99-voice-receptionist-widget-eds-elapsed.pipe-BgLsnq6A.mjs';
|
|
9
|
+
import { C as CallRecordingPlayerComponent } from './edvak99-voice-receptionist-widget-call-recording-player.component-B8_qp7Fe.mjs';
|
|
10
|
+
import { E as EdsAvatarComponent } from './edvak99-voice-receptionist-widget-eds-avatar.component-CbphhP6o.mjs';
|
|
11
11
|
|
|
12
12
|
function mapChunkToLine(chunk) {
|
|
13
13
|
const at = Date.parse(chunk.timestamp);
|
|
@@ -280,7 +280,7 @@ class EdsWaveformComponent {
|
|
|
280
280
|
<span class="eds-waveform__bar" [style.animation-delay.ms]="i * 70"></span>
|
|
281
281
|
}
|
|
282
282
|
</div>
|
|
283
|
-
`, isInline: true, styles: [".eds-waveform{display:flex;align-items:flex-end;gap:3px;height:20px}.eds-waveform__bar{width:3px;height:100%;border-radius:3px;transform-origin:bottom;animation:eds-wave 1.1s ease-in-out infinite}.eds-waveform[data-tone=brand] .eds-waveform__bar{background:var(--brand-400, #5aa3f6)}.eds-waveform[data-tone=violet] .eds-waveform__bar{background:var(--violet-400, #a684ff)}.eds-waveform--inactive .eds-waveform__bar{height:4px;opacity:.3;animation:none;align-self:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
283
|
+
`, isInline: true, styles: [".eds-waveform{display:flex;align-items:flex-end;gap:3px;height:20px}.eds-waveform__bar{width:3px;height:100%;border-radius:3px;transform-origin:bottom;animation:eds-wave 1.1s ease-in-out infinite}.eds-waveform[data-tone=brand] .eds-waveform__bar{background:var(--eds-brand-400, #5aa3f6)}.eds-waveform[data-tone=violet] .eds-waveform__bar{background:var(--eds-violet-400, #a684ff)}.eds-waveform--inactive .eds-waveform__bar{height:4px;opacity:.3;animation:none;align-self:flex-end}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
284
284
|
}
|
|
285
285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsWaveformComponent, decorators: [{
|
|
286
286
|
type: Component,
|
|
@@ -295,7 +295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
295
295
|
<span class="eds-waveform__bar" [style.animation-delay.ms]="i * 70"></span>
|
|
296
296
|
}
|
|
297
297
|
</div>
|
|
298
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".eds-waveform{display:flex;align-items:flex-end;gap:3px;height:20px}.eds-waveform__bar{width:3px;height:100%;border-radius:3px;transform-origin:bottom;animation:eds-wave 1.1s ease-in-out infinite}.eds-waveform[data-tone=brand] .eds-waveform__bar{background:var(--brand-400, #5aa3f6)}.eds-waveform[data-tone=violet] .eds-waveform__bar{background:var(--violet-400, #a684ff)}.eds-waveform--inactive .eds-waveform__bar{height:4px;opacity:.3;animation:none;align-self:flex-end}\n"] }]
|
|
298
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".eds-waveform{display:flex;align-items:flex-end;gap:3px;height:20px}.eds-waveform__bar{width:3px;height:100%;border-radius:3px;transform-origin:bottom;animation:eds-wave 1.1s ease-in-out infinite}.eds-waveform[data-tone=brand] .eds-waveform__bar{background:var(--eds-brand-400, #5aa3f6)}.eds-waveform[data-tone=violet] .eds-waveform__bar{background:var(--eds-violet-400, #a684ff)}.eds-waveform--inactive .eds-waveform__bar{height:4px;opacity:.3;animation:none;align-self:flex-end}\n"] }]
|
|
299
299
|
}] });
|
|
300
300
|
|
|
301
301
|
class LiveTranscriptPanelComponent {
|
|
@@ -397,11 +397,11 @@ class LiveTranscriptPanelComponent {
|
|
|
397
397
|
this.shouldScroll = true;
|
|
398
398
|
}
|
|
399
399
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveTranscriptPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
400
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: LiveTranscriptPanelComponent, isStandalone: true, selector: "eds-live-transcript-panel", inputs: { live: { classPropertyName: "live", publicName: "live", isSignal: true, isRequired: false, transformFunction: null }, paused: { classPropertyName: "paused", publicName: "paused", isSignal: true, isRequired: false, transformFunction: null }, humanTakeover: { classPropertyName: "humanTakeover", publicName: "humanTakeover", isSignal: true, isRequired: false, transformFunction: null }, showStaffInput: { classPropertyName: "showStaffInput", publicName: "showStaffInput", isSignal: true, isRequired: false, transformFunction: null }, staffMessage: { classPropertyName: "staffMessage", publicName: "staffMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { staffMessageChange: "staffMessageChange", sendMessage: "sendMessage" }, viewQueries: [{ propertyName: "scrollHost", first: true, predicate: ["scrollHost"], descendants: true }], ngImport: i0, template: "<section class=\"live-transcript-panel\" aria-labelledby=\"live-transcript-title\">\n <header class=\"live-transcript-panel__header\">\n <h2 id=\"live-transcript-title\" class=\"live-transcript-panel__title\">Live transcript</h2>\n <div class=\"live-transcript-panel__rec\">\n <eds-waveform [active]=\"waveformActive()\" [tone]=\"waveformTone()\" />\n <span class=\"live-transcript-panel__rec-label\">{{ recLabel() }}</span>\n </div>\n </header>\n\n <div #scrollHost class=\"live-transcript-panel__scroll\" role=\"log\" aria-live=\"polite\">\n @for (line of lines(); track $index) {\n @if (line.who === 'system') {\n <div class=\"live-transcript-panel__system eds-animate-fade-up\" [class]=\"systemClass(line.flag)\">\n <eds-icon [name]=\"systemIcon(line.flag)\" [size]=\"14\" />\n <span>{{ line.text }}</span>\n </div>\n } @else {\n <article class=\"live-transcript-panel__msg eds-animate-fade-up\" [class]=\"msgClass(line.who)\">\n <div class=\"live-transcript-panel__avatar\" [class]=\"avatarClass(line.who)\">\n <eds-icon [name]=\"speakerIcon(line.who)\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">{{ roleLabel(line.who) }}</span>\n <div class=\"live-transcript-panel__bubble\">\n <p>{{ line.text }}</p>\n </div>\n </div>\n </article>\n }\n }\n\n @if (patientInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--patient eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--patient\">\n <eds-icon name=\"person\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Patient \u00B7 listening</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}</p>\n </div>\n </div>\n </article>\n }\n\n @if (aiInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--ai eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--ai\">\n <eds-icon name=\"graphic_eq\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Ava \u00B7 AI</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}<span class=\"live-transcript-panel__caret\" aria-hidden=\"true\"></span></p>\n </div>\n </div>\n </article>\n }\n\n @if (lines().length === 0 && !patientInterim() && !aiInterim()) {\n <p class=\"live-transcript-panel__empty\">Waiting for conversation\u2026</p>\n }\n </div>\n\n @if (showStaffInput()) {\n <footer class=\"live-transcript-panel__footer\">\n <input\n type=\"text\"\n class=\"live-transcript-panel__input\"\n placeholder=\"Type to speak as staff\u2026\"\n [ngModel]=\"staffMessage()\"\n (ngModelChange)=\"onStaffInput($event)\"\n (keyup.enter)=\"onSend()\"\n />\n <button type=\"button\" class=\"live-transcript-panel__send\" (click)=\"onSend()\">\n <eds-icon name=\"send\" [size]=\"18\" />\n Send\n </button>\n </footer>\n }\n</section>\n", styles: [".live-transcript-panel{display:flex;flex-direction:column;min-height:0;height:calc(100vh - 234px);min-height:460px;background:var(--slate-900);border:1px solid var(--slate-800);border-radius:var(--radius-lg)}.live-transcript-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--slate-800);flex-shrink:0}.live-transcript-panel__title{margin:0;font:600 11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--slate-400)}.live-transcript-panel__rec{display:flex;align-items:center;gap:10px}.live-transcript-panel__rec-label{font:600 11px/1 var(--font-mono);letter-spacing:.06em;color:var(--slate-500)}.live-transcript-panel__scroll{flex:1;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px}.live-transcript-panel__empty{margin:0;text-align:center;padding:32px 12px;font:400 13px/1.4 var(--font-body);color:var(--slate-500)}.live-transcript-panel__system{align-self:center;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--radius-pill);border:1px solid var(--slate-800);font:500 12px/1 var(--font-mono);max-width:90%;text-align:center}.live-transcript-panel__system--verify{color:var(--green-400);background:#0abf521a;border-color:#0abf524d}.live-transcript-panel__system--warn{color:var(--amber-300);background:#fe9a001a;border-color:#fe9a004d}.live-transcript-panel__system--info{color:var(--slate-300);background:var(--slate-900);border-color:var(--slate-800)}.live-transcript-panel__msg{display:flex;gap:10px;max-width:560px}.live-transcript-panel__msg--ai,.live-transcript-panel__msg--staff{margin-left:auto;flex-direction:row-reverse}.live-transcript-panel__msg--ai .live-transcript-panel__content,.live-transcript-panel__msg--staff .live-transcript-panel__content{align-items:flex-end}.live-transcript-panel__msg--ai .live-transcript-panel__bubble,.live-transcript-panel__msg--staff .live-transcript-panel__bubble{border-radius:12px 4px 12px 12px}.live-transcript-panel__msg--typing .live-transcript-panel__bubble{padding:12px 16px}.live-transcript-panel__avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.live-transcript-panel__avatar--ai{background:linear-gradient(135deg,var(--brand-500),var(--violet-500))}.live-transcript-panel__avatar--staff{background:#8e51ff2e;color:var(--violet-400);border:1px solid rgba(142,81,255,.35)}.live-transcript-panel__avatar--patient{background:var(--slate-800);color:var(--slate-400)}.live-transcript-panel__content{display:flex;flex-direction:column;gap:4px;min-width:0}.live-transcript-panel__label{font:600 11px/1 var(--font-mono);letter-spacing:.04em;color:var(--slate-500)}.live-transcript-panel__msg--ai .live-transcript-panel__label{color:var(--brand-400)}.live-transcript-panel__msg--staff .live-transcript-panel__label{color:var(--purple-300)}.live-transcript-panel__bubble{padding:9px 13px;border-radius:4px 12px 12px;background:#3681f41f;border:1px solid rgba(54,129,244,.28)}.live-transcript-panel__bubble p{margin:0;font:400 13px/19px var(--font-sans);color:var(--gray-100)}.live-transcript-panel__bubble--interim{opacity:.85;font-style:italic}.live-transcript-panel__msg--patient .live-transcript-panel__bubble{background:var(--slate-900);border-color:var(--slate-800)}.live-transcript-panel__msg--staff .live-transcript-panel__bubble{background:#8e51ff24;border-color:#8e51ff4d}.live-transcript-panel__msg--staff .live-transcript-panel__bubble p{color:var(--purple-300)}.live-transcript-panel__caret{display:inline-block;width:7px;height:14px;margin-left:2px;vertical-align:text-bottom;background:var(--brand-400);animation:eds-caret 1s step-end infinite}.live-transcript-panel__dots{display:inline-flex;align-items:center;gap:5px;height:14px}.live-transcript-panel__dots span{width:6px;height:6px;border-radius:50%;background:var(--brand-400);animation:eds-blink 1.4s ease-in-out infinite}.live-transcript-panel__dots span:nth-child(2){animation-delay:.2s}.live-transcript-panel__dots span:nth-child(3){animation-delay:.4s}.live-transcript-panel__footer{display:flex;gap:8px;padding:12px;border-top:1px solid var(--slate-800);flex-shrink:0}.live-transcript-panel__input{flex:1;height:38px;padding:0 14px;border-radius:var(--radius-md);border:1px solid var(--slate-700);background:var(--slate-950);color:var(--gray-100);font:400 13px/1 var(--font-sans)}.live-transcript-panel__input::placeholder{color:var(--slate-500)}.live-transcript-panel__input:focus{outline:none;border-color:var(--violet-400)}.live-transcript-panel__send{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--radius-md);background:#8e51ff38;color:var(--purple-300);font:600 13px/1 var(--font-sans);cursor:pointer}.live-transcript-panel__send:hover{background:var(--violet-500);color:#fff}@media(max-width:900px){.live-transcript-panel{height:auto;min-height:360px;max-height:60vh}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }, { kind: "component", type: EdsWaveformComponent, selector: "eds-waveform", inputs: ["active", "tone"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
400
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: LiveTranscriptPanelComponent, isStandalone: true, selector: "eds-live-transcript-panel", inputs: { live: { classPropertyName: "live", publicName: "live", isSignal: true, isRequired: false, transformFunction: null }, paused: { classPropertyName: "paused", publicName: "paused", isSignal: true, isRequired: false, transformFunction: null }, humanTakeover: { classPropertyName: "humanTakeover", publicName: "humanTakeover", isSignal: true, isRequired: false, transformFunction: null }, showStaffInput: { classPropertyName: "showStaffInput", publicName: "showStaffInput", isSignal: true, isRequired: false, transformFunction: null }, staffMessage: { classPropertyName: "staffMessage", publicName: "staffMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { staffMessageChange: "staffMessageChange", sendMessage: "sendMessage" }, viewQueries: [{ propertyName: "scrollHost", first: true, predicate: ["scrollHost"], descendants: true }], ngImport: i0, template: "<section class=\"live-transcript-panel\" aria-labelledby=\"live-transcript-title\">\n <header class=\"live-transcript-panel__header\">\n <h2 id=\"live-transcript-title\" class=\"live-transcript-panel__title\">Live transcript</h2>\n <div class=\"live-transcript-panel__rec\">\n <eds-waveform [active]=\"waveformActive()\" [tone]=\"waveformTone()\" />\n <span class=\"live-transcript-panel__rec-label\">{{ recLabel() }}</span>\n </div>\n </header>\n\n <div #scrollHost class=\"live-transcript-panel__scroll\" role=\"log\" aria-live=\"polite\">\n @for (line of lines(); track $index) {\n @if (line.who === 'system') {\n <div class=\"live-transcript-panel__system eds-animate-fade-up\" [class]=\"systemClass(line.flag)\">\n <eds-icon [name]=\"systemIcon(line.flag)\" [size]=\"14\" />\n <span>{{ line.text }}</span>\n </div>\n } @else {\n <article class=\"live-transcript-panel__msg eds-animate-fade-up\" [class]=\"msgClass(line.who)\">\n <div class=\"live-transcript-panel__avatar\" [class]=\"avatarClass(line.who)\">\n <eds-icon [name]=\"speakerIcon(line.who)\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">{{ roleLabel(line.who) }}</span>\n <div class=\"live-transcript-panel__bubble\">\n <p>{{ line.text }}</p>\n </div>\n </div>\n </article>\n }\n }\n\n @if (patientInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--patient eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--patient\">\n <eds-icon name=\"person\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Patient \u00B7 listening</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}</p>\n </div>\n </div>\n </article>\n }\n\n @if (aiInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--ai eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--ai\">\n <eds-icon name=\"graphic_eq\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Ava \u00B7 AI</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}<span class=\"live-transcript-panel__caret\" aria-hidden=\"true\"></span></p>\n </div>\n </div>\n </article>\n }\n\n @if (lines().length === 0 && !patientInterim() && !aiInterim()) {\n <p class=\"live-transcript-panel__empty\">Waiting for conversation\u2026</p>\n }\n </div>\n\n @if (showStaffInput()) {\n <footer class=\"live-transcript-panel__footer\">\n <input\n type=\"text\"\n class=\"live-transcript-panel__input\"\n placeholder=\"Type to speak as staff\u2026\"\n [ngModel]=\"staffMessage()\"\n (ngModelChange)=\"onStaffInput($event)\"\n (keyup.enter)=\"onSend()\"\n />\n <button type=\"button\" class=\"live-transcript-panel__send\" (click)=\"onSend()\">\n <eds-icon name=\"send\" [size]=\"18\" />\n Send\n </button>\n </footer>\n }\n</section>\n", styles: [".live-transcript-panel{display:flex;flex-direction:column;min-height:0;height:calc(100vh - 234px);min-height:460px;background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);border-radius:var(--eds-radius-lg)}.live-transcript-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--eds-slate-800);flex-shrink:0}.live-transcript-panel__title{margin:0;font:600 11px/1 var(--eds-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--eds-slate-400)}.live-transcript-panel__rec{display:flex;align-items:center;gap:10px}.live-transcript-panel__rec-label{font:600 11px/1 var(--eds-font-mono);letter-spacing:.06em;color:var(--eds-slate-500)}.live-transcript-panel__scroll{flex:1;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px}.live-transcript-panel__empty{margin:0;text-align:center;padding:32px 12px;font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-500)}.live-transcript-panel__system{align-self:center;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--eds-radius-pill);border:1px solid var(--eds-slate-800);font:500 12px/1 var(--eds-font-mono);max-width:90%;text-align:center}.live-transcript-panel__system--verify{color:var(--eds-green-400);background:#0abf521a;border-color:#0abf524d}.live-transcript-panel__system--warn{color:var(--eds-amber-300);background:#fe9a001a;border-color:#fe9a004d}.live-transcript-panel__system--info{color:var(--eds-slate-300);background:var(--eds-slate-900);border-color:var(--eds-slate-800)}.live-transcript-panel__msg{display:flex;gap:10px;max-width:560px}.live-transcript-panel__msg--ai,.live-transcript-panel__msg--staff{margin-left:auto;flex-direction:row-reverse}.live-transcript-panel__msg--ai .live-transcript-panel__content,.live-transcript-panel__msg--staff .live-transcript-panel__content{align-items:flex-end}.live-transcript-panel__msg--ai .live-transcript-panel__bubble,.live-transcript-panel__msg--staff .live-transcript-panel__bubble{border-radius:12px 4px 12px 12px}.live-transcript-panel__msg--typing .live-transcript-panel__bubble{padding:12px 16px}.live-transcript-panel__avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.live-transcript-panel__avatar--ai{background:linear-gradient(135deg,var(--eds-brand-500),var(--eds-violet-500))}.live-transcript-panel__avatar--staff{background:#8e51ff2e;color:var(--eds-violet-400);border:1px solid rgba(142,81,255,.35)}.live-transcript-panel__avatar--patient{background:var(--eds-slate-800);color:var(--eds-slate-400)}.live-transcript-panel__content{display:flex;flex-direction:column;gap:4px;min-width:0}.live-transcript-panel__label{font:600 11px/1 var(--eds-font-mono);letter-spacing:.04em;color:var(--eds-slate-500)}.live-transcript-panel__msg--ai .live-transcript-panel__label{color:var(--eds-brand-400)}.live-transcript-panel__msg--staff .live-transcript-panel__label{color:var(--eds-purple-300)}.live-transcript-panel__bubble{padding:9px 13px;border-radius:4px 12px 12px;background:#3681f41f;border:1px solid rgba(54,129,244,.28)}.live-transcript-panel__bubble p{margin:0;font:400 13px/19px var(--eds-font-sans);color:var(--eds-gray-100)}.live-transcript-panel__bubble--interim{opacity:.85;font-style:italic}.live-transcript-panel__msg--patient .live-transcript-panel__bubble{background:var(--eds-slate-900);border-color:var(--eds-slate-800)}.live-transcript-panel__msg--staff .live-transcript-panel__bubble{background:#8e51ff24;border-color:#8e51ff4d}.live-transcript-panel__msg--staff .live-transcript-panel__bubble p{color:var(--eds-purple-300)}.live-transcript-panel__caret{display:inline-block;width:7px;height:14px;margin-left:2px;vertical-align:text-bottom;background:var(--eds-brand-400);animation:eds-caret 1s step-end infinite}.live-transcript-panel__dots{display:inline-flex;align-items:center;gap:5px;height:14px}.live-transcript-panel__dots span{width:6px;height:6px;border-radius:50%;background:var(--eds-brand-400);animation:eds-blink 1.4s ease-in-out infinite}.live-transcript-panel__dots span:nth-child(2){animation-delay:.2s}.live-transcript-panel__dots span:nth-child(3){animation-delay:.4s}.live-transcript-panel__footer{display:flex;gap:8px;padding:12px;border-top:1px solid var(--eds-slate-800);flex-shrink:0}.live-transcript-panel__input{flex:1;height:38px;padding:0 14px;border-radius:var(--eds-radius-md);border:1px solid var(--eds-slate-700);background:var(--eds-slate-950);color:var(--eds-gray-100);font:400 13px/1 var(--eds-font-sans)}.live-transcript-panel__input::placeholder{color:var(--eds-slate-500)}.live-transcript-panel__input:focus{outline:none;border-color:var(--eds-violet-400)}.live-transcript-panel__send{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--eds-radius-md);background:#8e51ff38;color:var(--eds-purple-300);font:600 13px/1 var(--eds-font-sans);cursor:pointer}.live-transcript-panel__send:hover{background:var(--eds-violet-500);color:#fff}@media(max-width:900px){.live-transcript-panel{height:auto;min-height:360px;max-height:60vh}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }, { kind: "component", type: EdsWaveformComponent, selector: "eds-waveform", inputs: ["active", "tone"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
401
401
|
}
|
|
402
402
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveTranscriptPanelComponent, decorators: [{
|
|
403
403
|
type: Component,
|
|
404
|
-
args: [{ selector: 'eds-live-transcript-panel', imports: [FormsModule, EdsIconComponent, EdsWaveformComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"live-transcript-panel\" aria-labelledby=\"live-transcript-title\">\n <header class=\"live-transcript-panel__header\">\n <h2 id=\"live-transcript-title\" class=\"live-transcript-panel__title\">Live transcript</h2>\n <div class=\"live-transcript-panel__rec\">\n <eds-waveform [active]=\"waveformActive()\" [tone]=\"waveformTone()\" />\n <span class=\"live-transcript-panel__rec-label\">{{ recLabel() }}</span>\n </div>\n </header>\n\n <div #scrollHost class=\"live-transcript-panel__scroll\" role=\"log\" aria-live=\"polite\">\n @for (line of lines(); track $index) {\n @if (line.who === 'system') {\n <div class=\"live-transcript-panel__system eds-animate-fade-up\" [class]=\"systemClass(line.flag)\">\n <eds-icon [name]=\"systemIcon(line.flag)\" [size]=\"14\" />\n <span>{{ line.text }}</span>\n </div>\n } @else {\n <article class=\"live-transcript-panel__msg eds-animate-fade-up\" [class]=\"msgClass(line.who)\">\n <div class=\"live-transcript-panel__avatar\" [class]=\"avatarClass(line.who)\">\n <eds-icon [name]=\"speakerIcon(line.who)\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">{{ roleLabel(line.who) }}</span>\n <div class=\"live-transcript-panel__bubble\">\n <p>{{ line.text }}</p>\n </div>\n </div>\n </article>\n }\n }\n\n @if (patientInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--patient eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--patient\">\n <eds-icon name=\"person\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Patient \u00B7 listening</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}</p>\n </div>\n </div>\n </article>\n }\n\n @if (aiInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--ai eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--ai\">\n <eds-icon name=\"graphic_eq\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Ava \u00B7 AI</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}<span class=\"live-transcript-panel__caret\" aria-hidden=\"true\"></span></p>\n </div>\n </div>\n </article>\n }\n\n @if (lines().length === 0 && !patientInterim() && !aiInterim()) {\n <p class=\"live-transcript-panel__empty\">Waiting for conversation\u2026</p>\n }\n </div>\n\n @if (showStaffInput()) {\n <footer class=\"live-transcript-panel__footer\">\n <input\n type=\"text\"\n class=\"live-transcript-panel__input\"\n placeholder=\"Type to speak as staff\u2026\"\n [ngModel]=\"staffMessage()\"\n (ngModelChange)=\"onStaffInput($event)\"\n (keyup.enter)=\"onSend()\"\n />\n <button type=\"button\" class=\"live-transcript-panel__send\" (click)=\"onSend()\">\n <eds-icon name=\"send\" [size]=\"18\" />\n Send\n </button>\n </footer>\n }\n</section>\n", styles: [".live-transcript-panel{display:flex;flex-direction:column;min-height:0;height:calc(100vh - 234px);min-height:460px;background:var(--slate-900);border:1px solid var(--slate-800);border-radius:var(--radius-lg)}.live-transcript-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--slate-800);flex-shrink:0}.live-transcript-panel__title{margin:0;font:600 11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--slate-400)}.live-transcript-panel__rec{display:flex;align-items:center;gap:10px}.live-transcript-panel__rec-label{font:600 11px/1 var(--font-mono);letter-spacing:.06em;color:var(--slate-500)}.live-transcript-panel__scroll{flex:1;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px}.live-transcript-panel__empty{margin:0;text-align:center;padding:32px 12px;font:400 13px/1.4 var(--font-body);color:var(--slate-500)}.live-transcript-panel__system{align-self:center;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--radius-pill);border:1px solid var(--slate-800);font:500 12px/1 var(--font-mono);max-width:90%;text-align:center}.live-transcript-panel__system--verify{color:var(--green-400);background:#0abf521a;border-color:#0abf524d}.live-transcript-panel__system--warn{color:var(--amber-300);background:#fe9a001a;border-color:#fe9a004d}.live-transcript-panel__system--info{color:var(--slate-300);background:var(--slate-900);border-color:var(--slate-800)}.live-transcript-panel__msg{display:flex;gap:10px;max-width:560px}.live-transcript-panel__msg--ai,.live-transcript-panel__msg--staff{margin-left:auto;flex-direction:row-reverse}.live-transcript-panel__msg--ai .live-transcript-panel__content,.live-transcript-panel__msg--staff .live-transcript-panel__content{align-items:flex-end}.live-transcript-panel__msg--ai .live-transcript-panel__bubble,.live-transcript-panel__msg--staff .live-transcript-panel__bubble{border-radius:12px 4px 12px 12px}.live-transcript-panel__msg--typing .live-transcript-panel__bubble{padding:12px 16px}.live-transcript-panel__avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.live-transcript-panel__avatar--ai{background:linear-gradient(135deg,var(--brand-500),var(--violet-500))}.live-transcript-panel__avatar--staff{background:#8e51ff2e;color:var(--violet-400);border:1px solid rgba(142,81,255,.35)}.live-transcript-panel__avatar--patient{background:var(--slate-800);color:var(--slate-400)}.live-transcript-panel__content{display:flex;flex-direction:column;gap:4px;min-width:0}.live-transcript-panel__label{font:600 11px/1 var(--font-mono);letter-spacing:.04em;color:var(--slate-500)}.live-transcript-panel__msg--ai .live-transcript-panel__label{color:var(--brand-400)}.live-transcript-panel__msg--staff .live-transcript-panel__label{color:var(--purple-300)}.live-transcript-panel__bubble{padding:9px 13px;border-radius:4px 12px 12px;background:#3681f41f;border:1px solid rgba(54,129,244,.28)}.live-transcript-panel__bubble p{margin:0;font:400 13px/19px var(--font-sans);color:var(--gray-100)}.live-transcript-panel__bubble--interim{opacity:.85;font-style:italic}.live-transcript-panel__msg--patient .live-transcript-panel__bubble{background:var(--slate-900);border-color:var(--slate-800)}.live-transcript-panel__msg--staff .live-transcript-panel__bubble{background:#8e51ff24;border-color:#8e51ff4d}.live-transcript-panel__msg--staff .live-transcript-panel__bubble p{color:var(--purple-300)}.live-transcript-panel__caret{display:inline-block;width:7px;height:14px;margin-left:2px;vertical-align:text-bottom;background:var(--brand-400);animation:eds-caret 1s step-end infinite}.live-transcript-panel__dots{display:inline-flex;align-items:center;gap:5px;height:14px}.live-transcript-panel__dots span{width:6px;height:6px;border-radius:50%;background:var(--brand-400);animation:eds-blink 1.4s ease-in-out infinite}.live-transcript-panel__dots span:nth-child(2){animation-delay:.2s}.live-transcript-panel__dots span:nth-child(3){animation-delay:.4s}.live-transcript-panel__footer{display:flex;gap:8px;padding:12px;border-top:1px solid var(--slate-800);flex-shrink:0}.live-transcript-panel__input{flex:1;height:38px;padding:0 14px;border-radius:var(--radius-md);border:1px solid var(--slate-700);background:var(--slate-950);color:var(--gray-100);font:400 13px/1 var(--font-sans)}.live-transcript-panel__input::placeholder{color:var(--slate-500)}.live-transcript-panel__input:focus{outline:none;border-color:var(--violet-400)}.live-transcript-panel__send{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--radius-md);background:#8e51ff38;color:var(--purple-300);font:600 13px/1 var(--font-sans);cursor:pointer}.live-transcript-panel__send:hover{background:var(--violet-500);color:#fff}@media(max-width:900px){.live-transcript-panel{height:auto;min-height:360px;max-height:60vh}}\n"] }]
|
|
404
|
+
args: [{ selector: 'eds-live-transcript-panel', imports: [FormsModule, EdsIconComponent, EdsWaveformComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"live-transcript-panel\" aria-labelledby=\"live-transcript-title\">\n <header class=\"live-transcript-panel__header\">\n <h2 id=\"live-transcript-title\" class=\"live-transcript-panel__title\">Live transcript</h2>\n <div class=\"live-transcript-panel__rec\">\n <eds-waveform [active]=\"waveformActive()\" [tone]=\"waveformTone()\" />\n <span class=\"live-transcript-panel__rec-label\">{{ recLabel() }}</span>\n </div>\n </header>\n\n <div #scrollHost class=\"live-transcript-panel__scroll\" role=\"log\" aria-live=\"polite\">\n @for (line of lines(); track $index) {\n @if (line.who === 'system') {\n <div class=\"live-transcript-panel__system eds-animate-fade-up\" [class]=\"systemClass(line.flag)\">\n <eds-icon [name]=\"systemIcon(line.flag)\" [size]=\"14\" />\n <span>{{ line.text }}</span>\n </div>\n } @else {\n <article class=\"live-transcript-panel__msg eds-animate-fade-up\" [class]=\"msgClass(line.who)\">\n <div class=\"live-transcript-panel__avatar\" [class]=\"avatarClass(line.who)\">\n <eds-icon [name]=\"speakerIcon(line.who)\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">{{ roleLabel(line.who) }}</span>\n <div class=\"live-transcript-panel__bubble\">\n <p>{{ line.text }}</p>\n </div>\n </div>\n </article>\n }\n }\n\n @if (patientInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--patient eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--patient\">\n <eds-icon name=\"person\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Patient \u00B7 listening</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}</p>\n </div>\n </div>\n </article>\n }\n\n @if (aiInterim(); as interim) {\n <article class=\"live-transcript-panel__msg live-transcript-panel__msg--ai eds-animate-fade-up\">\n <div class=\"live-transcript-panel__avatar live-transcript-panel__avatar--ai\">\n <eds-icon name=\"graphic_eq\" [size]=\"16\" />\n </div>\n <div class=\"live-transcript-panel__content\">\n <span class=\"live-transcript-panel__label\">Ava \u00B7 AI</span>\n <div class=\"live-transcript-panel__bubble live-transcript-panel__bubble--interim\">\n <p>{{ interim }}<span class=\"live-transcript-panel__caret\" aria-hidden=\"true\"></span></p>\n </div>\n </div>\n </article>\n }\n\n @if (lines().length === 0 && !patientInterim() && !aiInterim()) {\n <p class=\"live-transcript-panel__empty\">Waiting for conversation\u2026</p>\n }\n </div>\n\n @if (showStaffInput()) {\n <footer class=\"live-transcript-panel__footer\">\n <input\n type=\"text\"\n class=\"live-transcript-panel__input\"\n placeholder=\"Type to speak as staff\u2026\"\n [ngModel]=\"staffMessage()\"\n (ngModelChange)=\"onStaffInput($event)\"\n (keyup.enter)=\"onSend()\"\n />\n <button type=\"button\" class=\"live-transcript-panel__send\" (click)=\"onSend()\">\n <eds-icon name=\"send\" [size]=\"18\" />\n Send\n </button>\n </footer>\n }\n</section>\n", styles: [".live-transcript-panel{display:flex;flex-direction:column;min-height:0;height:calc(100vh - 234px);min-height:460px;background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);border-radius:var(--eds-radius-lg)}.live-transcript-panel__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid var(--eds-slate-800);flex-shrink:0}.live-transcript-panel__title{margin:0;font:600 11px/1 var(--eds-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--eds-slate-400)}.live-transcript-panel__rec{display:flex;align-items:center;gap:10px}.live-transcript-panel__rec-label{font:600 11px/1 var(--eds-font-mono);letter-spacing:.06em;color:var(--eds-slate-500)}.live-transcript-panel__scroll{flex:1;overflow:auto;padding:18px;display:flex;flex-direction:column;gap:14px}.live-transcript-panel__empty{margin:0;text-align:center;padding:32px 12px;font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-500)}.live-transcript-panel__system{align-self:center;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--eds-radius-pill);border:1px solid var(--eds-slate-800);font:500 12px/1 var(--eds-font-mono);max-width:90%;text-align:center}.live-transcript-panel__system--verify{color:var(--eds-green-400);background:#0abf521a;border-color:#0abf524d}.live-transcript-panel__system--warn{color:var(--eds-amber-300);background:#fe9a001a;border-color:#fe9a004d}.live-transcript-panel__system--info{color:var(--eds-slate-300);background:var(--eds-slate-900);border-color:var(--eds-slate-800)}.live-transcript-panel__msg{display:flex;gap:10px;max-width:560px}.live-transcript-panel__msg--ai,.live-transcript-panel__msg--staff{margin-left:auto;flex-direction:row-reverse}.live-transcript-panel__msg--ai .live-transcript-panel__content,.live-transcript-panel__msg--staff .live-transcript-panel__content{align-items:flex-end}.live-transcript-panel__msg--ai .live-transcript-panel__bubble,.live-transcript-panel__msg--staff .live-transcript-panel__bubble{border-radius:12px 4px 12px 12px}.live-transcript-panel__msg--typing .live-transcript-panel__bubble{padding:12px 16px}.live-transcript-panel__avatar{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}.live-transcript-panel__avatar--ai{background:linear-gradient(135deg,var(--eds-brand-500),var(--eds-violet-500))}.live-transcript-panel__avatar--staff{background:#8e51ff2e;color:var(--eds-violet-400);border:1px solid rgba(142,81,255,.35)}.live-transcript-panel__avatar--patient{background:var(--eds-slate-800);color:var(--eds-slate-400)}.live-transcript-panel__content{display:flex;flex-direction:column;gap:4px;min-width:0}.live-transcript-panel__label{font:600 11px/1 var(--eds-font-mono);letter-spacing:.04em;color:var(--eds-slate-500)}.live-transcript-panel__msg--ai .live-transcript-panel__label{color:var(--eds-brand-400)}.live-transcript-panel__msg--staff .live-transcript-panel__label{color:var(--eds-purple-300)}.live-transcript-panel__bubble{padding:9px 13px;border-radius:4px 12px 12px;background:#3681f41f;border:1px solid rgba(54,129,244,.28)}.live-transcript-panel__bubble p{margin:0;font:400 13px/19px var(--eds-font-sans);color:var(--eds-gray-100)}.live-transcript-panel__bubble--interim{opacity:.85;font-style:italic}.live-transcript-panel__msg--patient .live-transcript-panel__bubble{background:var(--eds-slate-900);border-color:var(--eds-slate-800)}.live-transcript-panel__msg--staff .live-transcript-panel__bubble{background:#8e51ff24;border-color:#8e51ff4d}.live-transcript-panel__msg--staff .live-transcript-panel__bubble p{color:var(--eds-purple-300)}.live-transcript-panel__caret{display:inline-block;width:7px;height:14px;margin-left:2px;vertical-align:text-bottom;background:var(--eds-brand-400);animation:eds-caret 1s step-end infinite}.live-transcript-panel__dots{display:inline-flex;align-items:center;gap:5px;height:14px}.live-transcript-panel__dots span{width:6px;height:6px;border-radius:50%;background:var(--eds-brand-400);animation:eds-blink 1.4s ease-in-out infinite}.live-transcript-panel__dots span:nth-child(2){animation-delay:.2s}.live-transcript-panel__dots span:nth-child(3){animation-delay:.4s}.live-transcript-panel__footer{display:flex;gap:8px;padding:12px;border-top:1px solid var(--eds-slate-800);flex-shrink:0}.live-transcript-panel__input{flex:1;height:38px;padding:0 14px;border-radius:var(--eds-radius-md);border:1px solid var(--eds-slate-700);background:var(--eds-slate-950);color:var(--eds-gray-100);font:400 13px/1 var(--eds-font-sans)}.live-transcript-panel__input::placeholder{color:var(--eds-slate-500)}.live-transcript-panel__input:focus{outline:none;border-color:var(--eds-violet-400)}.live-transcript-panel__send{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--eds-radius-md);background:#8e51ff38;color:var(--eds-purple-300);font:600 13px/1 var(--eds-font-sans);cursor:pointer}.live-transcript-panel__send:hover{background:var(--eds-violet-500);color:#fff}@media(max-width:900px){.live-transcript-panel{height:auto;min-height:360px;max-height:60vh}}\n"] }]
|
|
405
405
|
}], ctorParameters: () => [], propDecorators: { scrollHost: [{
|
|
406
406
|
type: ViewChild,
|
|
407
407
|
args: ['scrollHost']
|
|
@@ -555,7 +555,7 @@ class LiveMonitorPageComponent {
|
|
|
555
555
|
});
|
|
556
556
|
}
|
|
557
557
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveMonitorPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
558
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: LiveMonitorPageComponent, isStandalone: true, selector: "eds-live-monitor-page", ngImport: i0, template: "<div class=\"eds-page eds-page--dark live-monitor-page\">\n @if (loading()) {\n <p class=\"live-monitor-page__loading\">Loading call\u2026</p>\n } @else {\n @if (call(); as c) {\n <header class=\"live-monitor-page__header\">\n <a routerLink=\"../live\" class=\"live-monitor-page__back\" aria-label=\"Back to live calls\">\n <eds-icon name=\"arrow_back\" [size]=\"19\" />\n </a>\n\n <div class=\"live-monitor-page__header-main\">\n <eds-avatar\n [initials]=\"c.initials\"\n tone=\"brand\"\n [gradient]=\"c.matched\"\n [class.live-monitor-page__avatar--ring]=\"c.matched\"\n />\n\n <div class=\"live-monitor-page__caller\">\n <div class=\"live-monitor-page__name-row\">\n <h1 class=\"live-monitor-page__name\">{{ c.name }}</h1>\n <span class=\"live-monitor-page__patient-tag\" [attr.data-kind]=\"c.matched ? 'registered' : 'new'\">\n <eds-icon [name]=\"c.matched ? 'person_check' : 'person_add'\" [size]=\"14\" />\n {{ c.matched ? 'Registered' : 'New' }}\n </span>\n </div>\n <div class=\"live-monitor-page__meta-row\">\n <eds-icon [name]=\"c.direction === 'inbound' ? 'call_received' : 'call_made'\" [size]=\"14\" />\n <span>{{ c.phone }}</span>\n <span class=\"live-monitor-page__sep\">\u00B7</span>\n <span>{{ c.reason }}</span>\n </div>\n </div>\n\n <div class=\"live-monitor-page__header-right\">\n <span class=\"live-monitor-page__duration\">\n <span class=\"live-monitor-page__duration-dot\" aria-hidden=\"true\"></span>\n {{ c.started | edsElapsed }}\n </span>\n </div>\n </div>\n </header>\n\n @if (callEnded()) {\n <div class=\"live-monitor-page__completed-banner\" role=\"status\">\n <eds-icon name=\"check_circle\" [size]=\"18\" />\n Call ended\n </div>\n }\n\n <div class=\"live-monitor-page__grid\">\n <div class=\"live-monitor-page__main\">\n <eds-live-transcript-panel\n [live]=\"isLive()\"\n [paused]=\"isPaused()\"\n [humanTakeover]=\"isTakeover()\"\n [showStaffInput]=\"isTakeover() && !callEnded()\"\n [staffMessage]=\"staffMessage()\"\n (staffMessageChange)=\"staffMessage.set($event)\"\n (sendMessage)=\"sendMessage()\"\n />\n\n @if (callEnded()) {\n <section class=\"live-monitor-page__post-call\">\n <div class=\"live-monitor-page__summary\">\n <h2 class=\"live-monitor-page__section-title\">Call summary</h2>\n @if (summaryLoading()) {\n <p class=\"live-monitor-page__muted\">Generating summary\u2026</p>\n } @else if (summary()) {\n <p>{{ summary() }}</p>\n } @else {\n <p class=\"live-monitor-page__muted\">Summary will appear when processing completes.</p>\n }\n </div>\n <eds-call-recording-player [callId]=\"callId()\" />\n </section>\n }\n </div>\n\n <aside class=\"live-monitor-page__sidebar\">\n @if (!callEnded()) {\n <div class=\"live-monitor-page__orb-wrap\" [attr.data-mode]=\"c.status === 'transferring' ? 'transfer' : 'ai'\">\n <span class=\"live-monitor-page__ring live-monitor-page__ring--1\"></span>\n <span class=\"live-monitor-page__ring live-monitor-page__ring--2\"></span>\n <span class=\"live-monitor-page__orb\">\n <eds-icon name=\"smart_toy\" [size]=\"28\" />\n </span>\n <span class=\"live-monitor-page__confidence\" [attr.data-level]=\"confidenceLevel(c.confidence)\">\n AI confidence {{ c.confidence }}%\n </span>\n </div>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Patient sentiment</h3>\n <div class=\"live-monitor-page__sentiment-bar\">\n <span\n class=\"live-monitor-page__sentiment-fill\"\n [style.width.%]=\"sentimentPercent(c.sentiment)\"\n [attr.data-sentiment]=\"c.sentiment\"\n ></span>\n </div>\n <span class=\"live-monitor-page__sentiment-label\">{{ c.sentiment }}</span>\n </section>\n }\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Tools used</h3>\n <ul class=\"live-monitor-page__tools\">\n @for (tool of liveTools(); track toolTrackKey(tool, $index)) {\n <li [class]=\"toolStateClass(tool.state)\">\n <span class=\"live-monitor-page__tool-time\">{{ tool.t }}</span>\n <div class=\"live-monitor-page__tool-body\">\n <span class=\"live-monitor-page__tool-name\">{{ tool.name }}</span>\n <span class=\"live-monitor-page__tool-result\">{{ tool.result }}</span>\n </div>\n @if (tool.state === 'active') {\n <eds-icon name=\"sync\" [size]=\"16\" class=\"live-monitor-page__tool-spin\" />\n }\n </li>\n } @empty {\n <li class=\"live-monitor-page__tools-empty\">No tool activity yet.</li>\n }\n </ul>\n </section>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Goal</h3>\n <p class=\"live-monitor-page__goal\">{{ c.goal }}</p>\n </section>\n </aside>\n </div>\n\n @if (!callEnded()) {\n <footer class=\"live-monitor-page__control-bar\">\n <div class=\"live-monitor-page__control-group\">\n @if (isTakeover()) {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--violet\" (click)=\"resumeAi()\">\n <eds-icon name=\"smart_toy\" [size]=\"18\" /> Resume AI\n </button>\n } @else {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--primary\" (click)=\"takeover()\">\n <eds-icon name=\"pan_tool_alt\" [size]=\"18\" /> Take over\n </button>\n }\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"hearing\" [size]=\"18\" /> Listen\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" (click)=\"transfer()\">\n <eds-icon name=\"phone_forwarded\" [size]=\"18\" /> Transfer\n </button>\n </div>\n\n <span class=\"live-monitor-page__divider\" aria-hidden=\"true\"></span>\n\n <div class=\"live-monitor-page__control-group\">\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"person_search\" [size]=\"18\" /> Open chart\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"add_task\" [size]=\"18\" /> Create task\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"edit_note\" [size]=\"18\" /> Add note\n </button>\n </div>\n\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--danger\" (click)=\"endCall()\">\n <eds-icon name=\"call_end\" [size]=\"18\" /> End call\n </button>\n </footer>\n }\n } @else {\n <p class=\"live-monitor-page__loading\">Call ended or not found.</p>\n }\n }\n</div>\n", styles: [".live-monitor-page{display:flex;flex-direction:column;min-height:calc(100vh - var(--eds-topbar-height));padding:var(--space-5);color:var(--gray-200)}.live-monitor-page__loading{font:400 13px/1.4 var(--font-body);color:var(--slate-400)}.live-monitor-page__header{display:flex;align-items:flex-start;gap:12px;margin-bottom:var(--space-4)}.live-monitor-page__back{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-md);background:var(--slate-900);border:1px solid var(--slate-800);color:var(--gray-300);text-decoration:none;flex-shrink:0}.live-monitor-page__back:hover{background:var(--slate-800)}.live-monitor-page__header-main{flex:1;display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.live-monitor-page__avatar--ring{box-shadow:0 0 0 2px var(--brand-500)}.live-monitor-page__caller{flex:1;min-width:200px}.live-monitor-page__name-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.live-monitor-page__name{margin:0;font:700 18px/22px var(--font-sans);color:var(--gray-100)}.live-monitor-page__patient-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--radius-pill);font:500 11px/1 var(--font-mono);border:1px solid transparent}.live-monitor-page__patient-tag[data-kind=registered]{color:var(--green-400);background:#0abf5224;border-color:#0abf5247}.live-monitor-page__patient-tag[data-kind=new]{color:var(--brand-300);background:#3681f424;border-color:#3681f44d}.live-monitor-page__meta-row{display:flex;align-items:center;gap:6px;margin-top:4px;font:500 12px/1 var(--font-mono);color:var(--slate-400);flex-wrap:wrap}.live-monitor-page__sep{color:var(--slate-600)}.live-monitor-page__header-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin-left:auto}.live-monitor-page__duration{display:inline-flex;align-items:center;gap:8px;font:700 22px/1 var(--font-mono);color:var(--gray-100)}.live-monitor-page__duration-dot{width:9px;height:9px;border-radius:50%;background:var(--green-400);box-shadow:0 0 0 3px #0abf5224}.live-monitor-page__completed-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:var(--space-4);border-radius:var(--radius-lg);background:#0abf521f;color:var(--green-400);font:400 13px/1.4 var(--font-body)}.live-monitor-page__grid{display:grid;grid-template-columns:1fr 340px;gap:var(--space-4);flex:1;min-height:0}.live-monitor-page__main{display:flex;flex-direction:column;gap:var(--space-4);min-height:0}.live-monitor-page__main-tabs{display:flex;gap:4px;padding:4px;border-radius:var(--radius-md);background:var(--slate-900);border:1px solid var(--slate-800);width:fit-content}.live-monitor-page__main-tab{border:none;background:transparent;color:var(--slate-400);font:600 12px/1 var(--font-body);padding:8px 14px;border-radius:var(--radius-sm);cursor:pointer}.live-monitor-page__main-tab--active{background:var(--slate-800);color:var(--gray-100)}.live-monitor-page__api-logs{flex:1;min-height:280px;padding:16px;background:var(--slate-900);border:1px solid var(--slate-800)}.live-monitor-page__post-call{display:flex;flex-direction:column;gap:var(--space-4)}.live-monitor-page__summary{padding:16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);font:400 13px/1.5 var(--font-body);color:var(--slate-300)}.live-monitor-page__muted{color:var(--slate-500);margin:0}.live-monitor-page__sidebar{display:flex;flex-direction:column;gap:var(--space-4);min-height:0}.live-monitor-page__sidebar-block{padding:16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800)}.live-monitor-page__section-title{margin:0 0 12px;font:600 11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--slate-400)}.live-monitor-page__orb-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);position:relative}.live-monitor-page__orb{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--brand-500),var(--violet-500));animation:eds-breathe 3s ease-in-out infinite;position:relative;z-index:1}.live-monitor-page__ring{position:absolute;width:64px;height:64px;top:20px;border-radius:50%;border:2px solid var(--brand-400);animation:eds-ring 2s ease-out infinite}.live-monitor-page__ring--2{animation-delay:1s}.live-monitor-page__orb-wrap[data-mode=transfer] .live-monitor-page__orb{background:linear-gradient(135deg,var(--amber-400),var(--violet-500))}.live-monitor-page__confidence{font:500 12px/1 var(--font-mono);color:var(--slate-400)}.live-monitor-page__confidence[data-level=high]{color:var(--green-400)}.live-monitor-page__confidence[data-level=low]{color:var(--amber-400)}.live-monitor-page__sentiment-bar{height:6px;background:var(--slate-800);border-radius:3px;overflow:hidden;margin-bottom:8px}.live-monitor-page__sentiment-fill{display:block;height:100%;border-radius:3px;background:var(--green-400);transition:width .3s ease}.live-monitor-page__sentiment-fill[data-sentiment=frustrated],.live-monitor-page__sentiment-fill[data-sentiment=urgent]{background:var(--red-400)}.live-monitor-page__sentiment-fill[data-sentiment=neutral]{background:var(--amber-400)}.live-monitor-page__sentiment-label{font:500 12px/1 var(--font-mono);color:var(--slate-400);text-transform:capitalize}.live-monitor-page__tools{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto}.live-monitor-page__tools li{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:10px;border-radius:var(--radius-md);background:var(--slate-950);border-left:3px solid var(--slate-700)}.live-monitor-page__tool-time{font:500 11px/1 var(--font-mono);color:var(--slate-500);white-space:nowrap}.live-monitor-page__tool-body{display:flex;flex-direction:column;gap:2px;min-width:0}.live-monitor-page__tool-name{font:600 13px/1.2 var(--font-sans);color:var(--gray-100)}.live-monitor-page__tool-result{font:400 12px/1.4 var(--font-body);color:var(--slate-400)}.live-monitor-page__tool-tech{font:500 10px/1 var(--font-mono);color:var(--slate-500)}.live-monitor-page__tool-spin{animation:eds-spin 1s linear infinite;color:var(--brand-400)}.live-monitor-page__tool--ok{border-left-color:var(--green-400)}.live-monitor-page__tool--warn{border-left-color:var(--amber-400)}.live-monitor-page__tool--error{border-left-color:var(--red-400)}.live-monitor-page__tool--active{border-left-color:var(--brand-400)}.live-monitor-page__tools-empty{border-left:none!important;background:transparent!important;padding:8px 0!important;font:400 13px/1.4 var(--font-body);color:var(--slate-500)}.live-monitor-page__goal{margin:0;font:400 13px/1.5 var(--font-body);color:var(--slate-300)}.live-monitor-page__control-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:var(--space-4);padding:12px 16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);box-shadow:0 -8px 24px #03071780}.live-monitor-page__control-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.live-monitor-page__divider{width:1px;height:24px;background:var(--slate-800);flex-shrink:0}.live-monitor-page__ctrl{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--radius-md);font:600 13px/1 var(--font-sans);cursor:pointer;white-space:nowrap}.live-monitor-page__ctrl:disabled{opacity:.45;cursor:not-allowed}.live-monitor-page__ctrl--neutral{background:var(--slate-800);color:var(--gray-200)}.live-monitor-page__ctrl--neutral:hover:not(:disabled){background:var(--slate-700)}.live-monitor-page__ctrl--primary{background:var(--brand-600);color:#fff}.live-monitor-page__ctrl--primary:hover:not(:disabled){background:var(--brand-500)}.live-monitor-page__ctrl--violet{background:#8e51ff2e;color:var(--purple-300)}.live-monitor-page__ctrl--violet:hover:not(:disabled){background:var(--violet-500);color:#fff}.live-monitor-page__ctrl--danger{margin-left:auto;background:var(--red-500);color:#fff}.live-monitor-page__ctrl--danger:hover:not(:disabled){background:var(--red-400)}@media(max-width:960px){.live-monitor-page__grid{grid-template-columns:1fr}.live-monitor-page__header-right{align-items:flex-start;width:100%;margin-left:0}.live-monitor-page__ctrl--danger{margin-left:0;width:100%;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: EdsAvatarComponent, selector: "eds-avatar", inputs: ["initials", "tone", "gradient"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }, { kind: "pipe", type: EdsElapsedPipe, name: "edsElapsed" }, { kind: "component", type: LiveTranscriptPanelComponent, selector: "eds-live-transcript-panel", inputs: ["live", "paused", "humanTakeover", "showStaffInput", "staffMessage"], outputs: ["staffMessageChange", "sendMessage"] }, { kind: "component", type: CallRecordingPlayerComponent, selector: "eds-call-recording-player", inputs: ["callId"], outputs: ["currentTimeChange", "durationChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
558
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: LiveMonitorPageComponent, isStandalone: true, selector: "eds-live-monitor-page", ngImport: i0, template: "<div class=\"eds-page eds-page--dark live-monitor-page\">\n @if (loading()) {\n <p class=\"live-monitor-page__loading\">Loading call\u2026</p>\n } @else {\n @if (call(); as c) {\n <header class=\"live-monitor-page__header\">\n <a routerLink=\"../live\" class=\"live-monitor-page__back\" aria-label=\"Back to live calls\">\n <eds-icon name=\"arrow_back\" [size]=\"19\" />\n </a>\n\n <div class=\"live-monitor-page__header-main\">\n <eds-avatar\n [initials]=\"c.initials\"\n tone=\"brand\"\n [gradient]=\"c.matched\"\n [class.live-monitor-page__avatar--ring]=\"c.matched\"\n />\n\n <div class=\"live-monitor-page__caller\">\n <div class=\"live-monitor-page__name-row\">\n <h1 class=\"live-monitor-page__name\">{{ c.name }}</h1>\n <span class=\"live-monitor-page__patient-tag\" [attr.data-kind]=\"c.matched ? 'registered' : 'new'\">\n <eds-icon [name]=\"c.matched ? 'person_check' : 'person_add'\" [size]=\"14\" />\n {{ c.matched ? 'Registered' : 'New' }}\n </span>\n </div>\n <div class=\"live-monitor-page__meta-row\">\n <eds-icon [name]=\"c.direction === 'inbound' ? 'call_received' : 'call_made'\" [size]=\"14\" />\n <span>{{ c.phone }}</span>\n <span class=\"live-monitor-page__sep\">\u00B7</span>\n <span>{{ c.reason }}</span>\n </div>\n </div>\n\n <div class=\"live-monitor-page__header-right\">\n <span class=\"live-monitor-page__duration\">\n <span class=\"live-monitor-page__duration-dot\" aria-hidden=\"true\"></span>\n {{ c.started | edsElapsed }}\n </span>\n </div>\n </div>\n </header>\n\n @if (callEnded()) {\n <div class=\"live-monitor-page__completed-banner\" role=\"status\">\n <eds-icon name=\"check_circle\" [size]=\"18\" />\n Call ended\n </div>\n }\n\n <div class=\"live-monitor-page__grid\">\n <div class=\"live-monitor-page__main\">\n <eds-live-transcript-panel\n [live]=\"isLive()\"\n [paused]=\"isPaused()\"\n [humanTakeover]=\"isTakeover()\"\n [showStaffInput]=\"isTakeover() && !callEnded()\"\n [staffMessage]=\"staffMessage()\"\n (staffMessageChange)=\"staffMessage.set($event)\"\n (sendMessage)=\"sendMessage()\"\n />\n\n @if (callEnded()) {\n <section class=\"live-monitor-page__post-call\">\n <div class=\"live-monitor-page__summary\">\n <h2 class=\"live-monitor-page__section-title\">Call summary</h2>\n @if (summaryLoading()) {\n <p class=\"live-monitor-page__muted\">Generating summary\u2026</p>\n } @else if (summary()) {\n <p>{{ summary() }}</p>\n } @else {\n <p class=\"live-monitor-page__muted\">Summary will appear when processing completes.</p>\n }\n </div>\n <eds-call-recording-player [callId]=\"callId()\" />\n </section>\n }\n </div>\n\n <aside class=\"live-monitor-page__sidebar\">\n @if (!callEnded()) {\n <div class=\"live-monitor-page__orb-wrap\" [attr.data-mode]=\"c.status === 'transferring' ? 'transfer' : 'ai'\">\n <span class=\"live-monitor-page__ring live-monitor-page__ring--1\"></span>\n <span class=\"live-monitor-page__ring live-monitor-page__ring--2\"></span>\n <span class=\"live-monitor-page__orb\">\n <eds-icon name=\"smart_toy\" [size]=\"28\" />\n </span>\n <span class=\"live-monitor-page__confidence\" [attr.data-level]=\"confidenceLevel(c.confidence)\">\n AI confidence {{ c.confidence }}%\n </span>\n </div>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Patient sentiment</h3>\n <div class=\"live-monitor-page__sentiment-bar\">\n <span\n class=\"live-monitor-page__sentiment-fill\"\n [style.width.%]=\"sentimentPercent(c.sentiment)\"\n [attr.data-sentiment]=\"c.sentiment\"\n ></span>\n </div>\n <span class=\"live-monitor-page__sentiment-label\">{{ c.sentiment }}</span>\n </section>\n }\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Tools used</h3>\n <ul class=\"live-monitor-page__tools\">\n @for (tool of liveTools(); track toolTrackKey(tool, $index)) {\n <li [class]=\"toolStateClass(tool.state)\">\n <span class=\"live-monitor-page__tool-time\">{{ tool.t }}</span>\n <div class=\"live-monitor-page__tool-body\">\n <span class=\"live-monitor-page__tool-name\">{{ tool.name }}</span>\n <span class=\"live-monitor-page__tool-result\">{{ tool.result }}</span>\n </div>\n @if (tool.state === 'active') {\n <eds-icon name=\"sync\" [size]=\"16\" class=\"live-monitor-page__tool-spin\" />\n }\n </li>\n } @empty {\n <li class=\"live-monitor-page__tools-empty\">No tool activity yet.</li>\n }\n </ul>\n </section>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Goal</h3>\n <p class=\"live-monitor-page__goal\">{{ c.goal }}</p>\n </section>\n </aside>\n </div>\n\n @if (!callEnded()) {\n <footer class=\"live-monitor-page__control-bar\">\n <div class=\"live-monitor-page__control-group\">\n @if (isTakeover()) {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--violet\" (click)=\"resumeAi()\">\n <eds-icon name=\"smart_toy\" [size]=\"18\" /> Resume AI\n </button>\n } @else {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--primary\" (click)=\"takeover()\">\n <eds-icon name=\"pan_tool_alt\" [size]=\"18\" /> Take over\n </button>\n }\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"hearing\" [size]=\"18\" /> Listen\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" (click)=\"transfer()\">\n <eds-icon name=\"phone_forwarded\" [size]=\"18\" /> Transfer\n </button>\n </div>\n\n <span class=\"live-monitor-page__divider\" aria-hidden=\"true\"></span>\n\n <div class=\"live-monitor-page__control-group\">\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"person_search\" [size]=\"18\" /> Open chart\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"add_task\" [size]=\"18\" /> Create task\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"edit_note\" [size]=\"18\" /> Add note\n </button>\n </div>\n\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--danger\" (click)=\"endCall()\">\n <eds-icon name=\"call_end\" [size]=\"18\" /> End call\n </button>\n </footer>\n }\n } @else {\n <p class=\"live-monitor-page__loading\">Call ended or not found.</p>\n }\n }\n</div>\n", styles: [".live-monitor-page{display:flex;flex-direction:column;min-height:calc(100vh - var(--eds-topbar-height));padding:var(--eds-space-5);color:var(--eds-gray-200)}.live-monitor-page__loading{font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-400)}.live-monitor-page__header{display:flex;align-items:flex-start;gap:12px;margin-bottom:var(--eds-space-4)}.live-monitor-page__back{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--eds-radius-md);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);color:var(--eds-gray-300);text-decoration:none;flex-shrink:0}.live-monitor-page__back:hover{background:var(--eds-slate-800)}.live-monitor-page__header-main{flex:1;display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.live-monitor-page__avatar--ring{box-shadow:0 0 0 2px var(--eds-brand-500)}.live-monitor-page__caller{flex:1;min-width:200px}.live-monitor-page__name-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.live-monitor-page__name{margin:0;font:700 18px/22px var(--eds-font-sans);color:var(--eds-gray-100)}.live-monitor-page__patient-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--eds-radius-pill);font:500 11px/1 var(--eds-font-mono);border:1px solid transparent}.live-monitor-page__patient-tag[data-kind=registered]{color:var(--eds-green-400);background:#0abf5224;border-color:#0abf5247}.live-monitor-page__patient-tag[data-kind=new]{color:var(--eds-brand-300);background:#3681f424;border-color:#3681f44d}.live-monitor-page__meta-row{display:flex;align-items:center;gap:6px;margin-top:4px;font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400);flex-wrap:wrap}.live-monitor-page__sep{color:var(--eds-slate-600)}.live-monitor-page__header-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin-left:auto}.live-monitor-page__duration{display:inline-flex;align-items:center;gap:8px;font:700 22px/1 var(--eds-font-mono);color:var(--eds-gray-100)}.live-monitor-page__duration-dot{width:9px;height:9px;border-radius:50%;background:var(--eds-green-400);box-shadow:0 0 0 3px #0abf5224}.live-monitor-page__completed-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:var(--eds-space-4);border-radius:var(--eds-radius-lg);background:#0abf521f;color:var(--eds-green-400);font:400 13px/1.4 var(--eds-font-body)}.live-monitor-page__grid{display:grid;grid-template-columns:1fr 340px;gap:var(--eds-space-4);flex:1;min-height:0}.live-monitor-page__main{display:flex;flex-direction:column;gap:var(--eds-space-4);min-height:0}.live-monitor-page__main-tabs{display:flex;gap:4px;padding:4px;border-radius:var(--eds-radius-md);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);width:fit-content}.live-monitor-page__main-tab{border:none;background:transparent;color:var(--eds-slate-400);font:600 12px/1 var(--eds-font-body);padding:8px 14px;border-radius:var(--eds-radius-sm);cursor:pointer}.live-monitor-page__main-tab--active{background:var(--eds-slate-800);color:var(--eds-gray-100)}.live-monitor-page__api-logs{flex:1;min-height:280px;padding:16px;background:var(--eds-slate-900);border:1px solid var(--eds-slate-800)}.live-monitor-page__post-call{display:flex;flex-direction:column;gap:var(--eds-space-4)}.live-monitor-page__summary{padding:16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);font:400 13px/1.5 var(--eds-font-body);color:var(--eds-slate-300)}.live-monitor-page__muted{color:var(--eds-slate-500);margin:0}.live-monitor-page__sidebar{display:flex;flex-direction:column;gap:var(--eds-space-4);min-height:0}.live-monitor-page__sidebar-block{padding:16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800)}.live-monitor-page__section-title{margin:0 0 12px;font:600 11px/1 var(--eds-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--eds-slate-400)}.live-monitor-page__orb-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);position:relative}.live-monitor-page__orb{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--eds-brand-500),var(--eds-violet-500));animation:eds-breathe 3s ease-in-out infinite;position:relative;z-index:1}.live-monitor-page__ring{position:absolute;width:64px;height:64px;top:20px;border-radius:50%;border:2px solid var(--eds-brand-400);animation:eds-ring 2s ease-out infinite}.live-monitor-page__ring--2{animation-delay:1s}.live-monitor-page__orb-wrap[data-mode=transfer] .live-monitor-page__orb{background:linear-gradient(135deg,var(--eds-amber-400),var(--eds-violet-500))}.live-monitor-page__confidence{font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400)}.live-monitor-page__confidence[data-level=high]{color:var(--eds-green-400)}.live-monitor-page__confidence[data-level=low]{color:var(--eds-amber-400)}.live-monitor-page__sentiment-bar{height:6px;background:var(--eds-slate-800);border-radius:3px;overflow:hidden;margin-bottom:8px}.live-monitor-page__sentiment-fill{display:block;height:100%;border-radius:3px;background:var(--eds-green-400);transition:width .3s ease}.live-monitor-page__sentiment-fill[data-sentiment=frustrated],.live-monitor-page__sentiment-fill[data-sentiment=urgent]{background:var(--eds-red-400)}.live-monitor-page__sentiment-fill[data-sentiment=neutral]{background:var(--eds-amber-400)}.live-monitor-page__sentiment-label{font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400);text-transform:capitalize}.live-monitor-page__tools{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto}.live-monitor-page__tools li{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:10px;border-radius:var(--eds-radius-md);background:var(--eds-slate-950);border-left:3px solid var(--eds-slate-700)}.live-monitor-page__tool-time{font:500 11px/1 var(--eds-font-mono);color:var(--eds-slate-500);white-space:nowrap}.live-monitor-page__tool-body{display:flex;flex-direction:column;gap:2px;min-width:0}.live-monitor-page__tool-name{font:600 13px/1.2 var(--eds-font-sans);color:var(--eds-gray-100)}.live-monitor-page__tool-result{font:400 12px/1.4 var(--eds-font-body);color:var(--eds-slate-400)}.live-monitor-page__tool-tech{font:500 10px/1 var(--eds-font-mono);color:var(--eds-slate-500)}.live-monitor-page__tool-spin{animation:eds-spin 1s linear infinite;color:var(--eds-brand-400)}.live-monitor-page__tool--ok{border-left-color:var(--eds-green-400)}.live-monitor-page__tool--warn{border-left-color:var(--eds-amber-400)}.live-monitor-page__tool--error{border-left-color:var(--eds-red-400)}.live-monitor-page__tool--active{border-left-color:var(--eds-brand-400)}.live-monitor-page__tools-empty{border-left:none!important;background:transparent!important;padding:8px 0!important;font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-500)}.live-monitor-page__goal{margin:0;font:400 13px/1.5 var(--eds-font-body);color:var(--eds-slate-300)}.live-monitor-page__control-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:var(--eds-space-4);padding:12px 16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);box-shadow:0 -8px 24px #03071780}.live-monitor-page__control-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.live-monitor-page__divider{width:1px;height:24px;background:var(--eds-slate-800);flex-shrink:0}.live-monitor-page__ctrl{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--eds-radius-md);font:600 13px/1 var(--eds-font-sans);cursor:pointer;white-space:nowrap}.live-monitor-page__ctrl:disabled{opacity:.45;cursor:not-allowed}.live-monitor-page__ctrl--neutral{background:var(--eds-slate-800);color:var(--eds-gray-200)}.live-monitor-page__ctrl--neutral:hover:not(:disabled){background:var(--eds-slate-700)}.live-monitor-page__ctrl--primary{background:var(--eds-brand-600);color:#fff}.live-monitor-page__ctrl--primary:hover:not(:disabled){background:var(--eds-brand-500)}.live-monitor-page__ctrl--violet{background:#8e51ff2e;color:var(--eds-purple-300)}.live-monitor-page__ctrl--violet:hover:not(:disabled){background:var(--eds-violet-500);color:#fff}.live-monitor-page__ctrl--danger{margin-left:auto;background:var(--eds-red-500);color:#fff}.live-monitor-page__ctrl--danger:hover:not(:disabled){background:var(--eds-red-400)}@media(max-width:960px){.live-monitor-page__grid{grid-template-columns:1fr}.live-monitor-page__header-right{align-items:flex-start;width:100%;margin-left:0}.live-monitor-page__ctrl--danger{margin-left:0;width:100%;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: EdsAvatarComponent, selector: "eds-avatar", inputs: ["initials", "tone", "gradient"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }, { kind: "pipe", type: EdsElapsedPipe, name: "edsElapsed" }, { kind: "component", type: LiveTranscriptPanelComponent, selector: "eds-live-transcript-panel", inputs: ["live", "paused", "humanTakeover", "showStaffInput", "staffMessage"], outputs: ["staffMessageChange", "sendMessage"] }, { kind: "component", type: CallRecordingPlayerComponent, selector: "eds-call-recording-player", inputs: ["callId"], outputs: ["currentTimeChange", "durationChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
559
559
|
}
|
|
560
560
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveMonitorPageComponent, decorators: [{
|
|
561
561
|
type: Component,
|
|
@@ -567,8 +567,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
567
567
|
EdsElapsedPipe,
|
|
568
568
|
LiveTranscriptPanelComponent,
|
|
569
569
|
CallRecordingPlayerComponent,
|
|
570
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"eds-page eds-page--dark live-monitor-page\">\n @if (loading()) {\n <p class=\"live-monitor-page__loading\">Loading call\u2026</p>\n } @else {\n @if (call(); as c) {\n <header class=\"live-monitor-page__header\">\n <a routerLink=\"../live\" class=\"live-monitor-page__back\" aria-label=\"Back to live calls\">\n <eds-icon name=\"arrow_back\" [size]=\"19\" />\n </a>\n\n <div class=\"live-monitor-page__header-main\">\n <eds-avatar\n [initials]=\"c.initials\"\n tone=\"brand\"\n [gradient]=\"c.matched\"\n [class.live-monitor-page__avatar--ring]=\"c.matched\"\n />\n\n <div class=\"live-monitor-page__caller\">\n <div class=\"live-monitor-page__name-row\">\n <h1 class=\"live-monitor-page__name\">{{ c.name }}</h1>\n <span class=\"live-monitor-page__patient-tag\" [attr.data-kind]=\"c.matched ? 'registered' : 'new'\">\n <eds-icon [name]=\"c.matched ? 'person_check' : 'person_add'\" [size]=\"14\" />\n {{ c.matched ? 'Registered' : 'New' }}\n </span>\n </div>\n <div class=\"live-monitor-page__meta-row\">\n <eds-icon [name]=\"c.direction === 'inbound' ? 'call_received' : 'call_made'\" [size]=\"14\" />\n <span>{{ c.phone }}</span>\n <span class=\"live-monitor-page__sep\">\u00B7</span>\n <span>{{ c.reason }}</span>\n </div>\n </div>\n\n <div class=\"live-monitor-page__header-right\">\n <span class=\"live-monitor-page__duration\">\n <span class=\"live-monitor-page__duration-dot\" aria-hidden=\"true\"></span>\n {{ c.started | edsElapsed }}\n </span>\n </div>\n </div>\n </header>\n\n @if (callEnded()) {\n <div class=\"live-monitor-page__completed-banner\" role=\"status\">\n <eds-icon name=\"check_circle\" [size]=\"18\" />\n Call ended\n </div>\n }\n\n <div class=\"live-monitor-page__grid\">\n <div class=\"live-monitor-page__main\">\n <eds-live-transcript-panel\n [live]=\"isLive()\"\n [paused]=\"isPaused()\"\n [humanTakeover]=\"isTakeover()\"\n [showStaffInput]=\"isTakeover() && !callEnded()\"\n [staffMessage]=\"staffMessage()\"\n (staffMessageChange)=\"staffMessage.set($event)\"\n (sendMessage)=\"sendMessage()\"\n />\n\n @if (callEnded()) {\n <section class=\"live-monitor-page__post-call\">\n <div class=\"live-monitor-page__summary\">\n <h2 class=\"live-monitor-page__section-title\">Call summary</h2>\n @if (summaryLoading()) {\n <p class=\"live-monitor-page__muted\">Generating summary\u2026</p>\n } @else if (summary()) {\n <p>{{ summary() }}</p>\n } @else {\n <p class=\"live-monitor-page__muted\">Summary will appear when processing completes.</p>\n }\n </div>\n <eds-call-recording-player [callId]=\"callId()\" />\n </section>\n }\n </div>\n\n <aside class=\"live-monitor-page__sidebar\">\n @if (!callEnded()) {\n <div class=\"live-monitor-page__orb-wrap\" [attr.data-mode]=\"c.status === 'transferring' ? 'transfer' : 'ai'\">\n <span class=\"live-monitor-page__ring live-monitor-page__ring--1\"></span>\n <span class=\"live-monitor-page__ring live-monitor-page__ring--2\"></span>\n <span class=\"live-monitor-page__orb\">\n <eds-icon name=\"smart_toy\" [size]=\"28\" />\n </span>\n <span class=\"live-monitor-page__confidence\" [attr.data-level]=\"confidenceLevel(c.confidence)\">\n AI confidence {{ c.confidence }}%\n </span>\n </div>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Patient sentiment</h3>\n <div class=\"live-monitor-page__sentiment-bar\">\n <span\n class=\"live-monitor-page__sentiment-fill\"\n [style.width.%]=\"sentimentPercent(c.sentiment)\"\n [attr.data-sentiment]=\"c.sentiment\"\n ></span>\n </div>\n <span class=\"live-monitor-page__sentiment-label\">{{ c.sentiment }}</span>\n </section>\n }\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Tools used</h3>\n <ul class=\"live-monitor-page__tools\">\n @for (tool of liveTools(); track toolTrackKey(tool, $index)) {\n <li [class]=\"toolStateClass(tool.state)\">\n <span class=\"live-monitor-page__tool-time\">{{ tool.t }}</span>\n <div class=\"live-monitor-page__tool-body\">\n <span class=\"live-monitor-page__tool-name\">{{ tool.name }}</span>\n <span class=\"live-monitor-page__tool-result\">{{ tool.result }}</span>\n </div>\n @if (tool.state === 'active') {\n <eds-icon name=\"sync\" [size]=\"16\" class=\"live-monitor-page__tool-spin\" />\n }\n </li>\n } @empty {\n <li class=\"live-monitor-page__tools-empty\">No tool activity yet.</li>\n }\n </ul>\n </section>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Goal</h3>\n <p class=\"live-monitor-page__goal\">{{ c.goal }}</p>\n </section>\n </aside>\n </div>\n\n @if (!callEnded()) {\n <footer class=\"live-monitor-page__control-bar\">\n <div class=\"live-monitor-page__control-group\">\n @if (isTakeover()) {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--violet\" (click)=\"resumeAi()\">\n <eds-icon name=\"smart_toy\" [size]=\"18\" /> Resume AI\n </button>\n } @else {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--primary\" (click)=\"takeover()\">\n <eds-icon name=\"pan_tool_alt\" [size]=\"18\" /> Take over\n </button>\n }\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"hearing\" [size]=\"18\" /> Listen\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" (click)=\"transfer()\">\n <eds-icon name=\"phone_forwarded\" [size]=\"18\" /> Transfer\n </button>\n </div>\n\n <span class=\"live-monitor-page__divider\" aria-hidden=\"true\"></span>\n\n <div class=\"live-monitor-page__control-group\">\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"person_search\" [size]=\"18\" /> Open chart\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"add_task\" [size]=\"18\" /> Create task\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"edit_note\" [size]=\"18\" /> Add note\n </button>\n </div>\n\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--danger\" (click)=\"endCall()\">\n <eds-icon name=\"call_end\" [size]=\"18\" /> End call\n </button>\n </footer>\n }\n } @else {\n <p class=\"live-monitor-page__loading\">Call ended or not found.</p>\n }\n }\n</div>\n", styles: [".live-monitor-page{display:flex;flex-direction:column;min-height:calc(100vh - var(--eds-topbar-height));padding:var(--space-5);color:var(--gray-200)}.live-monitor-page__loading{font:400 13px/1.4 var(--font-body);color:var(--slate-400)}.live-monitor-page__header{display:flex;align-items:flex-start;gap:12px;margin-bottom:var(--space-4)}.live-monitor-page__back{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-md);background:var(--slate-900);border:1px solid var(--slate-800);color:var(--gray-300);text-decoration:none;flex-shrink:0}.live-monitor-page__back:hover{background:var(--slate-800)}.live-monitor-page__header-main{flex:1;display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.live-monitor-page__avatar--ring{box-shadow:0 0 0 2px var(--brand-500)}.live-monitor-page__caller{flex:1;min-width:200px}.live-monitor-page__name-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.live-monitor-page__name{margin:0;font:700 18px/22px var(--font-sans);color:var(--gray-100)}.live-monitor-page__patient-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--radius-pill);font:500 11px/1 var(--font-mono);border:1px solid transparent}.live-monitor-page__patient-tag[data-kind=registered]{color:var(--green-400);background:#0abf5224;border-color:#0abf5247}.live-monitor-page__patient-tag[data-kind=new]{color:var(--brand-300);background:#3681f424;border-color:#3681f44d}.live-monitor-page__meta-row{display:flex;align-items:center;gap:6px;margin-top:4px;font:500 12px/1 var(--font-mono);color:var(--slate-400);flex-wrap:wrap}.live-monitor-page__sep{color:var(--slate-600)}.live-monitor-page__header-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin-left:auto}.live-monitor-page__duration{display:inline-flex;align-items:center;gap:8px;font:700 22px/1 var(--font-mono);color:var(--gray-100)}.live-monitor-page__duration-dot{width:9px;height:9px;border-radius:50%;background:var(--green-400);box-shadow:0 0 0 3px #0abf5224}.live-monitor-page__completed-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:var(--space-4);border-radius:var(--radius-lg);background:#0abf521f;color:var(--green-400);font:400 13px/1.4 var(--font-body)}.live-monitor-page__grid{display:grid;grid-template-columns:1fr 340px;gap:var(--space-4);flex:1;min-height:0}.live-monitor-page__main{display:flex;flex-direction:column;gap:var(--space-4);min-height:0}.live-monitor-page__main-tabs{display:flex;gap:4px;padding:4px;border-radius:var(--radius-md);background:var(--slate-900);border:1px solid var(--slate-800);width:fit-content}.live-monitor-page__main-tab{border:none;background:transparent;color:var(--slate-400);font:600 12px/1 var(--font-body);padding:8px 14px;border-radius:var(--radius-sm);cursor:pointer}.live-monitor-page__main-tab--active{background:var(--slate-800);color:var(--gray-100)}.live-monitor-page__api-logs{flex:1;min-height:280px;padding:16px;background:var(--slate-900);border:1px solid var(--slate-800)}.live-monitor-page__post-call{display:flex;flex-direction:column;gap:var(--space-4)}.live-monitor-page__summary{padding:16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);font:400 13px/1.5 var(--font-body);color:var(--slate-300)}.live-monitor-page__muted{color:var(--slate-500);margin:0}.live-monitor-page__sidebar{display:flex;flex-direction:column;gap:var(--space-4);min-height:0}.live-monitor-page__sidebar-block{padding:16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800)}.live-monitor-page__section-title{margin:0 0 12px;font:600 11px/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--slate-400)}.live-monitor-page__orb-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);position:relative}.live-monitor-page__orb{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--brand-500),var(--violet-500));animation:eds-breathe 3s ease-in-out infinite;position:relative;z-index:1}.live-monitor-page__ring{position:absolute;width:64px;height:64px;top:20px;border-radius:50%;border:2px solid var(--brand-400);animation:eds-ring 2s ease-out infinite}.live-monitor-page__ring--2{animation-delay:1s}.live-monitor-page__orb-wrap[data-mode=transfer] .live-monitor-page__orb{background:linear-gradient(135deg,var(--amber-400),var(--violet-500))}.live-monitor-page__confidence{font:500 12px/1 var(--font-mono);color:var(--slate-400)}.live-monitor-page__confidence[data-level=high]{color:var(--green-400)}.live-monitor-page__confidence[data-level=low]{color:var(--amber-400)}.live-monitor-page__sentiment-bar{height:6px;background:var(--slate-800);border-radius:3px;overflow:hidden;margin-bottom:8px}.live-monitor-page__sentiment-fill{display:block;height:100%;border-radius:3px;background:var(--green-400);transition:width .3s ease}.live-monitor-page__sentiment-fill[data-sentiment=frustrated],.live-monitor-page__sentiment-fill[data-sentiment=urgent]{background:var(--red-400)}.live-monitor-page__sentiment-fill[data-sentiment=neutral]{background:var(--amber-400)}.live-monitor-page__sentiment-label{font:500 12px/1 var(--font-mono);color:var(--slate-400);text-transform:capitalize}.live-monitor-page__tools{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto}.live-monitor-page__tools li{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:10px;border-radius:var(--radius-md);background:var(--slate-950);border-left:3px solid var(--slate-700)}.live-monitor-page__tool-time{font:500 11px/1 var(--font-mono);color:var(--slate-500);white-space:nowrap}.live-monitor-page__tool-body{display:flex;flex-direction:column;gap:2px;min-width:0}.live-monitor-page__tool-name{font:600 13px/1.2 var(--font-sans);color:var(--gray-100)}.live-monitor-page__tool-result{font:400 12px/1.4 var(--font-body);color:var(--slate-400)}.live-monitor-page__tool-tech{font:500 10px/1 var(--font-mono);color:var(--slate-500)}.live-monitor-page__tool-spin{animation:eds-spin 1s linear infinite;color:var(--brand-400)}.live-monitor-page__tool--ok{border-left-color:var(--green-400)}.live-monitor-page__tool--warn{border-left-color:var(--amber-400)}.live-monitor-page__tool--error{border-left-color:var(--red-400)}.live-monitor-page__tool--active{border-left-color:var(--brand-400)}.live-monitor-page__tools-empty{border-left:none!important;background:transparent!important;padding:8px 0!important;font:400 13px/1.4 var(--font-body);color:var(--slate-500)}.live-monitor-page__goal{margin:0;font:400 13px/1.5 var(--font-body);color:var(--slate-300)}.live-monitor-page__control-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:var(--space-4);padding:12px 16px;border-radius:var(--radius-lg);background:var(--slate-900);border:1px solid var(--slate-800);box-shadow:0 -8px 24px #03071780}.live-monitor-page__control-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.live-monitor-page__divider{width:1px;height:24px;background:var(--slate-800);flex-shrink:0}.live-monitor-page__ctrl{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--radius-md);font:600 13px/1 var(--font-sans);cursor:pointer;white-space:nowrap}.live-monitor-page__ctrl:disabled{opacity:.45;cursor:not-allowed}.live-monitor-page__ctrl--neutral{background:var(--slate-800);color:var(--gray-200)}.live-monitor-page__ctrl--neutral:hover:not(:disabled){background:var(--slate-700)}.live-monitor-page__ctrl--primary{background:var(--brand-600);color:#fff}.live-monitor-page__ctrl--primary:hover:not(:disabled){background:var(--brand-500)}.live-monitor-page__ctrl--violet{background:#8e51ff2e;color:var(--purple-300)}.live-monitor-page__ctrl--violet:hover:not(:disabled){background:var(--violet-500);color:#fff}.live-monitor-page__ctrl--danger{margin-left:auto;background:var(--red-500);color:#fff}.live-monitor-page__ctrl--danger:hover:not(:disabled){background:var(--red-400)}@media(max-width:960px){.live-monitor-page__grid{grid-template-columns:1fr}.live-monitor-page__header-right{align-items:flex-start;width:100%;margin-left:0}.live-monitor-page__ctrl--danger{margin-left:0;width:100%;justify-content:center}}\n"] }]
|
|
570
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"eds-page eds-page--dark live-monitor-page\">\n @if (loading()) {\n <p class=\"live-monitor-page__loading\">Loading call\u2026</p>\n } @else {\n @if (call(); as c) {\n <header class=\"live-monitor-page__header\">\n <a routerLink=\"../live\" class=\"live-monitor-page__back\" aria-label=\"Back to live calls\">\n <eds-icon name=\"arrow_back\" [size]=\"19\" />\n </a>\n\n <div class=\"live-monitor-page__header-main\">\n <eds-avatar\n [initials]=\"c.initials\"\n tone=\"brand\"\n [gradient]=\"c.matched\"\n [class.live-monitor-page__avatar--ring]=\"c.matched\"\n />\n\n <div class=\"live-monitor-page__caller\">\n <div class=\"live-monitor-page__name-row\">\n <h1 class=\"live-monitor-page__name\">{{ c.name }}</h1>\n <span class=\"live-monitor-page__patient-tag\" [attr.data-kind]=\"c.matched ? 'registered' : 'new'\">\n <eds-icon [name]=\"c.matched ? 'person_check' : 'person_add'\" [size]=\"14\" />\n {{ c.matched ? 'Registered' : 'New' }}\n </span>\n </div>\n <div class=\"live-monitor-page__meta-row\">\n <eds-icon [name]=\"c.direction === 'inbound' ? 'call_received' : 'call_made'\" [size]=\"14\" />\n <span>{{ c.phone }}</span>\n <span class=\"live-monitor-page__sep\">\u00B7</span>\n <span>{{ c.reason }}</span>\n </div>\n </div>\n\n <div class=\"live-monitor-page__header-right\">\n <span class=\"live-monitor-page__duration\">\n <span class=\"live-monitor-page__duration-dot\" aria-hidden=\"true\"></span>\n {{ c.started | edsElapsed }}\n </span>\n </div>\n </div>\n </header>\n\n @if (callEnded()) {\n <div class=\"live-monitor-page__completed-banner\" role=\"status\">\n <eds-icon name=\"check_circle\" [size]=\"18\" />\n Call ended\n </div>\n }\n\n <div class=\"live-monitor-page__grid\">\n <div class=\"live-monitor-page__main\">\n <eds-live-transcript-panel\n [live]=\"isLive()\"\n [paused]=\"isPaused()\"\n [humanTakeover]=\"isTakeover()\"\n [showStaffInput]=\"isTakeover() && !callEnded()\"\n [staffMessage]=\"staffMessage()\"\n (staffMessageChange)=\"staffMessage.set($event)\"\n (sendMessage)=\"sendMessage()\"\n />\n\n @if (callEnded()) {\n <section class=\"live-monitor-page__post-call\">\n <div class=\"live-monitor-page__summary\">\n <h2 class=\"live-monitor-page__section-title\">Call summary</h2>\n @if (summaryLoading()) {\n <p class=\"live-monitor-page__muted\">Generating summary\u2026</p>\n } @else if (summary()) {\n <p>{{ summary() }}</p>\n } @else {\n <p class=\"live-monitor-page__muted\">Summary will appear when processing completes.</p>\n }\n </div>\n <eds-call-recording-player [callId]=\"callId()\" />\n </section>\n }\n </div>\n\n <aside class=\"live-monitor-page__sidebar\">\n @if (!callEnded()) {\n <div class=\"live-monitor-page__orb-wrap\" [attr.data-mode]=\"c.status === 'transferring' ? 'transfer' : 'ai'\">\n <span class=\"live-monitor-page__ring live-monitor-page__ring--1\"></span>\n <span class=\"live-monitor-page__ring live-monitor-page__ring--2\"></span>\n <span class=\"live-monitor-page__orb\">\n <eds-icon name=\"smart_toy\" [size]=\"28\" />\n </span>\n <span class=\"live-monitor-page__confidence\" [attr.data-level]=\"confidenceLevel(c.confidence)\">\n AI confidence {{ c.confidence }}%\n </span>\n </div>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Patient sentiment</h3>\n <div class=\"live-monitor-page__sentiment-bar\">\n <span\n class=\"live-monitor-page__sentiment-fill\"\n [style.width.%]=\"sentimentPercent(c.sentiment)\"\n [attr.data-sentiment]=\"c.sentiment\"\n ></span>\n </div>\n <span class=\"live-monitor-page__sentiment-label\">{{ c.sentiment }}</span>\n </section>\n }\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Tools used</h3>\n <ul class=\"live-monitor-page__tools\">\n @for (tool of liveTools(); track toolTrackKey(tool, $index)) {\n <li [class]=\"toolStateClass(tool.state)\">\n <span class=\"live-monitor-page__tool-time\">{{ tool.t }}</span>\n <div class=\"live-monitor-page__tool-body\">\n <span class=\"live-monitor-page__tool-name\">{{ tool.name }}</span>\n <span class=\"live-monitor-page__tool-result\">{{ tool.result }}</span>\n </div>\n @if (tool.state === 'active') {\n <eds-icon name=\"sync\" [size]=\"16\" class=\"live-monitor-page__tool-spin\" />\n }\n </li>\n } @empty {\n <li class=\"live-monitor-page__tools-empty\">No tool activity yet.</li>\n }\n </ul>\n </section>\n\n <section class=\"live-monitor-page__sidebar-block\">\n <h3 class=\"live-monitor-page__section-title\">Goal</h3>\n <p class=\"live-monitor-page__goal\">{{ c.goal }}</p>\n </section>\n </aside>\n </div>\n\n @if (!callEnded()) {\n <footer class=\"live-monitor-page__control-bar\">\n <div class=\"live-monitor-page__control-group\">\n @if (isTakeover()) {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--violet\" (click)=\"resumeAi()\">\n <eds-icon name=\"smart_toy\" [size]=\"18\" /> Resume AI\n </button>\n } @else {\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--primary\" (click)=\"takeover()\">\n <eds-icon name=\"pan_tool_alt\" [size]=\"18\" /> Take over\n </button>\n }\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"hearing\" [size]=\"18\" /> Listen\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" (click)=\"transfer()\">\n <eds-icon name=\"phone_forwarded\" [size]=\"18\" /> Transfer\n </button>\n </div>\n\n <span class=\"live-monitor-page__divider\" aria-hidden=\"true\"></span>\n\n <div class=\"live-monitor-page__control-group\">\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"person_search\" [size]=\"18\" /> Open chart\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"add_task\" [size]=\"18\" /> Create task\n </button>\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--neutral\" disabled title=\"Coming soon\">\n <eds-icon name=\"edit_note\" [size]=\"18\" /> Add note\n </button>\n </div>\n\n <button type=\"button\" class=\"live-monitor-page__ctrl live-monitor-page__ctrl--danger\" (click)=\"endCall()\">\n <eds-icon name=\"call_end\" [size]=\"18\" /> End call\n </button>\n </footer>\n }\n } @else {\n <p class=\"live-monitor-page__loading\">Call ended or not found.</p>\n }\n }\n</div>\n", styles: [".live-monitor-page{display:flex;flex-direction:column;min-height:calc(100vh - var(--eds-topbar-height));padding:var(--eds-space-5);color:var(--eds-gray-200)}.live-monitor-page__loading{font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-400)}.live-monitor-page__header{display:flex;align-items:flex-start;gap:12px;margin-bottom:var(--eds-space-4)}.live-monitor-page__back{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--eds-radius-md);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);color:var(--eds-gray-300);text-decoration:none;flex-shrink:0}.live-monitor-page__back:hover{background:var(--eds-slate-800)}.live-monitor-page__header-main{flex:1;display:flex;align-items:center;gap:14px;min-width:0;flex-wrap:wrap}.live-monitor-page__avatar--ring{box-shadow:0 0 0 2px var(--eds-brand-500)}.live-monitor-page__caller{flex:1;min-width:200px}.live-monitor-page__name-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.live-monitor-page__name{margin:0;font:700 18px/22px var(--eds-font-sans);color:var(--eds-gray-100)}.live-monitor-page__patient-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--eds-radius-pill);font:500 11px/1 var(--eds-font-mono);border:1px solid transparent}.live-monitor-page__patient-tag[data-kind=registered]{color:var(--eds-green-400);background:#0abf5224;border-color:#0abf5247}.live-monitor-page__patient-tag[data-kind=new]{color:var(--eds-brand-300);background:#3681f424;border-color:#3681f44d}.live-monitor-page__meta-row{display:flex;align-items:center;gap:6px;margin-top:4px;font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400);flex-wrap:wrap}.live-monitor-page__sep{color:var(--eds-slate-600)}.live-monitor-page__header-right{display:flex;flex-direction:column;align-items:flex-end;gap:4px;margin-left:auto}.live-monitor-page__duration{display:inline-flex;align-items:center;gap:8px;font:700 22px/1 var(--eds-font-mono);color:var(--eds-gray-100)}.live-monitor-page__duration-dot{width:9px;height:9px;border-radius:50%;background:var(--eds-green-400);box-shadow:0 0 0 3px #0abf5224}.live-monitor-page__completed-banner{display:flex;align-items:center;gap:8px;padding:10px 14px;margin-bottom:var(--eds-space-4);border-radius:var(--eds-radius-lg);background:#0abf521f;color:var(--eds-green-400);font:400 13px/1.4 var(--eds-font-body)}.live-monitor-page__grid{display:grid;grid-template-columns:1fr 340px;gap:var(--eds-space-4);flex:1;min-height:0}.live-monitor-page__main{display:flex;flex-direction:column;gap:var(--eds-space-4);min-height:0}.live-monitor-page__main-tabs{display:flex;gap:4px;padding:4px;border-radius:var(--eds-radius-md);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);width:fit-content}.live-monitor-page__main-tab{border:none;background:transparent;color:var(--eds-slate-400);font:600 12px/1 var(--eds-font-body);padding:8px 14px;border-radius:var(--eds-radius-sm);cursor:pointer}.live-monitor-page__main-tab--active{background:var(--eds-slate-800);color:var(--eds-gray-100)}.live-monitor-page__api-logs{flex:1;min-height:280px;padding:16px;background:var(--eds-slate-900);border:1px solid var(--eds-slate-800)}.live-monitor-page__post-call{display:flex;flex-direction:column;gap:var(--eds-space-4)}.live-monitor-page__summary{padding:16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);font:400 13px/1.5 var(--eds-font-body);color:var(--eds-slate-300)}.live-monitor-page__muted{color:var(--eds-slate-500);margin:0}.live-monitor-page__sidebar{display:flex;flex-direction:column;gap:var(--eds-space-4);min-height:0}.live-monitor-page__sidebar-block{padding:16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800)}.live-monitor-page__section-title{margin:0 0 12px;font:600 11px/1 var(--eds-font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--eds-slate-400)}.live-monitor-page__orb-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:20px 16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);position:relative}.live-monitor-page__orb{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--eds-brand-500),var(--eds-violet-500));animation:eds-breathe 3s ease-in-out infinite;position:relative;z-index:1}.live-monitor-page__ring{position:absolute;width:64px;height:64px;top:20px;border-radius:50%;border:2px solid var(--eds-brand-400);animation:eds-ring 2s ease-out infinite}.live-monitor-page__ring--2{animation-delay:1s}.live-monitor-page__orb-wrap[data-mode=transfer] .live-monitor-page__orb{background:linear-gradient(135deg,var(--eds-amber-400),var(--eds-violet-500))}.live-monitor-page__confidence{font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400)}.live-monitor-page__confidence[data-level=high]{color:var(--eds-green-400)}.live-monitor-page__confidence[data-level=low]{color:var(--eds-amber-400)}.live-monitor-page__sentiment-bar{height:6px;background:var(--eds-slate-800);border-radius:3px;overflow:hidden;margin-bottom:8px}.live-monitor-page__sentiment-fill{display:block;height:100%;border-radius:3px;background:var(--eds-green-400);transition:width .3s ease}.live-monitor-page__sentiment-fill[data-sentiment=frustrated],.live-monitor-page__sentiment-fill[data-sentiment=urgent]{background:var(--eds-red-400)}.live-monitor-page__sentiment-fill[data-sentiment=neutral]{background:var(--eds-amber-400)}.live-monitor-page__sentiment-label{font:500 12px/1 var(--eds-font-mono);color:var(--eds-slate-400);text-transform:capitalize}.live-monitor-page__tools{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto}.live-monitor-page__tools li{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:10px;border-radius:var(--eds-radius-md);background:var(--eds-slate-950);border-left:3px solid var(--eds-slate-700)}.live-monitor-page__tool-time{font:500 11px/1 var(--eds-font-mono);color:var(--eds-slate-500);white-space:nowrap}.live-monitor-page__tool-body{display:flex;flex-direction:column;gap:2px;min-width:0}.live-monitor-page__tool-name{font:600 13px/1.2 var(--eds-font-sans);color:var(--eds-gray-100)}.live-monitor-page__tool-result{font:400 12px/1.4 var(--eds-font-body);color:var(--eds-slate-400)}.live-monitor-page__tool-tech{font:500 10px/1 var(--eds-font-mono);color:var(--eds-slate-500)}.live-monitor-page__tool-spin{animation:eds-spin 1s linear infinite;color:var(--eds-brand-400)}.live-monitor-page__tool--ok{border-left-color:var(--eds-green-400)}.live-monitor-page__tool--warn{border-left-color:var(--eds-amber-400)}.live-monitor-page__tool--error{border-left-color:var(--eds-red-400)}.live-monitor-page__tool--active{border-left-color:var(--eds-brand-400)}.live-monitor-page__tools-empty{border-left:none!important;background:transparent!important;padding:8px 0!important;font:400 13px/1.4 var(--eds-font-body);color:var(--eds-slate-500)}.live-monitor-page__goal{margin:0;font:400 13px/1.5 var(--eds-font-body);color:var(--eds-slate-300)}.live-monitor-page__control-bar{position:sticky;bottom:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:var(--eds-space-4);padding:12px 16px;border-radius:var(--eds-radius-lg);background:var(--eds-slate-900);border:1px solid var(--eds-slate-800);box-shadow:0 -8px 24px #03071780}.live-monitor-page__control-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.live-monitor-page__divider{width:1px;height:24px;background:var(--eds-slate-800);flex-shrink:0}.live-monitor-page__ctrl{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border:none;border-radius:var(--eds-radius-md);font:600 13px/1 var(--eds-font-sans);cursor:pointer;white-space:nowrap}.live-monitor-page__ctrl:disabled{opacity:.45;cursor:not-allowed}.live-monitor-page__ctrl--neutral{background:var(--eds-slate-800);color:var(--eds-gray-200)}.live-monitor-page__ctrl--neutral:hover:not(:disabled){background:var(--eds-slate-700)}.live-monitor-page__ctrl--primary{background:var(--eds-brand-600);color:#fff}.live-monitor-page__ctrl--primary:hover:not(:disabled){background:var(--eds-brand-500)}.live-monitor-page__ctrl--violet{background:#8e51ff2e;color:var(--eds-purple-300)}.live-monitor-page__ctrl--violet:hover:not(:disabled){background:var(--eds-violet-500);color:#fff}.live-monitor-page__ctrl--danger{margin-left:auto;background:var(--eds-red-500);color:#fff}.live-monitor-page__ctrl--danger:hover:not(:disabled){background:var(--eds-red-400)}@media(max-width:960px){.live-monitor-page__grid{grid-template-columns:1fr}.live-monitor-page__header-right{align-items:flex-start;width:100%;margin-left:0}.live-monitor-page__ctrl--danger{margin-left:0;width:100%;justify-content:center}}\n"] }]
|
|
571
571
|
}], ctorParameters: () => [] });
|
|
572
572
|
|
|
573
573
|
export { LiveMonitorPageComponent };
|
|
574
|
-
//# sourceMappingURL=edvak99-voice-receptionist-widget-live-monitor-page.component-
|
|
574
|
+
//# sourceMappingURL=edvak99-voice-receptionist-widget-live-monitor-page.component-DNpLFqBw.mjs.map
|