@edvak99/voice-receptionist-widget 1.1.3 → 1.1.5
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/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-pQM1L7lO.mjs +307 -0
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-pQM1L7lO.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs → edvak99-voice-receptionist-widget-ai-receptionist-api.service-srM0jC46.mjs} +1275 -561
- package/fesm2022/edvak99-voice-receptionist-widget-ai-receptionist-api.service-srM0jC46.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-B6O-PZHz.mjs +278 -0
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-B6O-PZHz.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-0rW-PPWM.mjs +417 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-0rW-PPWM.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cec1ngRf.mjs +194 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cec1ngRf.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-DGg_nI--.mjs +111 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-DGg_nI--.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cj2XTeK4.mjs → edvak99-voice-receptionist-widget-call-review.service-j_XV5a8S.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cj2XTeK4.mjs.map → edvak99-voice-receptionist-widget-call-review.service-j_XV5a8S.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs +21 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-DD0tMAah.mjs +440 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-DD0tMAah.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-elapsed.pipe-BgLsnq6A.mjs → edvak99-voice-receptionist-widget-dashboard-socket.service-CsfNZeQ4.mjs} +5 -21
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-socket.service-CsfNZeQ4.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-BJs_TH8X.mjs +38 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-BJs_TH8X.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-button.component-CAfTt7zB.mjs +27 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-button.component-CAfTt7zB.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BFCiJOT3.mjs +22 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BFCiJOT3.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-list.service-0kGWO6sh.mjs → edvak99-voice-receptionist-widget-eds-pulse-dot.component-DymAM4YH.mjs} +15 -5
- package/fesm2022/edvak99-voice-receptionist-widget-eds-pulse-dot.component-DymAM4YH.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-JWqRMt9T.mjs +203 -0
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-JWqRMt9T.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-D5znr-Sx.mjs +81 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-D5znr-Sx.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-1elUtWOw.mjs +1059 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-1elUtWOw.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-modal.component-Cb-FoQ1N.mjs +48 -0
- package/fesm2022/edvak99-voice-receptionist-widget-modal.component-Cb-FoQ1N.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs +127 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CwLxW1W9.mjs +268 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CwLxW1W9.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-DAr4wuUk.mjs +968 -0
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-DAr4wuUk.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-BGSupnFa.mjs +317 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-BGSupnFa.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-5iG9eQRi.mjs +47 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-5iG9eQRi.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
- package/lib/components/call-conversation-panel/call-conversation-panel.component.d.ts +9 -7
- package/lib/components/call-tasks-panel/call-tasks-panel.component.d.ts +8 -8
- package/lib/components/knowledge-test-modal/knowledge-test-modal.component.d.ts +28 -0
- package/lib/components/live-transcript-panel/live-transcript-panel.component.d.ts +7 -7
- package/lib/components/outbound-dial-modal/outbound-dial-modal.component.d.ts +26 -0
- package/lib/layout/eds-module-nav.component.d.ts +0 -3
- package/lib/mocks/agent-activity.seed.d.ts +2 -0
- package/lib/models/agent-activity.types.d.ts +54 -0
- package/lib/models/ai-receptionist.types.d.ts +25 -0
- package/lib/models/api-dto.types.d.ts +18 -0
- package/lib/models/live-transcript.types.d.ts +2 -1
- package/lib/models/outbound-patient.types.d.ts +23 -0
- package/lib/models/outbound-purpose.types.d.ts +2 -0
- package/lib/models/staff-media.types.d.ts +36 -0
- package/lib/pages/activities-page/activities-page.component.d.ts +57 -0
- package/lib/pages/analytics-page/analytics-page.component.d.ts +38 -14
- package/lib/pages/call-history-detail-page/call-history-detail-page.component.d.ts +2 -3
- package/lib/pages/call-history-page/call-history-page.component.d.ts +9 -6
- package/lib/pages/dashboard-page/dashboard-page.component.d.ts +12 -8
- package/lib/pages/live-calls-page/live-calls-page.component.d.ts +14 -24
- package/lib/pages/live-monitor-page/live-monitor-page.component.d.ts +34 -1
- package/lib/pages/settings-page/settings-fields.config.d.ts +16 -0
- package/lib/pages/settings-page/settings-page.component.d.ts +48 -14
- package/lib/services/ai-receptionist-api.mock.d.ts +34 -0
- package/lib/services/ai-receptionist-api.service.d.ts +56 -1
- package/lib/services/live-transcript.service.d.ts +1 -0
- package/lib/services/staff-media.service.d.ts +52 -0
- package/lib/ui/eds-avatar.component.d.ts +5 -2
- package/lib/ui/eds-button.component.d.ts +1 -1
- package/lib/utils/call-history-display.util.d.ts +21 -0
- package/lib/utils/outbound-purpose.util.d.ts +19 -0
- package/lib/utils/transcript-timing.util.d.ts +1 -1
- package/lib/utils/welcome-message.util.d.ts +1 -1
- package/package.json +2 -1
- package/styles/chat-ui.scss +0 -1
- package/styles/eds.scss +95 -76
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-Dsujn5az.mjs +0 -113
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-Dsujn5az.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-xoLlHj8K.mjs +0 -67
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-xoLlHj8K.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-2K9W77As.mjs +0 -316
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-2K9W77As.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-B5AnEjoh.mjs +0 -174
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-B5AnEjoh.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-B8_qp7Fe.mjs +0 -110
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-B8_qp7Fe.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-BgsBCKgZ.mjs +0 -70
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-BgsBCKgZ.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-BNdnbAVM.mjs +0 -248
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-BNdnbAVM.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-CbphhP6o.mjs +0 -27
- package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-CbphhP6o.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BgLsnq6A.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-BngGx_Lc.mjs +0 -609
- package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-BngGx_Lc.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-list.service-0kGWO6sh.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DfLmK89M.mjs +0 -115
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DfLmK89M.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-DNpLFqBw.mjs +0 -574
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-DNpLFqBw.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs +0 -54
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CYSZ832p.mjs +0 -265
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CYSZ832p.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-B9nv6wtB.mjs +0 -509
- package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-B9nv6wtB.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs +0 -52
- package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-DXxjMVUv.mjs +0 -266
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-DXxjMVUv.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs +0 -45
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs.map +0 -1
- package/lib/knowledge/components/faq-empty-state/faq-empty-state.component.d.ts +0 -22
- package/lib/knowledge/components/faq-form/faq-form.component.d.ts +0 -27
- package/lib/knowledge/components/faq-search-tester/faq-search-tester.component.d.ts +0 -17
- package/lib/knowledge/mocks/practice-faq.seed.d.ts +0 -2
- package/lib/knowledge/models/practice-faq.model.d.ts +0 -50
- package/lib/knowledge/pages/knowledge-hub.page.d.ts +0 -54
- package/lib/knowledge/services/practice-faq-api.mock.d.ts +0 -16
- package/lib/knowledge/services/practice-faq-api.service.d.ts +0 -26
- package/lib/knowledge/utils/faq.util.d.ts +0 -3
- package/lib/layout/eds-topbar.component.d.ts +0 -29
- package/lib/pages/audit-page/audit-page.component.d.ts +0 -21
- package/lib/ui/eds-waveform.component.d.ts +0 -8
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
import { A as AiReceptionistApiService, a as EdsBadgeComponent, E as EdsButtonComponent, b as EdsIconComponent } from './edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-Dn0GrZ6_.mjs';
|
|
4
|
-
|
|
5
|
-
class WizardPageComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.api = inject(AiReceptionistApiService);
|
|
8
|
-
this.setup = signal(null);
|
|
9
|
-
this.activeStep = signal(1);
|
|
10
|
-
this.loading = signal(true);
|
|
11
|
-
this.activated = signal(false);
|
|
12
|
-
this.completedCount = computed(() => {
|
|
13
|
-
return this.setup()?.steps.filter((s) => s.complete).length ?? 0;
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
ngOnInit() {
|
|
17
|
-
this.api.getSetup().subscribe(({ data }) => {
|
|
18
|
-
this.setup.set(data);
|
|
19
|
-
const firstIncomplete = data.steps.find((s) => !s.complete);
|
|
20
|
-
this.activeStep.set(firstIncomplete?.id ?? 1);
|
|
21
|
-
this.loading.set(false);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
selectStep(step) {
|
|
25
|
-
this.activeStep.set(step.id);
|
|
26
|
-
}
|
|
27
|
-
progressPercent() {
|
|
28
|
-
return this.setup()?.readiness ?? 0;
|
|
29
|
-
}
|
|
30
|
-
activate() {
|
|
31
|
-
this.api.activateSetup().subscribe(() => {
|
|
32
|
-
this.api.setAgentOn(true);
|
|
33
|
-
this.activated.set(true);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: WizardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: WizardPageComponent, isStandalone: true, selector: "eds-wizard-page", ngImport: i0, template: "<div class=\"eds-page wizard-page\">\n <header class=\"wizard-page__header\">\n <div>\n <h1 class=\"eds-h1\">Setup wizard</h1>\n <p class=\"eds-body-sm\">Configure and activate your AI receptionist</p>\n </div>\n <div class=\"wizard-page__progress-wrap\">\n <span class=\"eds-label\">Readiness</span>\n <div class=\"wizard-page__progress\">\n <span class=\"wizard-page__progress-fill\" [style.width.%]=\"progressPercent()\"></span>\n </div>\n <span class=\"eds-body-sm-bold\">{{ progressPercent() }}%</span>\n </div>\n </header>\n\n @if (loading()) {\n <p class=\"eds-body-sm\">Loading setup\u2026</p>\n } @else if (setup()) {\n <div class=\"wizard-page__layout\">\n <nav class=\"eds-card wizard-page__steps\">\n @for (step of setup()!.steps; track step.id) {\n <button\n type=\"button\"\n class=\"wizard-page__step\"\n [class.wizard-page__step--active]=\"activeStep() === step.id\"\n [class.wizard-page__step--done]=\"step.complete\"\n (click)=\"selectStep(step)\"\n >\n <span class=\"wizard-page__step-num\">\n @if (step.complete) {\n <eds-icon name=\"check\" [size]=\"16\" />\n } @else {\n {{ step.id }}\n }\n </span>\n <div>\n <span class=\"eds-body-sm-bold\">{{ step.title }}</span>\n <span class=\"eds-body-sm\">{{ step.description }}</span>\n </div>\n </button>\n }\n </nav>\n\n <article class=\"eds-card wizard-page__content\">\n @for (step of setup()!.steps; track step.id) {\n @if (activeStep() === step.id) {\n <header class=\"wizard-page__content-head\">\n <h2 class=\"eds-h2\">Step {{ step.id }}: {{ step.title }}</h2>\n <eds-badge [tone]=\"step.complete ? 'pos' : 'notice'\">\n {{ step.complete ? 'Complete' : 'Incomplete' }}\n </eds-badge>\n </header>\n <p class=\"eds-body\">{{ step.description }}</p>\n }\n }\n\n <section class=\"wizard-page__test\">\n <h3 class=\"eds-h3\">Test transcript preview</h3>\n <div class=\"wizard-page__transcript\">\n @for (line of setup()!.testTranscript; track $index) {\n <div class=\"wizard-page__line\" [attr.data-who]=\"line.who\">\n <span class=\"eds-label\">{{ line.who }}</span>\n <p>{{ line.text }}</p>\n </div>\n }\n </div>\n </section>\n\n <footer class=\"wizard-page__footer\">\n <p class=\"eds-body-sm\">\n {{ completedCount() }} of {{ setup()!.steps.length }} steps complete\n </p>\n @if (activated()) {\n <eds-badge tone=\"pos\">Agent activated</eds-badge>\n } @else {\n <eds-button variant=\"primary\" (click)=\"activate()\">\n <eds-icon name=\"rocket_launch\" [size]=\"18\" /> Activate AI receptionist\n </eds-button>\n }\n </footer>\n </article>\n </div>\n }\n</div>\n", styles: [".wizard-page__header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.wizard-page__progress-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-width:200px}.wizard-page__progress{width:200px;height:8px;background:var(--eds-surface-l2);border-radius:4px;overflow:hidden}.wizard-page__progress-fill{display:block;height:100%;background:linear-gradient(90deg,var(--eds-brand-500),var(--eds-violet-500));border-radius:4px;transition:width .3s ease}.wizard-page__layout{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start}.wizard-page__steps{padding:8px;display:flex;flex-direction:column;gap:4px;max-height:600px;overflow-y:auto}.wizard-page__step{display:flex;gap:10px;align-items:flex-start;padding:10px;border:none;background:none;border-radius:var(--eds-radius-md);text-align:left;cursor:pointer;width:100%}.wizard-page__step:hover{background:var(--eds-surface-l1)}.wizard-page__step--active{background:#3681f41a;outline:1px solid rgba(54,129,244,.25)}.wizard-page__step--done .wizard-page__step-num{background:var(--eds-green-500);color:#fff}.wizard-page__step div{display:flex;flex-direction:column;gap:2px}.wizard-page__step-num{width:28px;height:28px;border-radius:50%;background:var(--eds-surface-l2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}.wizard-page__content{padding:20px}.wizard-page__content-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.wizard-page__test{margin-top:24px;padding-top:20px;border-top:1px solid var(--eds-border-default)}.wizard-page__transcript{display:flex;flex-direction:column;gap:10px;margin-top:12px}.wizard-page__line{padding:10px 12px;border-radius:var(--eds-radius-md);background:var(--eds-surface-l1)}.wizard-page__line[data-who=ai]{border-left:3px solid var(--eds-brand-500)}.wizard-page__line p{margin:4px 0 0;font-size:14px}.wizard-page__footer{display:flex;align-items:center;justify-content:space-between;margin-top:24px;padding-top:16px;border-top:1px solid var(--eds-border-default)}@media(max-width:900px){.wizard-page__layout{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "component", type: EdsBadgeComponent, selector: "eds-badge", inputs: ["tone"] }, { kind: "component", type: EdsButtonComponent, selector: "eds-button", inputs: ["variant", "type", "disabled"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
38
|
-
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: WizardPageComponent, decorators: [{
|
|
40
|
-
type: Component,
|
|
41
|
-
args: [{ selector: 'eds-wizard-page', imports: [EdsBadgeComponent, EdsButtonComponent, EdsIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"eds-page wizard-page\">\n <header class=\"wizard-page__header\">\n <div>\n <h1 class=\"eds-h1\">Setup wizard</h1>\n <p class=\"eds-body-sm\">Configure and activate your AI receptionist</p>\n </div>\n <div class=\"wizard-page__progress-wrap\">\n <span class=\"eds-label\">Readiness</span>\n <div class=\"wizard-page__progress\">\n <span class=\"wizard-page__progress-fill\" [style.width.%]=\"progressPercent()\"></span>\n </div>\n <span class=\"eds-body-sm-bold\">{{ progressPercent() }}%</span>\n </div>\n </header>\n\n @if (loading()) {\n <p class=\"eds-body-sm\">Loading setup\u2026</p>\n } @else if (setup()) {\n <div class=\"wizard-page__layout\">\n <nav class=\"eds-card wizard-page__steps\">\n @for (step of setup()!.steps; track step.id) {\n <button\n type=\"button\"\n class=\"wizard-page__step\"\n [class.wizard-page__step--active]=\"activeStep() === step.id\"\n [class.wizard-page__step--done]=\"step.complete\"\n (click)=\"selectStep(step)\"\n >\n <span class=\"wizard-page__step-num\">\n @if (step.complete) {\n <eds-icon name=\"check\" [size]=\"16\" />\n } @else {\n {{ step.id }}\n }\n </span>\n <div>\n <span class=\"eds-body-sm-bold\">{{ step.title }}</span>\n <span class=\"eds-body-sm\">{{ step.description }}</span>\n </div>\n </button>\n }\n </nav>\n\n <article class=\"eds-card wizard-page__content\">\n @for (step of setup()!.steps; track step.id) {\n @if (activeStep() === step.id) {\n <header class=\"wizard-page__content-head\">\n <h2 class=\"eds-h2\">Step {{ step.id }}: {{ step.title }}</h2>\n <eds-badge [tone]=\"step.complete ? 'pos' : 'notice'\">\n {{ step.complete ? 'Complete' : 'Incomplete' }}\n </eds-badge>\n </header>\n <p class=\"eds-body\">{{ step.description }}</p>\n }\n }\n\n <section class=\"wizard-page__test\">\n <h3 class=\"eds-h3\">Test transcript preview</h3>\n <div class=\"wizard-page__transcript\">\n @for (line of setup()!.testTranscript; track $index) {\n <div class=\"wizard-page__line\" [attr.data-who]=\"line.who\">\n <span class=\"eds-label\">{{ line.who }}</span>\n <p>{{ line.text }}</p>\n </div>\n }\n </div>\n </section>\n\n <footer class=\"wizard-page__footer\">\n <p class=\"eds-body-sm\">\n {{ completedCount() }} of {{ setup()!.steps.length }} steps complete\n </p>\n @if (activated()) {\n <eds-badge tone=\"pos\">Agent activated</eds-badge>\n } @else {\n <eds-button variant=\"primary\" (click)=\"activate()\">\n <eds-icon name=\"rocket_launch\" [size]=\"18\" /> Activate AI receptionist\n </eds-button>\n }\n </footer>\n </article>\n </div>\n }\n</div>\n", styles: [".wizard-page__header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.wizard-page__progress-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-width:200px}.wizard-page__progress{width:200px;height:8px;background:var(--eds-surface-l2);border-radius:4px;overflow:hidden}.wizard-page__progress-fill{display:block;height:100%;background:linear-gradient(90deg,var(--eds-brand-500),var(--eds-violet-500));border-radius:4px;transition:width .3s ease}.wizard-page__layout{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start}.wizard-page__steps{padding:8px;display:flex;flex-direction:column;gap:4px;max-height:600px;overflow-y:auto}.wizard-page__step{display:flex;gap:10px;align-items:flex-start;padding:10px;border:none;background:none;border-radius:var(--eds-radius-md);text-align:left;cursor:pointer;width:100%}.wizard-page__step:hover{background:var(--eds-surface-l1)}.wizard-page__step--active{background:#3681f41a;outline:1px solid rgba(54,129,244,.25)}.wizard-page__step--done .wizard-page__step-num{background:var(--eds-green-500);color:#fff}.wizard-page__step div{display:flex;flex-direction:column;gap:2px}.wizard-page__step-num{width:28px;height:28px;border-radius:50%;background:var(--eds-surface-l2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}.wizard-page__content{padding:20px}.wizard-page__content-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.wizard-page__test{margin-top:24px;padding-top:20px;border-top:1px solid var(--eds-border-default)}.wizard-page__transcript{display:flex;flex-direction:column;gap:10px;margin-top:12px}.wizard-page__line{padding:10px 12px;border-radius:var(--eds-radius-md);background:var(--eds-surface-l1)}.wizard-page__line[data-who=ai]{border-left:3px solid var(--eds-brand-500)}.wizard-page__line p{margin:4px 0 0;font-size:14px}.wizard-page__footer{display:flex;align-items:center;justify-content:space-between;margin-top:24px;padding-top:16px;border-top:1px solid var(--eds-border-default)}@media(max-width:900px){.wizard-page__layout{grid-template-columns:1fr}}\n"] }]
|
|
42
|
-
}] });
|
|
43
|
-
|
|
44
|
-
export { WizardPageComponent };
|
|
45
|
-
//# sourceMappingURL=edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edvak99-voice-receptionist-widget-wizard-page.component-C1Z6yC0q.mjs","sources":["../../../projects/voice-receptionist-widget/src/lib/pages/wizard-page/wizard-page.component.ts","../../../projects/voice-receptionist-widget/src/lib/pages/wizard-page/wizard-page.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal } from '@angular/core';\n\nimport { SetupData, SetupStep } from '../../models/ai-receptionist.types';\nimport { AiReceptionistApiService } from '../../services/ai-receptionist-api.service';\nimport { EdsBadgeComponent } from '../../ui/eds-badge.component';\nimport { EdsButtonComponent } from '../../ui/eds-button.component';\nimport { EdsIconComponent } from '../../ui/eds-icon.component';\n\n@Component({\n selector: 'eds-wizard-page',\n imports: [EdsBadgeComponent, EdsButtonComponent, EdsIconComponent],\n templateUrl: './wizard-page.component.html',\n styleUrl: './wizard-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WizardPageComponent implements OnInit {\n private readonly api = inject(AiReceptionistApiService);\n\n protected readonly setup = signal<SetupData | null>(null);\n protected readonly activeStep = signal(1);\n protected readonly loading = signal(true);\n protected readonly activated = signal(false);\n\n protected readonly completedCount = computed(() => {\n return this.setup()?.steps.filter((s) => s.complete).length ?? 0;\n });\n\n ngOnInit(): void {\n this.api.getSetup().subscribe(({ data }) => {\n this.setup.set(data);\n const firstIncomplete = data.steps.find((s) => !s.complete);\n this.activeStep.set(firstIncomplete?.id ?? 1);\n this.loading.set(false);\n });\n }\n\n protected selectStep(step: SetupStep): void {\n this.activeStep.set(step.id);\n }\n\n protected progressPercent(): number {\n return this.setup()?.readiness ?? 0;\n }\n\n protected activate(): void {\n this.api.activateSetup().subscribe(() => {\n this.api.setAgentOn(true);\n this.activated.set(true);\n });\n }\n}\n","<div class=\"eds-page wizard-page\">\n <header class=\"wizard-page__header\">\n <div>\n <h1 class=\"eds-h1\">Setup wizard</h1>\n <p class=\"eds-body-sm\">Configure and activate your AI receptionist</p>\n </div>\n <div class=\"wizard-page__progress-wrap\">\n <span class=\"eds-label\">Readiness</span>\n <div class=\"wizard-page__progress\">\n <span class=\"wizard-page__progress-fill\" [style.width.%]=\"progressPercent()\"></span>\n </div>\n <span class=\"eds-body-sm-bold\">{{ progressPercent() }}%</span>\n </div>\n </header>\n\n @if (loading()) {\n <p class=\"eds-body-sm\">Loading setup…</p>\n } @else if (setup()) {\n <div class=\"wizard-page__layout\">\n <nav class=\"eds-card wizard-page__steps\">\n @for (step of setup()!.steps; track step.id) {\n <button\n type=\"button\"\n class=\"wizard-page__step\"\n [class.wizard-page__step--active]=\"activeStep() === step.id\"\n [class.wizard-page__step--done]=\"step.complete\"\n (click)=\"selectStep(step)\"\n >\n <span class=\"wizard-page__step-num\">\n @if (step.complete) {\n <eds-icon name=\"check\" [size]=\"16\" />\n } @else {\n {{ step.id }}\n }\n </span>\n <div>\n <span class=\"eds-body-sm-bold\">{{ step.title }}</span>\n <span class=\"eds-body-sm\">{{ step.description }}</span>\n </div>\n </button>\n }\n </nav>\n\n <article class=\"eds-card wizard-page__content\">\n @for (step of setup()!.steps; track step.id) {\n @if (activeStep() === step.id) {\n <header class=\"wizard-page__content-head\">\n <h2 class=\"eds-h2\">Step {{ step.id }}: {{ step.title }}</h2>\n <eds-badge [tone]=\"step.complete ? 'pos' : 'notice'\">\n {{ step.complete ? 'Complete' : 'Incomplete' }}\n </eds-badge>\n </header>\n <p class=\"eds-body\">{{ step.description }}</p>\n }\n }\n\n <section class=\"wizard-page__test\">\n <h3 class=\"eds-h3\">Test transcript preview</h3>\n <div class=\"wizard-page__transcript\">\n @for (line of setup()!.testTranscript; track $index) {\n <div class=\"wizard-page__line\" [attr.data-who]=\"line.who\">\n <span class=\"eds-label\">{{ line.who }}</span>\n <p>{{ line.text }}</p>\n </div>\n }\n </div>\n </section>\n\n <footer class=\"wizard-page__footer\">\n <p class=\"eds-body-sm\">\n {{ completedCount() }} of {{ setup()!.steps.length }} steps complete\n </p>\n @if (activated()) {\n <eds-badge tone=\"pos\">Agent activated</eds-badge>\n } @else {\n <eds-button variant=\"primary\" (click)=\"activate()\">\n <eds-icon name=\"rocket_launch\" [size]=\"18\" /> Activate AI receptionist\n </eds-button>\n }\n </footer>\n </article>\n </div>\n }\n</div>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { FAQ_STARTER_TEMPLATES } from '../../models/practice-faq.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class FaqEmptyStateComponent {
|
|
5
|
-
protected readonly starters: {
|
|
6
|
-
label: string;
|
|
7
|
-
question: string;
|
|
8
|
-
answer: string;
|
|
9
|
-
category: string;
|
|
10
|
-
}[];
|
|
11
|
-
readonly add: EventEmitter<void>;
|
|
12
|
-
readonly useTemplate: EventEmitter<{
|
|
13
|
-
label: string;
|
|
14
|
-
question: string;
|
|
15
|
-
answer: string;
|
|
16
|
-
category: string;
|
|
17
|
-
}>;
|
|
18
|
-
protected onAdd(): void;
|
|
19
|
-
protected onTemplate(t: (typeof FAQ_STARTER_TEMPLATES)[number]): void;
|
|
20
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FaqEmptyStateComponent, never>;
|
|
21
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FaqEmptyStateComponent, "eds-faq-empty-state", never, {}, { "add": "add"; "useTemplate": "useTemplate"; }, never, never, true, never>;
|
|
22
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, OnChanges } from '@angular/core';
|
|
2
|
-
import { CreatePracticeFaqRequest, PracticeFaq, UpdatePracticeFaqRequest } from '../../models/practice-faq.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class FaqFormComponent implements OnChanges {
|
|
5
|
-
open: boolean;
|
|
6
|
-
faq: PracticeFaq | null;
|
|
7
|
-
initialQuestion: string;
|
|
8
|
-
initialAnswer: string;
|
|
9
|
-
initialCategory: string;
|
|
10
|
-
readonly closed: EventEmitter<void>;
|
|
11
|
-
readonly saved: EventEmitter<CreatePracticeFaqRequest | UpdatePracticeFaqRequest>;
|
|
12
|
-
protected readonly categories: readonly ["hours", "location", "parking", "insurance", "services", "policies", "general"];
|
|
13
|
-
protected readonly saving: import("@angular/core").WritableSignal<boolean>;
|
|
14
|
-
protected readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
15
|
-
protected question: string;
|
|
16
|
-
protected answer: string;
|
|
17
|
-
protected category: string;
|
|
18
|
-
protected sortOrder: number;
|
|
19
|
-
protected isActive: boolean;
|
|
20
|
-
protected get isEdit(): boolean;
|
|
21
|
-
ngOnChanges(): void;
|
|
22
|
-
protected close(): void;
|
|
23
|
-
protected submit(): void;
|
|
24
|
-
private resetForm;
|
|
25
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FaqFormComponent, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FaqFormComponent, "eds-faq-form", never, { "open": { "alias": "open"; "required": false; }; "faq": { "alias": "faq"; "required": false; }; "initialQuestion": { "alias": "initialQuestion"; "required": false; }; "initialAnswer": { "alias": "initialAnswer"; "required": false; }; "initialCategory": { "alias": "initialCategory"; "required": false; }; }, { "closed": "closed"; "saved": "saved"; }, never, never, true, never>;
|
|
27
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { PracticeFaqSearchItem } from '../../models/practice-faq.model';
|
|
2
|
-
import { categoryBadgeClass, scorePercent } from '../../utils/faq.util';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class FaqSearchTesterComponent {
|
|
5
|
-
private readonly api;
|
|
6
|
-
protected query: string;
|
|
7
|
-
protected readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
8
|
-
protected readonly searched: import("@angular/core").WritableSignal<boolean>;
|
|
9
|
-
protected readonly found: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
-
protected readonly results: import("@angular/core").WritableSignal<PracticeFaqSearchItem[]>;
|
|
11
|
-
protected readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
12
|
-
protected categoryClass: typeof categoryBadgeClass;
|
|
13
|
-
protected scorePercent: typeof scorePercent;
|
|
14
|
-
protected search(): void;
|
|
15
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FaqSearchTesterComponent, never>;
|
|
16
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FaqSearchTesterComponent, "eds-faq-search-tester", never, {}, {}, never, never, true, never>;
|
|
17
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
export interface PracticeFaq {
|
|
2
|
-
faqId: string;
|
|
3
|
-
question: string;
|
|
4
|
-
answer: string;
|
|
5
|
-
category: string | null;
|
|
6
|
-
sortOrder: number;
|
|
7
|
-
isActive: boolean;
|
|
8
|
-
hasEmbedding: boolean;
|
|
9
|
-
createdAt: string;
|
|
10
|
-
updatedAt: string;
|
|
11
|
-
}
|
|
12
|
-
export interface CreatePracticeFaqRequest {
|
|
13
|
-
question: string;
|
|
14
|
-
answer: string;
|
|
15
|
-
category?: string;
|
|
16
|
-
sortOrder?: number;
|
|
17
|
-
isActive?: boolean;
|
|
18
|
-
}
|
|
19
|
-
export interface UpdatePracticeFaqRequest {
|
|
20
|
-
question?: string;
|
|
21
|
-
answer?: string;
|
|
22
|
-
category?: string | null;
|
|
23
|
-
sortOrder?: number;
|
|
24
|
-
isActive?: boolean;
|
|
25
|
-
}
|
|
26
|
-
export interface PracticeFaqSearchResult {
|
|
27
|
-
found: boolean;
|
|
28
|
-
items: PracticeFaqSearchItem[];
|
|
29
|
-
}
|
|
30
|
-
export interface PracticeFaqSearchItem {
|
|
31
|
-
faqId: string;
|
|
32
|
-
question: string;
|
|
33
|
-
answer: string;
|
|
34
|
-
category: string | null;
|
|
35
|
-
score: number;
|
|
36
|
-
}
|
|
37
|
-
export interface PracticeFaqListResponse {
|
|
38
|
-
items: PracticeFaq[];
|
|
39
|
-
total?: number;
|
|
40
|
-
page?: number;
|
|
41
|
-
limit?: number;
|
|
42
|
-
}
|
|
43
|
-
export type FaqActiveFilter = 'all' | 'active' | 'inactive';
|
|
44
|
-
export declare const FAQ_CATEGORY_PRESETS: readonly ["hours", "location", "parking", "insurance", "services", "policies", "general"];
|
|
45
|
-
export declare const FAQ_STARTER_TEMPLATES: Array<{
|
|
46
|
-
label: string;
|
|
47
|
-
question: string;
|
|
48
|
-
answer: string;
|
|
49
|
-
category: string;
|
|
50
|
-
}>;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { CreatePracticeFaqRequest, FaqActiveFilter, PracticeFaq, UpdatePracticeFaqRequest } from '../models/practice-faq.model';
|
|
3
|
-
import { categoryBadgeClass, truncateText } from '../utils/faq.util';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class KnowledgeHubPageComponent implements OnInit {
|
|
6
|
-
private readonly api;
|
|
7
|
-
private readonly toast;
|
|
8
|
-
protected readonly pageSize = 50;
|
|
9
|
-
protected readonly pageFaqs: import("@angular/core").WritableSignal<PracticeFaq[]>;
|
|
10
|
-
protected readonly total: import("@angular/core").WritableSignal<number>;
|
|
11
|
-
protected readonly page: import("@angular/core").WritableSignal<number>;
|
|
12
|
-
protected readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
13
|
-
protected readonly error: import("@angular/core").WritableSignal<string | null>;
|
|
14
|
-
protected readonly activeFilter: import("@angular/core").WritableSignal<FaqActiveFilter>;
|
|
15
|
-
protected readonly categoryFilter: import("@angular/core").WritableSignal<string>;
|
|
16
|
-
protected readonly listSearch: import("@angular/core").WritableSignal<string>;
|
|
17
|
-
protected readonly formOpen: import("@angular/core").WritableSignal<boolean>;
|
|
18
|
-
protected readonly editing: import("@angular/core").WritableSignal<PracticeFaq | null>;
|
|
19
|
-
protected readonly formSeed: import("@angular/core").WritableSignal<{
|
|
20
|
-
question: string;
|
|
21
|
-
answer: string;
|
|
22
|
-
category: string;
|
|
23
|
-
}>;
|
|
24
|
-
protected readonly categories: readonly ["hours", "location", "parking", "insurance", "services", "policies", "general"];
|
|
25
|
-
protected readonly activeTabs: {
|
|
26
|
-
id: FaqActiveFilter;
|
|
27
|
-
label: string;
|
|
28
|
-
}[];
|
|
29
|
-
/** Client filters still applied on the current page (category / local search / inactive). */
|
|
30
|
-
protected readonly faqs: import("@angular/core").Signal<PracticeFaq[]>;
|
|
31
|
-
protected categoryClass: typeof categoryBadgeClass;
|
|
32
|
-
protected truncate: typeof truncateText;
|
|
33
|
-
ngOnInit(): void;
|
|
34
|
-
protected load(): void;
|
|
35
|
-
protected setActiveFilter(id: FaqActiveFilter): void;
|
|
36
|
-
protected toggleCategory(cat: string): void;
|
|
37
|
-
protected isCategorySelected(cat: string): boolean;
|
|
38
|
-
protected totalPages(): number;
|
|
39
|
-
protected prevPage(): void;
|
|
40
|
-
protected nextPage(): void;
|
|
41
|
-
protected openCreate(): void;
|
|
42
|
-
protected openEdit(faq: PracticeFaq): void;
|
|
43
|
-
protected closeForm(): void;
|
|
44
|
-
protected onStarterTemplate(t: {
|
|
45
|
-
question: string;
|
|
46
|
-
answer: string;
|
|
47
|
-
category: string;
|
|
48
|
-
}): void;
|
|
49
|
-
protected onSave(payload: CreatePracticeFaqRequest | UpdatePracticeFaqRequest): void;
|
|
50
|
-
protected toggleActive(faq: PracticeFaq, active: boolean): void;
|
|
51
|
-
protected deleteFaq(faq: PracticeFaq): void;
|
|
52
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<KnowledgeHubPageComponent, never>;
|
|
53
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<KnowledgeHubPageComponent, "eds-knowledge-hub-page", never, {}, {}, never, never, true, never>;
|
|
54
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { CreatePracticeFaqRequest, PracticeFaq, PracticeFaqSearchResult, UpdatePracticeFaqRequest } from '../models/practice-faq.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class PracticeFaqApiMockService {
|
|
5
|
-
private readonly faqs;
|
|
6
|
-
list(activeOnly?: boolean): Observable<PracticeFaq[]>;
|
|
7
|
-
get(faqId: string): Observable<PracticeFaq | null>;
|
|
8
|
-
create(body: CreatePracticeFaqRequest): Observable<PracticeFaq>;
|
|
9
|
-
update(faqId: string, body: UpdatePracticeFaqRequest): Observable<PracticeFaq>;
|
|
10
|
-
delete(faqId: string): Observable<{
|
|
11
|
-
success: boolean;
|
|
12
|
-
}>;
|
|
13
|
-
search(q: string, limit?: number): Observable<PracticeFaqSearchResult>;
|
|
14
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PracticeFaqApiMockService, never>;
|
|
15
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<PracticeFaqApiMockService>;
|
|
16
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { type PaginatedResult } from '../../models/pagination';
|
|
3
|
-
import { CreatePracticeFaqRequest, PracticeFaq, PracticeFaqSearchResult, UpdatePracticeFaqRequest } from '../models/practice-faq.model';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class PracticeFaqApiService {
|
|
6
|
-
private readonly http;
|
|
7
|
-
private readonly mock;
|
|
8
|
-
private readonly config;
|
|
9
|
-
private readonly paths;
|
|
10
|
-
private readonly base;
|
|
11
|
-
private get useMock();
|
|
12
|
-
list(opts?: {
|
|
13
|
-
activeOnly?: boolean;
|
|
14
|
-
page?: number;
|
|
15
|
-
limit?: number;
|
|
16
|
-
}): Observable<PaginatedResult<PracticeFaq>>;
|
|
17
|
-
get(faqId: string): Observable<PracticeFaq | null>;
|
|
18
|
-
create(body: CreatePracticeFaqRequest): Observable<PracticeFaq>;
|
|
19
|
-
update(faqId: string, body: UpdatePracticeFaqRequest): Observable<PracticeFaq>;
|
|
20
|
-
delete(faqId: string): Observable<{
|
|
21
|
-
success: boolean;
|
|
22
|
-
}>;
|
|
23
|
-
search(q: string, limit?: number): Observable<PracticeFaqSearchResult>;
|
|
24
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PracticeFaqApiService, never>;
|
|
25
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<PracticeFaqApiService>;
|
|
26
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { AgentOnlineService } from '../services/agent-online.service';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class EdsTopbarComponent {
|
|
4
|
-
private readonly router;
|
|
5
|
-
private readonly sessionAdapter;
|
|
6
|
-
private readonly toast;
|
|
7
|
-
protected readonly agentOnline: AgentOnlineService;
|
|
8
|
-
protected readonly pageTitle: import("@angular/core").WritableSignal<string>;
|
|
9
|
-
protected readonly confirmOffOpen: import("@angular/core").WritableSignal<boolean>;
|
|
10
|
-
protected readonly online: import("@angular/core").Signal<import("../services/agent-online.service").AgentOnlineKnownState>;
|
|
11
|
-
protected readonly loading: import("@angular/core").Signal<boolean>;
|
|
12
|
-
protected readonly toggling: import("@angular/core").Signal<boolean>;
|
|
13
|
-
protected readonly statusError: import("@angular/core").Signal<string | null>;
|
|
14
|
-
protected readonly userEmail: import("@angular/core").Signal<string | null>;
|
|
15
|
-
protected readonly showUser: import("@angular/core").Signal<boolean>;
|
|
16
|
-
protected readonly showLogout: import("@angular/core").Signal<boolean>;
|
|
17
|
-
protected readonly userInitials: import("@angular/core").Signal<string>;
|
|
18
|
-
protected readonly statusLabel: import("@angular/core").Signal<"Checking status…" | "Status unknown" | "AI receptionist is answering calls" | "AI is offline — calls go to front desk">;
|
|
19
|
-
protected readonly switchDisabled: import("@angular/core").Signal<boolean>;
|
|
20
|
-
constructor();
|
|
21
|
-
protected onToggleClick(): void;
|
|
22
|
-
protected cancelConfirmOff(): void;
|
|
23
|
-
protected confirmTurnOff(): void;
|
|
24
|
-
private applyOnline;
|
|
25
|
-
protected logout(): void;
|
|
26
|
-
private updateTitle;
|
|
27
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<EdsTopbarComponent, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EdsTopbarComponent, "eds-topbar", never, {}, {}, never, never, true, never>;
|
|
29
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { AuditEvent } from '../../models/ai-receptionist.types';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class AuditPageComponent implements OnInit {
|
|
5
|
-
private readonly api;
|
|
6
|
-
protected readonly pageSize = 50;
|
|
7
|
-
protected readonly events: import("@angular/core").WritableSignal<AuditEvent[]>;
|
|
8
|
-
protected readonly total: import("@angular/core").WritableSignal<number>;
|
|
9
|
-
protected readonly page: import("@angular/core").WritableSignal<number>;
|
|
10
|
-
protected readonly search: import("@angular/core").WritableSignal<string>;
|
|
11
|
-
protected readonly actor: import("@angular/core").WritableSignal<string>;
|
|
12
|
-
protected readonly loading: import("@angular/core").WritableSignal<boolean>;
|
|
13
|
-
ngOnInit(): void;
|
|
14
|
-
protected load(): void;
|
|
15
|
-
protected searchSubmit(): void;
|
|
16
|
-
protected totalPages(): number;
|
|
17
|
-
protected prevPage(): void;
|
|
18
|
-
protected nextPage(): void;
|
|
19
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AuditPageComponent, never>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AuditPageComponent, "eds-audit-page", never, {}, {}, never, never, true, never>;
|
|
21
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class EdsWaveformComponent {
|
|
3
|
-
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
4
|
-
readonly tone: import("@angular/core").InputSignal<"brand" | "violet">;
|
|
5
|
-
protected readonly bars: number[];
|
|
6
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<EdsWaveformComponent, never>;
|
|
7
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<EdsWaveformComponent, "eds-waveform", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8
|
-
}
|