@edvak99/voice-receptionist-widget 1.1.21 → 1.1.22
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-dcDXT2KG.mjs +533 -0
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-dcDXT2KG.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-analytics-page.component-CmImX5FN.mjs → edvak99-voice-receptionist-widget-analytics-page.component-B25yZJZz.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-analytics-page.component-CmImX5FN.mjs.map → edvak99-voice-receptionist-widget-analytics-page.component-B25yZJZz.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-Df-dtgR3.mjs +96 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-Df-dtgR3.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-history-detail-page.component-BT4clUO-.mjs → edvak99-voice-receptionist-widget-call-history-detail-page.component-BJGzgVxG.mjs} +21 -10
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-BJGzgVxG.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CcwwO5SO.mjs +254 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CcwwO5SO.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-4fL-zUWy.mjs → edvak99-voice-receptionist-widget-call-recording-player.component-BepxNLNQ.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-4fL-zUWy.mjs.map → edvak99-voice-receptionist-widget-call-recording-player.component-BepxNLNQ.mjs.map} +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-BhbCmB1S.mjs → edvak99-voice-receptionist-widget-call-review.service-nFqc30t3.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-BhbCmB1S.mjs.map → edvak99-voice-receptionist-widget-call-review.service-nFqc30t3.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CMgOu0aw.mjs +311 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CMgOu0aw.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DDS7VdnD.mjs → edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CJ1L6QeE.mjs} +54 -25
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CJ1L6QeE.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-page.component-4LtgT4lS.mjs → edvak99-voice-receptionist-widget-live-calls-page.component-MnBMu8iA.mjs} +4 -4
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-MnBMu8iA.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-live-monitor-page.component-B1lKfw-j.mjs → edvak99-voice-receptionist-widget-live-monitor-page.component-BzvMkbC4.mjs} +10 -7
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-BzvMkbC4.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-Aws6TaaE.mjs +273 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-Aws6TaaE.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-task-detail-drawer.component-aDTKTV79.mjs → edvak99-voice-receptionist-widget-task-detail-drawer.component-DVWdArqj.mjs} +14 -6
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-DVWdArqj.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-tasks-page.component-Dj1nWx6V.mjs → edvak99-voice-receptionist-widget-tasks-page.component-CBDmGLol.mjs} +11 -7
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-CBDmGLol.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CQttbEzW.mjs → edvak99-voice-receptionist-widget-wizard-page.component-C-hdBQIV.mjs} +2 -2
- package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CQttbEzW.mjs.map → edvak99-voice-receptionist-widget-wizard-page.component-C-hdBQIV.mjs.map} +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
- package/lib/components/call-tasks-panel/call-tasks-panel.component.d.ts +3 -0
- package/lib/components/patient-profile-drawer/patient-profile-drawer.component.d.ts +3 -0
- package/lib/components/task-detail-drawer/task-detail-drawer.component.d.ts +3 -0
- package/lib/pages/activities-page/activities-page.component.d.ts +5 -2
- package/lib/pages/audit-page/audit-page.component.d.ts +3 -0
- package/lib/pages/call-history-detail-page/call-history-detail-page.component.d.ts +2 -0
- package/lib/pages/call-history-page/call-history-page.component.d.ts +1 -0
- package/lib/pages/dashboard-page/dashboard-page.component.d.ts +4 -0
- package/lib/pages/live-monitor-page/live-monitor-page.component.d.ts +2 -0
- package/lib/pages/outbound-purposes-page/outbound-purposes-page.component.d.ts +3 -0
- package/lib/pages/settings-page/settings-page.component.d.ts +1 -0
- package/lib/pages/tasks-page/tasks-page.component.d.ts +2 -0
- package/lib/services/ai-receptionist-api.service.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/css/_tables.scss +12 -0
- package/styles/embed.scss +27 -0
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-CpXa1J9-.mjs +0 -510
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-CpXa1J9-.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DTAB2WTX.mjs +0 -78
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DTAB2WTX.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-BT4clUO-.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-BACON4uq.mjs +0 -247
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-BACON4uq.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CxNYLBbg.mjs +0 -291
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CxNYLBbg.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DDS7VdnD.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-4LtgT4lS.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-B1lKfw-j.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-BkIHblSu.mjs +0 -269
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-BkIHblSu.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-aDTKTV79.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-Dj1nWx6V.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CJ1L6QeE.mjs","sources":["../../../src/lib/config.ts","../../../src/lib/provide-voice-receptionist.ts","../../../src/lib/api-paths.ts","../../../src/lib/extract-api-rows.ts","../../../src/lib/models/outbound-patient.types.ts","../../../src/lib/models/staff-media.types.ts","../../../src/lib/models/agent-activity.types.ts","../../../src/lib/models/pagination.ts","../../../src/lib/utils/welcome-message.util.ts","../../../src/lib/utils/call-history-display.util.ts","../../../src/lib/utils/tool-labels.util.ts","../../../src/lib/services/ai-receptionist-api.mappers.ts","../../../src/lib/utils/csv-download.util.ts","../../../src/lib/mocks/api-log.seed.ts","../../../src/lib/mocks/seed-data.ts","../../../src/lib/mocks/outbound-purpose.seed.ts","../../../src/lib/mocks/agent-activity.seed.ts","../../../src/lib/services/ai-receptionist-api.mock.ts","../../../src/lib/services/ai-receptionist-api.service.ts","../../../src/lib/services/agent-online.service.ts","../../../src/lib/shared/toast.service.ts","../../../src/lib/shared/toast-container.component.ts","../../../src/lib/shared/toast-container.component.html","../../../src/lib/ui/ed-button.component.ts","../../../src/lib/ui/ed-button.component.html","../../../src/lib/ui/ed-skeleton.component.ts","../../../src/lib/ui/ed-icon.component.ts","../../../src/lib/shared/modal.component.ts","../../../src/lib/shared/modal.component.html","../../../src/lib/components/knowledge-test-modal/knowledge-test-modal.component.ts","../../../src/lib/components/knowledge-test-modal/knowledge-test-modal.component.html","../../../src/lib/pages/settings-page/tts-voice-presets.ts","../../../src/lib/pages/settings-page/settings-fields.config.ts","../../../src/lib/pages/settings-page/settings-page.component.ts","../../../src/lib/pages/settings-page/settings-page.component.html","../../../src/lib/services/agent-settings-drawer.service.ts","../../../src/lib/shared/viewport-portal.directive.ts","../../../src/lib/ui/ed-icon-button.component.ts","../../../src/lib/ui/ed-icon-button.component.html","../../../src/lib/components/agent-settings-drawer/agent-settings-drawer.component.ts","../../../src/lib/components/agent-settings-drawer/agent-settings-drawer.component.html","../../../src/lib/layout/eds-module-nav.component.ts","../../../src/lib/layout/eds-module-nav.component.html","../../../src/lib/layout/eds-route-progress.component.ts","../../../src/lib/ui/ed-avatar.component.ts","../../../src/lib/layout/eds-topbar.component.ts","../../../src/lib/layout/eds-topbar.component.html","../../../src/lib/layout/eds-app-shell.component.ts","../../../src/lib/layout/eds-app-shell.component.html","../../../src/lib/services/dashboard-socket.service.ts","../../../src/lib/services/live-calls-list.service.ts","../../../src/lib/pages/live-calls-page/live-calls-shell.component.ts","../../../src/lib/routes.ts","../../../src/lib/ui/eds-badge.component.ts","../../../src/lib/ui/eds-button.component.ts","../../../src/public-api.ts","../../../src/edvak99-voice-receptionist-widget.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\n\n/** Host-provided session for topbar / admin-only nav. */\nexport interface VoiceReceptionistSession {\n /** Current user email for display. */\n readonly email: Signal<string | null>;\n /** Current role when the host knows it (used for super-admin API log filters). */\n readonly role?: Signal<string | null>;\n isAdmin(): boolean;\n /** Optional; falls back to role-based detection when omitted. */\n isSuperAdmin?(): boolean;\n logout(): void;\n}\n\nexport interface VoiceReceptionistConfig {\n /** Backend base URL (no trailing slash), e.g. https://api.example.com */\n apiBaseUrl: string;\n /** Use in-memory mock API (local demos). Default false. */\n useMockApi?: boolean;\n callLogsLimit?: number;\n liveCallsPollIntervalMs?: number;\n /**\n * Show Practice nav links (patients / providers / appointments / admin).\n * Enable in the standalone Voice Hub host; leave false for EHR embed.\n */\n includePracticeNav?: boolean;\n /**\n * Show the AI Receptionist side nav (Dashboard, Live Calls, …).\n * Default false for EHR embed (host owns primary nav). Standalone Voice Hub should set true.\n */\n showModuleNav?: boolean;\n}\n\nexport const VOICE_RECEPTIONIST_CONFIG = new InjectionToken<VoiceReceptionistConfig>(\n 'VOICE_RECEPTIONIST_CONFIG',\n);\n\nexport const VOICE_RECEPTIONIST_SESSION = new InjectionToken<VoiceReceptionistSession | null>(\n 'VOICE_RECEPTIONIST_SESSION',\n { factory: () => null },\n);\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport {\n VOICE_RECEPTIONIST_CONFIG,\n VOICE_RECEPTIONIST_SESSION,\n VoiceReceptionistConfig,\n VoiceReceptionistSession,\n} from './config';\n\nexport interface ProvideVoiceReceptionistOptions extends VoiceReceptionistConfig {\n session?: VoiceReceptionistSession | null;\n}\n\nexport function provideVoiceReceptionist(\n options: ProvideVoiceReceptionistOptions,\n): EnvironmentProviders {\n const { session, ...config } = options;\n const providers: { provide: unknown; useValue: unknown }[] = [\n { provide: VOICE_RECEPTIONIST_CONFIG, useValue: config },\n ];\n // Only set SESSION when the host passes one — otherwise leave the token\n // unset so a separate host factory (or the token default) can provide it.\n if (session !== undefined) {\n providers.push({ provide: VOICE_RECEPTIONIST_SESSION, useValue: session });\n }\n return makeEnvironmentProviders(providers);\n}\n","import { VoiceReceptionistConfig } from './config';\n\nexport interface VoiceReceptionistPaths {\n apiRoot(): string;\n authPath(suffix?: string): string;\n v1Path(suffix?: string): string;\n apiPath(suffix?: string): string;\n aiReceptionistPath(suffix?: string): string;\n healthPath(suffix?: string): string;\n}\n\n/** Build URL helpers from a config (or raw base URL). Safe outside injection context. */\nexport function createVoiceReceptionistPaths(\n configOrBase: VoiceReceptionistConfig | string,\n): VoiceReceptionistPaths {\n const base =\n typeof configOrBase === 'string' ? configOrBase : configOrBase.apiBaseUrl;\n const root = base.replace(/\\/$/, '');\n\n return {\n apiRoot: () => root,\n authPath: (suffix = '') => `${root}/api/auth${suffix}`,\n v1Path: (suffix = '') => `${root}/api/v1${suffix}`,\n apiPath: (suffix = '') => `${root}/api${suffix}`,\n aiReceptionistPath: (suffix = '') => `${root}/api/ai-receptionist${suffix}`,\n healthPath: (suffix = '') => `${root}/health${suffix}`,\n };\n}\n","/** Normalize list/detail API payloads into a row array. */\nexport function extractApiRows(body: unknown): unknown[] {\n if (Array.isArray(body)) return body;\n if (!body || typeof body !== 'object') return [];\n const o = body as Record<string, unknown>;\n const list = o['items'] ?? o['patients'] ?? o['appointments'] ?? o['providers'] ?? o['data'];\n if (Array.isArray(list)) return list;\n if (o['patientId'] || o['patient_id'] || o['appointmentId'] || o['appointment_id']) {\n return [body];\n }\n return [];\n}\n","/** Lightweight patient hit for outbound dialer typeahead. */\nexport interface OutboundPatientHit {\n patientId: string;\n firstName: string;\n lastName: string;\n fullName: string;\n phone: string | null;\n dob: string | null;\n}\n\n/** Upcoming appointment option for a selected patient. */\nexport interface OutboundAppointmentHit {\n appointmentId: string;\n startTime: string | null;\n endTime: string | null;\n providerName: string | null;\n locationName: string | null;\n status: string | null;\n visitType: string | null;\n}\n\nexport function mapOutboundPatientHit(raw: unknown): OutboundPatientHit | null {\n if (!raw || typeof raw !== 'object') return null;\n const r = raw as Record<string, unknown>;\n const patientId = String(r['patientId'] ?? r['patient_id'] ?? r['id'] ?? '').trim();\n if (!patientId) return null;\n const firstName = String(r['firstName'] ?? r['first_name'] ?? '').trim();\n const lastName = String(r['lastName'] ?? r['last_name'] ?? '').trim();\n const full =\n String(r['fullName'] ?? r['full_name'] ?? r['name'] ?? '').trim() ||\n [firstName, lastName].filter(Boolean).join(' ');\n const phone = String(r['mobilePhone'] ?? r['phone'] ?? r['mobile_phone'] ?? '').trim() || null;\n const dobRaw = String(r['dateOfBirth'] ?? r['dob'] ?? '').trim();\n return {\n patientId,\n firstName,\n lastName,\n fullName: full || 'Unknown patient',\n phone,\n dob: dobRaw ? dobRaw.slice(0, 10) : null,\n };\n}\n\nexport function mapOutboundAppointmentHit(raw: unknown): OutboundAppointmentHit | null {\n if (!raw || typeof raw !== 'object') return null;\n const r = raw as Record<string, unknown>;\n const appointmentId = String(\n r['appointmentId'] ?? r['appointment_id'] ?? r['id'] ?? '',\n ).trim();\n if (!appointmentId) return null;\n\n const providerObj =\n r['provider'] && typeof r['provider'] === 'object'\n ? (r['provider'] as Record<string, unknown>)\n : null;\n const locationObj =\n r['location'] && typeof r['location'] === 'object'\n ? (r['location'] as Record<string, unknown>)\n : null;\n const visitObj =\n r['visitType'] && typeof r['visitType'] === 'object'\n ? (r['visitType'] as Record<string, unknown>)\n : null;\n\n const providerName =\n String(\n r['providerName'] ??\n r['provider_name'] ??\n providerObj?.['fullName'] ??\n [providerObj?.['firstName'], providerObj?.['lastName']].filter(Boolean).join(' ') ??\n '',\n ).trim() || null;\n\n const locationName =\n String(\n r['locationName'] ?? r['location_name'] ?? locationObj?.['locationName'] ?? '',\n ).trim() || null;\n\n const visitTypeRaw = r['visitType'];\n const visitType =\n (typeof visitTypeRaw === 'string' ? visitTypeRaw.trim() : '') ||\n String(\n r['visitTypeName'] ??\n r['visit_type'] ??\n visitObj?.['visitTypeName'] ??\n visitObj?.['name'] ??\n '',\n ).trim() ||\n null;\n\n return {\n appointmentId,\n startTime: String(r['startTime'] ?? r['start_time'] ?? '').trim() || null,\n endTime: String(r['endTime'] ?? r['end_time'] ?? '').trim() || null,\n providerName,\n locationName,\n status: String(r['appointmentStatus'] ?? r['status'] ?? r['visitStatus'] ?? '').trim() || null,\n visitType,\n };\n}\n\n/** Best-effort E.164 for US/local numbers used in dialer. */\nexport function toE164Phone(raw: string | null | undefined): string {\n const digits = String(raw ?? '').replace(/\\D/g, '');\n if (!digits) return '';\n if (String(raw ?? '').trim().startsWith('+') && /^\\+[1-9]\\d{6,14}$/.test(String(raw).trim())) {\n return String(raw).trim();\n }\n if (digits.length === 10) return `+1${digits}`;\n if (digits.length === 11 && digits.startsWith('1')) return `+${digits}`;\n if (digits.length >= 8) return `+${digits}`;\n return String(raw ?? '').trim();\n}\n","import { CallControlMode } from './ai-receptionist.types';\n\n/** Staff softphone join modes. */\nexport type StaffMediaMode = 'listen' | 'takeover';\n\n/**\n * Response from POST /calls/:callId/media/join (also takeover / listen).\n * Staff join the existing LiveKit room `call-{callId}` — not Vonage Conversation.\n */\nexport interface StaffMediaJoinResult {\n ok: boolean;\n callId: string;\n mode: StaffMediaMode;\n provider: 'livekit' | string;\n /** LiveKit WebSocket URL for Room.connect */\n livekitUrl: string;\n /** Short-lived LiveKit access token — never a server secret */\n clientToken: string;\n tokenExpiresAt?: string | null;\n conversationId?: string | null;\n memberId?: string | null;\n roomName?: string | null;\n iceServers?: unknown[];\n controlMode?: CallControlMode | string | null;\n aiPaused?: boolean;\n /** True once staff took over — the AI left the call and cannot be resumed. */\n aiHandedOff?: boolean;\n assigned?: string | null;\n}\n\nexport interface CallControlChangedEvent {\n callId: string;\n controlMode?: CallControlMode | string | null;\n aiPaused?: boolean;\n aiHandedOff?: boolean;\n assigned?: string | null;\n status?: string | null;\n}\n\nexport function mapStaffMediaJoinResult(raw: unknown): StaffMediaJoinResult | null {\n if (!raw || typeof raw !== 'object') return null;\n const r = raw as Record<string, unknown>;\n const data =\n r['data'] && typeof r['data'] === 'object'\n ? (r['data'] as Record<string, unknown>)\n : r;\n\n const livekitUrl = String(\n data['livekitUrl'] ?? data['livekit_url'] ?? data['url'] ?? '',\n ).trim();\n const clientToken = String(\n data['clientToken'] ?? data['client_token'] ?? data['token'] ?? '',\n ).trim();\n const modeRaw = String(data['mode'] ?? 'takeover').toLowerCase();\n const mode: StaffMediaMode = modeRaw === 'listen' ? 'listen' : 'takeover';\n\n if (!livekitUrl || !clientToken) return null;\n\n return {\n ok: data['ok'] !== false,\n callId: String(data['callId'] ?? data['call_id'] ?? ''),\n mode,\n provider: String(data['provider'] ?? 'livekit'),\n livekitUrl,\n clientToken,\n tokenExpiresAt: strOrNull(data['tokenExpiresAt'] ?? data['token_expires_at']),\n conversationId: strOrNull(data['conversationId'] ?? data['conversation_id']),\n memberId: strOrNull(data['memberId'] ?? data['member_id']),\n roomName: strOrNull(data['roomName'] ?? data['room_name']),\n iceServers: Array.isArray(data['iceServers']) ? data['iceServers'] : undefined,\n controlMode: strOrNull(data['controlMode'] ?? data['control_mode']),\n aiPaused:\n typeof data['aiPaused'] === 'boolean'\n ? data['aiPaused']\n : typeof data['ai_paused'] === 'boolean'\n ? (data['ai_paused'] as boolean)\n : mode === 'takeover',\n aiHandedOff:\n typeof data['aiHandedOff'] === 'boolean'\n ? data['aiHandedOff']\n : mode === 'takeover',\n assigned: strOrNull(data['assigned']),\n };\n}\n\nfunction strOrNull(value: unknown): string | null {\n const s = String(value ?? '').trim();\n return s || null;\n}\n","/** Agent activity feed item (patients, appointments, tasks created by AI). */\nexport type AgentActivityType =\n | 'patient_created'\n | 'appointment_booked'\n | 'task_created'\n | string;\n\nexport type ActivitiesTab = 'task_created' | 'appointment_booked' | 'patient_created';\n\nexport interface AgentActivity {\n id: string;\n type: AgentActivityType;\n occurredAt: string;\n title: string;\n detail: string;\n patientId?: string | null;\n patientName?: string | null;\n appointmentId?: string | null;\n taskId?: string | null;\n callId?: string | null;\n /** Appointment window start (ISO or date string). */\n startAt?: string | null;\n /** Appointment window end (ISO). */\n endAt?: string | null;\n durationMinutes?: number | null;\n /** Visit / appointment category shown under the time. */\n visitType?: string | null;\n practiceName?: string | null;\n patientDob?: string | null;\n patientAge?: number | null;\n patientGender?: string | null;\n patientInitials?: string | null;\n /** Medical record number when known. */\n patientMrn?: string | null;\n /** True/false when the backend knows the coverage status; null when it never told us. */\n hasInsurance?: boolean | null;\n /** Payer / plan name, shown as the insurance tooltip when present. */\n insuranceName?: string | null;\n providerId?: string | null;\n providerName?: string | null;\n providerInitials?: string | null;\n providerSpecialty?: string | null;\n /** Task priority for task_created rows. */\n priority?: ActivityPriority | null;\n}\n\nexport type ActivityPriority = 'urgent' | 'high' | 'medium' | 'low' | 'normal';\n\nexport interface AgentActivityFilters {\n page?: number;\n limit?: number;\n /** Comma-separated or multi types filter. */\n types?: string;\n search?: string;\n from?: string;\n to?: string;\n /** Restrict to activities created during a specific call. */\n callId?: string;\n}\n\nexport function mapAgentActivity(raw: unknown, index = 0): AgentActivity {\n if (!raw || typeof raw !== 'object') {\n return {\n id: `activity-${index}`,\n type: 'unknown',\n occurredAt: new Date().toISOString(),\n title: 'Activity',\n detail: '',\n };\n }\n const r = raw as Record<string, unknown>;\n const nestedPatient = asRecord(r['patient']);\n const nestedProvider = asRecord(r['provider'] ?? r['practitioner'] ?? r['doctor']);\n\n const type = String(r['type'] ?? r['activityType'] ?? 'unknown');\n const patientName =\n strOrNull(r['patientName'] ?? r['patient_name']) ?? strOrNull(nestedPatient?.['name']);\n const providerName =\n strOrNull(\n r['providerName'] ??\n r['provider_name'] ??\n r['practitionerName'] ??\n r['practitioner_name'] ??\n r['doctorName'] ??\n r['doctor_name'],\n ) ?? strOrNull(nestedProvider?.['name']);\n\n const detail = String(r['detail'] ?? r['description'] ?? '').trim();\n const parsed = parseActivityDetail(detail);\n const insurance = resolveInsurance(r, nestedPatient);\n\n const visitType =\n strOrNull(r['visitType'] ?? r['visit_type'] ?? r['category'] ?? r['reason']) ??\n parsed.visitType;\n const startAt =\n strOrNull(r['startAt'] ?? r['start_at'] ?? r['appointmentStart'] ?? r['appointment_start']) ??\n parsed.startAt;\n const endAt = strOrNull(r['endAt'] ?? r['end_at'] ?? r['appointmentEnd'] ?? r['appointment_end']);\n const practiceName =\n strOrNull(r['practiceName'] ?? r['practice_name'] ?? r['location'] ?? r['clinic']) ??\n parsed.practiceName;\n\n return {\n id: String(r['id'] ?? r['activityId'] ?? `activity-${index}`),\n type,\n occurredAt: String(r['occurredAt'] ?? r['occurred_at'] ?? r['createdAt'] ?? ''),\n title: String(r['title'] ?? r['summary'] ?? '').trim() || activityTypeLabel(type),\n detail,\n patientId: strOrNull(r['patientId'] ?? r['patient_id'] ?? nestedPatient?.['id']),\n patientName,\n appointmentId: strOrNull(r['appointmentId'] ?? r['appointment_id']),\n taskId: strOrNull(r['taskId'] ?? r['task_id']),\n callId: strOrNull(r['callId'] ?? r['call_id']),\n startAt,\n endAt,\n durationMinutes: numOrNull(r['durationMinutes'] ?? r['duration_minutes'] ?? r['duration']),\n visitType,\n practiceName,\n patientDob: strOrNull(\n r['patientDob'] ?? r['patient_dob'] ?? r['dob'] ?? nestedPatient?.['dob'],\n ),\n patientAge: numOrNull(\n r['patientAge'] ?? r['patient_age'] ?? r['age'] ?? nestedPatient?.['age'],\n ),\n patientGender: normalizeGender(\n r['patientGender'] ?? r['patient_gender'] ?? r['gender'] ?? nestedPatient?.['gender'],\n ),\n patientInitials:\n strOrNull(\n r['patientInitials'] ??\n r['patient_initials'] ??\n r['initials'] ??\n nestedPatient?.['initials'],\n ) ?? initialsFromName(patientName),\n patientMrn: strOrNull(\n r['patientMrn'] ??\n r['patient_mrn'] ??\n r['mrn'] ??\n r['MRN'] ??\n nestedPatient?.['mrn'] ??\n nestedPatient?.['MRN'],\n ),\n hasInsurance: insurance.hasInsurance,\n insuranceName: insurance.name,\n providerId: strOrNull(\n r['providerId'] ?? r['provider_id'] ?? nestedProvider?.['id'],\n ),\n providerName,\n providerInitials:\n strOrNull(\n r['providerInitials'] ??\n r['provider_initials'] ??\n nestedProvider?.['initials'],\n ) ?? initialsFromName(providerName),\n providerSpecialty: strOrNull(\n r['providerSpecialty'] ??\n r['provider_specialty'] ??\n r['specialty'] ??\n nestedProvider?.['specialty'] ??\n nestedProvider?.['speciality'],\n ),\n priority: normalizePriority(r['priority'] ?? r['taskPriority'] ?? r['task_priority']),\n };\n}\n\nconst INSURED_WORDS = ['active', 'verified', 'covered', 'insured', 'yes', 'true', 'eligible'];\nconst UNINSURED_WORDS = [\n 'none',\n 'no',\n 'false',\n 'uninsured',\n 'self_pay',\n 'self-pay',\n 'selfpay',\n 'inactive',\n 'expired',\n 'missing',\n];\n\n/**\n * Coverage can arrive as a boolean, a status string, a payer name or a nested object.\n * Unknown stays null so the UI can distinguish \"no coverage\" from \"never told us\".\n */\nfunction resolveInsurance(\n r: Record<string, unknown>,\n patient: Record<string, unknown> | null,\n): { hasInsurance: boolean | null; name: string | null } {\n const nested = asRecord(r['insurance'] ?? patient?.['insurance']);\n\n const name =\n strOrNull(\n r['insuranceName'] ??\n r['insurance_name'] ??\n r['payerName'] ??\n r['payer_name'] ??\n r['payer'] ??\n patient?.['insuranceName'] ??\n patient?.['insurance_name'] ??\n nested?.['name'] ??\n nested?.['payer'] ??\n nested?.['planName'],\n ) ?? (typeof r['insurance'] === 'string' ? strOrNull(r['insurance']) : null);\n\n const flag =\n firstBoolean([\n r['hasInsurance'],\n r['has_insurance'],\n r['insured'],\n r['isInsured'],\n patient?.['hasInsurance'],\n patient?.['has_insurance'],\n patient?.['insured'],\n nested?.['active'],\n nested?.['isActive'],\n ]);\n if (flag !== null) return { hasInsurance: flag, name };\n\n const status = String(\n r['insuranceStatus'] ??\n r['insurance_status'] ??\n patient?.['insuranceStatus'] ??\n patient?.['insurance_status'] ??\n nested?.['status'] ??\n (typeof r['insurance'] === 'string' ? r['insurance'] : '') ??\n '',\n )\n .trim()\n .toLowerCase();\n if (status) {\n if (INSURED_WORDS.includes(status)) return { hasInsurance: true, name };\n if (UNINSURED_WORDS.includes(status)) return { hasInsurance: false, name };\n }\n\n // A payer name on its own implies coverage.\n return { hasInsurance: name ? true : null, name };\n}\n\nfunction firstBoolean(values: unknown[]): boolean | null {\n for (const value of values) {\n if (typeof value === 'boolean') return value;\n }\n return null;\n}\n\n/** Pull visit type / slot / practice out of a messy free-text detail blob. */\nfunction parseActivityDetail(detail: string): {\n visitType: string | null;\n startAt: string | null;\n practiceName: string | null;\n} {\n if (!detail) return { visitType: null, startAt: null, practiceName: null };\n\n const visitMatch = /\\(([^)]+)\\)\\s*$/.exec(detail);\n const visitType = visitMatch?.[1]?.trim() || null;\n\n const dateMatch =\n /\\bfor\\s+(\\d{4}-\\d{2}-\\d{2})(?:\\s+(\\d{1,2}:\\d{2}(?::\\d{2})?))?/i.exec(detail) ??\n /\\b(\\d{4}-\\d{2}-\\d{2})[ T](\\d{1,2}:\\d{2}(?::\\d{2})?)/.exec(detail);\n let startAt: string | null = null;\n if (dateMatch) {\n const date = dateMatch[1];\n const time = dateMatch[2] ? dateMatch[2].padStart(5, '0') : '00:00';\n startAt = `${date}T${time.length === 5 ? `${time}:00` : time}`;\n }\n\n const practiceMatch = /\\bAT\\s+([A-Z0-9][A-Z0-9 ,.'&-]{2,}?)(?:\\s*\\(|$)/.exec(detail);\n const practiceName = practiceMatch?.[1]?.trim().replace(/,\\s*$/, '') || null;\n\n return { visitType, startAt, practiceName };\n}\n\nexport function activityTypeLabel(type: string): string {\n switch (type) {\n case 'patient_created':\n return 'Patient created';\n case 'appointment_booked':\n return 'Appointment booked';\n case 'task_created':\n return 'Task created';\n default:\n return type.replace(/_/g, ' ') || 'Activity';\n }\n}\n\nexport function initialsFromName(name: string | null | undefined): string | null {\n if (!name?.trim()) return null;\n const cleaned = name.replace(/^dr\\.?\\s+/i, '').trim();\n const parts = cleaned.split(/\\s+/).filter(Boolean);\n if (!parts.length) return null;\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return `${parts[0][0] ?? ''}${parts[parts.length - 1][0] ?? ''}`.toUpperCase();\n}\n\nfunction normalizeGender(value: unknown): string | null {\n const s = String(value ?? '').trim();\n if (!s) return null;\n const key = s.toLowerCase();\n if (key === 'm' || key === 'male') return 'M';\n if (key === 'f' || key === 'female') return 'F';\n if (key === 'o' || key === 'other' || key === 'non-binary' || key === 'nonbinary') return 'O';\n return s.length <= 3 ? s.toUpperCase() : s;\n}\n\nfunction normalizePriority(value: unknown): ActivityPriority | null {\n const key = String(value ?? '')\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, '_');\n if (!key) return null;\n if (key === 'urgent' || key === 'critical') return 'urgent';\n if (key === 'high') return 'high';\n if (key === 'medium' || key === 'med' || key === 'normal') return 'medium';\n if (key === 'low') return 'low';\n return null;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction strOrNull(value: unknown): string | null {\n const s = String(value ?? '').trim();\n return s || null;\n}\n\nfunction numOrNull(value: unknown): number | null {\n if (value == null || value === '') return null;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n","/** Standard list pagination envelope from AI Receptionist APIs. */\nexport interface PaginatedResult<T> {\n items: T[];\n total: number;\n page: number;\n limit: number;\n}\n\nexport const DEFAULT_PAGE_SIZE = 50;\n\n/** Parse `{ items, total, page, limit }` or a bare array (legacy). */\nexport function asPaginatedResult<T>(\n body: unknown,\n fallbackPage = 1,\n fallbackLimit = DEFAULT_PAGE_SIZE,\n): PaginatedResult<T> {\n if (Array.isArray(body)) {\n return {\n items: body as T[],\n total: body.length,\n page: fallbackPage,\n limit: fallbackLimit,\n };\n }\n if (!body || typeof body !== 'object') {\n return { items: [], total: 0, page: fallbackPage, limit: fallbackLimit };\n }\n const o = body as Record<string, unknown>;\n const rawItems = o['items'] ?? o['data'];\n const items = Array.isArray(rawItems) ? (rawItems as T[]) : [];\n const total = typeof o['total'] === 'number' ? o['total'] : items.length;\n const page = typeof o['page'] === 'number' ? o['page'] : fallbackPage;\n const limit = typeof o['limit'] === 'number' ? o['limit'] : fallbackLimit;\n return { items, total, page, limit };\n}\n\nexport function totalPages(total: number, pageSize: number): number {\n return Math.max(1, Math.ceil(total / pageSize));\n}\n","import { AgentSettings } from '../models/ai-receptionist.types';\n\nexport const WELCOME_MESSAGE_MAX = 1000;\n\nexport function buildAutoWelcomeTemplate(practiceName: string, agentName: string): string {\n const practice = practiceName.trim() || 'our office';\n const agent = agentName.trim() || 'your AI receptionist';\n return `Hi, thanks for calling ${practice}. This is ${agent}. How can I help you today?`;\n}\n\nexport function resolveWelcomePreview(\n welcomeMessage: string | undefined,\n practiceName: string,\n agentName: string,\n): string {\n const custom = welcomeMessage?.trim();\n if (custom) return custom;\n return buildAutoWelcomeTemplate(practiceName, agentName);\n}\n\nexport function computeEffectiveWelcomeMessage(settings: Pick<AgentSettings, 'general'>): string {\n const general = settings.general;\n const custom = String(general['welcomeMessage'] ?? '').trim();\n if (custom) return custom;\n return buildAutoWelcomeTemplate(\n String(general['practiceName'] ?? ''),\n String(general['agentName'] ?? ''),\n );\n}\n","/** Call history table helpers — resolution badges + result chips. */\n\nexport type HistoryResolution = 'resolved' | 'needs_attention';\n\nexport function historyResolution(input: {\n outcome?: string;\n resolution?: string | null;\n risk?: 'urgent' | 'review' | null;\n}): HistoryResolution {\n if (input.risk === 'urgent' || input.risk === 'review') return 'needs_attention';\n\n const r = String(input.resolution ?? '').trim().toLowerCase();\n if (r === 'resolved') return 'resolved';\n if (r === 'unresolved' || r.includes('needs') || r.includes('attention')) {\n return 'needs_attention';\n }\n\n const o = String(input.outcome ?? '').toLowerCase();\n if (\n o.includes('unresolved') ||\n o.includes('fail') ||\n o.includes('escalat') ||\n o.includes('abandon') ||\n o.includes('attention') ||\n o.includes('voicemail') ||\n o === 'transferred'\n ) {\n return 'needs_attention';\n }\n if (o === 'completed' || o.includes('completed')) return 'resolved';\n return 'resolved';\n}\n\nexport function historyResolutionLabel(resolution: HistoryResolution): string {\n return resolution === 'resolved' ? 'RESOLVED' : 'NEEDS ATTENTION';\n}\n\nexport function resultChipIcon(label: string): string {\n const key = label.toLowerCase();\n if (key.includes('appointment') || key.includes('book')) return 'calendar_month';\n if (key.includes('task')) return 'check_circle';\n if (key.includes('register') || key.includes('patient')) return 'person_add';\n if (key.includes('info')) return 'info';\n if (key.includes('transfer')) return 'phone_forwarded';\n if (key.includes('refill')) return 'medication';\n return 'label';\n}\n\nexport function callerMetaLine(input: {\n dob?: string | null;\n age?: number | null;\n gender?: string | null;\n phone?: string | null;\n name?: string | null;\n matched?: boolean;\n}): string {\n if (isUnknownCaller(input.name, input.matched)) {\n return String(input.phone ?? '').trim() || '—';\n }\n const age = input.age ?? ageFromDob(input.dob);\n if (!input.dob && age == null && !input.gender) {\n return String(input.phone ?? '').trim() || '—';\n }\n const parts: string[] = [];\n if (input.dob) {\n parts.push(`DOB: ${formatDobDisplay(input.dob)}`);\n }\n const ageGender: string[] = [];\n if (age != null) ageGender.push(`${age}Y`);\n if (input.gender) ageGender.push(String(input.gender).charAt(0).toUpperCase());\n if (ageGender.length) {\n parts.push(parts.length ? `• ${ageGender.join(' | ')}` : ageGender.join(' | '));\n }\n return parts.join(' ') || String(input.phone ?? '').trim() || '—';\n}\n\nfunction formatDobDisplay(dob: string): string {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(dob.trim());\n if (m) return `${m[2]}-${m[3]}-${m[1]}`;\n return dob;\n}\n\n/** Age in whole years from YYYY-MM-DD (or partial ISO). */\nexport function ageFromDob(dob: string | null | undefined, at = new Date()): number | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(String(dob ?? '').trim());\n if (!m) return null;\n const y = Number(m[1]);\n const mo = Number(m[2]);\n const d = Number(m[3]);\n if (!y || !mo || !d) return null;\n let age = at.getFullYear() - y;\n const hadBirthday =\n at.getMonth() + 1 > mo || (at.getMonth() + 1 === mo && at.getDate() >= d);\n if (!hadBirthday) age -= 1;\n return age >= 0 && age < 130 ? age : null;\n}\n\nexport function isUnknownCaller(name: string | null | undefined, matched?: boolean): boolean {\n if (matched === false) return true;\n const n = String(name ?? '').trim();\n return !n || /^unknown/i.test(n) || n === '?';\n}\n\n/** Derive result chips from explicit actions, else from outcome text. */\nexport function historyResultChips(results: string[] | undefined, outcome: string): string[] {\n if (results?.length) return results;\n const o = outcome.trim();\n if (!o) return [];\n const lower = o.toLowerCase();\n if (lower.includes('appointment') || lower.includes('book')) return ['Appointment Booked'];\n if (lower.includes('task')) return ['Task Created'];\n if (lower.includes('register')) return ['Patient Registered'];\n if (lower.includes('info') || lower.includes('hours') || lower.includes('direction')) {\n return ['Information Provided'];\n }\n if (lower === 'completed') return ['Information Provided'];\n return [o];\n}\n","/** V3 agent tool labels — mirrors GET /api/agent-tools/catalog */\nexport const AGENT_TOOL_LABELS: Record<string, string> = {\n find_doctors: 'Found Doctors',\n check_doctor_availability: 'Checked Doctor Availability',\n list_visit_types: 'Listed Visit Types',\n search_patients: 'Searched Patients',\n search_practice_faq: 'Searched Practice FAQ',\n book_existing_appointment: 'Booked Appointment',\n register_and_book_appointment: 'Registered & Booked Appointment',\n submit_medication_refill: 'Submitted Medication Refill',\n};\n\nfunction looksLikeToolKey(value: string): boolean {\n return /^[a-z][a-z0-9_]*$/.test(value.trim());\n}\n\nfunction humanizeToolKey(key: string): string {\n return key\n .replace(/^tool_/, '')\n .split('_')\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n\n/** Prefer API `name`; fall back to catalog label or a readable key. */\nexport function resolveToolDisplayName(key: string | undefined, name: string): string {\n const trimmed = name?.trim() ?? '';\n if (trimmed && !looksLikeToolKey(trimmed)) return trimmed;\n\n const lookupKey = key?.trim() || (looksLikeToolKey(trimmed) ? trimmed : '');\n if (lookupKey && AGENT_TOOL_LABELS[lookupKey]) return AGENT_TOOL_LABELS[lookupKey];\n\n if (lookupKey) return humanizeToolKey(lookupKey);\n return trimmed || 'Tool activity';\n}\n\n/** Derive tool key from legacy `tech` values like `tool_check_doctor_availability`. */\nexport function inferToolKeyFromTech(tech: string): string | undefined {\n const trimmed = tech?.trim();\n if (!trimmed) return undefined;\n if (trimmed.startsWith('tool_')) return trimmed.slice(5);\n if (looksLikeToolKey(trimmed)) return trimmed;\n return undefined;\n}\n\nexport function resolveToolKey(\n key: string | undefined,\n name: string,\n tech: string,\n): string | undefined {\n const explicit = key?.trim();\n if (explicit) return explicit;\n if (looksLikeToolKey(name)) return name.trim();\n return inferToolKeyFromTech(tech);\n}\n\n/** Stable @for track key — avoid ?? in template track expressions (Angular compiler bug). */\nexport function toolEventTrackKey(\n tool: { key?: string; t: string; tech: string; name: string },\n index: number,\n): string {\n return `${tool.key ?? ''}|${tool.t}|${tool.tech}|${tool.name}|${index}`;\n}\n","import {\n AgentSettings,\n AiCreatedAppointment,\n AiReceptionistStatus,\n AnalyticsData,\n AnalyticsPeakSeries,\n AnalyticsVolumeSeries,\n AttentionItem,\n AuditEvent,\n CallStatus,\n CallControlMode,\n DashboardData,\n HistoryCall,\n HistoryDetail,\n LiveCall,\n LocationOption,\n ProviderOption,\n Sentiment,\n SetupData,\n TaskItem,\n CreateTaskRequest,\n TaskFilters,\n ToolEvent,\n TranscriptLine,\n Verification,\n CallRecordingMeta,\n CallRecordingStatus,\n RegenerateSummaryResult,\n} from '../models/ai-receptionist.types';\nimport {\n AnalyticsDto,\n AiCreatedAppointmentDto,\n AnalyticsPeakSeriesDto,\n AnalyticsVolumeSeriesDto,\n AttentionItemDto,\n AuditEventDto,\n DashboardSummaryDto,\n HistoryCallDto,\n HistoryDetailDto,\n HistoryListDto,\n LiveCallDto,\n LiveTranscriptLineDto,\n SetupDto,\n TaskDto,\n CreateTaskDto,\n AiStatusDto,\n RecordingDto,\n RegenerateSummaryResponseDto,\n} from '../models/api-dto.types';\nimport { computeEffectiveWelcomeMessage } from '../utils/welcome-message.util';\nimport { ageFromDob } from '../utils/call-history-display.util';\nimport { resolveToolDisplayName, resolveToolKey } from '../utils/tool-labels.util';\n\nconst TONE_COLORS: Record<string, string> = {\n brand: '#3681F4',\n pos: '#0ABF52',\n notice: '#FFB900',\n neg: '#F03740',\n violet: '#8E51FF',\n gray: '#71717A',\n};\n\nconst DAY_LABELS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\nexport function parseDurToSeconds(dur: string): number {\n if (!dur) return 0;\n const parts = dur.split(':').map((p) => Number(p.trim()));\n if (parts.some((n) => !Number.isFinite(n))) return 0;\n if (parts.length === 2) return parts[0] * 60 + parts[1];\n if (parts.length === 3) return parts[0] * 3600 + parts[1] * 60 + parts[2];\n return 0;\n}\n\nexport function parsePercent(value: string): number {\n const n = Number(String(value).replace('%', '').trim());\n return Number.isFinite(n) ? n : 0;\n}\n\nfunction normalizeConfidence(value: number): number {\n if (value <= 1) return Math.round(value * 100);\n return Math.round(value);\n}\n\nfunction mapVerification(raw: string): Verification {\n const v = raw?.toLowerCase();\n if (v === 'verified' || v === 'partial' || v === 'failed' || v === 'unknown') return v;\n return 'unknown';\n}\n\nfunction mapCallStatus(raw: string): CallStatus {\n const s = String(raw ?? 'ai').toLowerCase().replace(/_/g, '-');\n const allowed: CallStatus[] = [\n 'ai',\n 'needs-help',\n 'human-requested',\n 'urgent',\n 'takeover',\n 'transferring',\n ];\n return allowed.includes(s as CallStatus) ? (s as CallStatus) : 'ai';\n}\n\nfunction mapControlMode(\n raw: string | null | undefined,\n status: string | null | undefined,\n aiPaused?: boolean,\n): CallControlMode {\n const mode = String(raw ?? '').toLowerCase().replace(/_/g, '-');\n if (mode === 'ai' || mode === 'takeover' || mode === 'listen' || mode === 'paused') {\n return mode;\n }\n if (aiPaused === true) return 'paused';\n const st = String(status ?? '').toLowerCase().replace(/_/g, '-');\n if (st === 'takeover') return 'takeover';\n if (st === 'paused' || st === 'pause') return 'paused';\n if (st === 'listen' || st === 'listening') return 'listen';\n return 'ai';\n}\n\nfunction mapSentiment(raw: string): Sentiment {\n const s = String(raw ?? 'neutral').toLowerCase();\n if (s === 'calm' || s === 'neutral' || s === 'frustrated' || s === 'urgent') return s;\n return 'neutral';\n}\n\nexport function mapTranscriptLine(\n line: LiveTranscriptLineDto & { at?: number; offsetSeconds?: number; startTime?: number },\n): TranscriptLine {\n return {\n who: line.who,\n text: line.text,\n flag: line.flag as TranscriptLine['flag'],\n at: line.at ?? line.offsetSeconds ?? line.startTime,\n };\n}\n\nexport function mapToolEvent(tool: {\n t: string;\n key?: string;\n name: string;\n tech: string;\n result: string;\n state: string;\n}): ToolEvent {\n const state = tool.state as ToolEvent['state'];\n const key = resolveToolKey(tool.key, tool.name, tool.tech);\n return {\n t: tool.t,\n key,\n name: resolveToolDisplayName(key, tool.name),\n tech: tool.tech,\n result: tool.result,\n state: ['ok', 'warn', 'error', 'active'].includes(state) ? state : 'ok',\n };\n}\n\nexport function normalizeRecordingStatus(\n status: string | undefined,\n url: string | null | undefined,\n): CallRecordingStatus {\n const known: CallRecordingStatus[] = ['ready', 'pending', 'unavailable', 'failed'];\n if (status && known.includes(status as CallRecordingStatus)) {\n return status as CallRecordingStatus;\n }\n return url ? 'ready' : 'unavailable';\n}\n\nexport function mapRecordingMeta(dto: RecordingDto): CallRecordingMeta {\n return {\n callId: dto.callId,\n status: normalizeRecordingStatus(dto.status, dto.url),\n url: dto.url ?? null,\n contentType: dto.contentType,\n durationSeconds: dto.durationSeconds,\n message: dto.message,\n };\n}\n\nexport function mapLiveCallDto(dto: LiveCallDto): LiveCall {\n const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();\n const dob = dobRaw ? dobRaw.slice(0, 10) : undefined;\n const ageNum =\n typeof dto.age === 'number'\n ? dto.age\n : dto.age != null && String(dto.age).trim()\n ? Number(dto.age)\n : null;\n const age =\n ageNum != null && Number.isFinite(ageNum) ? ageNum : ageFromDob(dob);\n const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;\n\n return {\n id: dto.id,\n name: dto.name,\n initials: dto.initials || (dto.matched ? '' : '?'),\n avatar: dto.avatar,\n phone: dto.phone,\n verification: mapVerification(dto.verification),\n direction: dto.direction,\n reason: dto.reason,\n status: mapCallStatus(dto.status),\n started: dto.started,\n sentiment: mapSentiment(dto.sentiment),\n confidence: normalizeConfidence(dto.confidence),\n goal: dto.goal,\n dob,\n age,\n gender,\n location: dto.location ?? '',\n provider: dto.provider,\n language: dto.language,\n matched: dto.matched,\n assigned: dto.assigned,\n controlMode: mapControlMode(dto.controlMode, dto.status, dto.aiPaused),\n tools: (dto.tools ?? []).map(mapToolEvent),\n transcript: (dto.transcript ?? []).map(mapTranscriptLine),\n aiPaused: dto.aiPaused === true || String(dto.controlMode ?? '').toLowerCase() === 'paused',\n aiHandedOff: dto.aiHandedOff === true,\n };\n}\n\nexport function mapHistoryCallDto(dto: HistoryCallDto): HistoryCall {\n const parsedStarted = Date.parse(dto.startedAt ?? dto.when);\n const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();\n const ageNum =\n typeof dto.age === 'number'\n ? dto.age\n : dto.age != null && String(dto.age).trim()\n ? Number(dto.age)\n : null;\n const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;\n const handledRaw = String(dto.handledBy ?? dto.handler ?? '').trim().toLowerCase();\n let handledBy: HistoryCall['handledBy'];\n if (handledRaw === 'staff' || handledRaw === 'human' || handledRaw === 'user') {\n handledBy = 'staff';\n } else if (handledRaw === 'ai' || handledRaw === 'agent' || handledRaw === 'ava') {\n handledBy = 'ai';\n } else if (String(dto.outcome ?? '').toLowerCase().includes('transfer')) {\n handledBy = 'staff';\n } else {\n handledBy = 'ai';\n }\n\n return {\n id: dto.id,\n name: dto.name,\n initials: dto.initials || '?',\n phone: dto.phone,\n direction: dto.dir,\n outcome: dto.outcome,\n resolution: dto.resolution ?? null,\n reason: dto.reason,\n duration: parseDurToSeconds(dto.dur),\n durationLabel: dto.dur,\n started: Number.isFinite(parsedStarted) ? parsedStarted : 0,\n whenLabel: Number.isFinite(parsedStarted) ? undefined : dto.when,\n location: dto.location,\n verification: mapVerification(dto.verify),\n review: dto.review === 'reviewed' ? 'reviewed' : 'needs',\n handledBy,\n dob: dobRaw ? dobRaw.slice(0, 10) : null,\n age: ageNum != null && Number.isFinite(ageNum) ? ageNum : null,\n gender,\n results: Array.isArray(dto.actions)\n ? dto.actions.map((a) => String(a).trim()).filter(Boolean)\n : [],\n risk: dto.risk ?? null,\n };\n}\n\nexport function mapHistoryDetailDto(\n call: HistoryCallDto,\n detail: HistoryDetailDto,\n recordingUrl?: string | null,\n): HistoryDetail {\n const base = mapHistoryCallDto(call);\n return {\n ...base,\n summary: detail.summary,\n transcript: (detail.transcript ?? []).map(mapTranscriptLine),\n tools: (detail.tools ?? []).map(mapToolEvent),\n recordingUrl: recordingUrl ?? undefined,\n };\n}\n\nexport function mapAttentionItemDto(dto: AttentionItemDto): AttentionItem {\n return {\n id: dto.id,\n callId: dto.id,\n title: dto.name,\n detail: dto.why || dto.reason,\n severity: dto.sev === 'urgent' ? 'urgent' : 'warn',\n time: Date.now(),\n timeLabel: dto.time,\n };\n}\n\nexport function mapDashboardSummaryDto(dto: DashboardSummaryDto): DashboardData['stats'] {\n return {\n activeCalls: dto.liveCalls,\n answeredToday: dto.callsToday,\n appointmentsBooked: dto.appointmentsBooked ?? 0,\n tasksCreated: dto.openTasks,\n completionRate: parsePercent(dto.aiHandledRate),\n };\n}\n\nexport function mapAiCreatedAppointmentDto(\n dto: AiCreatedAppointmentDto,\n): AiCreatedAppointment {\n return {\n id: dto.id,\n appointmentId: dto.appointmentId ?? dto.id,\n patientName: dto.patientName || 'Unknown patient',\n providerName: dto.providerName ?? null,\n startTime: Date.parse(dto.startTime) || 0,\n createdAt: Date.parse(dto.createdAt) || 0,\n callId: dto.callId ?? null,\n status: dto.status ?? null,\n };\n}\n\nexport function mapTaskDto(dto: TaskDto): TaskItem {\n let status: TaskItem['status'] = 'open';\n if (dto.status === 'done') status = 'done';\n else if (dto.status === 'in-progress') status = 'in_progress';\n\n return {\n id: dto.id,\n created: dto.created ? Date.parse(dto.created) || Date.now() : Date.now(),\n title: dto.title || dto.type || 'Task',\n type: dto.type || 'Other',\n description: dto.summary ?? '',\n patient: dto.patient || '—',\n priority: dto.priority ?? 'normal',\n status,\n source: dto.source ?? 'voice',\n assignee: dto.assignee || '—',\n callId: dto.call || undefined,\n edvakTaskId: dto.edvakTaskId,\n edvakStatus: dto.edvakStatus,\n medicationName: dto.medicationName,\n medicationId: dto.medicationId,\n };\n}\n\nexport function toApiTaskStatus(status: TaskItem['status']): TaskDto['status'] {\n if (status === 'done') return 'done';\n if (status === 'in_progress') return 'in-progress';\n return 'open';\n}\n\nexport function mapCreateTaskRequest(req: CreateTaskRequest): CreateTaskDto {\n return {\n title: req.title.trim(),\n type: req.type,\n call: req.callId,\n summary: req.description?.trim() || undefined,\n patient: req.patient?.trim() || undefined,\n priority: req.priority,\n assignee: req.assignee?.trim() || undefined,\n };\n}\n\nexport function mapRegenerateSummaryResponse(\n dto: RegenerateSummaryResponseDto,\n): RegenerateSummaryResult {\n return {\n callId: dto.callId,\n summary: dto.summary,\n summaryModel: dto.summaryModel,\n summaryGeneratedAt: dto.summaryGeneratedAt,\n transcriptTurnCount: dto.transcriptTurnCount,\n };\n}\n\nexport function mapAuditEventDto(dto: AuditEventDto, index: number): AuditEvent {\n return {\n id: `${dto.ts}-${index}`,\n actor: dto.actorName || dto.actor,\n action: dto.event,\n target: dto.call || dto.patient || dto.cat,\n detail: dto.detail,\n at: dto.ts ? Date.parse(dto.ts) || Date.now() : Date.now(),\n };\n}\n\nexport function mapAnalyticsDto(dto: AnalyticsDto, range: string): AnalyticsData {\n const volume = mapVolumeSeries(dto.volume);\n const peakHours = mapPeakSeries(dto.peak);\n\n const outcomes = (dto.outcomes ?? []).map((o) => ({\n label: o.label,\n value: o.v,\n color: TONE_COLORS[o.tone] ?? TONE_COLORS['brand'],\n }));\n\n const reasons = (dto.reasons ?? []).map((r) => ({ label: r.label, value: r.v }));\n const transfers = (dto.transfers ?? []).map((t) => ({ label: t.label, value: t.v }));\n\n const kpiCards: AnalyticsData['kpiCards'] = (dto.kpis ?? []).map((k) => ({\n label: k.label,\n value: k.value,\n delta: k.delta,\n tone: k.tone,\n sub: k.sub,\n }));\n\n const kpiMap: Record<string, number> = {};\n for (const k of dto.kpis ?? []) {\n const key = k.label.toLowerCase();\n const num = parseAnalyticsNumber(k.value);\n if (key.includes('handled') || key.includes('total call') || key === 'calls') {\n kpiMap['totalCalls'] = num;\n } else if (key.includes('handle time') || key.includes('avg duration') || key.includes('duration')) {\n kpiMap['avgDuration'] = parseDurationSeconds(k.value);\n } else if (key.includes('resolution') || key.includes('booking')) {\n kpiMap['bookingRate'] = num;\n } else if (key.includes('transfer')) {\n kpiMap['transferRate'] = num;\n }\n }\n\n return {\n range,\n kpiCards,\n volume,\n outcomes,\n reasons,\n transfers,\n peakHours,\n kpis: {\n totalCalls: kpiMap['totalCalls'] ?? 0,\n avgDuration: kpiMap['avgDuration'] ?? 0,\n bookingRate: kpiMap['bookingRate'] ?? 0,\n transferRate: kpiMap['transferRate'] ?? 0,\n },\n };\n}\n\nfunction parseAnalyticsNumber(value: string): number {\n const cleaned = String(value).replace(/[^\\d.]/g, '');\n const num = Number(cleaned);\n return Number.isFinite(num) ? num : 0;\n}\n\nfunction parseDurationSeconds(value: string): number {\n const trimmed = value.trim();\n const clock = /^(\\d+):(\\d{2})$/.exec(trimmed);\n if (clock) {\n return Number(clock[1]) * 60 + Number(clock[2]);\n }\n return parseAnalyticsNumber(trimmed);\n}\n\nfunction isVolumeSeriesDto(raw: AnalyticsDto['volume']): raw is AnalyticsVolumeSeriesDto {\n return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;\n}\n\nfunction isPeakSeriesDto(raw: AnalyticsDto['peak']): raw is AnalyticsPeakSeriesDto {\n return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;\n}\n\nfunction formatLegacyHourLabel(hour: number): string {\n if (hour === 0) return '12 AM';\n if (hour < 12) return `${hour} AM`;\n if (hour === 12) return '12 PM';\n return `${hour - 12} PM`;\n}\n\nfunction mapVolumeSeries(raw: AnalyticsDto['volume']): AnalyticsVolumeSeries {\n if (isVolumeSeriesDto(raw)) {\n return {\n timezone: raw.timezone ?? 'UTC',\n startDate: raw.startDate ?? '',\n endDate: raw.endDate ?? '',\n points: (raw.points ?? []).map((p) => ({\n date: p.date,\n day: p.day,\n label: p.label,\n count: p.count,\n inbound: p.inbound,\n outbound: p.outbound,\n })),\n };\n }\n\n const values = Array.isArray(raw) ? raw : [];\n return {\n timezone: 'UTC',\n startDate: '',\n endDate: '',\n points: values.map((count, i) => ({\n date: '',\n day: DAY_LABELS[i % DAY_LABELS.length] ?? `D${i + 1}`,\n label: DAY_LABELS[i % DAY_LABELS.length] ?? `Day ${i + 1}`,\n count,\n })),\n };\n}\n\nfunction mapPeakSeries(raw: AnalyticsDto['peak']): AnalyticsPeakSeries {\n if (isPeakSeriesDto(raw)) {\n return {\n timezone: raw.timezone ?? 'UTC',\n points: (raw.points ?? []).map((p) => ({\n hour: p.hour,\n label: p.label,\n count: p.count,\n })),\n };\n }\n\n const values = Array.isArray(raw) ? raw : [];\n return {\n timezone: 'UTC',\n points: values.map((count, hour) => ({\n hour,\n label: formatLegacyHourLabel(hour),\n count,\n })),\n };\n}\n\nfunction asExplicitBool(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') return value;\n if (value === 1 || value === 'true' || value === '1') return true;\n if (value === 0 || value === 'false' || value === '0') return false;\n return undefined;\n}\n\n/** True/false only when the payload has a real online flag — not setup `activated`. */\nexport function readExplicitAgentOnline(\n raw: unknown,\n opts?: { acceptEnabled?: boolean },\n): boolean | undefined {\n if (!raw || typeof raw !== 'object') return undefined;\n const r = raw as Record<string, unknown>;\n const nested = r['data'];\n const sources: Record<string, unknown>[] = [r];\n if (nested && typeof nested === 'object' && !Array.isArray(nested)) {\n sources.push(nested as Record<string, unknown>);\n }\n const keys = opts?.acceptEnabled\n ? ['agentOnline', 'agent_online', 'agentOn', 'agent_on', 'enabled']\n : ['agentOnline', 'agent_online', 'agentOn', 'agent_on'];\n for (const src of sources) {\n for (const key of keys) {\n const parsed = asExplicitBool(src[key]);\n if (parsed !== undefined) return parsed;\n }\n }\n return undefined;\n}\n\nexport function mapStatusDto(\n dto: AiStatusDto,\n opts?: { acceptEnabled?: boolean },\n): AiReceptionistStatus {\n const explicit = readExplicitAgentOnline(dto, opts);\n const step = dto.setupStep ?? (dto.activated ? 11 : 0);\n return {\n agentOn: explicit ?? false,\n agentOnExplicit: explicit !== undefined,\n mode: 'live',\n readiness: Math.min(100, Math.round((step / 11) * 100)),\n };\n}\n\nexport function mapSetupDto(dto: SetupDto): SetupData {\n const stepCount = 11;\n const steps = Array.from({ length: stepCount }, (_, i) => ({\n id: i + 1,\n title: `Setup step ${i + 1}`,\n description: dto.activated ? 'Complete' : i + 1 < dto.step ? 'Complete' : 'Pending',\n complete: dto.activated || i + 1 < dto.step,\n }));\n\n return {\n readiness: Math.min(100, Math.round((dto.step / stepCount) * 100)),\n steps,\n testTranscript: [],\n };\n}\n\nexport function mapSettingsResponse(body: unknown, safetyBody: unknown): AgentSettings {\n const raw = body as {\n settings?: Record<string, unknown>;\n effectiveWelcomeMessage?: string;\n };\n const settings = raw?.settings ?? (body as Record<string, unknown>) ?? {};\n\n const section = (key: string): Record<string, string | boolean | number> => {\n const val = settings[key];\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n return val as Record<string, string | boolean | number>;\n }\n return {};\n };\n\n const safetyRaw = safetyBody as {\n checks?: Array<{ id: string; ok: boolean; label?: string }>;\n };\n const safety = (safetyRaw?.checks ?? []).map((c) => ({\n id: c.id,\n label: c.label ?? humanizeSettingsKey(c.id),\n status: c.ok ? ('ok' as const) : ('warn' as const),\n }));\n\n const mapped: AgentSettings = {\n general: normalizeGeneralSection(section('general')),\n phone: normalizePhoneSection(section('phoneAvailability')),\n tasks: section('allowedTasks'),\n scheduling: section('schedulingRules'),\n refill: section('refillRules'),\n verify: section('patientVerification'),\n escalation: section('humanEscalation'),\n outbound: section('outboundCalling'),\n knowledge: normalizeKnowledgeSection(section('knowledgeBase')),\n safety,\n transcripts: normalizeTranscriptsSection(section('transcriptsRecording')),\n advanced: normalizeAdvancedSection(section('advanced')),\n };\n\n mapped.effectiveWelcomeMessage =\n raw.effectiveWelcomeMessage ?? computeEffectiveWelcomeMessage(mapped);\n\n const root = body as Record<string, unknown>;\n mapped.effectiveVoiceSystemPrompt = String(\n root['effectiveVoiceSystemPrompt'] ??\n root['effective_voice_system_prompt'] ??\n mapped.advanced['voiceSystemPrompt'] ??\n '',\n );\n const usingDefaultRaw =\n root['usingDefaultVoiceSystemPrompt'] ?? root['using_default_voice_system_prompt'];\n mapped.usingDefaultVoiceSystemPrompt =\n typeof usingDefaultRaw === 'boolean'\n ? usingDefaultRaw\n : !String(mapped.advanced['voiceSystemPrompt'] ?? '').trim();\n\n if (!mapped.knowledge) {\n mapped.knowledge = { whatToSay: '', whatNotToSay: '' };\n }\n\n return mapped;\n}\n\nfunction normalizeAdvancedSection(\n raw: Record<string, string | boolean | number>,\n): Record<string, string | boolean | number> {\n return {\n ...raw,\n voiceSystemPrompt: String(\n raw['voiceSystemPrompt'] ?? raw['voice_system_prompt'] ?? '',\n ),\n customVoiceInstructions: String(\n raw['customVoiceInstructions'] ?? raw['custom_voice_instructions'] ?? '',\n ),\n };\n}\n\nfunction normalizeKnowledgeSection(\n raw: Record<string, string | boolean | number>,\n): Record<string, string | boolean | number> {\n return {\n ...raw,\n whatToSay: String(raw['whatToSay'] ?? raw['what_to_say'] ?? ''),\n whatNotToSay: String(raw['whatNotToSay'] ?? raw['what_not_to_say'] ?? ''),\n };\n}\n\nfunction normalizeGeneralSection(\n raw: Record<string, string | boolean | number>,\n): Record<string, string | boolean | number> {\n const language = String(raw['language'] ?? 'English');\n const languagesRaw = raw['languages'] ?? raw['languageList'] ?? language;\n const languages = Array.isArray(languagesRaw)\n ? languagesRaw.map(String).join(',')\n : String(languagesRaw || language);\n return {\n ...raw,\n languages,\n tone: String(raw['tone'] ?? 'professional'),\n };\n}\n\nfunction normalizePhoneSection(\n raw: Record<string, string | boolean | number>,\n): Record<string, string | boolean | number> {\n const locationIds = raw['locationIds'] ?? raw['location_ids'] ?? raw['locationsHandled'] ?? '';\n const locations =\n Array.isArray(locationIds) ? locationIds.map(String).join(',') : String(locationIds ?? '');\n const afterHoursBehavior = String(\n raw['afterHoursBehavior'] ??\n raw['after_hours_behavior'] ??\n (raw['afterHours'] === false ? 'voicemail' : 'ai_answers'),\n );\n return {\n ...raw,\n answerMode: String(raw['answerMode'] ?? raw['answer_mode'] ?? 'always_first'),\n mainNumber: String(raw['mainNumber'] ?? raw['main_number'] ?? ''),\n transferNumber: String(raw['transferNumber'] ?? raw['transfer_number'] ?? ''),\n ringTimeout: Number(raw['ringTimeout'] ?? raw['ring_timeout'] ?? 20) || 20,\n createFollowUpTask: Boolean(\n raw['createFollowUpTask'] ?? raw['create_follow_up_task'] ?? false,\n ),\n locationIds: locations,\n maxCallDurationMin:\n Number(raw['maxCallDurationMin'] ?? raw['max_call_duration_min'] ?? 5) || 5,\n silenceTimeoutSec:\n Number(raw['silenceTimeoutSec'] ?? raw['silence_timeout_sec'] ?? 30) || 30,\n afterHoursBehavior,\n };\n}\n\nfunction normalizeTranscriptsSection(\n raw: Record<string, string | boolean | number>,\n): Record<string, string | boolean | number> {\n const legacyRetain = Number(raw['retainDays'] ?? raw['retain_days'] ?? 30) || 30;\n return {\n ...raw,\n recordingRetainDays:\n Number(raw['recordingRetainDays'] ?? raw['recording_retain_days'] ?? legacyRetain) ||\n legacyRetain,\n transcriptRetainDays:\n Number(raw['transcriptRetainDays'] ?? raw['transcript_retain_days'] ?? legacyRetain) ||\n legacyRetain,\n disclosureWarningEnabled: Boolean(\n raw['disclosureWarningEnabled'] ?? raw['disclosure_warning_enabled'] ?? true,\n ),\n disclosureWarningText: String(\n raw['disclosureWarningText'] ??\n raw['disclosure_warning_text'] ??\n 'This call may be handled by an automated assistant and could be recorded for quality and training. You can ask to speak with a staff member at any time.',\n ),\n };\n}\n\nfunction humanizeSettingsKey(key: string): string {\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/_/g, ' ')\n .trim()\n .replace(/^\\w/, (c) => c.toUpperCase());\n}\n\n/** Map frontend AgentSettings → backend PUT body section keys. */\nexport function mapSettingsToRequest(settings: AgentSettings): Record<string, unknown> {\n return {\n general: settings.general,\n phoneAvailability: settings.phone,\n allowedTasks: settings.tasks,\n schedulingRules: settings.scheduling,\n refillRules: settings.refill,\n patientVerification: settings.verify,\n humanEscalation: settings.escalation,\n outboundCalling: settings.outbound,\n knowledgeBase: settings.knowledge,\n transcriptsRecording: settings.transcripts,\n advanced: settings.advanced,\n };\n}\n\nexport function mapLocationDto(raw: unknown): LocationOption {\n const r = raw as { locationId?: string; locationName?: string; id?: string; name?: string };\n return {\n id: r.locationId ?? r.id ?? '',\n name: r.locationName ?? r.name ?? '',\n };\n}\n\nexport function mapProviderDto(raw: unknown): ProviderOption {\n const r = raw as { providerId?: string; fullName?: string; id?: string; name?: string };\n return {\n id: r.providerId ?? r.id ?? '',\n name: r.fullName ?? r.name ?? '',\n };\n}\n\nexport function asTranscriptList(body: unknown): LiveTranscriptLineDto[] {\n if (Array.isArray(body)) return body as LiveTranscriptLineDto[];\n if (!body || typeof body !== 'object') return [];\n const o = body as Record<string, unknown>;\n const list = o['lines'] ?? o['transcript'] ?? o['items'] ?? o['data'];\n return Array.isArray(list) ? (list as LiveTranscriptLineDto[]) : [];\n}\n\nexport function isHistoryCallDto(raw: unknown): raw is HistoryCallDto {\n return !!raw && typeof raw === 'object' && 'dir' in (raw as object);\n}\n\nexport function asHistoryList(body: unknown): HistoryCallDto[] {\n if (Array.isArray(body)) return body as HistoryCallDto[];\n const list = body as HistoryListDto;\n return list?.items ?? [];\n}\n\nexport function asLiveCallList(body: unknown): LiveCallDto[] {\n if (Array.isArray(body)) return body as LiveCallDto[];\n if (!body || typeof body !== 'object') return [];\n const o = body as Record<string, unknown>;\n const list = o['items'] ?? o['data'] ?? o['calls'] ?? o['liveCalls'];\n return Array.isArray(list) ? (list as LiveCallDto[]) : [];\n}\n\nexport function asTaskList(body: unknown): TaskDto[] {\n if (Array.isArray(body)) return body as TaskDto[];\n const list = body as { items?: TaskDto[] };\n return list?.items ?? [];\n}\n\nexport function asAuditList(body: unknown): AuditEventDto[] {\n if (Array.isArray(body)) return body as AuditEventDto[];\n const list = body as { items?: AuditEventDto[] };\n return list?.items ?? [];\n}\n\nexport function asAttentionList(body: unknown): AttentionItemDto[] {\n if (Array.isArray(body)) return body as AttentionItemDto[];\n return [];\n}\n","export function filenameFromContentDisposition(\n header: string | null | undefined,\n fallback: string,\n): string {\n if (!header) return fallback;\n const utf = /filename\\*=(?:UTF-8'')?([^;]+)/i.exec(header);\n if (utf?.[1]) {\n try {\n return decodeURIComponent(utf[1].trim().replace(/^\"(.*)\"$/, '$1'));\n } catch {\n return utf[1].trim();\n }\n }\n const plain = /filename=\"?([^\";]+)\"?/i.exec(header);\n return plain?.[1]?.trim() || fallback;\n}\n\nexport function triggerBlobDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.rel = 'noopener';\n a.click();\n URL.revokeObjectURL(url);\n}\n","import { ApiLogDetail, ApiLogListItem, ApiLogStats } from '../models/api-log.types';\n\nconst now = Date.now();\n\nfunction item(\n partial: Partial<ApiLogListItem> & Pick<ApiLogListItem, 'id' | 'provider' | 'operation'>,\n): ApiLogListItem {\n return {\n callId: 'LC-4821',\n clientPracticeId: 'practice-demo',\n method: 'POST',\n urlPath: '/api/v1/patients/search',\n statusCode: 200,\n success: true,\n durationMs: 340,\n toolName: null,\n errorMessage: null,\n startedAt: new Date(now - 120_000).toISOString(),\n requestPreview: '{\"phone\":\"+15551234567\"}',\n responsePreview: '{\"items\":[{\"id\":\"p1\"}]}',\n ...partial,\n };\n}\n\nexport const SEED_CALL_API_LOGS: Record<string, ApiLogListItem[]> = {\n 'LC-4821': [\n item({\n id: 'log-1',\n provider: 'vonage',\n operation: 'answer_call',\n method: 'POST',\n urlPath: '/vonage/answer',\n statusCode: 200,\n durationMs: 120,\n startedAt: new Date(now - 300_000).toISOString(),\n requestPreview: '{\"callId\":\"...\"}',\n responsePreview: '{\"status\":\"connected\"}',\n }),\n item({\n id: 'log-2',\n provider: 'edvak',\n operation: 'search_patient',\n toolName: 'search_patient',\n method: 'GET',\n urlPath: '/api/v1/patients',\n statusCode: 200,\n durationMs: 420,\n startedAt: new Date(now - 240_000).toISOString(),\n }),\n item({\n id: 'log-3',\n provider: 'openai',\n operation: 'chat_completion',\n method: 'POST',\n urlPath: '/v1/chat/completions',\n statusCode: 200,\n durationMs: 890,\n startedAt: new Date(now - 180_000).toISOString(),\n requestPreview: '{\"model\":\"gpt-4o-mini\"}',\n responsePreview: '{\"choices\":[...]}',\n }),\n item({\n id: 'log-4',\n provider: 'edvak',\n operation: 'create_appointment',\n toolName: 'create_appointment',\n method: 'POST',\n urlPath: '/api/appointments',\n statusCode: 201,\n durationMs: 560,\n startedAt: new Date(now - 60_000).toISOString(),\n }),\n ],\n 'HC-9001': [\n item({\n id: 'log-f1',\n callId: 'HC-9001',\n provider: 'edvak',\n operation: 'search_patient',\n toolName: 'search_patient',\n statusCode: 500,\n success: false,\n durationMs: 2100,\n errorMessage: 'Internal Server Error',\n startedAt: new Date(now - 86_400_000).toISOString(),\n }),\n ],\n};\n\nexport const SEED_API_LOG_DETAILS: Record<string, ApiLogDetail> = {\n 'log-4': {\n ...SEED_CALL_API_LOGS['LC-4821'][3],\n traceId: 'trace-abc-123',\n requestBody: { patientId: 'p1', slotId: 'slot-9', reason: 'Annual checkup' },\n responseBody: { appointmentId: 'apt-42', status: 'confirmed' },\n metadata: { practiceId: 'prac-1', locationId: 'loc-1' },\n completedAt: new Date(now - 59_500).toISOString(),\n },\n 'log-f1': {\n ...SEED_CALL_API_LOGS['HC-9001'][0],\n traceId: 'trace-err-999',\n requestBody: { phone: '+15559876543' },\n responseBody: { error: 'Internal Server Error', message: 'Database timeout' },\n metadata: { retryCount: 1 },\n completedAt: new Date(now - 86_398_000).toISOString(),\n },\n};\n\nexport function allSeedLogs(): ApiLogListItem[] {\n return Object.values(SEED_CALL_API_LOGS).flat();\n}\n\nexport const SEED_API_LOG_STATS: ApiLogStats = {\n last24h: { total: 128, failed: 4, avgDurationMs: 680 },\n byProvider: [\n { provider: 'edvak', total: 52, failed: 3 },\n { provider: 'openai', total: 38, failed: 0 },\n { provider: 'vonage', total: 24, failed: 1 },\n { provider: 'livekit', total: 14, failed: 0 },\n ],\n recentFailures: [\n item({\n id: 'log-fail-1',\n callId: 'HC-9001',\n provider: 'edvak',\n operation: 'search_patient',\n statusCode: 500,\n success: false,\n durationMs: 2100,\n errorMessage: 'Internal Server Error',\n startedAt: new Date(now - 3_600_000).toISOString(),\n }),\n item({\n id: 'log-fail-2',\n callId: 'LC-4819',\n provider: 'vonage',\n operation: 'transfer',\n statusCode: 503,\n success: false,\n durationMs: 1500,\n errorMessage: 'Service unavailable',\n startedAt: new Date(now - 7_200_000).toISOString(),\n }),\n item({\n id: 'log-fail-3',\n callId: null,\n provider: 'edvak',\n operation: 'list_providers',\n statusCode: 500,\n success: false,\n durationMs: 980,\n errorMessage: 'Gateway timeout',\n startedAt: new Date(now - 10_800_000).toISOString(),\n }),\n ],\n};\n","import {\n AgentSettings,\n AnalyticsData,\n AuditEvent,\n DashboardData,\n HistoryCall,\n HistoryDetail,\n LiveCall,\n LocationOption,\n ProviderOption,\n SetupData,\n TaskItem,\n TranscriptLine,\n} from '../models/ai-receptionist.types';\n\nconst now = Date.now();\nconst min = (m: number) => now - m * 60_000;\n\nconst baseTranscript: TranscriptLine[] = [\n { who: 'system', text: 'Call connected · inbound PSTN' },\n {\n who: 'ai',\n text: 'Good afternoon, thank you for calling Riverside Family Medicine. How can I help you today?',\n },\n { who: 'patient', text: \"Hi, I'd like to reschedule my appointment for next Tuesday.\" },\n {\n who: 'ai',\n text: 'I can help with that. May I verify your date of birth and the name on the account?',\n flag: 'verify',\n },\n { who: 'patient', text: 'March 14, 1985 — Maria Santos.' },\n { who: 'ai', text: 'Thank you, Maria. I found your chart. You have a visit with Dr. Chen on Tuesday at 2:30 PM.' },\n { who: 'patient', text: 'Can we move it to Thursday morning instead?' },\n { who: 'ai', text: 'Checking availability with scheduling…' },\n];\n\nconst streamingLines: TranscriptLine[] = [\n { who: 'ai', text: 'I have Thursday at 9:15 AM or 10:40 AM with Dr. Chen. Which works better?' },\n { who: 'patient', text: '9:15 is perfect.' },\n { who: 'ai', text: 'Great — I’ve moved your appointment to Thursday at 9:15 AM. You’ll receive a confirmation text shortly.' },\n];\n\nexport const SEED_LIVE_CALLS: LiveCall[] = [\n {\n id: 'LC-4821',\n name: 'Maria Santos',\n initials: 'MS',\n avatar: null,\n phone: '+1 (512) 555-0142',\n verification: 'verified',\n direction: 'inbound',\n reason: 'Reschedule appointment',\n status: 'ai',\n started: min(4),\n sentiment: 'calm',\n confidence: 92,\n goal: 'Reschedule visit with Dr. Chen',\n dob: '1985-03-14',\n age: 41,\n gender: 'F',\n location: 'Riverside Main',\n provider: 'Dr. Elena Chen',\n language: 'English',\n matched: true,\n assigned: null,\n tools: [\n {\n t: '0:42',\n key: 'search_patients',\n name: 'Searched Patients',\n tech: 'tool_search_patients',\n result: 'Matched DOB + name',\n state: 'ok',\n },\n {\n t: '1:18',\n key: 'check_doctor_availability',\n name: 'Checked Doctor Availability',\n tech: 'tool_check_doctor_availability',\n result: '1 upcoming visit',\n state: 'ok',\n },\n {\n t: '2:05',\n key: 'check_doctor_availability',\n name: 'Checked Doctor Availability',\n tech: 'tool_check_doctor_availability',\n result: '2 slots found',\n state: 'active',\n },\n ],\n transcript: [...baseTranscript],\n },\n {\n id: 'LC-4819',\n name: 'James Okonkwo',\n initials: 'JO',\n avatar: null,\n phone: '+1 (737) 555-0198',\n verification: 'partial',\n direction: 'inbound',\n reason: 'Medication refill — urgent',\n status: 'needs-help',\n started: min(7),\n sentiment: 'frustrated',\n confidence: 71,\n goal: 'Refill lisinopril 10mg',\n dob: '1978-09-22',\n age: 47,\n gender: 'M',\n location: 'North Clinic',\n provider: 'Dr. Patel',\n language: 'English',\n matched: true,\n assigned: 'Front desk queue',\n tools: [\n {\n t: '0:55',\n key: 'search_patients',\n name: 'Searched Patients',\n tech: 'tool_search_patients',\n result: 'Partial match',\n state: 'warn',\n },\n {\n t: '1:40',\n key: 'submit_medication_refill',\n name: 'Submitted Medication Refill',\n tech: 'tool_submit_medication_refill',\n result: 'Requires staff review',\n state: 'warn',\n },\n ],\n transcript: [\n { who: 'ai', text: 'Thank you for calling North Clinic. How may I assist you?' },\n { who: 'patient', text: 'I need my blood pressure medication refilled today — I’m out of pills.' },\n { who: 'ai', text: 'I understand. Let me pull up your chart and check refill eligibility.', flag: 'verify' },\n { who: 'patient', text: \"I've been a patient for years, this shouldn't be so hard.\" },\n { who: 'system', text: 'Escalation suggested — sentiment frustrated', flag: 'escalate' },\n ],\n },\n {\n id: 'LC-4815',\n name: 'Unknown caller',\n initials: '?',\n avatar: null,\n phone: '+1 (512) 555-0881',\n verification: 'unknown',\n direction: 'inbound',\n reason: 'Billing question',\n status: 'human-requested',\n started: min(2),\n sentiment: 'neutral',\n confidence: 58,\n goal: 'Speak with billing',\n location: 'Riverside Main',\n provider: null,\n language: 'English',\n matched: false,\n assigned: null,\n tools: [\n {\n t: '0:30',\n key: 'search_practice_faq',\n name: 'Searched Practice FAQ',\n tech: 'tool_search_practice_faq',\n result: 'Billing / human handoff',\n state: 'ok',\n },\n ],\n transcript: [\n { who: 'ai', text: 'Good afternoon. How can I help you today?' },\n { who: 'patient', text: 'I need to talk to someone in billing about my statement.' },\n { who: 'ai', text: 'I can connect you with our billing team. One moment while I transfer you.' },\n ],\n },\n];\n\nexport const SEED_ATTENTION = [\n {\n id: 'ATT-1',\n callId: 'LC-4819',\n title: 'Refill needs staff approval',\n detail: 'Patient out of medication — partial verification',\n severity: 'urgent' as const,\n time: min(1),\n },\n {\n id: 'ATT-2',\n callId: 'LC-4815',\n title: 'Human requested',\n detail: 'Billing transfer pending',\n severity: 'warn' as const,\n time: min(0.5),\n },\n {\n id: 'ATT-3',\n callId: 'LC-4821',\n title: 'Scheduling in progress',\n detail: 'AI handling — monitor recommended',\n severity: 'info' as const,\n time: min(3),\n },\n];\n\nexport const SEED_HISTORY: HistoryCall[] = [\n {\n id: 'HC-9001',\n name: 'Sooraj Jagadeesh',\n initials: 'SJ',\n phone: '+1 (512) 555-0211',\n direction: 'inbound',\n outcome: 'Appointment booked',\n reason: 'Appointment Refill',\n duration: 252,\n durationLabel: '4:12',\n started: Date.parse('2026-06-12T14:20:00'),\n location: 'Riverside Main',\n verification: 'verified',\n review: 'reviewed',\n handledBy: 'ai',\n dob: '2002-06-30',\n age: 23,\n gender: 'M',\n results: ['Appointment Booked'],\n },\n {\n id: 'HC-9002',\n name: 'Unknown Caller',\n initials: '?',\n phone: '+1 (555) 010-2299',\n direction: 'outbound',\n outcome: 'Task created',\n reason: 'Appointment',\n duration: 165,\n durationLabel: '2:45',\n started: Date.parse('2026-06-12T11:05:00'),\n location: 'North Clinic',\n verification: 'unknown',\n review: 'needs',\n handledBy: 'ai',\n results: ['Task Created'],\n risk: 'review',\n },\n {\n id: 'HC-9003',\n name: 'Dinesh Kumar',\n initials: 'DK',\n phone: '+1 (512) 555-0444',\n direction: 'inbound',\n outcome: 'Completed',\n reason: 'Appointment',\n duration: 372,\n durationLabel: '6:12',\n started: Date.parse('2026-06-11T16:45:00'),\n location: 'Riverside Main',\n verification: 'verified',\n review: 'reviewed',\n handledBy: 'staff',\n dob: '1988-03-14',\n age: 38,\n gender: 'M',\n results: ['Patient Registered', 'Appointment Booked'],\n },\n {\n id: 'HC-9004',\n name: 'Meera Banerjee',\n initials: 'MB',\n phone: '+1 (512) 555-0555',\n direction: 'inbound',\n outcome: 'Completed',\n reason: 'Information',\n duration: 93,\n durationLabel: '1:33',\n started: Date.parse('2026-06-11T09:12:00'),\n location: 'South Clinic',\n verification: 'partial',\n review: 'needs',\n handledBy: 'ai',\n dob: '1995-11-02',\n age: 30,\n gender: 'F',\n results: ['Information Provided'],\n },\n {\n id: 'HC-9005',\n name: 'Emily Foster',\n initials: 'EF',\n phone: '+1 (737) 555-0666',\n direction: 'inbound',\n outcome: 'Completed',\n reason: 'Hours & directions',\n duration: 89,\n durationLabel: '1:29',\n started: Date.parse('2026-06-10T13:40:00'),\n location: 'North Clinic',\n verification: 'unknown',\n review: 'reviewed',\n handledBy: 'ai',\n results: ['Information Provided'],\n },\n];\n\nexport const SEED_HISTORY_DETAILS: Record<string, HistoryDetail> = {\n 'HC-9001': {\n ...SEED_HISTORY[0],\n summary:\n 'New patient intake completed. AI collected demographics, verified insurance, and booked initial visit with Dr. Chen for next Monday at 10:00 AM.',\n transcript: [\n { who: 'ai', text: 'Welcome to Riverside Family Medicine. Are you a new patient?', at: 8 },\n { who: 'patient', text: 'Yes, I need to establish care.', at: 22 },\n { who: 'ai', text: 'I can help schedule your first visit. May I collect a few details?', at: 38 },\n { who: 'patient', text: 'Sure.', at: 62 },\n { who: 'ai', text: 'Booked: Mon 10:00 AM with Dr. Chen. Confirmation sent via SMS.', at: 285 },\n ],\n tools: [\n {\n t: '1:02',\n key: 'register_and_book_appointment',\n name: 'Registered & Booked Appointment',\n tech: 'tool_register_and_book_appointment',\n result: 'Chart created',\n state: 'ok',\n },\n {\n t: '3:45',\n key: 'book_existing_appointment',\n name: 'Booked Appointment',\n tech: 'tool_book_existing_appointment',\n result: 'Slot reserved',\n state: 'ok',\n },\n ],\n recordingUrl: '#mock-recording',\n },\n};\n\nexport const SEED_TASKS: TaskItem[] = [\n {\n id: 'TK-101',\n created: min(180),\n title: 'Refill: Lisinopril 10mg',\n type: 'Refill request',\n description: 'Patient requested refill for lisinopril 10mg. Last filled 28 days ago.',\n patient: 'James Okonkwo',\n priority: 'urgent',\n status: 'open',\n source: 'voice',\n assignee: 'Clinical staff',\n callId: 'HC-9001',\n edvakTaskId: 'EDV-8821',\n edvakStatus: 'Pending review',\n medicationName: 'Lisinopril 10mg',\n medicationId: 'RX-4492',\n },\n {\n id: 'TK-102',\n created: min(240),\n title: 'Billing follow-up',\n type: 'Billing',\n description: 'Caller disputed a statement charge from March visit. Needs billing review.',\n patient: 'Unknown caller',\n priority: 'normal',\n status: 'open',\n source: 'voice',\n assignee: 'Billing',\n callId: 'LC-4815',\n },\n {\n id: 'TK-103',\n created: min(300),\n title: 'Callback requested',\n type: 'Callback',\n description: 'Sarah Williams asked for a nurse callback regarding prior auth status.',\n patient: 'Sarah Williams',\n priority: 'normal',\n status: 'in_progress',\n source: 'voice',\n assignee: 'Front desk',\n callId: 'HC-9003',\n },\n {\n id: 'TK-104',\n created: min(360),\n title: 'Callback — lab results',\n type: 'Callback',\n description: 'Carlos Mendez requested nurse callback about recent lab results.',\n patient: 'Carlos Mendez',\n priority: 'normal',\n status: 'done',\n source: 'sync',\n assignee: 'Nurse line',\n callId: 'HC-9004',\n },\n {\n id: 'TK-105',\n created: min(90),\n title: 'Schedule follow-up visit',\n type: 'Scheduling',\n description: 'Patient needs a 2-week follow-up after ER visit.',\n patient: 'Maria Chen',\n priority: 'normal',\n status: 'open',\n source: 'manual',\n assignee: 'Scheduling',\n },\n];\n\nexport const SEED_AUDIT: AuditEvent[] = [\n {\n id: 'AU-1',\n actor: 'admin@riverside.fm',\n action: 'Updated welcome message',\n target: 'Agent Settings',\n detail: 'Changed inbound greeting',\n at: min(30),\n },\n {\n id: 'AU-2',\n actor: 'system',\n action: 'Agent activated',\n target: 'AI Receptionist',\n detail: 'After-hours mode enabled',\n at: min(120),\n },\n {\n id: 'AU-3',\n actor: 'staff@riverside.fm',\n action: 'Takeover',\n target: 'LC-4780',\n detail: 'Staff joined live call',\n at: min(300),\n },\n];\n\nexport const SEED_ANALYTICS: AnalyticsData = {\n range: '30d',\n kpiCards: [\n {\n label: 'Estimated Impact This Month',\n value: '96 hours',\n delta: '',\n tone: 'pos',\n sub: 'of front-desk time handled by the AI ~2.4 full work weeks.',\n },\n {\n label: 'AI Autonomous Resolution',\n value: '89%',\n delta: '+12%',\n tone: 'pos',\n sub: 'without staff intervention',\n },\n {\n label: 'Appointments Booked',\n value: '34',\n delta: '-35%',\n tone: 'warn',\n sub: 'Created by AI',\n },\n {\n label: 'Tasks Created',\n value: '19',\n delta: '-35%',\n tone: 'warn',\n sub: 'Created by AI',\n },\n {\n label: 'Patients Registered',\n value: '75',\n delta: '-6%',\n tone: 'warn',\n sub: 'Created by AI',\n },\n {\n label: 'Calls Handled',\n value: '1,234',\n delta: '+25%',\n tone: 'pos',\n sub: 'Inbound 104 · Outbound 24',\n },\n ],\n volume: {\n timezone: 'America/Chicago',\n startDate: '2025-05-01',\n endDate: '2025-05-28',\n points: [\n { date: '2025-05-01', day: 'Week 1', label: 'Week 1', count: 210, inbound: 170, outbound: 40 },\n { date: '2025-05-08', day: 'Week 2', label: 'Week 2', count: 255, inbound: 200, outbound: 55 },\n { date: '2025-05-15', day: 'Week 3', label: 'Week 3', count: 180, inbound: 145, outbound: 35 },\n { date: '2025-05-22', day: 'Week 4', label: 'Week 4', count: 290, inbound: 230, outbound: 60 },\n ],\n },\n outcomes: [\n { label: 'AI handled', value: 78, color: '#DAB2FF' },\n { label: 'Human Assisted', value: 18, color: '#A3B3FF' },\n { label: 'Needs Attention', value: 4, color: '#FFA1AD' },\n ],\n reasons: [\n { label: 'Appointments', value: 68 },\n { label: 'Medication/Refills', value: 24 },\n { label: 'Message', value: 20 },\n { label: 'Information', value: 23 },\n { label: 'Registration', value: 5 },\n { label: 'Tasks', value: 20 },\n { label: 'Others', value: 9 },\n ],\n transfers: [\n { label: 'Out of Scope', value: 68 },\n { label: 'Multiple Requests', value: 24 },\n { label: 'Identity Unresolved', value: 20 },\n { label: 'Others', value: 23 },\n ],\n peakHours: {\n timezone: 'America/Chicago',\n points: Array.from({ length: 24 }, (_, hour) => ({\n hour,\n label: hour === 0 ? '12 AM' : hour < 12 ? `${hour} AM` : hour === 12 ? '12 PM' : `${hour - 12} PM`,\n count:\n hour >= 8 && hour <= 20\n ? Math.round(30 + Math.sin((hour - 8) / 2.2) * 45 + (hour === 11 || hour === 16 ? 25 : 0))\n : 4 + (hour % 3),\n })),\n },\n kpis: {\n totalCalls: 1234,\n avgDuration: 186,\n bookingRate: 89,\n transferRate: 4,\n },\n};\n\nexport const SEED_SETTINGS: AgentSettings = {\n general: {\n practiceName: 'Riverside Family Medicine',\n timezone: 'America/Chicago',\n language: 'English',\n languages: 'English,Spanish,Chinese,Hindi',\n agentName: 'Robin',\n tone: 'professional',\n welcomeMessage:\n 'Thanks for calling {{practiceName}}! This is {{agentName}}, the practice’s virtual assistant. How can I help you today?',\n ttsVoiceId: '7EzWGsX10sAS4c9m9cPf',\n },\n phone: {\n answerMode: 'always_first',\n mainNumber: '+1 (234) 092-0129',\n transferNumber: '+1 (234) 092-0129',\n ringTimeout: 20,\n createFollowUpTask: true,\n locationIds: 'loc-1,loc-2,loc-3',\n maxCallDurationMin: 5,\n silenceTimeoutSec: 30,\n afterHoursBehavior: 'ai_answers',\n afterHours: true,\n },\n tasks: { autoCreate: true, defaultAssignee: 'Front desk' },\n scheduling: { leadTimeHours: 4, allowSameDay: true },\n refill: { autoApproveDays: 7, requireStaffReview: true },\n verify: { requireDob: true, requireName: true, maxAttempts: 3 },\n escalation: { sentimentThreshold: 'frustrated', urgentKeywords: 'emergency, chest pain' },\n outbound: { enabled: true, callerId: '+1 (512) 555-0100' },\n knowledge: {\n whatToSay:\n 'Arrive 15 minutes early for new-patient visits. Bring a photo ID and insurance card. We accept most major plans and self-pay; ask front desk for current cash-pay rates. For medical emergencies, hang up and dial 911.',\n whatNotToSay:\n 'Do not give clinical advice, diagnose symptoms, or promise specific appointment times that are not available. Do not share other patients’ information. Do not quote prices that are not listed in practice guidance.',\n },\n safety: [\n { id: 's1', label: 'HIPAA logging enabled', status: 'ok' },\n { id: 's2', label: 'Recording consent script', status: 'ok' },\n { id: 's3', label: 'Emergency routing tested', status: 'warn' },\n { id: 's4', label: 'PHI redaction in transcripts', status: 'ok' },\n ],\n transcripts: {\n recordingRetainDays: 30,\n transcriptRetainDays: 30,\n disclosureWarningEnabled: true,\n disclosureWarningText:\n 'This call may be handled by an automated assistant and could be recorded for quality and training. You can ask to speak with a staff member at any time.',\n retainDays: 30,\n redactPhi: true,\n },\n advanced: {\n modelVersion: 'edvak-v2',\n debugMode: false,\n voiceSystemPrompt: '',\n customVoiceInstructions: '',\n },\n effectiveWelcomeMessage:\n 'Thanks for calling Riverside Family Medicine! This is Robin, the practice’s virtual assistant. How can I help you today?',\n};\n\nexport const SEED_SETUP: SetupData = {\n readiness: 92,\n steps: [\n { id: 1, title: 'Practice profile', description: 'Name, locations, hours', complete: true },\n { id: 2, title: 'Phone routing', description: 'Connect Vonage numbers', complete: true },\n { id: 3, title: 'EHR integration', description: 'FHIR scheduling & charts', complete: true },\n { id: 4, title: 'Welcome message', description: 'Inbound call greeting', complete: true },\n { id: 5, title: 'Verification rules', description: 'Identity checks', complete: true },\n { id: 6, title: 'Task routing', description: 'Assignees & SLAs', complete: true },\n { id: 7, title: 'Escalation paths', description: 'Human handoff rules', complete: true },\n { id: 8, title: 'Safety checklist', description: 'Compliance review', complete: false },\n { id: 9, title: 'Test call', description: 'Simulated inbound call', complete: false },\n { id: 10, title: 'Staff training', description: 'Takeover & monitoring', complete: true },\n { id: 11, title: 'Go live', description: 'Activate AI receptionist', complete: false },\n ],\n testTranscript: [\n { who: 'ai', text: 'Test call started — simulating inbound patient.' },\n { who: 'patient', text: 'I would like to book an appointment.' },\n { who: 'ai', text: 'Happy to help. May I verify your date of birth?' },\n ],\n};\n\nexport const SEED_LOCATIONS: LocationOption[] = [\n { id: 'loc-1', name: 'Riverside Main' },\n { id: 'loc-2', name: 'North Clinic' },\n { id: 'loc-3', name: 'South Clinic' },\n];\n\nexport const SEED_PROVIDERS: ProviderOption[] = [\n { id: 'prov-1', name: 'Dr. Elena Chen' },\n { id: 'prov-2', name: 'Dr. Raj Patel' },\n { id: 'prov-3', name: 'Dr. Amy Foster' },\n];\n\nexport function buildDashboard(): DashboardData {\n return {\n stats: {\n activeCalls: SEED_LIVE_CALLS.length,\n answeredToday: 47,\n appointmentsBooked: 6,\n tasksCreated: 8,\n completionRate: 86,\n },\n liveCalls: SEED_LIVE_CALLS,\n latestTasks: SEED_TASKS.slice(0, 5),\n latestAppointments: [\n {\n id: 'appt-ai-1',\n appointmentId: 'appt-ai-1',\n patientName: 'Maria Garcia',\n providerName: 'Dr. Elena Chen',\n startTime: Date.now() + 86_400_000,\n createdAt: min(25),\n callId: 'HC-9001',\n status: 'booked',\n },\n ],\n recentHistory: SEED_HISTORY.slice(0, 5),\n };\n}\n\nexport function getStreamingLines(): TranscriptLine[] {\n return streamingLines;\n}\n\nexport function cloneLiveCalls(): LiveCall[] {\n return SEED_LIVE_CALLS.map((c) => ({\n ...c,\n tools: c.tools.map((t) => ({ ...t })),\n transcript: c.transcript.map((l) => ({ ...l })),\n }));\n}\n\nexport function cloneHistory(): HistoryCall[] {\n return SEED_HISTORY.map((h) => ({ ...h }));\n}\n\nexport function cloneTasks(): TaskItem[] {\n return SEED_TASKS.map((t) => ({ ...t }));\n}\n","import {\n OutboundPurpose,\n OutboundPurposePlaceholder,\n} from '../models/outbound-purpose.types';\n\nexport const DEFAULT_PLACEHOLDERS: OutboundPurposePlaceholder[] = [\n { token: '{{patientName}}', label: 'Patient name', sampleValue: 'Maria Garcia' },\n { token: '{{appointmentDate}}', label: 'Appointment date', sampleValue: 'March 15' },\n { token: '{{appointmentTime}}', label: 'Appointment time', sampleValue: '2:30 PM' },\n { token: '{{providerName}}', label: 'Provider name', sampleValue: 'Dr. Patel' },\n { token: '{{practiceName}}', label: 'Practice name', sampleValue: 'Edvak Family Medicine' },\n];\n\nexport const SEED_OUTBOUND_PURPOSES: OutboundPurpose[] = [\n {\n purposeId: 'purpose-confirm-appt',\n label: 'Confirm appointment',\n description: 'Remind patient of upcoming visit and confirm attendance.',\n sampleOpening:\n 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',\n openingTemplate:\n 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',\n agentContextHint: 'Confirm attendance; offer reschedule if patient cannot make it.',\n requiredFields: ['appointmentDate', 'appointmentTime', 'providerName'],\n allowsCustomScript: false,\n isSystem: true,\n isActive: true,\n sortOrder: 1,\n placeholders: DEFAULT_PLACEHOLDERS,\n },\n {\n purposeId: 'purpose-recall',\n label: 'Recall / follow-up',\n description: 'Invite patient to schedule a follow-up visit.',\n sampleOpening:\n 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',\n openingTemplate:\n 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',\n agentContextHint: null,\n requiredFields: ['providerName'],\n allowsCustomScript: true,\n isSystem: true,\n isActive: true,\n sortOrder: 2,\n placeholders: DEFAULT_PLACEHOLDERS,\n },\n {\n purposeId: 'purpose-custom',\n label: 'Custom outreach',\n description: 'Staff-defined script for one-off calls.',\n sampleOpening: '',\n openingTemplate: 'Hi {{patientName}}, this is {{practiceName}}.',\n agentContextHint: 'Follow the custom script closely.',\n requiredFields: ['customScript'],\n allowsCustomScript: true,\n isSystem: false,\n isActive: false,\n sortOrder: 99,\n placeholders: DEFAULT_PLACEHOLDERS,\n },\n];\n","import { AgentActivity } from '../models/agent-activity.types';\n\nconst hour = 60 * 60 * 1000;\nconst now = Date.now();\n\nfunction todayAt(h: number, m = 0): string {\n const d = new Date();\n d.setHours(h, m, 0, 0);\n return d.toISOString();\n}\n\nexport const SEED_ACTIVITIES: AgentActivity[] = [\n {\n id: 'act-appt-1',\n type: 'appointment_booked',\n occurredAt: new Date(now - 0.4 * hour).toISOString(),\n title: 'Appointment booked',\n detail: '',\n patientId: 'pat-1001',\n patientName: 'Sooraj Jagadeesh',\n patientInitials: 'SJ',\n patientDob: '2002-06-30',\n patientAge: 23,\n patientGender: 'M',\n providerName: 'Dr. Anika Mehra',\n providerInitials: 'AM',\n providerSpecialty: 'Cardiologist',\n appointmentId: 'appt-9001',\n callId: 'LC-4801',\n startAt: todayAt(8, 0),\n endAt: todayAt(8, 15),\n durationMinutes: 15,\n visitType: 'Follow Up',\n hasInsurance: true,\n insuranceName: 'Aetna PPO',\n },\n {\n id: 'act-appt-1b',\n type: 'task_created',\n occurredAt: new Date(now - 0.35 * hour).toISOString(),\n title: 'Needs Scheduling Assistance',\n detail: '',\n patientId: 'pat-1001',\n patientName: 'Sooraj Jagadeesh',\n patientInitials: 'SJ',\n patientDob: '2002-06-30',\n patientAge: 23,\n patientGender: 'M',\n providerName: 'Front Desk',\n providerInitials: 'FD',\n providerSpecialty: 'Operations',\n taskId: 'task-4801',\n callId: 'LC-4801',\n startAt: todayAt(8, 5),\n visitType: 'Insurance verification',\n durationMinutes: 10,\n priority: 'medium',\n },\n {\n id: 'act-appt-2',\n type: 'appointment_booked',\n occurredAt: new Date(now - 1.1 * hour).toISOString(),\n title: 'Appointment booked',\n detail: '',\n patientId: 'pat-1005',\n patientName: 'Lisa Sullivan',\n patientInitials: 'LS',\n patientDob: '1998-03-12',\n patientAge: 28,\n patientGender: 'F',\n providerName: 'Dr. Marcus Webb',\n providerInitials: 'MW',\n providerSpecialty: 'Endocrinologist',\n appointmentId: 'appt-9003',\n callId: 'LC-4800',\n startAt: todayAt(8, 15),\n endAt: todayAt(8, 30),\n durationMinutes: 15,\n visitType: 'Lab Results Review',\n hasInsurance: false,\n },\n {\n id: 'act-appt-3',\n type: 'appointment_booked',\n occurredAt: new Date(now - 2.2 * hour).toISOString(),\n title: 'Appointment booked',\n detail: '',\n patientId: 'pat-1006',\n patientName: 'Aiden Rivera',\n patientInitials: 'AR',\n patientDob: '1995-11-04',\n patientAge: 30,\n patientGender: 'M',\n providerName: 'Dr. Priya Nair',\n providerInitials: 'PN',\n providerSpecialty: 'General Practitioner',\n appointmentId: 'appt-9004',\n callId: 'LC-4799',\n startAt: todayAt(8, 30),\n endAt: todayAt(8, 45),\n durationMinutes: 15,\n visitType: 'Routine Checkup',\n },\n {\n id: 'act-appt-4',\n type: 'appointment_booked',\n occurredAt: new Date(now - 8 * hour).toISOString(),\n title: 'Appointment booked',\n detail: '',\n patientId: 'pat-1003',\n patientName: 'Aisha Patel',\n patientInitials: 'AP',\n patientDob: '1988-01-19',\n patientAge: 38,\n patientGender: 'F',\n providerName: 'Dr. Jordan Lee',\n providerInitials: 'JL',\n providerSpecialty: 'Internal Medicine',\n appointmentId: 'appt-9002',\n callId: 'LC-4790',\n startAt: todayAt(14, 30),\n endAt: todayAt(15, 0),\n durationMinutes: 30,\n visitType: 'Annual Wellness',\n hasInsurance: true,\n insuranceName: 'BlueCross Blue Shield',\n },\n {\n id: 'act-1',\n type: 'patient_created',\n occurredAt: new Date(now - 0.5 * hour).toISOString(),\n title: 'Patient registered',\n detail: '',\n patientId: 'pat-1008',\n patientName: 'Maria Garcia',\n patientInitials: 'MG',\n patientDob: '1991-04-22',\n patientAge: 35,\n patientGender: 'F',\n callId: 'LC-4801',\n startAt: todayAt(9, 12),\n visitType: 'New registration',\n hasInsurance: true,\n insuranceName: 'UnitedHealthcare',\n },\n {\n id: 'act-5',\n type: 'patient_created',\n occurredAt: new Date(now - 26 * hour).toISOString(),\n title: 'Patient registered',\n detail: '',\n patientId: 'pat-1004',\n patientName: 'Sam Okonkwo',\n patientInitials: 'SO',\n patientDob: '1979-09-08',\n patientAge: 46,\n patientGender: 'M',\n callId: 'LC-4782',\n startAt: new Date(now - 26 * hour).toISOString(),\n visitType: 'Outbound registration',\n hasInsurance: false,\n },\n {\n id: 'act-3',\n type: 'task_created',\n occurredAt: new Date(now - 3 * hour).toISOString(),\n title: 'Needs Scheduling Assistance',\n detail: '',\n patientId: 'pat-1002',\n patientName: 'James Chen',\n patientInitials: 'JC',\n patientDob: '1985-12-01',\n patientAge: 40,\n patientGender: 'M',\n providerName: 'Front Desk',\n providerInitials: 'FD',\n providerSpecialty: 'Operations',\n taskId: 'task-301',\n callId: 'LC-4798',\n startAt: new Date(now - 3 * hour).toISOString(),\n visitType: 'Insurance verification',\n durationMinutes: 15,\n priority: 'medium',\n },\n {\n id: 'act-6',\n type: 'task_created',\n occurredAt: new Date(now - 5 * hour).toISOString(),\n title: 'Needs Scheduling Assistance',\n detail: '',\n patientId: 'pat-1007',\n patientName: 'Elena Foster',\n patientInitials: 'EF',\n patientDob: '1993-07-15',\n patientAge: 32,\n patientGender: 'F',\n providerName: 'Nurse Station',\n providerInitials: 'NS',\n providerSpecialty: 'Clinical support',\n taskId: 'task-302',\n callId: 'LC-4795',\n startAt: new Date(now - 5 * hour).toISOString(),\n visitType: 'Clinical callback',\n durationMinutes: 10,\n priority: 'medium',\n },\n];\n","import { Injectable, signal } from '@angular/core';\nimport { delay, map, Observable, of, throwError } from 'rxjs';\n\nimport {\n AgentSettings,\n AiReceptionistStatus,\n AnalyticsData,\n AnalyticsQuery,\n AuditEvent,\n CallListFilters,\n CsvExportResult,\n DashboardData,\n CallRecordingMeta,\n HistoryCall,\n HistoryDetail,\n LiveCall,\n LocationOption,\n ProviderOption,\n SetupData,\n TaskItem,\n CreateTaskRequest,\n TaskFilters,\n RegenerateSummaryResult,\n ToolEvent,\n TranscriptLine,\n} from '../models/ai-receptionist.types';\nimport { StaffMediaJoinResult, StaffMediaMode } from '../models/staff-media.types';\nimport { DEFAULT_PAGE_SIZE, type PaginatedResult } from '../models/pagination';\nimport { computeEffectiveWelcomeMessage } from '../utils/welcome-message.util';\nimport {\n allSeedLogs,\n SEED_API_LOG_DETAILS,\n SEED_API_LOG_STATS,\n SEED_CALL_API_LOGS,\n} from '../mocks/api-log.seed';\nimport {\n ApiLogDetail,\n ApiLogFilters,\n ApiLogListResponse,\n ApiLogStats,\n} from '../models/api-log.types';\nimport {\n buildDashboard,\n cloneHistory,\n cloneLiveCalls,\n cloneTasks,\n getStreamingLines,\n SEED_ANALYTICS,\n SEED_AUDIT,\n SEED_HISTORY_DETAILS,\n SEED_SETTINGS,\n SEED_SETUP,\n SEED_LOCATIONS,\n SEED_PROVIDERS,\n} from '../mocks/seed-data';\nimport {\n DEFAULT_PLACEHOLDERS,\n SEED_OUTBOUND_PURPOSES,\n} from '../mocks/outbound-purpose.seed';\nimport {\n CreateOutboundPurposeRequest,\n OutboundPurpose,\n OutboundPurposesResponse,\n PlaceOutboundCallRequest,\n PlaceOutboundCallResponse,\n UpdateOutboundPurposeRequest,\n} from '../models/outbound-purpose.types';\nimport type {\n OutboundAppointmentHit,\n OutboundPatientHit,\n} from '../models/outbound-patient.types';\nimport type {\n AgentActivity,\n AgentActivityFilters,\n} from '../models/agent-activity.types';\nimport { SEED_ACTIVITIES } from '../mocks/agent-activity.seed';\n\nconst MOCK_DELAY_MS = 200;\n\n@Injectable({ providedIn: 'root' })\nexport class AiReceptionistApiMockService {\n private readonly liveCalls = signal(cloneLiveCalls());\n private readonly tasks = signal(cloneTasks());\n private readonly history = signal(cloneHistory());\n private readonly settings = signal<AgentSettings>(structuredClone(SEED_SETTINGS));\n private readonly status = signal<AiReceptionistStatus>({\n agentOn: true,\n agentOnExplicit: true,\n mode: 'after-hours',\n readiness: SEED_SETUP.readiness,\n });\n private readonly outboundPurposes = signal<OutboundPurpose[]>(\n structuredClone(SEED_OUTBOUND_PURPOSES),\n );\n\n private mock<T>(data: T): Observable<{ data: T }> {\n return of({ data }).pipe(delay(MOCK_DELAY_MS));\n }\n\n private paginate<T>(\n rows: T[],\n page = 1,\n limit = DEFAULT_PAGE_SIZE,\n ): Observable<PaginatedResult<T>> {\n const safePage = Math.max(1, page);\n const safeLimit = Math.min(100, Math.max(1, limit));\n const start = (safePage - 1) * safeLimit;\n return of({\n items: rows.slice(start, start + safeLimit),\n total: rows.length,\n page: safePage,\n limit: safeLimit,\n }).pipe(delay(MOCK_DELAY_MS));\n }\n\n getStatus(): Observable<{ data: AiReceptionistStatus }> {\n return this.mock(this.status());\n }\n\n setAgentOn(on: boolean): void {\n this.status.update((s) => ({ ...s, agentOn: on, agentOnExplicit: true }));\n }\n\n getDashboard(): Observable<{ data: DashboardData }> {\n const dash = buildDashboard();\n dash.liveCalls = [];\n return this.mock(dash);\n }\n\n getLiveCalls(): Observable<{ data: LiveCall[] }> {\n return this.mock(this.liveCalls());\n }\n\n getLiveCall(id: string): Observable<{ data: LiveCall | null }> {\n const call = this.liveCalls().find((c) => c.id === id) ?? null;\n return this.mock(call ? structuredClone(call) : null);\n }\n\n getCallTranscript(id: string): Observable<{ data: TranscriptLine[] }> {\n const call = this.liveCalls().find((c) => c.id === id);\n return this.mock(call ? call.transcript.map((l) => ({ ...l })) : []);\n }\n\n getCallSummary(id: string): Observable<{\n data: { summary: string; transcript: TranscriptLine[]; tools: ToolEvent[] } | null;\n }> {\n const detail = SEED_HISTORY_DETAILS[id];\n if (detail) {\n return this.mock({\n summary: detail.summary,\n transcript: detail.transcript.map((l) => ({ ...l })),\n tools: detail.tools.map((t) => ({ ...t })),\n });\n }\n const call = this.liveCalls().find((c) => c.id === id);\n if (call) {\n return this.mock({\n summary: 'Call summary will appear here after processing.',\n transcript: call.transcript.map((l) => ({ ...l })),\n tools: call.tools.map((t) => ({ ...t })),\n });\n }\n return this.mock(null);\n }\n\n getCallRecording(callId: string): Observable<CallRecordingMeta> {\n const detail = SEED_HISTORY_DETAILS[callId];\n if (detail?.recordingUrl) {\n const meta: CallRecordingMeta = {\n callId,\n status: 'ready',\n url: `/api/ai-receptionist/calls/${callId}/recording/audio`,\n contentType: 'audio/ogg',\n durationSeconds: detail.duration || 120,\n };\n return of<CallRecordingMeta>(meta).pipe(delay(MOCK_DELAY_MS));\n }\n const unavailable: CallRecordingMeta = {\n callId,\n status: 'unavailable',\n url: null,\n message: 'No recording available for this call',\n };\n return of<CallRecordingMeta>(unavailable).pipe(delay(MOCK_DELAY_MS));\n }\n\n getCallRecordingBlob(): Observable<Blob> {\n return of(new Blob([], { type: 'audio/ogg' })).pipe(delay(MOCK_DELAY_MS));\n }\n\n getHistory(\n filters?: CallListFilters & { page?: number; limit?: number },\n ): Observable<PaginatedResult<HistoryCall>> {\n let rows = this.history();\n const q = filters?.q?.toLowerCase().trim();\n if (q) {\n rows = rows.filter(\n (h) =>\n h.name.toLowerCase().includes(q) ||\n h.phone.includes(q) ||\n h.reason.toLowerCase().includes(q) ||\n h.id.toLowerCase().includes(q),\n );\n }\n if (filters?.dir) rows = rows.filter((h) => h.direction === filters.dir);\n if (filters?.outcome) {\n rows = rows.filter((h) => h.outcome.toLowerCase().includes(filters.outcome!.toLowerCase()));\n }\n if (filters?.location) rows = rows.filter((h) => h.location === filters.location);\n if (filters?.review) rows = rows.filter((h) => h.review === filters.review);\n return this.paginate(rows, filters?.page, filters?.limit);\n }\n\n getCallDetail(id: string): Observable<{ data: HistoryDetail | null }> {\n const detail = SEED_HISTORY_DETAILS[id] ?? null;\n return this.mock(detail ? structuredClone(detail) : null);\n }\n\n regenerateCallSummary(callId: string): Observable<{ data: RegenerateSummaryResult }> {\n const detail = SEED_HISTORY_DETAILS[callId];\n if (!detail) {\n return throwError(() => ({ message: 'Call not found.', status: 404 }));\n }\n if (!detail.transcript.length) {\n return throwError(() => ({ message: 'No transcript on this call.', status: 400 }));\n }\n\n const turnCount = detail.transcript.filter((line) => line.who !== 'system').length;\n const summary = `Regenerated summary (${new Date().toLocaleString()}): ${detail.summary}`;\n detail.summary = summary;\n SEED_HISTORY_DETAILS[callId] = detail;\n\n return this.mock({\n callId,\n summary,\n summaryModel: 'gpt-4o-mini',\n summaryGeneratedAt: new Date().toISOString(),\n transcriptTurnCount: turnCount,\n });\n }\n\n postTakeover(id: string): Observable<{ data: { success: boolean } }> {\n return this.postMediaJoin(id, 'takeover').pipe(map(() => ({ data: { success: true } })));\n }\n\n postMediaJoin(\n id: string,\n mode: StaffMediaMode,\n ): Observable<{ data: StaffMediaJoinResult }> {\n this.patchLive(id, (c) => ({\n ...c,\n status: mode === 'takeover' ? 'takeover' : c.status,\n controlMode: mode,\n assigned: mode === 'takeover' ? 'You' : c.assigned,\n aiPaused: mode === 'takeover',\n }));\n // Mock tokens are placeholders — StaffMediaService is skipped when useMockApi is on.\n return this.mock({\n ok: true,\n callId: id,\n mode,\n provider: 'livekit',\n livekitUrl: 'wss://mock.livekit.local',\n clientToken: `mock-token-${mode}-${id}`,\n roomName: `call-${id}`,\n controlMode: mode,\n aiPaused: mode === 'takeover',\n assigned: mode === 'takeover' ? 'You' : null,\n });\n }\n\n postMediaLeave(id: string): Observable<{ data: { success: boolean } }> {\n this.patchLive(id, (c) => ({\n ...c,\n status: 'ai',\n controlMode: 'ai',\n assigned: null,\n aiPaused: false,\n }));\n return this.mock({ success: true });\n }\n\n postResumeAi(id: string): Observable<{ data: { success: boolean } }> {\n return this.postMediaLeave(id);\n }\n\n postPause(id: string): Observable<{ data: { success: boolean } }> {\n this.patchLive(id, (c) => ({ ...c, controlMode: 'paused', aiPaused: true }));\n return this.mock({ success: true });\n }\n\n postResume(id: string): Observable<{ data: { success: boolean } }> {\n this.patchLive(id, (c) => ({\n ...c,\n controlMode: c.status === 'takeover' || c.assigned ? 'takeover' : 'ai',\n aiPaused: false,\n }));\n return this.mock({ success: true });\n }\n\n postListen(id: string): Observable<{ data: { success: boolean } }> {\n return this.postMediaJoin(id, 'listen').pipe(map(() => ({ data: { success: true } })));\n }\n\n postTransfer(id: string): Observable<{ data: { success: boolean } }> {\n this.patchLive(id, (c) => ({ ...c, status: 'transferring' }));\n return this.mock({ success: true });\n }\n\n postEnd(id: string): Observable<{ data: { success: boolean } }> {\n this.liveCalls.update((calls) => calls.filter((c) => c.id !== id));\n return this.mock({ success: true });\n }\n\n postMessage(id: string, text: string): Observable<{ data: { success: boolean } }> {\n this.patchLive(id, (c) => ({\n ...c,\n transcript: [...c.transcript, { who: 'staff' as const, text, at: Date.now() }],\n }));\n return this.mock({ success: true });\n }\n\n postReview(id: string): Observable<{ data: { review: string } }> {\n this.history.update((rows) =>\n rows.map((h) => (h.id === id ? { ...h, review: 'reviewed' as const } : h)),\n );\n const detail = SEED_HISTORY_DETAILS[id];\n if (detail) {\n detail.review = 'reviewed';\n }\n return this.mock({ review: 'reviewed' });\n }\n\n getTasks(filters?: TaskFilters): Observable<PaginatedResult<TaskItem>> {\n let rows = this.tasks();\n if (filters?.status) rows = rows.filter((t) => t.status === filters.status);\n if (filters?.type) rows = rows.filter((t) => t.type === filters.type);\n if (filters?.source) rows = rows.filter((t) => t.source === filters.source);\n if (filters?.callId) rows = rows.filter((t) => t.callId === filters.callId);\n return this.paginate(rows, filters?.page, filters?.limit);\n }\n\n getCallTasks(callId: string): Observable<{ data: TaskItem[] }> {\n return this.getTasks({ callId, limit: 100 }).pipe(\n map((page) => ({ data: page.items })),\n );\n }\n\n createTask(req: CreateTaskRequest): Observable<{ data: TaskItem }> {\n let description = req.description?.trim() ?? '';\n if (!description && req.callId) {\n description = SEED_HISTORY_DETAILS[req.callId]?.summary ?? '';\n }\n\n const task: TaskItem = {\n id: `TK-${Date.now()}`,\n created: Date.now(),\n title: req.title.trim(),\n type: req.type,\n description,\n patient: req.patient?.trim() || '—',\n priority: req.priority ?? 'normal',\n status: 'open',\n source: 'manual',\n assignee: req.assignee?.trim() || 'Front desk',\n callId: req.callId,\n };\n\n this.tasks.update((rows) => [task, ...rows]);\n return this.mock(task);\n }\n\n patchTask(id: string, status: TaskItem['status']): Observable<{ data: TaskItem | null }> {\n let updated: TaskItem | null = null;\n this.tasks.update((rows) =>\n rows.map((t) => {\n if (t.id !== id) return t;\n updated = { ...t, status };\n return updated;\n }),\n );\n return this.mock(updated);\n }\n\n getAnalytics(query: string | AnalyticsQuery): Observable<{ data: AnalyticsData }> {\n const range = (typeof query === 'string' ? query : query.range) || '30d';\n return this.mock({ ...SEED_ANALYTICS, range });\n }\n\n exportHistoryCsv(\n filters?: CallListFilters,\n ): Observable<CsvExportResult> {\n return this.getHistory({ ...filters, page: 1, limit: 10_000 }).pipe(\n map(({ items }) => {\n const header = [\n 'id',\n 'name',\n 'phone',\n 'direction',\n 'goal',\n 'handledBy',\n 'outcome',\n 'results',\n 'duration',\n 'started',\n 'review',\n ];\n const lines = items.map((r) =>\n [\n r.id,\n r.name,\n r.phone,\n r.direction,\n r.reason,\n r.handledBy ?? '',\n r.outcome,\n (r.results ?? []).join('; '),\n String(r.duration),\n String(r.started),\n r.review,\n ]\n .map((cell) => `\"${String(cell).replace(/\"/g, '\"\"')}\"`)\n .join(','),\n );\n const csv = [header.join(','), ...lines].join('\\n');\n return {\n blob: new Blob([csv], { type: 'text/csv;charset=utf-8' }),\n filename: 'call-history.csv',\n };\n }),\n );\n }\n\n exportAnalyticsCsv(filters?: AnalyticsQuery): Observable<CsvExportResult> {\n const range = filters?.range || '30d';\n const data = { ...SEED_ANALYTICS, range };\n const rows = [\n ['range', range],\n ['startDate', filters?.startDate ?? ''],\n ['endDate', filters?.endDate ?? ''],\n ['totalCalls', String(data.kpis.totalCalls ?? '')],\n ...data.kpiCards.map((k) => [k.label, k.value, k.delta ?? '', k.sub ?? '']),\n ];\n const csv = rows\n .map((row) => row.map((cell) => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','))\n .join('\\n');\n return of({\n blob: new Blob([csv], { type: 'text/csv;charset=utf-8' }),\n filename: `analytics-${range}.csv`,\n }).pipe(delay(MOCK_DELAY_MS));\n }\n\n getSettings(): Observable<{ data: AgentSettings }> {\n const data = this.withEffectiveWelcome(this.settings());\n return this.mock(data);\n }\n\n putSettings(next: AgentSettings): Observable<{ data: AgentSettings }> {\n const saved = this.withEffectiveWelcome(structuredClone(next));\n this.settings.set(saved);\n return this.mock(saved);\n }\n\n getVoicePromptDefault(): Observable<{\n defaultVoiceSystemPrompt: string;\n voiceSystemPromptMaxLength: number;\n customVoiceInstructionsMaxLength: number;\n notes?: string;\n }> {\n return of({\n defaultVoiceSystemPrompt:\n 'You are an AI receptionist for a medical practice. Be warm, concise, and HIPAA-aware.',\n voiceSystemPromptMaxLength: 24000,\n customVoiceInstructionsMaxLength: 8000,\n notes: 'Leave voiceSystemPrompt empty to use this shipped default.',\n }).pipe(delay(MOCK_DELAY_MS));\n }\n\n previewVoice(_voiceId: string): Observable<Blob> {\n // Silent tiny wav so mock mode does not break the Play button.\n const silent = new Uint8Array([\n 0x52, 0x49, 0x46, 0x46, 0x24, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74,\n 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x80, 0x3e,\n 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,\n ]);\n return of(new Blob([silent], { type: 'audio/wav' })).pipe(delay(MOCK_DELAY_MS));\n }\n\n testKnowledgeAnswer(params: {\n question: string;\n whatToSay: string;\n whatNotToSay: string;\n voiceId?: string;\n }): Observable<{ answer: string; voiceId: string; audioBlob: Blob }> {\n const answer =\n `Based on our guidance: for “${params.question.trim()}”, ` +\n `I'd share what's in our practice knowledge and avoid restricted topics.`;\n return this.previewVoice(params.voiceId ?? 'mock').pipe(\n map((audioBlob) => ({\n answer,\n voiceId: params.voiceId ?? 'mock',\n audioBlob,\n })),\n );\n }\n\n private withEffectiveWelcome(settings: AgentSettings): AgentSettings {\n return {\n ...settings,\n effectiveWelcomeMessage: computeEffectiveWelcomeMessage(settings),\n };\n }\n\n getAudit(\n q?: string,\n actor?: string,\n opts?: { page?: number; limit?: number },\n ): Observable<PaginatedResult<AuditEvent>> {\n let rows = SEED_AUDIT;\n if (q) {\n const needle = q.toLowerCase();\n rows = rows.filter(\n (e) =>\n e.action.toLowerCase().includes(needle) ||\n e.detail.toLowerCase().includes(needle) ||\n e.target.toLowerCase().includes(needle),\n );\n }\n if (actor) rows = rows.filter((e) => e.actor.toLowerCase().includes(actor.toLowerCase()));\n return this.paginate(rows, opts?.page, opts?.limit);\n }\n\n getActivities(filters?: AgentActivityFilters): Observable<PaginatedResult<AgentActivity>> {\n let rows = structuredClone(SEED_ACTIVITIES);\n const types = (filters?.types ?? '')\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n if (types.length) {\n rows = rows.filter((a) => types.includes(a.type));\n }\n if (filters?.callId?.trim()) {\n const callId = filters.callId.trim().toLowerCase();\n rows = rows.filter((a) => (a.callId || '').toLowerCase() === callId);\n }\n if (filters?.search?.trim()) {\n const needle = filters.search.trim().toLowerCase();\n rows = rows.filter((a) =>\n [a.title, a.detail, a.patientName, a.callId, a.type, a.providerName, a.visitType, a.patientMrn, a.insuranceName]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n .includes(needle),\n );\n }\n return this.paginate(rows, filters?.page, filters?.limit);\n }\n\n getSetup(): Observable<{ data: SetupData }> {\n return this.mock(SEED_SETUP);\n }\n\n activateSetup(): Observable<{ data: { success: boolean } }> {\n return this.mock({ success: true });\n }\n\n getLocations(): Observable<{ data: LocationOption[] }> {\n return this.mock(SEED_LOCATIONS);\n }\n\n getProviders(): Observable<{ data: ProviderOption[] }> {\n return this.mock(SEED_PROVIDERS);\n }\n\n getStreamLines(): TranscriptLine[] {\n return getStreamingLines();\n }\n\n appendStreamLine(callId: string, line: TranscriptLine): void {\n this.patchLive(callId, (c) => ({\n ...c,\n transcript: [...c.transcript, line],\n }));\n }\n\n usesMockStreaming(): boolean {\n return true;\n }\n\n getCallApiLogs(callId: string): Observable<ApiLogListResponse> {\n const template = SEED_CALL_API_LOGS[callId] ?? SEED_CALL_API_LOGS['LC-4821'] ?? [];\n const items = template.map((row) => ({ ...row, callId }));\n return of({ items: structuredClone(items), total: items.length }).pipe(delay(MOCK_DELAY_MS));\n }\n\n getApiLogs(filters: ApiLogFilters = {}): Observable<ApiLogListResponse> {\n let rows = allSeedLogs();\n if (filters.callId) {\n rows = rows.filter((r) => r.callId === filters.callId);\n }\n if (filters.provider) {\n const providers = filters.provider.split(',').filter(Boolean);\n rows = rows.filter((r) => providers.includes(r.provider));\n }\n if (filters.success !== undefined) {\n rows = rows.filter((r) => r.success === filters.success);\n }\n if (filters.statusCode != null) {\n rows = rows.filter((r) => r.statusCode === filters.statusCode);\n }\n if (filters.operation) {\n const op = filters.operation.toLowerCase();\n rows = rows.filter((r) => r.operation.toLowerCase().includes(op));\n }\n if (filters.search) {\n const q = filters.search.toLowerCase();\n rows = rows.filter(\n (r) =>\n r.operation.toLowerCase().includes(q) ||\n r.urlPath.toLowerCase().includes(q) ||\n (r.errorMessage?.toLowerCase().includes(q) ?? false) ||\n (r.toolName?.toLowerCase().includes(q) ?? false),\n );\n }\n if (filters.from) {\n const from = Date.parse(filters.from);\n rows = rows.filter((r) => Date.parse(r.startedAt) >= from);\n }\n if (filters.to) {\n const to = Date.parse(filters.to);\n rows = rows.filter((r) => Date.parse(r.startedAt) <= to);\n }\n if (filters.practiceId) {\n rows = rows.filter((r) => (r.clientPracticeId ?? '') === filters.practiceId);\n }\n rows = [...rows].sort((a, b) => Date.parse(b.startedAt) - Date.parse(a.startedAt));\n const page = filters.page ?? 1;\n const limit = filters.limit ?? 50;\n const start = (page - 1) * limit;\n const items = rows.slice(start, start + limit);\n return of({\n items,\n total: rows.length,\n page,\n limit,\n practiceId: filters.practiceId ?? null,\n }).pipe(delay(MOCK_DELAY_MS));\n }\n\n getApiLogDetail(logId: string): Observable<{ data: ApiLogDetail | null }> {\n const detail = SEED_API_LOG_DETAILS[logId];\n if (detail) {\n return this.mock(structuredClone(detail));\n }\n const listItem = allSeedLogs().find((r) => r.id === logId);\n if (!listItem) {\n return of({ data: null }).pipe(delay(MOCK_DELAY_MS));\n }\n const fallback: ApiLogDetail = {\n ...listItem,\n traceId: null,\n requestBody: listItem.requestPreview ? { preview: listItem.requestPreview } : null,\n responseBody: listItem.responsePreview ? { preview: listItem.responsePreview } : null,\n metadata: null,\n completedAt: listItem.startedAt,\n };\n return this.mock(fallback);\n }\n\n getApiLogStats(): Observable<{ data: ApiLogStats }> {\n return this.mock(structuredClone(SEED_API_LOG_STATS));\n }\n\n getOutboundPurposes(includeInactive = false): Observable<OutboundPurposesResponse> {\n let rows = [...this.outboundPurposes()].sort((a, b) => a.sortOrder - b.sortOrder);\n if (!includeInactive) {\n rows = rows.filter((p) => p.isActive);\n }\n return of({ purposes: structuredClone(rows) }).pipe(delay(MOCK_DELAY_MS));\n }\n\n createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose> {\n const purpose: OutboundPurpose = {\n purposeId: `purpose-${Date.now()}`,\n label: body.label,\n description: body.description ?? '',\n sampleOpening: body.sampleOpening ?? '',\n openingTemplate: body.openingTemplate,\n agentContextHint: body.agentContextHint ?? null,\n requiredFields: body.requiredFields,\n allowsCustomScript: body.allowsCustomScript ?? false,\n isSystem: false,\n isActive: true,\n sortOrder: body.sortOrder ?? this.outboundPurposes().length + 1,\n placeholders: structuredClone(DEFAULT_PLACEHOLDERS),\n };\n this.outboundPurposes.update((list) => [...list, purpose]);\n return of(structuredClone(purpose)).pipe(delay(MOCK_DELAY_MS));\n }\n\n updateOutboundPurpose(\n purposeId: string,\n body: UpdateOutboundPurposeRequest,\n ): Observable<OutboundPurpose> {\n let updated: OutboundPurpose | null = null;\n this.outboundPurposes.update((list) =>\n list.map((p) => {\n if (p.purposeId !== purposeId) return p;\n updated = {\n ...p,\n ...body,\n label: body.label ?? p.label,\n description: body.description ?? p.description,\n sampleOpening: body.sampleOpening ?? p.sampleOpening,\n openingTemplate: body.openingTemplate ?? p.openingTemplate,\n agentContextHint:\n body.agentContextHint !== undefined ? body.agentContextHint : p.agentContextHint,\n requiredFields: body.requiredFields ?? p.requiredFields,\n allowsCustomScript: body.allowsCustomScript ?? p.allowsCustomScript,\n isActive: body.isActive ?? p.isActive,\n sortOrder: body.sortOrder ?? p.sortOrder,\n };\n return updated;\n }),\n );\n if (!updated) {\n return throwError(() => new Error('Purpose not found'));\n }\n const saved: OutboundPurpose = updated;\n return of(structuredClone(saved)).pipe(delay(MOCK_DELAY_MS));\n }\n\n deleteOutboundPurpose(purposeId: string): Observable<{ success: boolean }> {\n const target = this.outboundPurposes().find((p) => p.purposeId === purposeId);\n if (!target) {\n return of({ success: false }).pipe(delay(MOCK_DELAY_MS));\n }\n if (target.isSystem) {\n return of({ success: false }).pipe(delay(MOCK_DELAY_MS));\n }\n this.outboundPurposes.update((list) => list.filter((p) => p.purposeId !== purposeId));\n return of({ success: true }).pipe(delay(MOCK_DELAY_MS));\n }\n\n placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse> {\n const idHint = body.appointmentId\n ? ` (appt ${body.appointmentId})`\n : body.patientId\n ? ` (patient ${body.patientId})`\n : '';\n return of({\n success: true,\n callId: `LC-${Math.floor(4800 + Math.random() * 100)}`,\n message: `Outbound call started to ${body.phone}${idHint}`,\n }).pipe(delay(MOCK_DELAY_MS));\n }\n\n searchPatientsForOutbound(q: string, limit = 10): Observable<OutboundPatientHit[]> {\n const needle = q.trim().toLowerCase();\n const digits = q.replace(/\\D/g, '');\n const hits: OutboundPatientHit[] = [\n {\n patientId: 'pat-1001',\n firstName: 'Maria',\n lastName: 'Garcia',\n fullName: 'Maria Garcia',\n phone: '+14155550100',\n dob: '1988-04-12',\n },\n {\n patientId: 'pat-1002',\n firstName: 'James',\n lastName: 'Chen',\n fullName: 'James Chen',\n phone: '+14155550122',\n dob: '1975-11-03',\n },\n {\n patientId: 'pat-1003',\n firstName: 'Aisha',\n lastName: 'Patel',\n fullName: 'Aisha Patel',\n phone: '+14155550987',\n dob: '1992-07-21',\n },\n ].filter((p) => {\n if (!needle) return false;\n const hay = `${p.fullName} ${p.phone} ${p.patientId}`.toLowerCase();\n return hay.includes(needle) || (!!digits && (p.phone ?? '').includes(digits));\n });\n return of(hits.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));\n }\n\n listPatientAppointmentsForOutbound(\n patientId: string,\n limit = 20,\n ): Observable<OutboundAppointmentHit[]> {\n const now = Date.now();\n const day = 24 * 60 * 60 * 1000;\n const all: OutboundAppointmentHit[] = [\n {\n appointmentId: `appt-${patientId}-1`,\n startTime: new Date(now + 2 * day).toISOString(),\n endTime: new Date(now + 2 * day + 30 * 60 * 1000).toISOString(),\n providerName: 'Dr. Patel',\n locationName: 'Main Clinic',\n status: 'scheduled',\n visitType: 'Follow-up',\n },\n {\n appointmentId: `appt-${patientId}-2`,\n startTime: new Date(now + 9 * day).toISOString(),\n endTime: new Date(now + 9 * day + 45 * 60 * 1000).toISOString(),\n providerName: 'Dr. Nguyen',\n locationName: 'West Wing',\n status: 'confirmed',\n visitType: 'Annual wellness',\n },\n ];\n return of(all.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));\n }\n\n private patchLive(id: string, fn: (call: LiveCall) => LiveCall): void {\n this.liveCalls.update((calls) =>\n calls.map((c) => (c.id === id ? fn(structuredClone(c)) : c)),\n );\n }\n}\n","import { HttpClient, HttpErrorResponse, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable, catchError, forkJoin, map, of, switchMap, throwError } from 'rxjs';\n\nimport { createVoiceReceptionistPaths } from '../api-paths';\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\nimport { extractApiRows } from '../extract-api-rows';\nimport {\n ApiLogDetail,\n ApiLogFilters,\n ApiLogListResponse,\n ApiLogStats,\n} from '../models/api-log.types';\nimport {\n CreateOutboundPurposeRequest,\n OutboundPurpose,\n OutboundPurposesResponse,\n PlaceOutboundCallRequest,\n PlaceOutboundCallResponse,\n UpdateOutboundPurposeRequest,\n} from '../models/outbound-purpose.types';\nimport {\n mapOutboundAppointmentHit,\n mapOutboundPatientHit,\n toE164Phone,\n type OutboundAppointmentHit,\n type OutboundPatientHit,\n} from '../models/outbound-patient.types';\nimport {\n mapStaffMediaJoinResult,\n type StaffMediaJoinResult,\n type StaffMediaMode,\n} from '../models/staff-media.types';\nimport {\n AgentSettings,\n AiReceptionistStatus,\n AnalyticsData,\n AnalyticsQuery,\n AuditEvent,\n CallListFilters,\n CsvExportResult,\n DashboardData,\n HistoryCall,\n HistoryDetail,\n LiveCall,\n RegenerateSummaryResult,\n LocationOption,\n ProviderOption,\n SetupData,\n TaskItem,\n CreateTaskRequest,\n TaskFilters,\n ToolEvent,\n TranscriptLine,\n CallRecordingMeta,\n} from '../models/ai-receptionist.types';\nimport {\n mapAgentActivity,\n type AgentActivity,\n type AgentActivityFilters,\n} from '../models/agent-activity.types';\nimport {\n AnalyticsDto,\n AiCreatedAppointmentDto,\n DashboardSummaryDto,\n HistoryCallDto,\n HistoryDetailDto,\n LiveCallDto,\n AiStatusDto,\n SetupDto,\n RecordingDto,\n RegenerateSummaryResponseDto,\n TaskDto,\n} from '../models/api-dto.types';\nimport {\n asPaginatedResult,\n DEFAULT_PAGE_SIZE,\n type PaginatedResult,\n} from '../models/pagination';\nimport {\n asAuditList,\n asHistoryList,\n asLiveCallList,\n asTaskList,\n asTranscriptList,\n isHistoryCallDto,\n mapAnalyticsDto,\n mapAiCreatedAppointmentDto,\n mapAuditEventDto,\n mapDashboardSummaryDto,\n mapHistoryCallDto,\n mapHistoryDetailDto,\n mapLiveCallDto,\n mapLocationDto,\n mapProviderDto,\n mapRecordingMeta,\n mapRegenerateSummaryResponse,\n mapCreateTaskRequest,\n mapSettingsResponse,\n mapSettingsToRequest,\n mapSetupDto,\n mapStatusDto,\n mapTaskDto,\n mapToolEvent,\n mapTranscriptLine,\n toApiTaskStatus,\n} from './ai-receptionist-api.mappers';\nimport { filenameFromContentDisposition } from '../utils/csv-download.util';\nimport { AiReceptionistApiMockService } from './ai-receptionist-api.mock';\n\n@Injectable({ providedIn: 'root' })\nexport class AiReceptionistApiService {\n private readonly http = inject(HttpClient);\n private readonly mock = inject(AiReceptionistApiMockService);\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\n private readonly paths = createVoiceReceptionistPaths(this.config);\n private readonly arBase = this.paths.aiReceptionistPath();\n\n private get useMock(): boolean {\n return !!this.config.useMockApi;\n }\n\n getStatus(): Observable<{ data: AiReceptionistStatus }> {\n if (this.useMock) return this.mock.getStatus();\n return this.http.get<AiStatusDto>(`${this.arBase}/status`).pipe(\n map((body) => ({ data: mapStatusDto(body) })),\n catchError((err: HttpErrorResponse) =>\n throwError(() => ({\n message: this.apiErrorMessage(err, 'Failed to load agent status.'),\n status: err.status,\n })),\n ),\n );\n }\n\n /** Prefer this for the dashboard On/Off switch — PUT { enabled }. */\n setAgentOnline(enabled: boolean): Observable<{ data: AiReceptionistStatus }> {\n if (this.useMock) {\n this.mock.setAgentOn(enabled);\n return this.mock.getStatus();\n }\n return this.http\n .put<AiStatusDto>(`${this.arBase}/agent-online`, { enabled })\n .pipe(\n map((body) => ({ data: mapStatusDto(body, { acceptEnabled: true }) })),\n catchError((err: HttpErrorResponse) =>\n throwError(() => ({\n message: this.apiErrorMessage(err, 'Failed to update agent online status.'),\n status: err.status,\n })),\n ),\n );\n }\n\n /** @deprecated Prefer setAgentOnline — kept for setup wizard activate flow. */\n setAgentOn(on: boolean): void {\n if (this.useMock) {\n this.mock.setAgentOn(on);\n return;\n }\n const path = on ? 'activate' : 'deactivate';\n this.http.post(`${this.arBase}/${path}`, {}).subscribe();\n }\n\n getDashboard(): Observable<{ data: DashboardData }> {\n if (this.useMock) return this.mock.getDashboard();\n return forkJoin({\n summary: this.http.get<DashboardSummaryDto>(`${this.arBase}/dashboard/summary`),\n history: this.http.get<unknown>(`${this.arBase}/calls/history`, {\n params: new HttpParams().set('page', '1').set('limit', '5'),\n }),\n tasks: this.http\n .get<unknown>(`${this.arBase}/tasks`, {\n params: new HttpParams().set('source', 'voice').set('limit', '5'),\n })\n .pipe(catchError(() => of([]))),\n appointments: this.http\n .get<AiCreatedAppointmentDto[] | { items: AiCreatedAppointmentDto[] }>(\n `${this.arBase}/dashboard/appointments`,\n { params: new HttpParams().set('limit', '5') },\n )\n .pipe(catchError(() => of([] as AiCreatedAppointmentDto[]))),\n }).pipe(\n map(({ summary, history, tasks, appointments }) => ({\n data: {\n stats: mapDashboardSummaryDto(summary),\n liveCalls: [],\n latestTasks: asTaskList(tasks)\n .map(mapTaskDto)\n .sort((a, b) => b.created - a.created)\n .slice(0, 5),\n latestAppointments: (Array.isArray(appointments)\n ? appointments\n : appointments.items ?? []\n ).map(mapAiCreatedAppointmentDto),\n recentHistory: asHistoryList(history).map(mapHistoryCallDto),\n },\n })),\n );\n }\n\n getLiveCalls(): Observable<{ data: LiveCall[] }> {\n if (this.useMock) return this.mock.getLiveCalls();\n return this.http.get<unknown>(`${this.arBase}/calls/live`).pipe(\n map((body) => ({ data: asLiveCallList(body).map(mapLiveCallDto) })),\n );\n }\n\n getLiveCall(id: string): Observable<{ data: LiveCall | null }> {\n if (this.useMock) return this.mock.getLiveCall(id);\n const enc = encodeURIComponent(id);\n return this.http.get<LiveCallDto>(`${this.arBase}/calls/${enc}`).pipe(\n map((dto) => ({ data: dto?.id ? mapLiveCallDto(dto) : null })),\n catchError(() => of({ data: null })),\n );\n }\n\n getCallTranscript(id: string): Observable<{ data: TranscriptLine[] }> {\n if (this.useMock) return this.mock.getCallTranscript(id);\n const enc = encodeURIComponent(id);\n return this.http.get<unknown>(`${this.arBase}/calls/${enc}/transcript`).pipe(\n map((body) => ({ data: asTranscriptList(body).map(mapTranscriptLine) })),\n catchError(() => of({ data: [] })),\n );\n }\n\n getCallSummary(id: string): Observable<{\n data: { summary: string; transcript: TranscriptLine[]; tools: ToolEvent[] } | null;\n }> {\n if (this.useMock) return this.mock.getCallSummary(id);\n const enc = encodeURIComponent(id);\n return this.http.get<HistoryDetailDto>(`${this.arBase}/calls/${enc}/summary`).pipe(\n map((dto) => ({\n data: dto\n ? {\n summary: dto.summary ?? '',\n transcript: (dto.transcript ?? []).map(mapTranscriptLine),\n tools: (dto.tools ?? []).map(mapToolEvent),\n }\n : null,\n })),\n catchError(() => of({ data: null })),\n );\n }\n\n getCallRecording(callId: string): Observable<CallRecordingMeta> {\n if (this.useMock) return this.mock.getCallRecording(callId);\n const enc = encodeURIComponent(callId);\n return this.http.get<RecordingDto>(`${this.arBase}/calls/${enc}/recording`).pipe(\n map((dto) => mapRecordingMeta(dto)),\n catchError(() =>\n of<CallRecordingMeta>({\n callId,\n status: 'unavailable',\n url: null,\n message: 'No recording available for this call',\n }),\n ),\n );\n }\n\n /** Fetch audio bytes with JWT (interceptor). Pass relative path from metadata.url. */\n getCallRecordingBlob(audioPath: string): Observable<Blob> {\n if (this.useMock) return this.mock.getCallRecordingBlob();\n const url = audioPath.startsWith('http') ? audioPath : `${this.paths.apiRoot()}${audioPath}`;\n return this.http.get(url, { responseType: 'blob' });\n }\n\n getHistory(\n filters?: CallListFilters & { page?: number; limit?: number },\n ): Observable<PaginatedResult<HistoryCall>> {\n if (this.useMock) return this.mock.getHistory(filters);\n const page = filters?.page ?? 1;\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\n const params = this.callListParams(filters).set('page', String(page)).set('limit', String(limit));\n return this.http.get<unknown>(`${this.arBase}/calls/history`, { params }).pipe(\n map((body) => {\n const pageResult = asPaginatedResult<HistoryCallDto>(body, page, limit);\n return {\n ...pageResult,\n items: pageResult.items.map(mapHistoryCallDto),\n };\n }),\n );\n }\n\n getCallDetail(id: string): Observable<{ data: HistoryDetail | null }> {\n if (this.useMock) return this.mock.getCallDetail(id);\n const enc = encodeURIComponent(id);\n return forkJoin({\n call: this.http.get<HistoryCallDto | LiveCallDto>(`${this.arBase}/calls/${enc}`),\n summary: this.http.get<HistoryDetailDto>(`${this.arBase}/calls/${enc}/summary`),\n recording: this.http\n .get<RecordingDto>(`${this.arBase}/calls/${enc}/recording`)\n .pipe(catchError(() => of({ callId: id, url: null, message: '' }))),\n }).pipe(\n map(({ call, summary, recording }) => {\n if (!isHistoryCallDto(call)) return { data: null };\n return {\n data: mapHistoryDetailDto(call, summary, recording?.url),\n };\n }),\n catchError(() => of({ data: null })),\n );\n }\n\n regenerateCallSummary(callId: string): Observable<{ data: RegenerateSummaryResult }> {\n if (this.useMock) return this.mock.regenerateCallSummary(callId);\n const enc = encodeURIComponent(callId);\n return this.http\n .post<RegenerateSummaryResponseDto>(`${this.arBase}/calls/${enc}/summary/regenerate`, {})\n .pipe(\n map((body) => ({ data: mapRegenerateSummaryResponse(body) })),\n catchError((err: HttpErrorResponse) =>\n throwError(() => ({\n message: this.apiErrorMessage(err, 'Failed to regenerate summary.'),\n status: err.status,\n })),\n ),\n );\n }\n\n /**\n * Staff softphone join into LiveKit room `call-{callId}`.\n * POST /calls/:id/media/join { mode: listen|takeover }\n */\n postMediaJoin(\n id: string,\n mode: StaffMediaMode,\n ): Observable<{ data: StaffMediaJoinResult }> {\n if (this.useMock) return this.mock.postMediaJoin(id, mode);\n const enc = encodeURIComponent(id);\n return this.http\n .post<unknown>(`${this.arBase}/calls/${enc}/media/join`, { mode })\n .pipe(\n map((body) => {\n const data = mapStaffMediaJoinResult(body);\n if (!data) {\n throw new Error('media/join response missing livekitUrl or clientToken');\n }\n return { data: { ...data, callId: data.callId || id, mode } };\n }),\n catchError((err: HttpErrorResponse) =>\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to join call media'))),\n ),\n );\n }\n\n /** Drop staff WebRTC only; does not hang up the patient. */\n postMediaLeave(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postMediaLeave(id);\n const enc = encodeURIComponent(id);\n return this.http\n .post<unknown>(`${this.arBase}/calls/${enc}/media/leave`, {})\n .pipe(map(() => ({ data: { success: true } })));\n }\n\n /**\n * Take over — same join payload as media/join { mode: takeover }.\n * Prefer this or postMediaJoin('takeover'); both are supported by BE.\n */\n postTakeover(id: string): Observable<{ data: StaffMediaJoinResult }> {\n if (this.useMock) return this.mock.postMediaJoin(id, 'takeover');\n const enc = encodeURIComponent(id);\n return this.http.post<unknown>(`${this.arBase}/calls/${enc}/takeover`, {}).pipe(\n map((body) => {\n const data = mapStaffMediaJoinResult(body);\n if (!data) {\n throw new Error('takeover response missing livekitUrl or clientToken');\n }\n const mode: StaffMediaMode = 'takeover';\n return { data: { ...data, callId: data.callId || id, mode } };\n }),\n catchError((err: HttpErrorResponse) =>\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to take over call'))),\n ),\n );\n }\n\n postResumeAi(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postResumeAi(id);\n return this.postCallAction(id, 'resume-ai');\n }\n\n postPause(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postPause(id);\n return this.postCallAction(id, 'pause');\n }\n\n postResume(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postResume(id);\n return this.postCallAction(id, 'resume');\n }\n\n /** Listen — same join payload as media/join { mode: listen }. */\n postListen(id: string): Observable<{ data: StaffMediaJoinResult }> {\n if (this.useMock) return this.mock.postMediaJoin(id, 'listen');\n const enc = encodeURIComponent(id);\n return this.http.post<unknown>(`${this.arBase}/calls/${enc}/listen`, {}).pipe(\n map((body) => {\n const data = mapStaffMediaJoinResult(body);\n if (!data) {\n throw new Error('listen response missing livekitUrl or clientToken');\n }\n const mode: StaffMediaMode = 'listen';\n return { data: { ...data, callId: data.callId || id, mode } };\n }),\n catchError((err: HttpErrorResponse) =>\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to listen to call'))),\n ),\n );\n }\n\n postTransfer(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postTransfer(id);\n return this.postCallAction(id, 'transfer');\n }\n\n postEnd(id: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postEnd(id);\n const enc = encodeURIComponent(id);\n return this.http\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/end`, {})\n .pipe(map(() => ({ data: { success: true } })));\n }\n\n postMessage(id: string, text: string): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.postMessage(id, text);\n const enc = encodeURIComponent(id);\n return this.http\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/messages`, { text })\n .pipe(map(() => ({ data: { success: true } })));\n }\n\n postReview(id: string): Observable<{ data: { review: string } }> {\n if (this.useMock) return this.mock.postReview(id);\n const enc = encodeURIComponent(id);\n return this.http\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/review`, {})\n .pipe(map(() => ({ data: { review: 'reviewed' } })));\n }\n\n getTasks(filters?: TaskFilters): Observable<PaginatedResult<TaskItem>> {\n if (this.useMock) return this.mock.getTasks(filters);\n const page = filters?.page ?? 1;\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\n if (filters?.status) {\n const apiStatus = filters.status === 'in_progress' ? 'in-progress' : filters.status;\n params = params.set('status', apiStatus);\n }\n if (filters?.type) params = params.set('type', filters.type);\n if (filters?.source) params = params.set('source', filters.source);\n if (filters?.callId) params = params.set('callId', filters.callId);\n return this.http.get<unknown>(`${this.arBase}/tasks`, { params }).pipe(\n map((body) => {\n const pageResult = asPaginatedResult<TaskDto>(body, page, limit);\n return {\n ...pageResult,\n items: pageResult.items.map(mapTaskDto),\n };\n }),\n );\n }\n\n getCallTasks(callId: string): Observable<{ data: TaskItem[] }> {\n if (this.useMock) return this.mock.getCallTasks(callId);\n const enc = encodeURIComponent(callId);\n return this.http.get<unknown>(`${this.arBase}/calls/${enc}/tasks`).pipe(\n map((body) => ({ data: asTaskList(body).map(mapTaskDto) })),\n );\n }\n\n createTask(req: CreateTaskRequest): Observable<{ data: TaskItem }> {\n if (this.useMock) return this.mock.createTask(req);\n return this.http\n .post<unknown>(`${this.arBase}/tasks`, mapCreateTaskRequest(req))\n .pipe(map((body) => ({ data: mapTaskDto(body as TaskDto) })));\n }\n\n patchTask(id: string, status: TaskItem['status']): Observable<{ data: TaskItem | null }> {\n if (this.useMock) return this.mock.patchTask(id, status);\n const enc = encodeURIComponent(id);\n return this.http\n .patch<unknown>(`${this.arBase}/tasks/${enc}`, { status: toApiTaskStatus(status) })\n .pipe(map((body) => ({ data: mapTaskDto(body as TaskDto) })));\n }\n\n getAnalytics(query: string | AnalyticsQuery): Observable<{ data: AnalyticsData }> {\n const filters = typeof query === 'string' ? { range: query } : query;\n const range = filters.range || '30d';\n if (this.useMock) return this.mock.getAnalytics(filters);\n const params = this.analyticsParams(filters);\n return this.http.get<AnalyticsDto>(`${this.arBase}/analytics/summary`, { params }).pipe(\n map((body) => ({ data: mapAnalyticsDto(body, range) })),\n );\n }\n\n /** GET /calls/history/export — same filters as getHistory, no pagination. */\n exportHistoryCsv(\n filters?: CallListFilters,\n ): Observable<CsvExportResult> {\n if (this.useMock) return this.mock.exportHistoryCsv(filters);\n return this.getCsvExport('/calls/history/export', this.callListParams(filters), 'call-history.csv');\n }\n\n /** GET /analytics/export — same filters as getAnalytics including range. */\n exportAnalyticsCsv(filters?: AnalyticsQuery): Observable<CsvExportResult> {\n if (this.useMock) return this.mock.exportAnalyticsCsv(filters);\n const range = filters?.range || '30d';\n return this.getCsvExport(\n '/analytics/export',\n this.analyticsParams(filters),\n `analytics-${range}.csv`,\n );\n }\n\n getSettings(): Observable<{ data: AgentSettings }> {\n if (this.useMock) return this.mock.getSettings();\n return forkJoin({\n settings: this.http.get<unknown>(`${this.arBase}/settings`),\n safety: this.http.get<unknown>(`${this.arBase}/settings/safety-checks`),\n }).pipe(\n map(({ settings, safety }) => ({\n data: mapSettingsResponse(settings, safety),\n })),\n );\n }\n\n putSettings(next: AgentSettings): Observable<{ data: AgentSettings }> {\n if (this.useMock) return this.mock.putSettings(next);\n return this.http\n .put<unknown>(`${this.arBase}/settings`, { settings: mapSettingsToRequest(next) })\n .pipe(\n switchMap(() => this.getSettings()),\n catchError((err: HttpErrorResponse) =>\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to save agent settings'))),\n ),\n );\n }\n\n /** Shipped default voice system prompt + max lengths. */\n getVoicePromptDefault(): Observable<{\n defaultVoiceSystemPrompt: string;\n voiceSystemPromptMaxLength: number;\n customVoiceInstructionsMaxLength: number;\n notes?: string;\n }> {\n if (this.useMock) return this.mock.getVoicePromptDefault();\n return this.http.get<{\n defaultVoiceSystemPrompt?: string;\n voiceSystemPromptMaxLength?: number;\n customVoiceInstructionsMaxLength?: number;\n notes?: string;\n }>(`${this.arBase}/settings/voice-prompt-default`).pipe(\n map((body) => ({\n defaultVoiceSystemPrompt: String(body?.defaultVoiceSystemPrompt ?? ''),\n voiceSystemPromptMaxLength: Number(body?.voiceSystemPromptMaxLength) || 24000,\n customVoiceInstructionsMaxLength:\n Number(body?.customVoiceInstructionsMaxLength) || 8000,\n notes: body?.notes ? String(body.notes) : undefined,\n })),\n );\n }\n\n /** ElevenLabs spoken sample for Agent Settings voice picker. */\n previewVoice(voiceId: string): Observable<Blob> {\n if (this.useMock) return this.mock.previewVoice(voiceId);\n return this.http\n .post(`${this.arBase}/settings/preview-voice`, { voiceId }, {\n responseType: 'blob',\n })\n .pipe(\n catchError((err: HttpErrorResponse) =>\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to preview voice'))),\n ),\n );\n }\n\n /**\n * Knowledge Base test: draft an answer from whatToSay / whatNotToSay and\n * return spoken audio in the practice (or selected) voice.\n */\n testKnowledgeAnswer(params: {\n question: string;\n whatToSay: string;\n whatNotToSay: string;\n voiceId?: string;\n }): Observable<{ answer: string; voiceId: string; audioBlob: Blob }> {\n if (this.useMock) {\n return this.mock.testKnowledgeAnswer(params);\n }\n return this.http\n .post<{\n answer?: string;\n voiceId?: string;\n audioBase64?: string;\n contentType?: string;\n }>(`${this.arBase}/settings/test-knowledge`, params)\n .pipe(\n map((body) => {\n const answer = String(body?.answer ?? '').trim();\n const b64 = String(body?.audioBase64 ?? '').trim();\n if (!answer || !b64) {\n throw new Error('Test response missing answer or audio');\n }\n const contentType = String(body?.contentType ?? 'audio/mpeg');\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return {\n answer,\n voiceId: String(body?.voiceId ?? params.voiceId ?? ''),\n audioBlob: new Blob([bytes], { type: contentType }),\n };\n }),\n catchError((err: HttpErrorResponse) =>\n throwError(\n () => new Error(this.apiErrorMessage(err, 'Could not generate a test answer.')),\n ),\n ),\n );\n }\n\n getAudit(\n q?: string,\n opts?: { page?: number; limit?: number; actor?: string },\n ): Observable<PaginatedResult<AuditEvent>> {\n if (this.useMock) return this.mock.getAudit(q, opts?.actor, opts);\n const page = opts?.page ?? 1;\n const limit = opts?.limit ?? DEFAULT_PAGE_SIZE;\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\n if (q) params = params.set('search', q);\n if (opts?.actor?.trim()) params = params.set('actor', opts.actor.trim());\n return this.http.get<unknown>(`${this.arBase}/audit`, { params }).pipe(\n map((body) => {\n const pageResult = asPaginatedResult(body, page, limit);\n return {\n ...pageResult,\n items: asAuditList(body).map((e, i) => mapAuditEventDto(e, i)),\n };\n }),\n );\n }\n\n /**\n * Agent activity feed: patients created, appointments booked, tasks from AI.\n * GET /api/ai-receptionist/activities\n */\n getActivities(\n filters?: AgentActivityFilters,\n ): Observable<PaginatedResult<AgentActivity>> {\n if (this.useMock) return this.mock.getActivities(filters);\n const page = filters?.page ?? 1;\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\n if (filters?.search?.trim()) params = params.set('search', filters.search.trim());\n if (filters?.types?.trim()) params = params.set('types', filters.types.trim());\n if (filters?.from?.trim()) params = params.set('from', filters.from.trim());\n if (filters?.to?.trim()) params = params.set('to', filters.to.trim());\n if (filters?.callId?.trim()) params = params.set('callId', filters.callId.trim());\n\n return this.http.get<unknown>(`${this.arBase}/activities`, { params }).pipe(\n map((body) => {\n const pageResult = asPaginatedResult(body, page, limit);\n return {\n ...pageResult,\n items: pageResult.items.map((row, i) => mapAgentActivity(row, i)),\n };\n }),\n );\n }\n\n getSetup(): Observable<{ data: SetupData }> {\n if (this.useMock) return this.mock.getSetup();\n return this.http.get<SetupDto>(`${this.arBase}/setup`).pipe(\n map((body) => ({ data: mapSetupDto(body) })),\n );\n }\n\n activateSetup(): Observable<{ data: { success: boolean } }> {\n if (this.useMock) return this.mock.activateSetup();\n return this.http\n .post<{ activated: boolean }>(`${this.arBase}/setup/activate`, {})\n .pipe(map(() => ({ data: { success: true } })));\n }\n\n getLocations(): Observable<{ data: LocationOption[] }> {\n if (this.useMock) return this.mock.getLocations();\n return this.http.get<unknown>(this.paths.apiPath('/locations')).pipe(\n map((body) => ({ data: extractApiRows(body).map(mapLocationDto) })),\n );\n }\n\n getProviders(): Observable<{ data: ProviderOption[] }> {\n if (this.useMock) return this.mock.getProviders();\n return this.http.get<unknown>(this.paths.v1Path('/providers')).pipe(\n map((body) => ({ data: extractApiRows(body).map(mapProviderDto) })),\n );\n }\n\n getStreamLines(): TranscriptLine[] {\n return this.mock.getStreamLines();\n }\n\n appendStreamLine(callId: string, line: TranscriptLine): void {\n this.mock.appendStreamLine(callId, line);\n }\n\n usesMockStreaming(): boolean {\n return this.useMock;\n }\n\n getCallApiLogs(callId: string): Observable<ApiLogListResponse> {\n if (this.useMock) return this.mock.getCallApiLogs(callId);\n const enc = encodeURIComponent(callId);\n return this.http.get<ApiLogListResponse>(`${this.arBase}/calls/${enc}/api-logs`).pipe(\n map((body) => ({\n items: [...(body.items ?? [])].sort(\n (a, b) => Date.parse(a.startedAt) - Date.parse(b.startedAt),\n ),\n total: body.total ?? body.items?.length ?? 0,\n })),\n );\n }\n\n getApiLogs(filters: ApiLogFilters = {}): Observable<ApiLogListResponse> {\n if (this.useMock) return this.mock.getApiLogs(filters);\n let params = new HttpParams();\n if (filters.provider) params = params.set('provider', filters.provider);\n if (filters.success !== undefined) params = params.set('success', String(filters.success));\n if (filters.statusCode != null) params = params.set('statusCode', String(filters.statusCode));\n if (filters.operation) params = params.set('operation', filters.operation);\n if (filters.callId) params = params.set('callId', filters.callId);\n if (filters.from) params = params.set('from', filters.from);\n if (filters.to) params = params.set('to', filters.to);\n if (filters.search) params = params.set('search', filters.search);\n if (filters.page != null) params = params.set('page', String(filters.page));\n if (filters.limit != null) params = params.set('limit', String(filters.limit));\n if (filters.practiceId) params = params.set('practiceId', filters.practiceId);\n return this.http.get<ApiLogListResponse>(`${this.arBase}/api-logs`, { params });\n }\n\n getApiLogDetail(logId: string): Observable<{ data: ApiLogDetail | null }> {\n if (this.useMock) return this.mock.getApiLogDetail(logId);\n const enc = encodeURIComponent(logId);\n return this.http\n .get<ApiLogDetail>(`${this.arBase}/api-logs/${enc}`)\n .pipe(map((data) => ({ data })));\n }\n\n getApiLogStats(practiceId?: string): Observable<{ data: ApiLogStats }> {\n if (this.useMock) return this.mock.getApiLogStats();\n let params = new HttpParams();\n if (practiceId) params = params.set('practiceId', practiceId);\n return this.http\n .get<ApiLogStats>(`${this.arBase}/api-logs/stats`, { params })\n .pipe(map((data) => ({ data })));\n }\n\n getOutboundPurposes(includeInactive = false): Observable<OutboundPurposesResponse> {\n if (this.useMock) return this.mock.getOutboundPurposes(includeInactive);\n const params = includeInactive ? new HttpParams().set('includeInactive', 'true') : undefined;\n return this.http.get<OutboundPurposesResponse>(`${this.arBase}/calls/outbound/purposes`, {\n params,\n });\n }\n\n createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose> {\n if (this.useMock) return this.mock.createOutboundPurpose(body);\n return this.http.post<OutboundPurpose>(`${this.arBase}/calls/outbound/purposes`, body);\n }\n\n updateOutboundPurpose(\n purposeId: string,\n body: UpdateOutboundPurposeRequest,\n ): Observable<OutboundPurpose> {\n if (this.useMock) return this.mock.updateOutboundPurpose(purposeId, body);\n const enc = encodeURIComponent(purposeId);\n return this.http.patch<OutboundPurpose>(`${this.arBase}/calls/outbound/purposes/${enc}`, body);\n }\n\n deleteOutboundPurpose(purposeId: string): Observable<{ success: boolean }> {\n if (this.useMock) return this.mock.deleteOutboundPurpose(purposeId);\n const enc = encodeURIComponent(purposeId);\n return this.http.delete<{ success: boolean }>(\n `${this.arBase}/calls/outbound/purposes/${enc}`,\n );\n }\n\n placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse> {\n if (this.useMock) return this.mock.placeOutboundCall(body);\n return this.http.post<PlaceOutboundCallResponse>(`${this.arBase}/calls/outbound`, body).pipe(\n catchError((err: HttpErrorResponse) => {\n const detail =\n typeof err.error === 'object' && err.error && 'message' in err.error\n ? String((err.error as { message: unknown }).message)\n : err.message;\n return throwError(() => ({ message: detail || 'Failed to place outbound call.' }));\n }),\n );\n }\n\n /**\n * Patient typeahead for outbound dialer.\n * Tries `/api/v1/patients/search`, then `/api/v1/patients?q=`, then by-phone for digit queries.\n */\n searchPatientsForOutbound(q: string, limit = 10): Observable<OutboundPatientHit[]> {\n const query = q.trim();\n if (!query) return of([]);\n if (this.useMock) return this.mock.searchPatientsForOutbound(query, limit);\n\n const params = new HttpParams().set('q', query).set('limit', String(limit));\n const searchUrl = this.paths.v1Path('/patients/search');\n const listUrl = this.paths.v1Path('/patients');\n\n return this.http.get<unknown>(searchUrl, { params }).pipe(\n map((body) => this.mapPatientHits(body)),\n catchError(() =>\n this.http.get<unknown>(listUrl, { params }).pipe(\n map((body) => this.mapPatientHits(body)),\n catchError(() => of([] as OutboundPatientHit[])),\n ),\n ),\n switchMap((hits) => {\n if (hits.length > 0) return of(hits);\n const phone = toE164Phone(query);\n if (!phone && !/\\d{7,}/.test(query)) return of([]);\n return this.http\n .get<unknown>(this.paths.v1Path('/patients/by-phone'), {\n params: new HttpParams().set('phone', phone || query.replace(/\\D/g, '')),\n })\n .pipe(\n map((body) => this.mapPatientHits(body)),\n catchError(() => of([] as OutboundPatientHit[])),\n );\n }),\n );\n }\n\n /** Upcoming appointments for a patient (dialer picker). */\n listPatientAppointmentsForOutbound(\n patientId: string,\n limit = 20,\n ): Observable<OutboundAppointmentHit[]> {\n const id = patientId.trim();\n if (!id) return of([]);\n if (this.useMock) return this.mock.listPatientAppointmentsForOutbound(id, limit);\n\n const from = new Date();\n from.setHours(0, 0, 0, 0);\n const params = new HttpParams()\n .set('patientId', id)\n .set('patient_id', id)\n .set('from', from.toISOString())\n .set('limit', String(limit));\n\n const v1Url = this.paths.v1Path('/appointments');\n const apiUrl = this.paths.apiPath('/appointments');\n\n // Prefer /api/appointments (current host contract), then /api/v1/appointments.\n return this.http.get<unknown>(apiUrl, { params }).pipe(\n map((body) => this.mapAppointmentHits(body)),\n catchError(() =>\n this.http.get<unknown>(v1Url, { params }).pipe(\n map((body) => this.mapAppointmentHits(body)),\n catchError(() => of([] as OutboundAppointmentHit[])),\n ),\n ),\n );\n }\n\n private mapPatientHits(body: unknown): OutboundPatientHit[] {\n return extractApiRows(body)\n .map(mapOutboundPatientHit)\n .filter((p): p is OutboundPatientHit => !!p);\n }\n\n private mapAppointmentHits(body: unknown): OutboundAppointmentHit[] {\n return extractApiRows(body)\n .map(mapOutboundAppointmentHit)\n .filter((a): a is OutboundAppointmentHit => !!a)\n .sort((a, b) => String(a.startTime ?? '').localeCompare(String(b.startTime ?? '')));\n }\n\n private postCallAction(id: string, action: string): Observable<{ data: { success: boolean } }> {\n const enc = encodeURIComponent(id);\n return this.http\n .post<unknown>(`${this.arBase}/calls/${enc}/${action}`, {})\n .pipe(map(() => ({ data: { success: true } })));\n }\n\n private analyticsParams(filters?: AnalyticsQuery): HttpParams {\n let params = this.callListParams(filters);\n const range = filters?.range || '30d';\n params = params.set('range', range);\n if (filters?.startDate) params = params.set('startDate', filters.startDate);\n if (filters?.endDate) params = params.set('endDate', filters.endDate);\n return params;\n }\n\n private callListParams(filters?: CallListFilters): HttpParams {\n let params = new HttpParams();\n if (filters?.q) params = params.set('search', filters.q);\n if (filters?.dir) params = params.set('direction', filters.dir);\n if (filters?.outcome) params = params.set('outcome', filters.outcome);\n if (filters?.location) params = params.set('location', filters.location);\n if (filters?.review) params = params.set('review', filters.review);\n return params;\n }\n\n private getCsvExport(\n path: string,\n params: HttpParams,\n fallbackName: string,\n ): Observable<CsvExportResult> {\n return this.http\n .get(`${this.arBase}${path}`, {\n params,\n responseType: 'blob',\n observe: 'response',\n })\n .pipe(\n map((res: HttpResponse<Blob>) => ({\n blob: res.body ?? new Blob([], { type: 'text/csv' }),\n filename: filenameFromContentDisposition(\n res.headers.get('Content-Disposition'),\n fallbackName,\n ),\n })),\n catchError((err: HttpErrorResponse) =>\n throwError(() => ({\n message: this.apiErrorMessage(err, 'Failed to export CSV.'),\n status: err.status,\n })),\n ),\n );\n }\n\n private apiErrorMessage(err: HttpErrorResponse, fallback: string): string {\n const body = err.error;\n if (typeof body === 'object' && body && 'message' in body) {\n return String((body as { message: unknown }).message);\n }\n if (typeof body === 'string' && body.trim()) return body;\n return fallback;\n }\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { catchError, finalize, of, switchMap, tap, throwError } from 'rxjs';\n\nimport { AiReceptionistApiService } from './ai-receptionist-api.service';\n\nexport type AgentOnlineKnownState = boolean | null;\n\n/**\n * Shared source of truth for Ava online/offline across topbar + module nav.\n * Always re-fetches GET /status after mutations.\n */\n@Injectable({ providedIn: 'root' })\nexport class AgentOnlineService {\n private readonly api = inject(AiReceptionistApiService);\n\n /** true = online, false = offline, null = unknown / not loaded */\n private readonly _online = signal<AgentOnlineKnownState>(null);\n private readonly _loading = signal(false);\n private readonly _toggling = signal(false);\n private readonly _error = signal<string | null>(null);\n private readonly _readiness = signal<number | null>(null);\n\n readonly online = this._online.asReadonly();\n readonly loading = this._loading.asReadonly();\n readonly toggling = this._toggling.asReadonly();\n readonly error = this._error.asReadonly();\n readonly readiness = this._readiness.asReadonly();\n\n refresh(): void {\n this._loading.set(true);\n this._error.set(null);\n this.api.getStatus().subscribe({\n next: ({ data }) => {\n if (data.agentOnExplicit !== false) {\n this._online.set(data.agentOn);\n }\n this._readiness.set(data.readiness);\n this._loading.set(false);\n },\n error: (err: { message?: string }) => {\n this._online.set(null);\n this._error.set(err.message ?? 'Could not load agent status.');\n this._loading.set(false);\n },\n });\n }\n\n /**\n * PUT /agent-online then re-fetch GET /status.\n */\n setOnline(enabled: boolean) {\n this._toggling.set(true);\n this._error.set(null);\n\n return this.api.setAgentOnline(enabled).pipe(\n tap((putResult) => {\n this._online.set(\n putResult.data.agentOnExplicit !== false ? putResult.data.agentOn : enabled,\n );\n this._readiness.set(putResult.data.readiness);\n }),\n switchMap(() =>\n this.api.getStatus().pipe(\n catchError((err: { message?: string }) => {\n this._error.set(err.message ?? 'Status refresh failed after toggle.');\n return of(null);\n }),\n ),\n ),\n tap((result) => {\n if (result && result.data.agentOnExplicit !== false) {\n this._online.set(result.data.agentOn);\n this._readiness.set(result.data.readiness);\n }\n }),\n catchError((err: { message?: string }) => {\n this._error.set(err.message ?? 'Failed to update agent online status.');\n return throwError(() => err);\n }),\n finalize(() => this._toggling.set(false)),\n );\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nexport interface ToastMessage {\n id: number;\n text: string;\n variant: 'info' | 'success' | 'error';\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private nextId = 1;\n private timers = new Map<number, ReturnType<typeof setTimeout>>();\n\n private readonly _toasts = signal<ToastMessage[]>([]);\n readonly toasts = this._toasts.asReadonly();\n\n show(text: string, variant: ToastMessage['variant'] = 'info', durationMs = 3500): void {\n const id = this.nextId++;\n this._toasts.update((list) => [...list, { id, text, variant }]);\n const timer = setTimeout(() => this.dismiss(id), durationMs);\n this.timers.set(id, timer);\n }\n\n dismiss(id: number): void {\n const timer = this.timers.get(id);\n if (timer) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n this._toasts.update((list) => list.filter((t) => t.id !== id));\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { ToastService } from './toast.service';\n\n@Component({\n selector: 'app-toast-container',\n standalone: true,\n templateUrl: './toast-container.component.html',\n styleUrl: './toast-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastContainerComponent {\n protected readonly toastService = inject(ToastService);\n}\n","<div class=\"fixed bottom-6 right-6 z-[1100] flex max-w-[380px] flex-col gap-3 pointer-events-none\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"toast pointer-events-auto flex items-start gap-3 rounded-lg border border-base bg-white px-4 py-3 text-[13px] text-dark shadow-[0_6px_24px_rgba(20,30,50,0.12)]\"\n role=\"status\"\n >\n <span\n class=\"inline-flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-full\"\n [class]=\"toast.variant === 'success' ? 'bg-emerald-50 text-emerald-600' : toast.variant === 'error' ? 'bg-red-50 text-red-600' : 'bg-blue-50 text-blue-600'\"\n aria-hidden=\"true\"\n >\n @switch (toast.variant) {\n @case ('success') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n @case ('error') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n @default {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n }\n </span>\n <span class=\"flex-1 leading-snug\">{{ toast.text }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded border-none bg-transparent text-light transition-colors duration-150 hover:bg-lighter hover:text-dark\"\n (click)=\"toastService.dismiss(toast.id)\"\n aria-label=\"Dismiss notification\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Output,\n computed,\n input,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\ntype Size = 'xs' | 'sm' | 'base' | 'md' | 'lg';\ntype Variant =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info';\ntype Shape = 'square' | 'pill' | 'rounded';\n\n/** Coerce `[loading]` so attributes like `loading`, `loading=\"true\"|\"false\"`, or a label work. */\nfunction coerceLoading(value: unknown): boolean | string {\n if (value == null) return false;\n if (value === '' || value === true) return true;\n if (typeof value === 'string') {\n if (value === 'true') return true;\n if (value === 'false') return false;\n const v = value.trim();\n if (v === '') return false;\n if (v === 'true') return true;\n if (v === 'false') return false;\n return v;\n }\n if (typeof value === 'boolean') return value;\n return false;\n}\n\ndeclare const ngDevMode: boolean;\n\n@Component({\n selector: 'ed-button',\n standalone: true,\n imports: [CommonModule, RouterModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './ed-button.component.html',\n styleUrl: './ed-button.component.scss',\n})\nexport class EdButtonComponent {\n variant = input<Variant>('default');\n size = input<Size>('base');\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n ghost = input<boolean, unknown>(false, { transform: booleanAttribute });\n outline = input<boolean, unknown>(false, { transform: booleanAttribute });\n subtle = input<boolean, unknown>(false, { transform: booleanAttribute });\n fill = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n loading = input<boolean | string, unknown>(false, {\n transform: coerceLoading,\n });\n\n block = input<boolean, unknown>(false, { transform: booleanAttribute });\n elevated = input<boolean, unknown>(false, { transform: booleanAttribute });\n shape = input<Shape>('rounded');\n\n type = input<'button' | 'submit' | 'reset'>('button');\n\n href = input<string | null>(null);\n routerLink = input<string | any[] | null>(null);\n rel = input<string | null>(null);\n target = input<string | null>(null);\n download = input<string | boolean | null>(null);\n\n ariaLabel = input<string | null>(null);\n\n @Output('click$') clicked = new EventEmitter<MouseEvent>();\n\n styleKind = computed<'ghost' | 'outline' | 'subtle' | 'fill'>(() => {\n if (this.ghost()) return 'ghost';\n if (this.outline()) return 'outline';\n if (this.subtle()) return 'subtle';\n if (this.fill()) return 'fill';\n return 'outline';\n });\n\n constructor() {\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n effect(() => {\n const active = [\n this.ghost() && 'ghost',\n this.outline() && 'outline',\n this.subtle() && 'subtle',\n this.fill() && 'fill',\n ].filter(Boolean);\n if (active.length > 1) {\n console.warn(\n '[ed-button] Multiple style attributes set:',\n active.join(', '),\n '→ only the first one takes effect.',\n );\n }\n });\n\n effect(() => {\n const hasHref = !!this.href();\n const hasRouter = !!this.routerLink();\n if (hasHref && hasRouter) {\n console.warn(\n '[ed-button] Both href and routerLink provided. routerLink will be used and href ignored.',\n );\n }\n });\n\n effect(() => {\n if (this.target() === '_blank') {\n const rel = (this.rel() ?? '').trim();\n const hasNoopener = /\\bnoopener\\b/.test(rel);\n const hasNoreferrer = /\\bnoreferrer\\b/.test(rel);\n if (!hasNoopener || !hasNoreferrer) {\n console.warn(\n '[ed-button] target=\"_blank\" without rel=\"noopener noreferrer\" → automatically applied.',\n );\n }\n }\n });\n }\n }\n\n linkMode = computed<'router' | 'href' | null>(() =>\n this.routerLink() ? 'router' : this.href() ? 'href' : null,\n );\n\n asAnchor = computed(() => this.linkMode() !== null);\n\n effectiveHref = computed<string | null>(() =>\n this.linkMode() === 'href' ? this.href() || null : null,\n );\n\n effectiveRouterLink = computed<string | any[] | null>(() =>\n this.linkMode() === 'router' ? this.routerLink() || null : null,\n );\n\n safeRel = computed<string | null>(() => {\n const tgt = this.target();\n const rel = (this.rel() ?? '').trim();\n\n if (tgt === '_blank') {\n const tokens = new Set(rel.split(/\\s+/).filter(Boolean));\n tokens.add('noopener');\n tokens.add('noreferrer');\n return Array.from(tokens).join(' ');\n }\n\n return rel || null;\n });\n\n private static readonly HEIGHTS: Record<Size, number> = {\n xs: 24,\n sm: 28,\n base: 32,\n md: 36,\n lg: 40,\n };\n\n private static readonly ICONS: Record<Size, number> = {\n xs: 14,\n sm: 16,\n base: 20,\n md: 18,\n lg: 20,\n };\n\n btnHeightPx = computed(() => EdButtonComponent.HEIGHTS[this.size()]);\n iconPx = computed(() => EdButtonComponent.ICONS[this.size()]);\n\n loadingOn = computed<boolean>(() => {\n const v = this.loading();\n return typeof v === 'string' ? v.trim().length > 0 : !!v;\n });\n\n loadingLabel = computed<string>(() => {\n const v = this.loading();\n return typeof v === 'string' && v.trim().length > 0 ? v : 'Loading…';\n });\n\n downloadAttr() {\n const d = this.download();\n return d === true ? '' : d || null;\n }\n\n onClick(evt: MouseEvent) {\n if (this.disabled() || this.loadingOn()) {\n evt.preventDefault();\n evt.stopImmediatePropagation();\n return;\n }\n this.clicked.emit(evt);\n }\n}\n","<ng-template #slotPrefix>\n <ng-content select='[slot=\"prefix\"]' />\n</ng-template>\n<ng-template #slotDefault>\n <ng-content />\n</ng-template>\n<ng-template #slotSuffix>\n <ng-content select='[slot=\"suffix\"]' />\n</ng-template>\n\n@if (!asAnchor()) {\n <button\n class=\"btn\"\n [attr.variant]=\"variant()\"\n [attr.size]=\"size()\"\n [class.is-block]=\"block()\"\n [class.is-elevated]=\"elevated()\"\n [class.shape-pill]=\"shape() === 'pill'\"\n [class.shape-square]=\"shape() === 'square'\"\n [disabled]=\"disabled() || loadingOn()\"\n [attr.type]=\"type()\"\n [attr.aria-busy]=\"loadingOn() ? 'true' : null\"\n [attr.inert]=\"(disabled() || loadingOn()) ? '' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onClick($event)\"\n [style.height.px]=\"btnHeightPx()\"\n [style.minHeight.px]=\"24\"\n [style.minWidth.px]=\"24\"\n [style.--btn-icon.px]=\"iconPx()\"\n [attr.ghost]=\"ghost() ? '' : null\"\n [attr.subtle]=\"subtle() ? '' : null\"\n [attr.fill]=\"fill() ? '' : null\"\n [attr.outline]=\"(outline() || (!ghost() && !subtle() && !fill())) ? '' : null\">\n @if (loadingOn()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n }\n\n @if (loadingOn()) {\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ loadingLabel() }}\n </span>\n }\n\n <span class=\"btn-inner\">\n <ng-container [ngTemplateOutlet]=\"slotPrefix\"></ng-container>\n\n <span class=\"label\">\n @if (loadingOn()) {\n {{ loadingLabel() }}\n } @else {\n <ng-container [ngTemplateOutlet]=\"slotDefault\"></ng-container>\n }\n </span>\n\n <ng-container [ngTemplateOutlet]=\"slotSuffix\"></ng-container>\n </span>\n </button>\n} @else {\n <a\n class=\"btn\"\n [attr.variant]=\"variant()\"\n [attr.size]=\"size()\"\n [class.is-block]=\"block()\"\n [class.is-elevated]=\"elevated()\"\n [class.shape-pill]=\"shape() === 'pill'\"\n [class.shape-square]=\"shape() === 'square'\"\n [attr.href]=\"effectiveHref()\"\n [routerLink]=\"effectiveRouterLink()\"\n [attr.rel]=\"safeRel()\"\n [attr.target]=\"target() || null\"\n [attr.download]=\"downloadAttr()\"\n [attr.tabindex]=\"(disabled() || loadingOn()) ? -1 : 0\"\n [attr.aria-disabled]=\"(disabled() || loadingOn()) ? 'true' : null\"\n [attr.aria-busy]=\"loadingOn() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onClick($event)\"\n [style.height.px]=\"btnHeightPx()\"\n [style.minHeight.px]=\"24\"\n [style.minWidth.px]=\"24\"\n [style.--btn-icon.px]=\"iconPx()\"\n [attr.ghost]=\"ghost() ? '' : null\"\n [attr.subtle]=\"subtle() ? '' : null\"\n [attr.fill]=\"fill() ? '' : null\"\n [attr.outline]=\"(outline() || (!ghost() && !subtle() && !fill())) ? '' : null\">\n @if (loadingOn()) {\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n }\n\n @if (loadingOn()) {\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ loadingLabel() }}\n </span>\n }\n\n <span class=\"btn-inner\">\n <ng-container [ngTemplateOutlet]=\"slotPrefix\"></ng-container>\n\n <span class=\"label\">\n @if (loadingOn()) {\n {{ loadingLabel() }}\n } @else {\n <ng-container [ngTemplateOutlet]=\"slotDefault\"></ng-container>\n }\n </span>\n\n <ng-container [ngTemplateOutlet]=\"slotSuffix\"></ng-container>\n </span>\n </a>\n}\n","import { Component, Input, NgModule } from '@angular/core';\n\n@Component({\n selector: 'ed-skeleton',\n template: '',\n host: {\n '[class]': '_computedClass()',\n 'aria-hidden': 'true',\n },\n})\nexport class EdSkeletonComponent {\n @Input(\"class\") userClass: string = \"\";\n\n _computedClass() {\n return \"block animate-pulse rounded-md bg-lighter skeleton\" + \" \" + this.userClass;\n }\n}\n\n\n\n","/**\n * ed-icon\n * ----------\n * Renders an inline SVG icon from /assets/icons/{name}.svg\n * - Default size is \"base\" (24px).\n * - Optional color override applies to fill and stroke of child shapes.\n * - Optional additional CSS classes applied directly to the <svg>.\n *\n * Performance & correctness:\n * - ChangeDetectionStrategy.OnPush (no template binding).\n * - Aborts in-flight fetches on input changes & destroy (prevents races/leaks).\n * - Reuses a DOMParser instance.\n * - Caches raw SVG text in a static Map by file path (optional micro-optimization).\n * - Scopes internal SVG IDs (mask/clipPath/filter/gradient/use) per instance.\n * - Ensures a viewBox exists so removing width/height won’t blank the SVG.\n *\n * Accessibility:\n * - By default, icons are decorative → aria-hidden=\"true\", role=\"presentation\", focusable=\"false\".\n * - Overridable via inputs: decorative, ariaHidden, ariaLabel, title, desc.\n */\n\nimport {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ElementRef,\n Renderer2,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\n/* ──────────────────────────────── Types ───────────────────────────────────── */\ntype IconSize = 'xs' | 'sm' | 'md' | 'base' | 'lg' | number | string;\n\n@Component({\n selector: 'ed-icon',\n template: '',\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n inline-size: var(--ed-icon-size, var(--btn-icon, 24px));\n block-size: var(--ed-icon-size, var(--btn-icon, 24px));\n line-height: 1;\n }\n :host svg {\n width: 100%;\n height: 100%;\n /* note: preserveAspectRatio is set as an SVG attribute in TS */\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent implements OnChanges, OnDestroy {\n /** Icon file name (without .svg). */\n @Input() name: string = '';\n\n /** Size token or explicit pixel number. Defaults to base (24). */\n @Input() size: IconSize = 'base';\n\n /** Optional color override for fill/stroke. */\n @Input() color: string = '';\n\n /** Optional space-separated class list for the <svg>. */\n @Input() cssClass: string = '';\n\n // ─── Accessibility Inputs ───────────────────────────────────────────────────\n\n /** Mark the icon as decorative (not announced by screen readers). Default true. */\n @Input() decorative: boolean = true;\n\n /** Optional explicit override for aria-hidden. */\n @Input() ariaHidden?: boolean;\n\n /** Short accessible name for meaningful icons. */\n @Input() ariaLabel: string = '';\n\n /** Optional <title> text injected into the SVG and referenced via aria-labelledby. */\n @Input() title: string = '';\n\n /** Optional <desc> text injected into the SVG and referenced via aria-labelledby. */\n @Input() desc: string = '';\n\n /** Allow keyboard focus (for tooltips). Default: false (BC-safe) */\n @Input() focusable: boolean = false;\n\n /** Optional tabindex to use when focusable; defaults to 0 */\n @Input() tabIndex?: number;\n\n\n /** Host and utilities */\n private host!: HTMLElement;\n private parser = new DOMParser();\n private fetchController: AbortController | null = null;\n\n /** Tiny raw-SVG cache by path */\n private static cache = new Map<string, string>();\n private static inflight = new Map<string, Promise<string>>();\n\n /** Local UID seed for scoping and a11y IDs */\n private static uid = 0;\n private nextUid(prefix: string) {\n IconComponent.uid += 1;\n return `${prefix}-${IconComponent.uid}`;\n }\n\n /** NEW: keep reference to live SVG + observe host size/CSS var changes */\n private svgRef: SVGSVGElement | null = null;\n private ro: ResizeObserver | null = null;\n\n constructor(private el: ElementRef<HTMLElement>, private r: Renderer2) {\n this.host = el.nativeElement;\n }\n\n /** Lifecycle: runs whenever any @Input changes. */\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes['name'] ||\n changes['color'] ||\n changes['size'] ||\n changes['cssClass'] ||\n changes['decorative'] ||\n changes['ariaHidden'] ||\n changes['ariaLabel'] ||\n changes['title'] ||\n changes['desc'] ||\n changes['focusable'] || \n changes['tabIndex']\n ) {\n this.loadSvg();\n }\n }\n\n /** Lifecycle: component teardown. */\n ngOnDestroy() {\n if (this.fetchController) {\n this.fetchController.abort();\n this.fetchController = null;\n }\n if (this.ro) {\n this.ro.disconnect();\n this.ro = null;\n }\n this.svgRef = null;\n this.host.innerHTML = '';\n }\n\n /**\n * Fetches, parses, and injects the SVG into the host.\n * - Aborts previous request to prevent stale DOM writes.\n * - Applies size, classes, color, a11y, and ID scoping.\n */\n private async loadSvg() {\n if (!this.name) return;\n\n // Abort any in-flight request to prevent race conditions.\n if (this.fetchController) this.fetchController.abort();\n this.fetchController = new AbortController();\n\n // Clear existing content so we always replace with fresh markup.\n this.host.innerHTML = '';\n this.svgRef = null;\n\n const svgPath = `assets/icons/${this.name}.svg`;\n\n try {\n // 1) Try memory cache first\n // let svgText = IconComponent.cache.get(svgPath);\n\n // // 2) Hit the network (or browser cache) if not cached in memory.\n // if (!svgText) {\n // const res = await fetch(svgPath, {\n // cache: 'force-cache',\n // signal: this.fetchController.signal,\n // });\n // if (!res.ok) throw new Error(`HTTP ${res.status} for ${svgPath}`);\n // svgText = await res.text();\n // IconComponent.cache.set(svgPath, svgText);\n // }\n\n let svgText = IconComponent.cache.get(svgPath);\n\n if (!svgText) {\n // 2) De-dupe concurrent requests\n let p = IconComponent.inflight.get(svgPath);\n\n if (!p) {\n p = fetch(svgPath, { cache: 'force-cache' })\n .then((res) => {\n if (!res.ok) throw new Error(`HTTP ${res.status} for ${svgPath}`);\n return res.text();\n })\n .then((text) => {\n IconComponent.cache.set(svgPath, text);\n return text;\n })\n .finally(() => {\n IconComponent.inflight.delete(svgPath);\n });\n\n IconComponent.inflight.set(svgPath, p);\n }\n\n svgText = await p;\n }\n\n // 3) Parse raw SVG text into a document, then select the root <svg>.\n const doc = this.parser.parseFromString(svgText, 'image/svg+xml');\n const svgEl = doc.querySelector('svg') as SVGSVGElement | null;\n if (!svgEl) return; // guard: malformed file\n\n // 4) Normalize sizing & scaling\n svgEl.removeAttribute('width');\n svgEl.removeAttribute('height');\n svgEl.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n this.ensureViewBox(svgEl);\n\n // 4.1) Scope internal IDs to avoid collisions across instances\n const scope = this.nextUid('edicon');\n this.scopeSvgIds(svgEl, scope);\n\n // 4.2) Apply component-declared size to CSS var and also prime width/height.\n // (We still mirror final computed vars again after append — see below.)\n // 4.2) Only force a size if it's explicit; otherwise inherit --btn-icon.\n const px = this.resolveSize(this.size);\n const explicitSize =\n (typeof this.size === 'number' && Number(this.size) > 0) ||\n (typeof this.size === 'string' && this.size !== 'base');\n\n if (explicitSize) {\n // icon controls its own size\n this.host.style.setProperty('--ed-icon-size', `${px}px`);\n svgEl.setAttribute('width', String(px));\n svgEl.setAttribute('height', String(px));\n } else {\n // inherit from container (e.g., ed-button via --btn-icon)\n this.host.style.removeProperty('--ed-icon-size');\n // do NOT set width/height here; we’ll mirror the computed var after append\n }\n\n\n // 6) Apply color override to shapes (if provided).\n this.setFillColor(svgEl);\n\n // 7) Apply accessibility attributes/elements.\n this.applyAccessibility(svgEl);\n\n // 8) Import into current document & append to host.\n const node = document.importNode(svgEl, true) as SVGSVGElement;\n this.r.appendChild(this.host, node);\n\n // 9) Keep a live ref and mirror the **effective** CSS var size to <svg> attrs.\n this.svgRef = node;\n this.syncSvgSizeFromCssVar();\n\n // 10) Watch for future changes (e.g., parent updates --btn-icon)\n if (!this.ro) {\n this.ro = new ResizeObserver(() => this.syncSvgSizeFromCssVar());\n } else {\n this.ro.disconnect();\n }\n this.ro.observe(this.host);\n } catch (err: any) {\n // AbortError is expected when inputs change rapidly; ignore it.\n if (err?.name !== 'AbortError') {\n console.error(`Icon load error: ${this.name}`, err);\n }\n } finally {\n // Release controller after completion (success or failure).\n this.fetchController = null;\n }\n }\n\n /** Ensure the SVG has a viewBox so it scales when width/height are removed. */\n private ensureViewBox(svgEl: SVGSVGElement) {\n if (!svgEl.hasAttribute('viewBox')) {\n // Best guess for 24px icons; adjust if your icon set differs.\n // If the SVG has width/height attributes originally, derive from them.\n const w = Number(svgEl.getAttribute('width')) || 24;\n const h = Number(svgEl.getAttribute('height')) || 24;\n svgEl.setAttribute('viewBox', `0 0 ${w} ${h}`);\n }\n }\n\n /**\n * Prefix all internal IDs and their url(#...) references to avoid DOM collisions.\n * Handles: mask, clipPath, filter, gradient, markers, use, and style/url(...) in attributes.\n */\n private scopeSvgIds(svgEl: SVGSVGElement, scope: string) {\n const idMap = new Map<string, string>();\n const urlAttrs = [\n 'fill',\n 'stroke',\n 'filter',\n 'mask',\n 'clip-path',\n 'marker-start',\n 'marker-mid',\n 'marker-end',\n ];\n\n // 1) Collect all elements with an id\n svgEl.querySelectorAll<HTMLElement>('[id]').forEach((el) => {\n const oldId = el.getAttribute('id')!;\n const newId = `${scope}-${oldId}`;\n idMap.set(oldId, newId);\n el.setAttribute('id', newId);\n });\n\n // 2) Rewrite attributes that reference url(#id)\n const all = svgEl.querySelectorAll<HTMLElement>('*');\n all.forEach((el) => {\n urlAttrs.forEach((attr) => {\n const val = el.getAttribute(attr);\n if (!val) return;\n const newVal = val.replace(/url\\(#([^)]+)\\)/g, (_, id) => {\n return idMap.has(id) ? `url(#${idMap.get(id)})` : `url(#${scope}-${id})`;\n });\n if (newVal !== val) el.setAttribute(attr, newVal);\n });\n\n // xlink:href / href on <use>, gradients, etc.\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n if (href && href.startsWith('#')) {\n const raw = href.slice(1);\n const mapped = idMap.get(raw) ?? `${scope}-${raw}`;\n if (el.hasAttribute('href')) el.setAttribute('href', `#${mapped}`);\n if (el.hasAttribute('xlink:href')) el.setAttribute('xlink:href', `#${mapped}`);\n }\n\n // Inline style can also contain url(#id)\n const styleAttr = el.getAttribute('style');\n if (styleAttr && styleAttr.includes('url(#')) {\n const newStyle = styleAttr.replace(/url\\(#([^)]+)\\)/g, (_, id) => {\n return idMap.has(id) ? `url(#${idMap.get(id)})` : `url(#${scope}-${id})`;\n });\n if (newStyle !== styleAttr) el.setAttribute('style', newStyle);\n }\n });\n }\n\n /**\n * Apply accessibility attributes/elements to the <svg>.\n * Defaults: aria-hidden=\"true\", role=\"presentation\", focusable=\"false\".\n * Overridable via inputs: decorative, ariaHidden, ariaLabel, title, desc.\n */\n private applyAccessibility(svgEl: SVGSVGElement) {\n const wantsFocus = !!this.focusable;\n\n // Decide visibility to AT (screen readers)\n // Default: decorative => hidden (unchanged)\n // If focusable is true, force it to be *not* hidden so SR can announce it.\n const hidden = wantsFocus ? false : (this.ariaHidden ?? this.decorative);\n\n // Manage tab focus\n if (wantsFocus) {\n this.r.setAttribute(svgEl, 'tabindex', String(\n Number.isFinite(this.tabIndex as any) ? this.tabIndex : 0\n ));\n this.r.setAttribute(svgEl, 'focusable', 'true');\n } else {\n svgEl.removeAttribute('tabindex');\n this.r.setAttribute(svgEl, 'focusable', 'false');\n }\n\n if (hidden) {\n // Decorative (unchanged default)\n this.r.setAttribute(svgEl, 'aria-hidden', 'true');\n this.r.setAttribute(svgEl, 'role', 'presentation');\n svgEl.removeAttribute('aria-label');\n svgEl.removeAttribute('aria-labelledby');\n return;\n }\n\n // Meaningful (when focusable or explicitly unhidden)\n this.r.setAttribute(svgEl, 'aria-hidden', 'false');\n this.r.setAttribute(svgEl, 'role', 'img');\n\n // Rebuild labeling\n svgEl.removeAttribute('aria-label');\n svgEl.removeAttribute('aria-labelledby');\n\n const ids: string[] = [];\n if (this.title) {\n const titleId = this.nextUid('ed-icon-title');\n const titleEl = this.r.createElement('title', 'svg') as SVGTitleElement;\n this.r.setAttribute(titleEl, 'id', titleId);\n (titleEl as any).textContent = this.title;\n svgEl.insertBefore(titleEl, svgEl.firstChild);\n ids.push(titleId);\n }\n if (this.desc) {\n const descId = this.nextUid('ed-icon-desc');\n const descEl = this.r.createElement('desc', 'svg') as SVGDescElement;\n this.r.setAttribute(descEl, 'id', descId);\n (descEl as any).textContent = this.desc;\n const afterTitle =\n (svgEl.querySelector('title')?.nextSibling as ChildNode | null) || svgEl.firstChild;\n svgEl.insertBefore(descEl, afterTitle);\n ids.push(descId);\n }\n if (ids.length > 0) {\n this.r.setAttribute(svgEl, 'aria-labelledby', ids.join(' '));\n } else {\n const label = this.ariaLabel?.trim() || this.name.replace(/[-_]/g, ' ');\n if (label) this.r.setAttribute(svgEl, 'aria-label', label);\n }\n}\n\n\n /**\n * Attempts to apply the provided `color` to relevant SVG child elements.\n */\n private setFillColor(svgElement: SVGSVGElement) {\n if (!this.color) return;\n\n const elements = svgElement.querySelectorAll<SVGElement>(\n 'path, circle, rect, polygon, ellipse, line, polyline'\n );\n\n elements.forEach((el) => {\n const fill = el.getAttribute('fill');\n const stroke = el.getAttribute('stroke');\n\n if (fill && fill !== 'none' && fill !== 'transparent')\n this.r.setAttribute(el, 'fill', this.color);\n if (stroke && stroke !== 'none' && stroke !== 'transparent')\n this.r.setAttribute(el, 'stroke', this.color);\n\n if (!fill && !stroke) this.r.setAttribute(el, 'fill', this.color);\n });\n\n const svgFill = svgElement.getAttribute('fill');\n const svgStroke = svgElement.getAttribute('stroke');\n if (svgFill && svgFill !== 'none' && svgFill !== 'transparent')\n this.r.setAttribute(svgElement, 'fill', this.color);\n if (svgStroke && svgStroke !== 'none' && svgStroke !== 'transparent')\n this.r.setAttribute(svgElement, 'stroke', this.color);\n }\n\n /**\n * Converts a semantic or numeric size to a pixel number.\n * - Known tokens: xs=16, sm=20, base=24, md=28, lg=32\n */\n private resolveSize(size: IconSize): number {\n const sizeMap: Record<'xs' | 'sm' | 'base' | 'md' | 'lg', number> = {\n xs: 16,\n sm: 20,\n base: 24,\n md: 28,\n lg: 32,\n };\n\n if (typeof size === 'string') {\n const asNum = Number(size);\n if (Number.isFinite(asNum) && asNum > 0) return asNum;\n return sizeMap[size as keyof typeof sizeMap] ?? sizeMap.base;\n }\n\n const num = Number(size);\n return Number.isFinite(num) && num > 0 ? num : sizeMap.base;\n }\n\n /* ───────────────────────────── Size mirroring helpers ───────────────────── */\n\n private parsePx(input: string | null | undefined, fallback = 24): number {\n if (!input) return fallback;\n const v = Number(String(input).trim().replace('px', ''));\n return Number.isFinite(v) && v > 0 ? v : fallback;\n }\n\n /** Reads computed --ed-icon-size/--btn-icon and mirrors them to <svg width/height>. */\n private syncSvgSizeFromCssVar() {\n if (!this.svgRef) return;\n\n const cs = getComputedStyle(this.host);\n const edIconVar = cs.getPropertyValue('--ed-icon-size').trim();\n const btnIconVar = cs.getPropertyValue('--btn-icon').trim();\n\n let px = this.parsePx(edIconVar || btnIconVar, this.resolveSize(this.size));\n if (!px || px <= 0) {\n px = Math.round(this.host.getBoundingClientRect().width) || 24;\n }\n\n this.svgRef.setAttribute('width', String(px));\n this.svgRef.setAttribute('height', String(px));\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewChild,\n inject,\n} from '@angular/core';\n\n/**\n * Lightweight, reusable modal shell.\n *\n * Renders a centered card on top of a dimmed backdrop. Closes on backdrop\n * click, ESC key, or via the close button.\n *\n * Slots:\n * - default: scrollable body\n * - [modalStickyTop]: optional sticky content below the title header\n * - [modalFooter]: optional sticky footer (actions / preview)\n */\n@Component({\n selector: 'app-modal',\n standalone: true,\n templateUrl: './modal.component.html',\n styleUrl: './modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements AfterViewInit, OnDestroy {\n @Input({ required: true }) title!: string;\n @Input() subtitle?: string;\n @Input() maxWidth = '640px';\n @Output() readonly closed = new EventEmitter<void>();\n\n @ViewChild('backdrop', { static: true })\n private readonly backdrop?: ElementRef<HTMLElement>;\n\n private readonly renderer = inject(Renderer2);\n private movedToBody = false;\n\n ngAfterViewInit(): void {\n const el = this.backdrop?.nativeElement;\n if (!el || el.parentElement === document.body) return;\n // Escape #content-area / .eds-content overflow clipping so the overlay\n // covers the full viewport above EHR chrome.\n this.renderer.appendChild(document.body, el);\n this.movedToBody = true;\n }\n\n ngOnDestroy(): void {\n const el = this.backdrop?.nativeElement;\n if (this.movedToBody && el?.parentElement) {\n this.renderer.removeChild(el.parentElement, el);\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.closed.emit();\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) {\n this.closed.emit();\n }\n }\n\n close(): void {\n this.closed.emit();\n }\n}\n","<div\n #backdrop\n class=\"modal-backdrop fixed left-0 top-0 z-[100100] flex h-[100vh] w-[100vw] items-center justify-center bg-[rgba(20,30,50,0.42)] p-6 backdrop-blur-[2px]\"\n (click)=\"onBackdropClick($event)\"\n role=\"presentation\"\n>\n <div\n class=\"modal-card flex w-full max-h-[calc(100vh-48px)] flex-col overflow-hidden rounded-lg border border-base bg-white shadow-sm\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"title\"\n [style.max-width]=\"maxWidth\"\n >\n <header class=\"modal-header flex shrink-0 items-start justify-between gap-4 border-b border-base px-6 pb-4 pt-5\">\n <div class=\"flex min-w-0 flex-col gap-1\">\n <h2 class=\"m-0 text-base font-semibold tracking-tight text-dark\">{{ title }}</h2>\n @if (subtitle) {\n <p class=\"m-0 text-[13px] text-light\">{{ subtitle }}</p>\n }\n </div>\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-transparent bg-transparent text-light transition-colors duration-150 hover:bg-lighter hover:text-dark focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600\"\n (click)=\"close()\"\n aria-label=\"Close dialog\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </header>\n\n <div class=\"modal-sticky-top shrink-0 empty:hidden\">\n <ng-content select=\"[modalStickyTop]\" />\n </div>\n\n <div class=\"modal-body min-h-0 flex-1 overflow-y-auto overscroll-contain px-6 pb-6 pt-5\">\n <ng-content />\n </div>\n\n <div class=\"modal-footer shrink-0 empty:hidden\">\n <ng-content select=\"[modalFooter]\" />\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { EdButtonComponent } from '../../ui/ed-button.component';\n\nimport { AiReceptionistApiService } from '../../services/ai-receptionist-api.service';\nimport { IconComponent } from '../../ui/ed-icon.component';\nimport { ModalComponent } from '../../shared/modal.component';\nimport { ToastService } from '../../shared/toast.service';\n\nconst QUESTION_MAX = 500;\n\n@Component({\n selector: 'eds-knowledge-test-modal',\n imports: [FormsModule, ModalComponent, IconComponent, EdButtonComponent],\n templateUrl: './knowledge-test-modal.component.html',\n styleUrl: './knowledge-test-modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KnowledgeTestModalComponent implements OnChanges, OnDestroy {\n private readonly api = inject(AiReceptionistApiService);\n private readonly toast = inject(ToastService);\n\n @Input({ required: true }) open = false;\n @Input() whatToSay = '';\n @Input() whatNotToSay = '';\n @Input() voiceId = '';\n @Output() readonly closed = new EventEmitter<void>();\n\n protected readonly questionMax = QUESTION_MAX;\n protected readonly question = signal('');\n protected readonly testing = signal(false);\n protected readonly answer = signal<string | null>(null);\n protected readonly playing = signal(false);\n\n private audio: HTMLAudioElement | null = null;\n private objectUrl: string | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] && this.open) {\n this.question.set('');\n this.answer.set(null);\n this.stopAudio();\n }\n if (changes['open'] && !this.open) {\n this.stopAudio();\n }\n }\n\n ngOnDestroy(): void {\n this.stopAudio();\n }\n\n protected close(): void {\n this.stopAudio();\n this.closed.emit();\n }\n\n protected onQuestionChange(value: string): void {\n this.question.set(value.slice(0, QUESTION_MAX));\n }\n\n protected runTest(): void {\n const q = this.question().trim();\n if (!q || this.testing()) return;\n\n const whatToSay = this.whatToSay.trim();\n const whatNotToSay = this.whatNotToSay.trim();\n if (!whatToSay || !whatNotToSay) {\n this.toast.show(\n 'Fill in both “What to say” and “What not to say” before testing.',\n 'error',\n );\n return;\n }\n\n this.testing.set(true);\n this.answer.set(null);\n this.stopAudio();\n\n this.api\n .testKnowledgeAnswer({\n question: q,\n whatToSay,\n whatNotToSay,\n voiceId: this.voiceId.trim() || undefined,\n })\n .subscribe({\n next: (result) => {\n this.testing.set(false);\n this.answer.set(result.answer);\n this.playAudio(result.audioBlob);\n },\n error: (err: unknown) => {\n this.testing.set(false);\n const message =\n err instanceof Error && err.message.trim()\n ? err.message\n : 'Could not generate a test answer.';\n this.toast.show(message, 'error');\n },\n });\n }\n\n protected replay(): void {\n if (!this.audio) return;\n this.audio.currentTime = 0;\n this.playing.set(true);\n void this.audio.play().catch(() => {\n this.playing.set(false);\n this.toast.show('Could not play audio in this browser.', 'error');\n });\n }\n\n private playAudio(blob: Blob): void {\n this.stopAudio();\n this.objectUrl = URL.createObjectURL(blob);\n const audio = new Audio(this.objectUrl);\n this.audio = audio;\n this.playing.set(true);\n audio.onended = () => this.playing.set(false);\n audio.onerror = () => {\n this.playing.set(false);\n this.toast.show('Could not play audio in this browser.', 'error');\n };\n void audio.play().catch(() => {\n this.playing.set(false);\n this.toast.show('Could not play audio in this browser.', 'error');\n });\n }\n\n private stopAudio(): void {\n if (this.audio) {\n this.audio.pause();\n this.audio.onended = null;\n this.audio.onerror = null;\n this.audio = null;\n }\n if (this.objectUrl) {\n URL.revokeObjectURL(this.objectUrl);\n this.objectUrl = null;\n }\n this.playing.set(false);\n }\n}\n","@if (open) {\n <app-modal\n title=\"Test Knowledge Base\"\n subtitle=\"Ask a sample caller question — hear how the agent answers with your guidance and voice\"\n maxWidth=\"560px\"\n (closed)=\"close()\"\n >\n <form id=\"knowledge-test-form\" class=\"flex flex-col gap-4\" (ngSubmit)=\"runTest()\" novalidate autocomplete=\"off\">\n <div class=\"mb-sm\">\n <label>What might a caller ask?<span required></span></label>\n <textarea\n class=\"form-textarea min-h-[84px]\"\n rows=\"3\"\n [maxlength]=\"questionMax\"\n [ngModel]=\"question()\"\n (ngModelChange)=\"onQuestionChange($event)\"\n name=\"question\"\n placeholder=\"e.g. What are your Saturday hours? Is parking free?\"\n [disabled]=\"testing()\"\n autocomplete=\"off\"\n ></textarea>\n <span class=\"kb-test__hint self-end text-xs\">{{ question().length }}/{{ questionMax }}</span>\n </div>\n\n @if (answer(); as spoken) {\n <div class=\"kb-test__answer rounded-lg border px-4 py-3\" role=\"status\">\n <div class=\"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide\">\n <ed-icon name=\"graph_new\" [size]=\"18\" />\n <span>Agent reply</span>\n @if (playing()) {\n <span class=\"kb-test__playing ml-auto font-medium normal-case tracking-normal\">Playing…</span>\n } @else {\n <button type=\"button\" class=\"kb-test__replay ml-auto cursor-pointer border-none bg-transparent px-1 py-1 text-[13px] font-semibold normal-case tracking-normal\" (click)=\"replay()\">\n Replay\n </button>\n }\n </div>\n <p class=\"m-0 text-sm leading-[1.55]\">{{ spoken }}</p>\n </div>\n }\n </form>\n\n <div modalFooter class=\"border-t border-base bg-white px-6 py-4\">\n <div class=\"flex justify-end gap-2\">\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"close()\" [disabled]=\"testing()\">\n Close\n </ed-button>\n <ed-button\n type=\"button\"\n variant=\"primary\"\n fill\n size=\"sm\"\n [disabled]=\"testing() || !question().trim()\"\n (click$)=\"runTest()\"\n >\n @if (testing()) {\n Generating…\n } @else {\n <ed-icon slot=\"prefix\" name=\"play_arrow\" [size]=\"16\" />\n Test\n }\n </ed-button>\n </div>\n </div>\n </app-modal>\n}\n","/** Curated ElevenLabs voices — keep in sync with backend `tts-voice-presets.ts`. */\n\nexport interface TtsVoicePreset {\n id: string;\n label: string;\n /** Display gender hint next to the voice name. */\n gender: 'M' | 'F';\n}\n\nexport const DEFAULT_TTS_VOICE_ID = '7EzWGsX10sAS4c9m9cPf';\n\nexport const TTS_VOICE_PRESETS: readonly TtsVoicePreset[] = [\n {\n id: '7EzWGsX10sAS4c9m9cPf',\n label: 'Jack John – Conversational and Upbeat',\n gender: 'M',\n },\n {\n id: 'NUjosfEayZAdRcDmcHM8',\n label: 'Madison – Cool, Calm & Conversational',\n gender: 'F',\n },\n {\n id: 'gE0owC0H9C8SzfDyIUtB',\n label: 'Ivanna – Sassy, Condescending and Clear',\n gender: 'F',\n },\n {\n id: 'Uc7anshoV8mdBhDnEZEX',\n label: 'Cecily – Clear and Warm',\n gender: 'F',\n },\n] as const;\n","import { AgentSettings } from '../../models/ai-receptionist.types';\nimport { TTS_VOICE_PRESETS } from './tts-voice-presets';\n\nexport type SettingsSection = Exclude<\n keyof AgentSettings,\n | 'safety'\n | 'effectiveWelcomeMessage'\n | 'effectiveVoiceSystemPrompt'\n | 'usingDefaultVoiceSystemPrompt'\n>;\n\nexport interface SettingsFieldOption {\n value: string;\n label: string;\n}\n\nexport interface SettingsFieldMeta {\n key: string;\n label: string;\n description: string;\n type: 'text' | 'number' | 'boolean' | 'select';\n options?: SettingsFieldOption[];\n readOnly?: boolean;\n}\n\nexport interface SettingsSectionMeta {\n title: string;\n description: string;\n}\n\nexport const AGENT_TONE_OPTIONS: SettingsFieldOption[] = [\n { value: 'warm_friendly', label: 'Warm & friendly' },\n { value: 'professional', label: 'Professional' },\n { value: 'efficient_brief', label: 'Efficient & brief' },\n { value: 'casual_friendly', label: 'Casual & friendly' },\n];\n\nexport const GREETING_VARIABLES: { key: string; label: string; token: string }[] = [\n { key: 'practiceName', label: 'Practice Name', token: '{{practiceName}}' },\n { key: 'agentName', label: 'Agent Name', token: '{{agentName}}' },\n { key: 'locationName', label: 'Location Name', token: '{{locationName}}' },\n { key: 'businessHours', label: 'Business Hours', token: '{{businessHours}}' },\n];\n\nexport const RETENTION_DAY_OPTIONS: SettingsFieldOption[] = [\n { value: '7', label: '7 days' },\n { value: '14', label: '14 days' },\n { value: '30', label: '30 days' },\n { value: '60', label: '60 days' },\n { value: '90', label: '90 days' },\n { value: '180', label: '180 days' },\n { value: '365', label: '1 year' },\n];\n\nexport const RING_TIMEOUT_OPTIONS: SettingsFieldOption[] = [\n { value: '10', label: '10 sec' },\n { value: '15', label: '15 sec' },\n { value: '20', label: '20 sec' },\n { value: '30', label: '30 sec' },\n { value: '45', label: '45 sec' },\n { value: '60', label: '60 sec' },\n];\n\nexport const MAX_CALL_DURATION_OPTIONS: SettingsFieldOption[] = [\n { value: '3', label: '3 min' },\n { value: '5', label: '5 min' },\n { value: '10', label: '10 min' },\n { value: '15', label: '15 min' },\n { value: '20', label: '20 min' },\n { value: '30', label: '30 min' },\n];\n\nexport const SILENCE_TIMEOUT_OPTIONS: SettingsFieldOption[] = [\n { value: '10', label: '10 seconds' },\n { value: '15', label: '15 seconds' },\n { value: '20', label: '20 seconds' },\n { value: '30', label: '30 seconds' },\n { value: '45', label: '45 seconds' },\n { value: '60', label: '60 seconds' },\n];\n\nexport const AI_ANSWER_MODE_OPTIONS: SettingsFieldOption[] = [\n { value: 'always_first', label: 'Always first' },\n { value: 'ring_then_ai', label: 'Ring staff, then AI' },\n { value: 'ai_backup', label: 'AI as backup only' },\n];\n\nexport const AFTER_HOURS_OPTIONS: SettingsFieldOption[] = [\n { value: 'ai_answers', label: 'AI answers' },\n { value: 'voicemail', label: 'Voicemail' },\n { value: 'transfer', label: 'Transfer to after-hours number' },\n];\n\nexport const DEFAULT_DISCLOSURE_WARNING =\n 'This call may be handled by an automated assistant and could be recorded for quality and training. You can ask to speak with a staff member at any time.';\n\nexport const SETTINGS_SECTION_META: Record<SettingsSection, SettingsSectionMeta> = {\n general: {\n title: 'AI Identity',\n description: 'Name, voice, languages, tone, and inbound greeting.',\n },\n phone: {\n title: 'Phone & Availability',\n description: 'Inbound routing, ring timing, locations, and after-hours behavior.',\n },\n tasks: {\n title: 'Task Rules',\n description: 'When the AI should create staff tasks after a call.',\n },\n scheduling: {\n title: 'Scheduling Rules',\n description: 'Rules for booking and rescheduling appointments.',\n },\n refill: {\n title: 'Medication refills',\n description: 'Refill approval windows and staff review requirements.',\n },\n verify: {\n title: 'Patient Verification',\n description: 'Identity checks before accessing chart or scheduling data.',\n },\n escalation: {\n title: 'Safety Escalation',\n description: 'When to offer a human or transfer to reception.',\n },\n outbound: {\n title: 'Outbound Purpose',\n description: 'Outbound dialer defaults. Purpose templates are managed separately.',\n },\n knowledge: {\n title: 'Knowledge Base',\n description: 'Practice information the AI should share — and topics it must avoid.',\n },\n transcripts: {\n title: 'Data & Compliance',\n description: 'Recording retention, transcripts, and disclosure warnings.',\n },\n advanced: {\n title: 'Advanced',\n description: 'Agent online status and model options.',\n },\n};\n\n/** Entire sections where every field is read-only (including unknown API fields). */\nexport const READ_ONLY_SECTIONS = new Set<SettingsSection>(['verify']);\n\n/** Settings tabs that stay visible but cannot be selected/edited. */\nexport const DISABLED_SETTINGS_TABS = new Set<SettingsSection>(['verify', 'escalation']);\n\n/** Individual fields locked for compliance, telephony, or core agent identity. */\nexport const READ_ONLY_FIELD_KEYS: ReadonlyArray<{ section: SettingsSection; key: string; reason: string }> = [\n { section: 'general', key: 'timezone', reason: 'Practice timezone' },\n { section: 'phone', key: 'mainNumber', reason: 'AI phone number' },\n { section: 'phone', key: 'transferNumber', reason: 'Transfer number' },\n { section: 'tasks', key: 'defaultAssignee', reason: 'Default task assignee' },\n { section: 'outbound', key: 'callerId', reason: 'Outbound caller ID' },\n { section: 'advanced', key: 'modelVersion', reason: 'Voice AI model profile' },\n { section: 'advanced', key: 'debugMode', reason: 'Debug logging' },\n];\n\nconst READ_ONLY_LOOKUP = new Set(\n READ_ONLY_FIELD_KEYS.map(({ section, key }) => `${section}.${key}`),\n);\n\nexport function isFieldReadOnly(section: SettingsSection, key: string): boolean {\n if (READ_ONLY_SECTIONS.has(section)) return true;\n return READ_ONLY_LOOKUP.has(`${section}.${key}`);\n}\n\nexport function readOnlyFieldReason(section: SettingsSection, key: string): string | undefined {\n return READ_ONLY_FIELD_KEYS.find((f) => f.section === section && f.key === key)?.reason;\n}\n\nexport const SETTINGS_FIELDS: Record<SettingsSection, SettingsFieldMeta[]> = {\n general: [\n {\n key: 'agentName',\n label: 'Name',\n description: 'How the assistant introduces itself.',\n type: 'text',\n },\n {\n key: 'ttsVoiceId',\n label: 'Voice',\n description: 'Spoken voice used on phone calls.',\n type: 'select',\n options: TTS_VOICE_PRESETS.map((p) => ({\n value: p.id,\n label: `${p.gender} · ${p.label}`,\n })),\n },\n {\n key: 'tone',\n label: 'Tone',\n description: 'Conversational style for the AI.',\n type: 'select',\n options: AGENT_TONE_OPTIONS,\n },\n {\n key: 'welcomeMessage',\n label: 'Inbound Greetings',\n description: 'Spoken when a caller connects.',\n type: 'text',\n },\n ],\n phone: [\n {\n key: 'answerMode',\n label: 'AI Answer Mode',\n description: 'When the AI picks up inbound calls.',\n type: 'select',\n options: AI_ANSWER_MODE_OPTIONS,\n },\n {\n key: 'mainNumber',\n label: 'AI Phone Number',\n description: 'Number patients dial for the AI receptionist.',\n type: 'text',\n },\n {\n key: 'transferNumber',\n label: 'Transfer Number',\n description: 'Staff / front-desk number for handoff.',\n type: 'text',\n },\n {\n key: 'ringTimeout',\n label: 'Ringing Time Wait',\n description: 'How long to ring before the AI answers.',\n type: 'select',\n options: RING_TIMEOUT_OPTIONS,\n },\n {\n key: 'createFollowUpTask',\n label: 'Create Follow-up Task',\n description: 'If no one answers in time, the agent auto-creates a high priority task.',\n type: 'boolean',\n },\n {\n key: 'locationIds',\n label: 'Location Handled',\n description: 'Locations this AI receptionist covers.',\n type: 'text',\n },\n {\n key: 'maxCallDurationMin',\n label: 'Max AI Call Duration',\n description: 'Longest call the AI will stay on before wrapping up.',\n type: 'select',\n options: MAX_CALL_DURATION_OPTIONS,\n },\n {\n key: 'silenceTimeoutSec',\n label: 'Silence Timeout',\n description: 'How long silence lasts before the AI prompts or ends.',\n type: 'select',\n options: SILENCE_TIMEOUT_OPTIONS,\n },\n {\n key: 'afterHoursBehavior',\n label: 'After-Hours Behaviour',\n description: 'What happens outside business hours.',\n type: 'select',\n options: AFTER_HOURS_OPTIONS,\n },\n ],\n tasks: [\n {\n key: 'autoCreate',\n label: 'Auto-create tasks',\n description: 'Create a staff task when the AI cannot fully resolve a request.',\n type: 'boolean',\n },\n {\n key: 'defaultAssignee',\n label: 'Default assignee',\n description: 'Team or role new tasks are routed to.',\n type: 'text',\n },\n ],\n scheduling: [\n {\n key: 'leadTimeHours',\n label: 'Minimum lead time (hours)',\n description: 'Earliest bookable slot from now.',\n type: 'number',\n },\n {\n key: 'allowSameDay',\n label: 'Allow same-day booking',\n description: 'Let patients book appointments later today.',\n type: 'boolean',\n },\n ],\n refill: [\n {\n key: 'autoApproveDays',\n label: 'Auto-approve within (days)',\n description: 'Refills due within this window may be auto-approved.',\n type: 'number',\n },\n {\n key: 'requireStaffReview',\n label: 'Require staff review',\n description: 'All refill requests need staff approval before sending to pharmacy.',\n type: 'boolean',\n },\n ],\n verify: [\n {\n key: 'requireDob',\n label: 'Require date of birth',\n description: 'Ask for DOB before lookup or scheduling.',\n type: 'boolean',\n },\n {\n key: 'requireName',\n label: 'Require full name',\n description: 'Ask for patient name during verification.',\n type: 'boolean',\n },\n {\n key: 'maxAttempts',\n label: 'Max verification attempts',\n description: 'After this many failures, offer transfer to staff.',\n type: 'number',\n },\n ],\n escalation: [\n {\n key: 'sentimentThreshold',\n label: 'Sentiment threshold',\n description: 'Escalate when caller sentiment reaches this level (e.g. frustrated).',\n type: 'text',\n },\n {\n key: 'urgentKeywords',\n label: 'Urgent keywords',\n description: 'Comma-separated phrases that trigger immediate escalation.',\n type: 'text',\n },\n ],\n outbound: [\n {\n key: 'enabled',\n label: 'Outbound calls enabled',\n description: 'Allow staff to place outbound calls from the dashboard.',\n type: 'boolean',\n },\n {\n key: 'callerId',\n label: 'Outbound caller ID',\n description: 'Number shown to patients on outbound calls.',\n type: 'text',\n },\n ],\n knowledge: [\n {\n key: 'whatToSay',\n label: 'What to say',\n description: 'Facts and guidance the AI may share with callers.',\n type: 'text',\n },\n {\n key: 'whatNotToSay',\n label: 'What not to say',\n description: 'Topics the AI must refuse or escalate.',\n type: 'text',\n },\n ],\n transcripts: [\n {\n key: 'recordingRetainDays',\n label: 'Keep Call Recordings',\n description: 'How long call recordings are retained.',\n type: 'select',\n options: RETENTION_DAY_OPTIONS,\n },\n {\n key: 'transcriptRetainDays',\n label: 'Keep Transcripts',\n description: 'How long call transcripts are retained.',\n type: 'select',\n options: RETENTION_DAY_OPTIONS,\n },\n {\n key: 'disclosureWarningEnabled',\n label: 'Disclosure Warning',\n description: 'Play or show a disclosure when the AI answers.',\n type: 'boolean',\n },\n {\n key: 'disclosureWarningText',\n label: 'Disclosure text',\n description: 'Spoken or shown disclosure message.',\n type: 'text',\n },\n ],\n advanced: [\n {\n key: 'modelVersion',\n label: 'Model version',\n description: 'Voice AI model profile (set by Edvak support).',\n type: 'text',\n },\n {\n key: 'debugMode',\n label: 'Debug mode',\n description: 'Verbose logging for troubleshooting — not for production.',\n type: 'boolean',\n },\n ],\n};\n\n/** Fallback label for API fields not listed in config. */\nexport function humanizeFieldKey(key: string): string {\n return key\n .replace(/([A-Z])/g, ' $1')\n .replace(/_/g, ' ')\n .trim()\n .replace(/^\\w/, (c) => c.toUpperCase());\n}\n\nexport function resolveFieldMeta(\n section: SettingsSection,\n key: string,\n value: string | boolean | number,\n): SettingsFieldMeta {\n const known = SETTINGS_FIELDS[section]?.find((f) => f.key === key);\n if (known) return known;\n return {\n key,\n label: humanizeFieldKey(key),\n description: '',\n type: typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'text',\n };\n}\n\nexport function parseCsvList(value: unknown): string[] {\n return String(value ?? '')\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\nexport function toCsvList(values: string[]): string {\n return values.map((v) => v.trim()).filter(Boolean).join(',');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { EdButtonComponent } from '../../ui/ed-button.component';\nimport { EdSkeletonComponent } from '../../ui/ed-skeleton.component';\n\nimport { KnowledgeTestModalComponent } from '../../components/knowledge-test-modal/knowledge-test-modal.component';\nimport { AgentSettings, LocationOption } from '../../models/ai-receptionist.types';\nimport { AiReceptionistApiService } from '../../services/ai-receptionist-api.service';\nimport { AgentOnlineService } from '../../services/agent-online.service';\nimport { ModalComponent } from '../../shared/modal.component';\nimport { ToastService } from '../../shared/toast.service';\nimport { IconComponent } from '../../ui/ed-icon.component';\nimport {\n buildAutoWelcomeTemplate,\n resolveWelcomePreview,\n WELCOME_MESSAGE_MAX,\n} from '../../utils/welcome-message.util';\nimport { DEFAULT_TTS_VOICE_ID, TTS_VOICE_PRESETS } from './tts-voice-presets';\nimport {\n AFTER_HOURS_OPTIONS,\n AGENT_TONE_OPTIONS,\n AI_ANSWER_MODE_OPTIONS,\n DEFAULT_DISCLOSURE_WARNING,\n DISABLED_SETTINGS_TABS,\n GREETING_VARIABLES,\n isFieldReadOnly,\n MAX_CALL_DURATION_OPTIONS,\n parseCsvList,\n READ_ONLY_SECTIONS,\n resolveFieldMeta,\n RETENTION_DAY_OPTIONS,\n RING_TIMEOUT_OPTIONS,\n SETTINGS_FIELDS,\n SETTINGS_SECTION_META,\n SettingsFieldMeta,\n SettingsSection,\n SILENCE_TIMEOUT_OPTIONS,\n toCsvList,\n} from './settings-fields.config';\n\ntype SettingsTab = Exclude<\n keyof AgentSettings,\n | 'safety'\n | 'effectiveWelcomeMessage'\n | 'effectiveVoiceSystemPrompt'\n | 'usingDefaultVoiceSystemPrompt'\n>;\n\nconst CUSTOM_PANEL_TABS = new Set<SettingsTab>([\n 'general',\n 'phone',\n 'transcripts',\n 'knowledge',\n 'advanced',\n]);\n\nconst SETTINGS_TABS: { id: SettingsTab; label: string }[] = [\n { id: 'general', label: 'Identity & Greetings' },\n { id: 'phone', label: 'Phone & Availability' },\n { id: 'knowledge', label: 'Knowledge Base' },\n { id: 'transcripts', label: 'Data & Compliance' },\n { id: 'advanced', label: 'Advanced' },\n];\nconst HIDDEN_GENERIC_KEYS = new Set([\n 'welcomeMessage',\n 'practiceName',\n 'language',\n 'languages',\n 'tone',\n 'timezone',\n 'voiceSystemPrompt',\n 'customVoiceInstructions',\n]);\nconst KNOWLEDGE_MAX = 8000;\nconst DISCLOSURE_MAX = 1000;\n\n@Component({\n selector: 'eds-settings-page',\n imports: [\n FormsModule,\n NgTemplateOutlet,\n IconComponent,\n EdButtonComponent,\n KnowledgeTestModalComponent,\n ModalComponent,\n EdSkeletonComponent,\n ],\n templateUrl: './settings-page.component.html',\n styleUrl: './settings-page.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SettingsPageComponent implements OnInit, OnDestroy {\n private readonly api = inject(AiReceptionistApiService);\n private readonly toast = inject(ToastService);\n private readonly route = inject(ActivatedRoute);\n private readonly agentOnline = inject(AgentOnlineService);\n private originalSettings: AgentSettings | null = null;\n private voiceAudio: HTMLAudioElement | null = null;\n private voiceObjectUrl: string | null = null;\n\n /** `page` = routed full page chrome; `drawer` = embedded in Agent Settings drawer. */\n readonly presentation = input<'page' | 'drawer'>('page');\n readonly savedSuccessfully = output<void>();\n\n protected readonly isFieldReadOnly = isFieldReadOnly;\n protected readonly knowledgeMax = KNOWLEDGE_MAX;\n protected readonly disclosureMax = DISCLOSURE_MAX;\n protected readonly welcomeMax = WELCOME_MESSAGE_MAX;\n protected readonly voicePresets = TTS_VOICE_PRESETS;\n protected readonly toneOptions = AGENT_TONE_OPTIONS;\n protected readonly greetingVariables = GREETING_VARIABLES;\n protected readonly locationChipLimit = 3;\n protected readonly retentionOptions = RETENTION_DAY_OPTIONS;\n protected readonly ringTimeoutOptions = RING_TIMEOUT_OPTIONS;\n protected readonly maxCallDurationOptions = MAX_CALL_DURATION_OPTIONS;\n protected readonly silenceTimeoutOptions = SILENCE_TIMEOUT_OPTIONS;\n protected readonly answerModeOptions = AI_ANSWER_MODE_OPTIONS;\n protected readonly afterHoursOptions = AFTER_HOURS_OPTIONS;\n\n protected readonly settings = signal<AgentSettings | null>(null);\n protected readonly tab = signal<SettingsTab>('general');\n protected readonly loading = signal(true);\n protected readonly navSkeletonRows = [0, 1, 2, 3, 4] as const;\n protected readonly fieldSkeletonRows = [0, 1, 2, 3, 4, 5] as const;\n readonly saving = signal(false);\n readonly saved = signal(false);\n protected readonly knowledgeTestOpen = signal(false);\n protected readonly locations = signal<LocationOption[]>([]);\n protected readonly locationsMenuOpen = signal(false);\n protected readonly confirmOffOpen = signal(false);\n protected readonly voicePreviewBusy = signal(false);\n protected readonly voicePreviewPlaying = signal(false);\n\n protected readonly online = this.agentOnline.online;\n protected readonly agentLoading = this.agentOnline.loading;\n protected readonly toggling = this.agentOnline.toggling;\n\n protected readonly tabs = SETTINGS_TABS;\n\n protected readonly sectionMeta = computed(() => {\n const id = this.tab();\n return SETTINGS_SECTION_META[id] ?? { title: String(id), description: '' };\n });\n\n protected readonly fieldsForTab = computed((): SettingsFieldMeta[] => {\n const s = this.settings();\n const id = this.tab();\n if (!s || CUSTOM_PANEL_TABS.has(id)) return [];\n\n const section = s[id] as Record<string, string | boolean | number>;\n const configured = SETTINGS_FIELDS[id] ?? [];\n const configuredKeys = new Set(configured.map((f) => f.key));\n\n const extras = Object.keys(section)\n .filter((key) => !HIDDEN_GENERIC_KEYS.has(key) && !configuredKeys.has(key))\n .map((key) => resolveFieldMeta(id, key, section[key]));\n\n return [...configured, ...extras];\n });\n\n protected readonly welcomeMessage = computed(() =>\n String(this.settings()?.general['welcomeMessage'] ?? ''),\n );\n\n protected readonly welcomePlaceholder = computed(() => {\n const s = this.settings();\n if (!s) return '';\n return buildAutoWelcomeTemplate(\n String(s.general['practiceName'] ?? ''),\n String(s.general['agentName'] ?? ''),\n );\n });\n\n protected readonly welcomePreview = computed(() => {\n const s = this.settings();\n if (!s) return '';\n const raw = resolveWelcomePreview(\n String(s.general['welcomeMessage'] ?? ''),\n String(s.general['practiceName'] ?? ''),\n String(s.general['agentName'] ?? ''),\n );\n return raw\n .replaceAll('{{practiceName}}', String(s.general['practiceName'] || 'our practice'))\n .replaceAll('{{agentName}}', String(s.general['agentName'] || 'your AI receptionist'))\n .replaceAll('{{locationName}}', 'Main location')\n .replaceAll('{{businessHours}}', 'Mon–Fri 8am–5pm');\n });\n\n protected readonly whatToSay = computed(() =>\n String(this.settings()?.knowledge?.['whatToSay'] ?? ''),\n );\n\n protected readonly whatNotToSay = computed(() =>\n String(this.settings()?.knowledge?.['whatNotToSay'] ?? ''),\n );\n\n protected readonly selectedLocationIds = computed(() =>\n parseCsvList(this.settings()?.phone?.['locationIds']),\n );\n\n protected readonly locationSummary = computed(() => {\n const selected = this.selectedLocationIds();\n const all = this.locations();\n if (!all.length) return 'No locations available.';\n if (!selected.length) return 'Select locations';\n const names = all.filter((l) => selected.includes(l.id)).map((l) => l.name);\n if (!names.length) return `${selected.length} selected`;\n if (names.length <= 2) return names.join(', ');\n return `${names[0]}, ${names[1]} +${names.length - 2}`;\n });\n\n protected readonly selectedLocations = computed(() => {\n const ids = this.selectedLocationIds();\n return this.locations().filter((l) => ids.includes(l.id));\n });\n\n protected readonly visibleSelectedLocations = computed(() =>\n this.selectedLocations().slice(0, this.locationChipLimit),\n );\n\n protected readonly hiddenLocationCount = computed(() =>\n Math.max(0, this.selectedLocations().length - this.locationChipLimit),\n );\n\n protected readonly selectedTone = computed(() =>\n String(this.settings()?.general?.['tone'] ?? 'professional'),\n );\n\n protected readonly disclosureEnabled = computed(\n () => this.settings()?.transcripts?.['disclosureWarningEnabled'] !== false,\n );\n\n protected readonly disclosureText = computed(() =>\n String(this.settings()?.transcripts?.['disclosureWarningText'] ?? DEFAULT_DISCLOSURE_WARNING),\n );\n\n protected readonly agentSwitchDisabled = computed(\n () => this.agentLoading() || this.toggling() || this.online() === null,\n );\n\n ngOnInit(): void {\n this.agentOnline.refresh();\n\n if (this.presentation() === 'page') {\n const dataTab = this.route.snapshot.data['settingsTab'] as SettingsTab | undefined;\n const tabParam = this.route.snapshot.queryParamMap.get('tab');\n const navTabs = this.tabs;\n if (dataTab && navTabs.some((t) => t.id === dataTab)) {\n this.tab.set(dataTab);\n } else if (tabParam && navTabs.some((t) => t.id === tabParam)) {\n this.tab.set(tabParam as SettingsTab);\n }\n }\n\n this.api.getSettings().subscribe({\n next: ({ data }) => {\n this.originalSettings = structuredClone(data);\n this.settings.set(structuredClone(data));\n this.loading.set(false);\n },\n error: () => {\n this.loading.set(false);\n this.toast.show('Failed to load agent settings', 'error');\n },\n });\n\n this.api.getLocations().subscribe({\n next: ({ data }) => this.locations.set(data ?? []),\n error: () => this.locations.set([]),\n });\n }\n\n ngOnDestroy(): void {\n this.stopVoicePreview();\n }\n\n protected fieldIsReadOnly(section: SettingsTab, key: string): boolean {\n return isFieldReadOnly(section, key);\n }\n\n protected sectionIsReadOnly(section: SettingsTab): boolean {\n return READ_ONLY_SECTIONS.has(section);\n }\n\n protected isTabDisabled(id: SettingsTab): boolean {\n return DISABLED_SETTINGS_TABS.has(id);\n }\n\n protected setTab(id: SettingsTab): void {\n if (this.isTabDisabled(id)) return;\n this.locationsMenuOpen.set(false);\n this.tab.set(id);\n }\n\n /** Restore last loaded/saved settings (used when Cancel/close drawer without saving). */\n discardChanges(): void {\n if (!this.originalSettings) return;\n this.settings.set(structuredClone(this.originalSettings));\n this.locationsMenuOpen.set(false);\n this.stopVoicePreview();\n }\n\n protected updateField(section: SettingsTab, key: string, value: string | boolean | number): void {\n const current = this.settings();\n if (!current || isFieldReadOnly(section, key)) return;\n const sectionData = { ...(current[section] as Record<string, string | boolean | number>) };\n sectionData[key] = value;\n this.settings.set({ ...current, [section]: sectionData });\n }\n\n protected updateWelcomeMessage(value: string): void {\n this.updateField('general', 'welcomeMessage', value.slice(0, WELCOME_MESSAGE_MAX));\n }\n\n protected insertGreetingVariable(token: string): void {\n const current = this.welcomeMessage();\n const next = `${current}${current && !/\\s$/.test(current) ? ' ' : ''}${token}`;\n this.updateWelcomeMessage(next);\n }\n\n protected updateKnowledgeField(key: 'whatToSay' | 'whatNotToSay', value: string): void {\n this.updateField('knowledge', key, value.slice(0, KNOWLEDGE_MAX));\n }\n\n protected setTone(tone: string): void {\n this.updateField('general', 'tone', tone);\n }\n\n protected toggleLocationsMenu(): void {\n if (!this.locations().length) return;\n this.locationsMenuOpen.update((open) => !open);\n }\n\n protected onLocationsDocClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (!target?.closest('[data-locations-dd]')) {\n this.locationsMenuOpen.set(false);\n }\n }\n\n protected toggleLocation(id: string): void {\n const current = this.selectedLocationIds();\n const next = current.includes(id) ? current.filter((x) => x !== id) : [...current, id];\n this.updateField('phone', 'locationIds', toCsvList(next));\n }\n\n protected selectNumberField(\n section: 'phone' | 'transcripts',\n key: string,\n value: string,\n ): void {\n this.updateField(section, key, Number(value));\n }\n\n protected numberFieldAsString(section: 'phone' | 'transcripts', key: string): string {\n return String(this.fieldValue(section, key) ?? '');\n }\n\n protected setDisclosureEnabled(enabled: boolean): void {\n this.updateField('transcripts', 'disclosureWarningEnabled', enabled);\n if (enabled && !String(this.settings()?.transcripts?.['disclosureWarningText'] ?? '').trim()) {\n this.updateField('transcripts', 'disclosureWarningText', DEFAULT_DISCLOSURE_WARNING);\n }\n }\n\n protected updateDisclosureText(value: string): void {\n this.updateField('transcripts', 'disclosureWarningText', value.slice(0, DISCLOSURE_MAX));\n }\n\n protected openTestCall(): void {\n const whatToSay = this.whatToSay().trim();\n const whatNotToSay = this.whatNotToSay().trim();\n if (!whatToSay || !whatNotToSay) {\n this.toast.show(\n 'Fill in both “What to say” and “What not to say” before testing.',\n 'error',\n );\n return;\n }\n this.knowledgeTestOpen.set(true);\n }\n\n protected closeTestCall(): void {\n this.knowledgeTestOpen.set(false);\n }\n\n protected readonly selectedVoiceId = computed(() =>\n String(this.settings()?.general?.['ttsVoiceId'] ?? '').trim() || DEFAULT_TTS_VOICE_ID,\n );\n\n protected onVoiceChange(voiceId: string): void {\n this.stopVoicePreview();\n this.updateField('general', 'ttsVoiceId', voiceId);\n }\n\n protected toggleVoicePreview(): void {\n if (this.voicePreviewPlaying()) {\n this.stopVoicePreview();\n return;\n }\n const voiceId = this.selectedVoiceId();\n if (!voiceId || this.voicePreviewBusy()) return;\n\n this.voicePreviewBusy.set(true);\n this.api.previewVoice(voiceId).subscribe({\n next: (blob) => {\n this.voicePreviewBusy.set(false);\n if (!blob || blob.size < 64 || (blob.type || '').includes('json')) {\n this.playVoiceFallback(voiceId);\n return;\n }\n this.playVoiceBlob(blob);\n },\n error: () => {\n this.voicePreviewBusy.set(false);\n this.playVoiceFallback(voiceId);\n },\n });\n }\n\n private playVoiceFallback(voiceId: string): void {\n if (typeof speechSynthesis === 'undefined') {\n this.toast.show('Voice preview is unavailable.', 'error');\n return;\n }\n this.stopVoicePreview();\n const preset = TTS_VOICE_PRESETS.find((v) => v.id === voiceId);\n const name = (preset?.label.split(/[–-]/)[0] || 'your AI receptionist').trim();\n const utter = new SpeechSynthesisUtterance(\n `Hi, this is ${name}. Thanks for calling. How can I help you today?`,\n );\n utter.onend = () => this.voicePreviewPlaying.set(false);\n utter.onerror = () => {\n this.voicePreviewPlaying.set(false);\n this.toast.show('Voice preview is unavailable.', 'error');\n };\n this.voicePreviewPlaying.set(true);\n speechSynthesis.cancel();\n speechSynthesis.speak(utter);\n }\n\n private playVoiceBlob(blob: Blob): void {\n this.stopVoicePreview();\n this.voiceObjectUrl = URL.createObjectURL(blob);\n const audio = new Audio(this.voiceObjectUrl);\n this.voiceAudio = audio;\n this.voicePreviewPlaying.set(true);\n audio.onended = () => this.stopVoicePreview();\n audio.onerror = () => {\n this.stopVoicePreview();\n this.toast.show('Failed to play voice preview.', 'error');\n };\n void audio.play().catch(() => {\n this.stopVoicePreview();\n this.toast.show('Failed to play voice preview.', 'error');\n });\n }\n\n private stopVoicePreview(): void {\n if (typeof speechSynthesis !== 'undefined') {\n speechSynthesis.cancel();\n }\n if (this.voiceAudio) {\n this.voiceAudio.pause();\n this.voiceAudio.onended = null;\n this.voiceAudio.onerror = null;\n this.voiceAudio = null;\n }\n if (this.voiceObjectUrl) {\n URL.revokeObjectURL(this.voiceObjectUrl);\n this.voiceObjectUrl = null;\n }\n this.voicePreviewPlaying.set(false);\n }\n\n protected onAgentToggleClick(): void {\n if (this.agentSwitchDisabled()) return;\n if (this.online()) {\n this.confirmOffOpen.set(true);\n return;\n }\n this.applyOnline(true);\n }\n\n protected cancelConfirmOff(): void {\n this.confirmOffOpen.set(false);\n }\n\n protected confirmTurnOff(): void {\n this.confirmOffOpen.set(false);\n this.applyOnline(false);\n }\n\n private applyOnline(enabled: boolean): void {\n this.agentOnline.setOnline(enabled).subscribe({\n next: () => {\n this.toast.show(\n enabled\n ? 'AI receptionist is online — it will answer inbound calls.'\n : 'AI receptionist is offline — calls go to the front desk.',\n 'success',\n );\n },\n error: (err: { message?: string }) => {\n this.toast.show(err.message ?? 'Failed to update agent status.', 'error');\n this.agentOnline.refresh();\n },\n });\n }\n\n protected fieldValue(section: SettingsTab, key: string): string | boolean | number {\n const s = this.settings();\n if (!s) return '';\n return (s[section] as Record<string, string | boolean | number>)[key];\n }\n\n save(): void {\n const s = this.settings();\n const orig = this.originalSettings;\n if (!s || !orig || this.saving()) return;\n\n const payload = structuredClone(s);\n payload.general['welcomeMessage'] = String(payload.general['welcomeMessage'] ?? '').trim();\n payload.general['agentName'] = String(payload.general['agentName'] ?? '').trim();\n\n if (!String(payload.general['agentName'] ?? '').trim()) {\n this.tab.set('general');\n this.toast.show('Agent name is required.', 'error');\n return;\n }\n if (!String(payload.general['welcomeMessage'] ?? '').trim()) {\n this.tab.set('general');\n this.toast.show('Inbound greeting is required.', 'error');\n return;\n }\n if (!String(payload.general['ttsVoiceId'] ?? '').trim()) {\n payload.general['ttsVoiceId'] = DEFAULT_TTS_VOICE_ID;\n }\n\n if (this.locations().length && !parseCsvList(payload.phone?.['locationIds']).length) {\n this.tab.set('phone');\n this.toast.show('Select at least one location.', 'error');\n return;\n }\n\n const whatToSay = String(payload.knowledge?.['whatToSay'] ?? '').trim();\n const whatNotToSay = String(payload.knowledge?.['whatNotToSay'] ?? '').trim();\n if (!whatToSay || !whatNotToSay) {\n this.tab.set('knowledge');\n this.toast.show('Knowledge Base requires both “What to say” and “What not to say”.', 'error');\n return;\n }\n payload.knowledge = { whatToSay, whatNotToSay };\n\n // Keep legacy retainDays in sync for older BE consumers.\n const recDays = Number(payload.transcripts['recordingRetainDays'] ?? 30);\n const txDays = Number(payload.transcripts['transcriptRetainDays'] ?? 30);\n payload.transcripts['retainDays'] = Math.max(recDays, txDays);\n\n this.restoreReadOnlyFields(payload, orig);\n\n this.saving.set(true);\n this.api.putSettings(payload).subscribe({\n next: ({ data }) => {\n this.originalSettings = structuredClone(data);\n this.settings.set(structuredClone(data));\n this.saving.set(false);\n this.saved.set(true);\n this.toast.show('Agent settings saved', 'success');\n setTimeout(() => this.saved.set(false), 2000);\n this.savedSuccessfully.emit();\n },\n error: (err: unknown) => {\n this.saving.set(false);\n const message =\n err instanceof Error && err.message.trim()\n ? err.message\n : 'Failed to save agent settings';\n this.toast.show(message, 'error');\n },\n });\n }\n\n private restoreReadOnlyFields(payload: AgentSettings, orig: AgentSettings): void {\n const editableSections: SettingsSection[] = [\n 'general',\n 'phone',\n 'tasks',\n 'scheduling',\n 'refill',\n 'verify',\n 'escalation',\n 'outbound',\n 'knowledge',\n 'transcripts',\n 'advanced',\n ];\n\n for (const sectionKey of editableSections) {\n if (READ_ONLY_SECTIONS.has(sectionKey)) {\n payload[sectionKey] = structuredClone(orig[sectionKey]);\n continue;\n }\n\n const payloadSection = payload[sectionKey] as Record<string, string | boolean | number>;\n const origSection = orig[sectionKey] as Record<string, string | boolean | number>;\n for (const key of Object.keys(payloadSection)) {\n if (isFieldReadOnly(sectionKey, key)) {\n payloadSection[key] = origSection[key];\n }\n }\n }\n }\n}\n","<div\n class=\"settings-page\"\n [class.p-base]=\"presentation() === 'page'\"\n [class.bg-lighter]=\"presentation() === 'page'\"\n [class.min-h-full]=\"presentation() === 'page'\"\n [class.h-full]=\"presentation() === 'page'\"\n [class.min-h-0]=\"presentation() === 'page'\"\n [class.overflow-auto]=\"presentation() === 'page'\"\n [class.flex]=\"presentation() === 'drawer'\"\n [class.h-full]=\"presentation() === 'drawer'\"\n [class.min-h-0]=\"presentation() === 'drawer'\"\n [class.flex-col]=\"presentation() === 'drawer'\"\n>\n @if (presentation() === 'page') {\n <header class=\"mb-6 flex items-start justify-between gap-4\">\n <div>\n <h4>Agent settings</h4>\n <p class=\"mt-2 text-base leading-normal text-zinc-500\">Configure AI receptionist behavior and safety</p>\n </div>\n <div class=\"flex shrink-0 items-center gap-3\">\n @if (saved()) {\n <span class=\"text-sm font-medium text-green-500\">Saved</span>\n }\n <ed-button variant=\"primary\" fill size=\"sm\" [disabled]=\"saving()\" (click$)=\"save()\">\n <ed-icon slot=\"prefix\" name=\"save\" [size]=\"16\" />\n {{ saving() ? 'Saving…' : 'Save changes' }}\n </ed-button>\n </div>\n </header>\n }\n\n @if (loading()) {\n @if (presentation() === 'drawer') {\n <div class=\"flex min-h-0 flex-1\" aria-busy=\"true\">\n <nav class=\"w-[220px] h-full shrink-0 overflow-y-auto p-base bg-lighter-2\" aria-label=\"Settings sections\">\n <ul role=\"presentation\">\n @for (_ of navSkeletonRows; track _) {\n <li class=\"mb-1\">\n <ed-skeleton class=\"h-8 w-full !rounded-md\"></ed-skeleton>\n </li>\n }\n </ul>\n </nav>\n <article class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-md overflow-y-auto bg-white p-base\">\n <header class=\"grid gap-2xs\">\n <ed-skeleton class=\"h-5 w-40\"></ed-skeleton>\n <ed-skeleton class=\"h-3 w-72\"></ed-skeleton>\n </header>\n @for (_ of fieldSkeletonRows; track _) {\n <div class=\"grid gap-2xs\">\n <ed-skeleton class=\"h-3 w-24\"></ed-skeleton>\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\n </div>\n }\n </article>\n </div>\n } @else {\n <div\n class=\"grid grid-cols-[240px_minmax(0,1fr)] max-[960px]:grid-cols-1 items-start gap-5\"\n aria-busy=\"true\"\n >\n <nav class=\"flex flex-col gap-1 rounded-lg border border-base bg-white p-2 shadow-sm\" aria-label=\"Settings sections\">\n @for (_ of navSkeletonRows; track _) {\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\n }\n </nav>\n <article class=\"flex min-h-96 flex-col gap-md overflow-hidden rounded-lg border border-light bg-white p-base\">\n <header class=\"grid gap-2xs\">\n <ed-skeleton class=\"h-5 w-40\"></ed-skeleton>\n <ed-skeleton class=\"h-3 w-72\"></ed-skeleton>\n </header>\n @for (_ of fieldSkeletonRows; track _) {\n <div class=\"grid gap-2xs\">\n <ed-skeleton class=\"h-3 w-24\"></ed-skeleton>\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\n </div>\n }\n </article>\n </div>\n }\n } @else if (settings()) {\n @if (presentation() === 'drawer') {\n <div class=\"flex min-h-0 flex-1\">\n <nav class=\"w-[220px] h-full shrink-0 overflow-y-auto p-base bg-lighter-2\" aria-label=\"Settings sections\">\n <ul role=\"tablist\" aria-label=\"Settings sections\">\n @for (t of tabs; track t.id) {\n <li\n role=\"presentation\"\n [class.cursor-pointer]=\"!isTabDisabled(t.id)\"\n [class.cursor-not-allowed]=\"isTabDisabled(t.id)\"\n >\n <div\n class=\"kpi-menu\"\n role=\"tab\"\n [attr.id]=\"'agent-settings-tab-' + t.id\"\n [attr.aria-selected]=\"tab() === t.id\"\n [attr.aria-disabled]=\"isTabDisabled(t.id)\"\n [attr.tabindex]=\"tab() === t.id ? 0 : -1\"\n [attr.title]=\"isTabDisabled(t.id) ? 'This section is currently disabled' : null\"\n [class.kpi-menu-active]=\"tab() === t.id\"\n [class.opacity-45]=\"isTabDisabled(t.id)\"\n (click)=\"setTab(t.id)\"\n (keydown.enter)=\"setTab(t.id)\"\n (keydown.space)=\"$event.preventDefault(); setTab(t.id)\"\n >\n <div class=\"flex items-center gap-xs w-full\">\n <span class=\"whitespace-nowrap flex-1 truncate\">{{ t.label }}</span>\n @if (isTabDisabled(t.id)) {\n <span class=\"shrink-0 fs-2xs font-medium uppercase tracking-wide text-lighter\">Off</span>\n }\n </div>\n </div>\n </li>\n }\n </ul>\n </nav>\n\n <article\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-md bg-white p-base\"\n [class.overflow-y-auto]=\"!locationsMenuOpen()\"\n [class.overflow-visible]=\"locationsMenuOpen()\"\n >\n <header class=\"flex shrink-0 items-start justify-between gap-base\">\n <div class=\"min-w-0\">\n <h5 class=\"m-0\">{{ sectionMeta().title }}</h5>\n @if (tab() !== 'knowledge' && tab() !== 'general' && tab() !== 'phone' && tab() !== 'transcripts') {\n <p class=\"m-0 mt-2xs max-w-2xl fs-sm text-light\">{{ sectionMeta().description }}</p>\n }\n </div>\n @if (tab() === 'knowledge') {\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"openTestCall()\">\n <ed-icon slot=\"prefix\" name=\"phone_call\" [size]=\"16\" />\n Test Call\n </ed-button>\n }\n </header>\n\n @if (sectionIsReadOnly(tab())) {\n <p class=\"flex items-center gap-sm rounded-md border border-light bg-lighter px-base py-sm fs-sm text-light\">\n <ed-icon name=\"lock\" [size]=\"18\" />\n These settings are managed by Edvak. Contact support to request changes.\n </p>\n }\n\n <ng-container [ngTemplateOutlet]=\"settingsPanels\" />\n </article>\n </div>\n } @else {\n <div class=\"grid grid-cols-[240px_minmax(0,1fr)] max-[960px]:grid-cols-1 items-start gap-5\">\n <nav\n class=\"sticky top-4 flex max-h-[calc(100vh-120px)] max-[960px]:static max-[960px]:max-h-none max-[960px]:flex-row max-[960px]:flex-wrap flex-col gap-1 overflow-y-auto rounded-lg border border-base bg-white p-2 shadow-sm\"\n aria-label=\"Settings sections\"\n >\n @for (t of tabs; track t.id) {\n <button\n type=\"button\"\n class=\"settings-page__nav-item flex w-full max-[960px]:w-auto max-[960px]:flex-1 cursor-pointer items-center justify-between gap-3 rounded-md border-none bg-transparent px-4 py-3 text-left text-sm font-medium leading-snug text-zinc-600\"\n [class.settings-page__nav-item--active]=\"tab() === t.id\"\n [class.settings-page__nav-item--disabled]=\"isTabDisabled(t.id)\"\n [disabled]=\"isTabDisabled(t.id)\"\n [attr.title]=\"isTabDisabled(t.id) ? 'This section is currently disabled' : null\"\n (click)=\"setTab(t.id)\"\n >\n {{ t.label }}\n @if (isTabDisabled(t.id)) {\n <span class=\"ml-auto text-xs font-medium uppercase tracking-wide text-zinc-400\">Disabled</span>\n }\n </button>\n }\n </nav>\n\n <article class=\"flex min-h-96 flex-col gap-md overflow-hidden rounded-lg border border-light bg-white p-base\">\n <header class=\"flex items-start justify-between gap-base\">\n <div class=\"min-w-0\">\n <h5 class=\"m-0\">{{ sectionMeta().title }}</h5>\n @if (tab() !== 'knowledge' && tab() !== 'general' && tab() !== 'phone' && tab() !== 'transcripts') {\n <p class=\"m-0 mt-2xs max-w-2xl fs-sm text-light\">{{ sectionMeta().description }}</p>\n }\n </div>\n @if (tab() === 'knowledge') {\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"openTestCall()\">\n <ed-icon slot=\"prefix\" name=\"phone_call\" [size]=\"16\" />\n Test Call\n </ed-button>\n }\n </header>\n\n @if (sectionIsReadOnly(tab())) {\n <p class=\"flex items-center gap-sm rounded-md border border-light bg-lighter px-base py-sm fs-sm text-light\">\n <ed-icon name=\"lock\" [size]=\"18\" />\n These settings are managed by Edvak. Contact support to request changes.\n </p>\n }\n\n <ng-container [ngTemplateOutlet]=\"settingsPanels\" />\n </article>\n </div>\n }\n }\n</div>\n\n<ng-template #settingsPanels>\n @if (tab() === 'knowledge') {\n <div class=\"flex w-full max-w-4xl flex-col gap-md\">\n <div class=\"flex flex-col gap-xs\">\n <label>What to say<span required></span></label>\n <textarea\n class=\"form-textarea min-h-56\"\n rows=\"10\"\n [maxlength]=\"knowledgeMax\"\n [ngModel]=\"whatToSay()\"\n (ngModelChange)=\"updateKnowledgeField('whatToSay', $event)\"\n placeholder=\"Hours, parking, payment options, arrival instructions, emergencies…\"\n autocomplete=\"off\"\n ></textarea>\n <span class=\"block text-right fs-xs text-light\">{{ whatToSay().length }}/{{ knowledgeMax }}</span>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>What not to say<span required></span></label>\n <textarea\n class=\"form-textarea min-h-56\"\n rows=\"10\"\n [maxlength]=\"knowledgeMax\"\n [ngModel]=\"whatNotToSay()\"\n (ngModelChange)=\"updateKnowledgeField('whatNotToSay', $event)\"\n placeholder=\"Clinical advice, unverified prices, PHI, promises the practice cannot keep…\"\n autocomplete=\"off\"\n ></textarea>\n <span class=\"block text-right fs-xs text-light\">{{ whatNotToSay().length }}/{{ knowledgeMax }}</span>\n </div>\n </div>\n } @else if (tab() === 'general') {\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\n <div class=\"flex flex-col gap-xs\">\n <div class=\"flex items-center justify-between gap-xs\">\n <label class=\"m-0\">\n Name<span required></span>\n </label>\n <ed-icon\n name=\"info\"\n [size]=\"16\"\n class=\"text-light\"\n title=\"How the AI introduces itself on calls\"\n />\n </div>\n <input\n class=\"form-input is-sm\"\n type=\"text\"\n [ngModel]=\"fieldValue('general', 'agentName')\"\n (ngModelChange)=\"updateField('general', 'agentName', $event)\"\n autocomplete=\"off\"\n />\n </div>\n\n <div class=\"flex items-end gap-sm\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-xs\">\n <label>Voice<span required></span></label>\n <select\n class=\"form-select is-sm settings-page__select\"\n [ngModel]=\"selectedVoiceId()\"\n (ngModelChange)=\"onVoiceChange($event)\"\n autocomplete=\"off\"\n >\n @for (v of voicePresets; track v.id) {\n <option [ngValue]=\"v.id\">{{ v.gender }} · {{ v.label }}</option>\n }\n </select>\n </div>\n <button\n type=\"button\"\n class=\"settings-page__voice-play inline-flex h-9 w-9 shrink-0 cursor-pointer items-center justify-center rounded-md border border-base bg-white disabled:cursor-wait disabled:opacity-60\"\n [disabled]=\"!selectedVoiceId() || voicePreviewBusy()\"\n [attr.aria-label]=\"voicePreviewPlaying() ? 'Stop voice preview' : 'Play voice preview'\"\n [title]=\"voicePreviewPlaying() ? 'Stop preview' : 'Play sample'\"\n (click)=\"toggleVoicePreview()\"\n >\n <ed-icon [name]=\"voicePreviewPlaying() ? 'stop' : 'play_arrow'\" [size]=\"20\" />\n </button>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Tone</label>\n <div class=\"flex flex-wrap gap-xs\" role=\"radiogroup\" aria-label=\"Tone\">\n @for (tone of toneOptions; track tone.value) {\n <button\n type=\"button\"\n class=\"settings-page__tone cursor-pointer rounded-full border border-transparent bg-lighter px-sm py-2xs fs-xs font-medium text-body\"\n [class.settings-page__tone--active]=\"selectedTone() === tone.value\"\n [class.font-semibold]=\"selectedTone() === tone.value\"\n [attr.aria-checked]=\"selectedTone() === tone.value\"\n role=\"radio\"\n (click)=\"setTone(tone.value)\"\n >\n {{ tone.label }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Inbound Greetings<span required></span></label>\n <textarea\n class=\"form-textarea min-h-24\"\n rows=\"4\"\n spellcheck=\"false\"\n [maxlength]=\"welcomeMax\"\n [placeholder]=\"welcomePlaceholder()\"\n [ngModel]=\"welcomeMessage()\"\n (ngModelChange)=\"updateWelcomeMessage($event)\"\n autocomplete=\"off\"\n ></textarea>\n <span class=\"block text-right fs-xs text-light\">{{ welcomeMessage().length }}/{{ welcomeMax }}</span>\n <div class=\"flex flex-wrap items-center gap-xs\">\n <span class=\"fs-xs font-medium text-dark\">Variables:</span>\n @for (v of greetingVariables; track v.key) {\n <button\n type=\"button\"\n class=\"settings-page__var-chip inline-flex h-5 cursor-pointer items-center rounded border border-base bg-white px-2xs fs-xs font-medium text-dark\"\n (click)=\"insertGreetingVariable(v.token)\"\n [title]=\"'Insert ' + v.token\"\n >\n {{ v.label }}\n </button>\n }\n </div>\n </div>\n </div>\n } @else if (tab() === 'phone') {\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\n <div class=\"flex flex-col gap-xs\">\n <div class=\"flex items-center justify-between gap-xs\">\n <label class=\"m-0\">AI Answer Mode<span required></span></label>\n <ed-icon name=\"info\" [size]=\"16\" class=\"text-light\" title=\"When the AI picks up inbound calls\" />\n </div>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"fieldValue('phone', 'answerMode')\"\n (ngModelChange)=\"updateField('phone', 'answerMode', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of answerModeOptions; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>AI Phone Number<span required></span></label>\n <input\n class=\"form-input is-sm\"\n type=\"text\"\n [disabled]=\"isFieldReadOnly('phone', 'mainNumber')\"\n [ngModel]=\"fieldValue('phone', 'mainNumber')\"\n (ngModelChange)=\"updateField('phone', 'mainNumber', $event)\"\n autocomplete=\"off\"\n />\n <span class=\"fs-xs text-light\">Number patients dial for the AI receptionist. Locked (managed by platform).</span>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Transfer Number<span required></span></label>\n <input\n class=\"form-input is-sm\"\n type=\"text\"\n [disabled]=\"isFieldReadOnly('phone', 'transferNumber')\"\n [ngModel]=\"fieldValue('phone', 'transferNumber')\"\n (ngModelChange)=\"updateField('phone', 'transferNumber', $event)\"\n autocomplete=\"off\"\n />\n <span class=\"fs-xs text-light\">Staff / front-desk handoff number. Locked.</span>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Ringing Time Wait<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"numberFieldAsString('phone', 'ringTimeout')\"\n (ngModelChange)=\"selectNumberField('phone', 'ringTimeout', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of ringTimeoutOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\n <ed-icon name=\"event_available\" [size]=\"20\" class=\"shrink-0 text-primary\" />\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\n <span class=\"fs-sm text-dark\">Create Follow-up Task</span>\n <span class=\"fs-xs text-light\">\n If no one answers in time, the agent auto-creates a high priority task.\n </span>\n </div>\n <button\n type=\"button\"\n class=\"settings-page__switch shrink-0\"\n [class.settings-page__switch--on]=\"!!fieldValue('phone', 'createFollowUpTask')\"\n [attr.aria-pressed]=\"!!fieldValue('phone', 'createFollowUpTask')\"\n aria-label=\"Create Follow-up Task\"\n (click)=\"updateField('phone', 'createFollowUpTask', !fieldValue('phone', 'createFollowUpTask'))\"\n >\n <span class=\"settings-page__switch-thumb\"></span>\n </button>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Location Handled<span required></span></label>\n <div class=\"relative\" data-locations-dd (document:click)=\"onLocationsDocClick($event)\">\n <div\n class=\"form-input flex h-auto w-full cursor-pointer items-center justify-between gap-xs py-2xs text-left\"\n role=\"combobox\"\n tabindex=\"0\"\n [class.opacity-55]=\"locations().length === 0\"\n [attr.aria-expanded]=\"locationsMenuOpen()\"\n [attr.aria-disabled]=\"locations().length === 0\"\n [attr.title]=\"locationSummary()\"\n aria-haspopup=\"listbox\"\n aria-label=\"Locations handled\"\n (click)=\"$event.stopPropagation(); locations().length && toggleLocationsMenu()\"\n (keydown.enter)=\"$event.preventDefault(); locations().length && toggleLocationsMenu()\"\n (keydown.space)=\"$event.preventDefault(); locations().length && toggleLocationsMenu()\"\n >\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-2xs overflow-hidden\">\n @if (locations().length === 0) {\n <span class=\"fs-sm text-light\">No locations available.</span>\n } @else if (selectedLocations().length === 0) {\n <span class=\"fs-sm text-light\">Select locations</span>\n } @else {\n @for (loc of visibleSelectedLocations(); track loc.id) {\n <span class=\"inline-flex h-5 items-center gap-2xs rounded bg-primary-50 px-2xs text-primary\">\n <span class=\"fs-xs font-medium\">{{ loc.name }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-3 w-3 shrink-0 cursor-pointer items-center justify-center border-none bg-transparent p-0 text-primary\"\n [attr.aria-label]=\"'Remove ' + loc.name\"\n (click)=\"$event.stopPropagation(); toggleLocation(loc.id)\"\n >\n <ed-icon name=\"close\" [size]=\"12\" color=\"currentColor\" />\n </button>\n </span>\n }\n @if (hiddenLocationCount() > 0) {\n <span class=\"inline-flex h-5 items-center rounded bg-primary-50 px-2xs fs-xs font-medium text-primary\">\n +{{ hiddenLocationCount() }}\n </span>\n }\n }\n </span>\n <ed-icon name=\"expand_more\" [size]=\"16\" class=\"shrink-0 text-light\" />\n </div>\n @if (locationsMenuOpen()) {\n <ul\n class=\"settings-page__locations-menu absolute bottom-full z-50 m-0 mb-1 max-h-56 w-full list-none overflow-auto rounded-md border border-zinc-300 bg-white p-2xs shadow-lg\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n >\n @for (loc of locations(); track loc.id) {\n <li role=\"option\" [attr.aria-selected]=\"selectedLocationIds().includes(loc.id)\">\n <label class=\"flex cursor-pointer items-center gap-xs rounded px-xs py-2xs fs-sm text-dark hover:bg-lighter\">\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 accent-blue-600\"\n [checked]=\"selectedLocationIds().includes(loc.id)\"\n (change)=\"toggleLocation(loc.id)\"\n />\n <span class=\"min-w-0 truncate\">{{ loc.name }}</span>\n </label>\n </li>\n }\n </ul>\n }\n </div>\n @if (locations().length === 0) {\n <p class=\"m-0 fs-sm text-light\">No locations available.</p>\n }\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Max AI Call Duration<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"numberFieldAsString('phone', 'maxCallDurationMin')\"\n (ngModelChange)=\"selectNumberField('phone', 'maxCallDurationMin', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of maxCallDurationOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Silence Timeout<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"numberFieldAsString('phone', 'silenceTimeoutSec')\"\n (ngModelChange)=\"selectNumberField('phone', 'silenceTimeoutSec', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of silenceTimeoutOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>After-Hours Behaviour<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"fieldValue('phone', 'afterHoursBehavior')\"\n (ngModelChange)=\"updateField('phone', 'afterHoursBehavior', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of afterHoursOptions; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-md border-t border-light pt-md\">\n <div class=\"flex flex-col gap-xs\">\n <label>Minimum lead time (hours)</label>\n <input\n class=\"form-input is-sm\"\n type=\"number\"\n min=\"0\"\n [ngModel]=\"fieldValue('scheduling', 'leadTimeHours')\"\n (ngModelChange)=\"updateField('scheduling', 'leadTimeHours', +$event)\"\n autocomplete=\"off\"\n />\n <span class=\"fs-xs text-light\">Earliest bookable slot from now.</span>\n </div>\n\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\n <ed-icon name=\"calendar_month\" [size]=\"20\" class=\"shrink-0 text-primary\" />\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\n <span class=\"fs-sm text-dark\">Allow same-day booking</span>\n <span class=\"fs-xs text-light\">\n Let patients book appointments later today.\n </span>\n </div>\n <button\n type=\"button\"\n class=\"settings-page__switch shrink-0\"\n [class.settings-page__switch--on]=\"!!fieldValue('scheduling', 'allowSameDay')\"\n [attr.aria-pressed]=\"!!fieldValue('scheduling', 'allowSameDay')\"\n aria-label=\"Allow same-day booking\"\n (click)=\"updateField('scheduling', 'allowSameDay', !fieldValue('scheduling', 'allowSameDay'))\"\n >\n <span class=\"settings-page__switch-thumb\"></span>\n </button>\n </div>\n </div>\n </div>\n } @else if (tab() === 'transcripts') {\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\n <div class=\"flex flex-col gap-xs\">\n <label>Keep Call Recordings<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"numberFieldAsString('transcripts', 'recordingRetainDays')\"\n (ngModelChange)=\"selectNumberField('transcripts', 'recordingRetainDays', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of retentionOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Keep Transcripts<span required></span></label>\n <select\n class=\"form-select is-sm\"\n [ngModel]=\"numberFieldAsString('transcripts', 'transcriptRetainDays')\"\n (ngModelChange)=\"selectNumberField('transcripts', 'transcriptRetainDays', $event)\"\n autocomplete=\"off\"\n >\n @for (opt of retentionOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <div class=\"flex items-center gap-xs\">\n <label class=\"m-0\">Disclosure Warning</label>\n <button\n type=\"button\"\n class=\"settings-page__switch shrink-0\"\n [class.settings-page__switch--on]=\"disclosureEnabled()\"\n [attr.aria-pressed]=\"disclosureEnabled()\"\n aria-label=\"Disclosure Warning\"\n (click)=\"setDisclosureEnabled(!disclosureEnabled())\"\n >\n <span class=\"settings-page__switch-thumb\"></span>\n </button>\n </div>\n @if (disclosureEnabled()) {\n <textarea\n class=\"form-textarea min-h-24\"\n rows=\"4\"\n [maxlength]=\"disclosureMax\"\n [ngModel]=\"disclosureText()\"\n (ngModelChange)=\"updateDisclosureText($event)\"\n autocomplete=\"off\"\n ></textarea>\n }\n </div>\n </div>\n } @else if (tab() === 'advanced') {\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\n <span class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-md bg-primary-50 text-primary\" aria-hidden=\"true\">\n <ed-icon name=\"sparkle\" [size]=\"20\" />\n </span>\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\n <span class=\"fs-sm text-dark\">\n @if (toggling()) {\n Updating…\n } @else if (online() === true) {\n Agent online\n } @else if (online() === false) {\n Agent offline\n } @else {\n Status unknown\n }\n </span>\n <span class=\"fs-xs text-light\">\n @if (online() === true) {\n AI receptionist is answering inbound calls.\n } @else if (online() === false) {\n AI is offline — calls go to the front desk.\n } @else {\n Checking agent status…\n }\n </span>\n </div>\n <button\n type=\"button\"\n class=\"settings-page__switch shrink-0\"\n [class.settings-page__switch--on]=\"online() === true\"\n [disabled]=\"agentSwitchDisabled()\"\n [attr.aria-pressed]=\"online() === true\"\n aria-label=\"Agent online\"\n (click)=\"onAgentToggleClick()\"\n >\n <span class=\"settings-page__switch-thumb\"></span>\n </button>\n </div>\n\n <div class=\"flex flex-col gap-xs\">\n <label>Model version</label>\n <input\n class=\"form-input is-sm\"\n type=\"text\"\n [ngModel]=\"fieldValue('advanced', 'modelVersion')\"\n disabled\n autocomplete=\"off\"\n />\n <span class=\"fs-xs text-light\">Set by Edvak support.</span>\n </div>\n\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-lighter px-base py-sm opacity-90\">\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\n <span class=\"fs-sm text-dark\">Debug mode</span>\n <span class=\"fs-xs text-light\">Verbose logging — contact Edvak to change.</span>\n </div>\n <button\n type=\"button\"\n class=\"settings-page__switch shrink-0\"\n [class.settings-page__switch--on]=\"!!fieldValue('advanced', 'debugMode')\"\n disabled\n [attr.aria-pressed]=\"!!fieldValue('advanced', 'debugMode')\"\n aria-label=\"Debug mode\"\n >\n <span class=\"settings-page__switch-thumb\"></span>\n </button>\n </div>\n </div>\n } @else {\n <div class=\"grid grid-cols-2 gap-x-md gap-y-md below-md:grid-cols-1\">\n @for (field of fieldsForTab(); track field.key) {\n @if (field.type === 'boolean') {\n <label\n class=\"col-span-full flex cursor-pointer items-center justify-between gap-base rounded-md border border-base bg-lighter px-base py-sm\"\n [class.cursor-default]=\"fieldIsReadOnly(tab(), field.key)\"\n [class.opacity-90]=\"fieldIsReadOnly(tab(), field.key)\"\n >\n <div class=\"flex min-w-0 flex-col gap-2xs\">\n <span class=\"fs-sm text-dark\">{{ field.label }}</span>\n @if (field.description) {\n <span\n class=\"fs-sm text-light\"\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\n >{{ field.description }}</span>\n }\n </div>\n <input\n type=\"checkbox\"\n class=\"h-4 w-4 shrink-0 accent-blue-600 disabled:cursor-not-allowed\"\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\n [ngModel]=\"fieldValue(tab(), field.key)\"\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\n autocomplete=\"off\"\n />\n </label>\n } @else if (field.type === 'select' && field.options?.length) {\n <div class=\"flex flex-col gap-xs\">\n <label>{{ field.label }}</label>\n @if (field.description) {\n <span\n class=\"fs-sm text-light\"\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\n >{{ field.description }}</span>\n }\n <select\n class=\"form-select is-sm\"\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\n [ngModel]=\"fieldValue(tab(), field.key)\"\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\n autocomplete=\"off\"\n >\n @for (opt of field.options; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n </div>\n } @else {\n <div class=\"flex flex-col gap-xs\">\n <label>{{ field.label }}</label>\n @if (field.description) {\n <span\n class=\"fs-sm text-light\"\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\n >{{ field.description }}</span>\n }\n @if (field.type === 'number') {\n <input\n class=\"form-input is-sm\"\n type=\"number\"\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\n [ngModel]=\"fieldValue(tab(), field.key)\"\n (ngModelChange)=\"updateField(tab(), field.key, +$event)\"\n autocomplete=\"off\"\n />\n } @else {\n <input\n class=\"form-input is-sm\"\n type=\"text\"\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\n [ngModel]=\"fieldValue(tab(), field.key)\"\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\n autocomplete=\"off\"\n />\n }\n </div>\n }\n }\n </div>\n }\n</ng-template>\n\n<eds-knowledge-test-modal\n [open]=\"knowledgeTestOpen()\"\n [whatToSay]=\"whatToSay()\"\n [whatNotToSay]=\"whatNotToSay()\"\n [voiceId]=\"selectedVoiceId()\"\n (closed)=\"closeTestCall()\"\n/>\n\n@if (confirmOffOpen()) {\n <app-modal\n title=\"Turn off AI receptionist?\"\n subtitle=\"Inbound callers will be transferred to the front desk instead of the AI.\"\n maxWidth=\"480px\"\n (closed)=\"cancelConfirmOff()\"\n >\n <p class=\"mb-4 m-0 text-sm leading-normal text-zinc-500\">While offline, the AI will not answer calls. Callers are routed to the human receptionist.</p>\n <div class=\"flex justify-end gap-2\">\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"cancelConfirmOff()\">Cancel</ed-button>\n <ed-button variant=\"danger\" fill size=\"sm\" [disabled]=\"toggling()\" (click$)=\"confirmTurnOff()\">\n Turn off AI receptionist\n </ed-button>\n </div>\n </app-modal>\n}\n","import { Injectable, signal } from '@angular/core';\n\n/** Single shared open state for the Agent Settings ed-drawer. */\n@Injectable({ providedIn: 'root' })\nexport class AgentSettingsDrawerService {\n readonly open = signal(false);\n\n show(): void {\n this.open.set(true);\n }\n\n hide(): void {\n this.open.set(false);\n }\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n OnDestroy,\n Renderer2,\n inject,\n} from '@angular/core';\n\n/**\n * Moves the host element to `document.body` so `position: fixed` overlays\n * cover the full browser viewport (escapes `#content-area` / `.eds-content`\n * overflow and stacking contexts), matching `app-modal` behavior.\n */\n@Directive({\n selector: '[edsViewportPortal]',\n standalone: true,\n})\nexport class ViewportPortalDirective implements AfterViewInit, OnDestroy {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private movedToBody = false;\n\n ngAfterViewInit(): void {\n const node = this.el.nativeElement;\n if (!node || node.parentElement === document.body) return;\n this.renderer.appendChild(document.body, node);\n this.movedToBody = true;\n }\n\n ngOnDestroy(): void {\n const node = this.el.nativeElement;\n if (this.movedToBody && node?.parentElement) {\n this.renderer.removeChild(node.parentElement, node);\n }\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\nimport { IconComponent } from './ed-icon.component';\n\ntype Size = 'xs' | 'sm' | 'base' | 'md' | 'lg';\ntype Variant = 'default' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'accent' | 'info';\ntype Shape = 'circle' | 'square';\ntype BtnType = 'button' | 'submit' | 'reset';\ntype IconPixelSize = 14 | 16 | 18 | 20 | 24 | 28 | 32;\n\nconst SIZE_MAP: Record<Size, { btn: number; spinner: number; radius: number; icon: IconPixelSize }> = {\n xs: { btn: 24, spinner: 14, radius: 4, icon: 14 },\n sm: { btn: 28, spinner: 16, radius: 6, icon: 16 },\n base: { btn: 32, spinner: 18, radius: 6, icon: 20 },\n md: { btn: 36, spinner: 20, radius: 8, icon: 24 },\n lg: { btn: 40, spinner: 22, radius: 10, icon: 28 },\n};\n\n@Component({\n selector: 'ed-icon-button',\n standalone: true,\n imports: [IconComponent],\n templateUrl: './ed-icon-button.component.html',\n styleUrl: './ed-icon-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdIconButtonComponent {\n @Input({ required: true }) label!: string;\n @Input({ required: true }) name!: string;\n\n @Input() size: Size = 'base';\n @Input() variant: Variant = 'default';\n @Input({ transform: booleanAttribute }) allowBubble = false;\n @Input({ transform: booleanAttribute }) ghost = false;\n @Input({ transform: booleanAttribute }) outline = false;\n @Input({ transform: booleanAttribute }) solid = false;\n @Input({ transform: booleanAttribute }) subtle = false;\n @Input() shape: Shape = 'square';\n\n private readonly btnTypes = new Set<BtnType>(['button', 'submit', 'reset']);\n private typeValue: BtnType = 'button';\n @Input() set type(v: BtnType) {\n this.typeValue = this.btnTypes.has(v) ? v : 'button';\n }\n get type(): BtnType {\n return this.typeValue;\n }\n\n @Input({ transform: booleanAttribute }) disabled = false;\n @Input({ transform: booleanAttribute }) loading = false;\n @Input({ transform: booleanAttribute }) toggle = false;\n @Input({ transform: booleanAttribute }) pressed = false;\n\n @Input() id?: string;\n @Input() title?: string;\n @Input() nameAttr?: string;\n @Input() value?: string;\n @Input({ transform: booleanAttribute }) autofocus = false;\n @Input() tabIndex?: number;\n\n @Output() readonly click = new EventEmitter<MouseEvent>();\n @Output() readonly focus = new EventEmitter<FocusEvent>();\n @Output() readonly blur = new EventEmitter<FocusEvent>();\n @Output() readonly click$ = new EventEmitter<MouseEvent>();\n @Output() readonly focus$ = new EventEmitter<FocusEvent>();\n @Output() readonly blur$ = new EventEmitter<FocusEvent>();\n\n get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n\n get ariaBusy(): 'true' | null {\n return this.loading ? 'true' : null;\n }\n\n get iconSize(): IconPixelSize {\n return (SIZE_MAP[this.size] ?? SIZE_MAP.base).icon;\n }\n\n @HostBinding('style.--btn-size')\n get btnSizeVar(): string {\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).btn}px`;\n }\n\n @HostBinding('style.--ib-spinner')\n get spinnerSizeVar(): string {\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).spinner}px`;\n }\n\n @HostBinding('style.--btn-radius')\n get btnRadiusVar(): string {\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).radius}px`;\n }\n\n get effectiveStyle(): 'ghost' | 'outline' | 'subtle' | 'solid' {\n if (this.solid) return 'solid';\n if (this.outline) return 'outline';\n if (this.subtle) return 'subtle';\n return 'ghost';\n }\n\n onClick(ev: MouseEvent): void {\n if (this.isDisabled) {\n ev.preventDefault();\n ev.stopImmediatePropagation();\n return;\n }\n this.click.emit(ev);\n this.click$.emit(ev);\n }\n\n onFocus(ev: FocusEvent): void {\n this.focus.emit(ev);\n this.focus$.emit(ev);\n }\n\n onBlur(ev: FocusEvent): void {\n this.blur.emit(ev);\n this.blur$.emit(ev);\n }\n\n @HostListener('click', ['$event'])\n stopClickBubble(e: Event): void {\n if (!this.allowBubble) e.stopPropagation();\n }\n\n @HostListener('pointerdown', ['$event'])\n stopPointerDownBubble(e: Event): void {\n if (!this.allowBubble) e.stopPropagation();\n }\n\n @HostListener('pointerup', ['$event'])\n stopPointerUpBubble(e: Event): void {\n if (!this.allowBubble) e.stopPropagation();\n }\n\n @HostListener('mousedown', ['$event'])\n stopMouseDownBubble(e: Event): void {\n if (!this.allowBubble) e.stopPropagation();\n }\n\n @HostListener('mouseup', ['$event'])\n stopMouseUpBubble(e: Event): void {\n if (!this.allowBubble) e.stopPropagation();\n }\n}\n","<button\n class=\"icon-btn\"\n [attr.id]=\"id || null\"\n [attr.title]=\"title || null\"\n [type]=\"type\"\n [disabled]=\"isDisabled\"\n [attr.autofocus]=\"autofocus ? '' : null\"\n [attr.tabindex]=\"tabIndex ?? null\"\n [attr.name]=\"nameAttr || null\"\n [attr.value]=\"value || null\"\n [attr.aria-label]=\"label\"\n [attr.aria-busy]=\"ariaBusy\"\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\n [attr.aria-pressed]=\"toggle ? (pressed ? 'true' : 'false') : null\"\n [attr.variant]=\"variant\"\n [attr.shape]=\"shape\"\n [attr.size]=\"size\"\n [attr.ghost]=\"effectiveStyle === 'ghost' ? '' : null\"\n [attr.outline]=\"effectiveStyle === 'outline' ? '' : null\"\n [attr.solid]=\"effectiveStyle === 'solid' ? '' : null\"\n [attr.subtle]=\"effectiveStyle === 'subtle' ? '' : null\"\n (click)=\"onClick($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n>\n <span class=\"icon-slot\" aria-hidden=\"true\">\n <ed-icon [name]=\"name\" [size]=\"iconSize\" color=\"currentColor\" />\n </span>\n\n @if (loading) {\n <span aria-live=\"polite\" class=\"sr-only\">Loading…</span>\n <span class=\"spinner\" aria-hidden=\"true\"></span>\n }\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n viewChild,\n} from '@angular/core';\n\nimport { EdButtonComponent } from '../../ui/ed-button.component';\n\nimport { SettingsPageComponent } from '../../pages/settings-page/settings-page.component';\nimport { AgentSettingsDrawerService } from '../../services/agent-settings-drawer.service';\nimport { ViewportPortalDirective } from '../../shared/viewport-portal.directive';\nimport { EdIconButtonComponent } from '../../ui/ed-icon-button.component';\n\n@Component({\n selector: 'eds-agent-settings-drawer',\n imports: [\n SettingsPageComponent,\n EdButtonComponent,\n EdIconButtonComponent,\n ViewportPortalDirective,\n ],\n templateUrl: './agent-settings-drawer.component.html',\n styleUrl: './agent-settings-drawer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class AgentSettingsDrawerComponent {\n private readonly drawer = inject(AgentSettingsDrawerService);\n private readonly settingsForm = viewChild<SettingsPageComponent>('settingsForm');\n\n protected readonly open = this.drawer.open;\n\n protected close(): void {\n this.settingsForm()?.discardChanges();\n this.drawer.hide();\n }\n\n protected onBackdropClick(event: MouseEvent): void {\n if (event.target === event.currentTarget) {\n this.close();\n }\n }\n}\n","@if (open()) {\n <div\n edsViewportPortal\n class=\"eds-drawer-backdrop fixed left-0 top-0 z-[100100] flex h-[100vh] w-[100vw] justify-end\"\n (click)=\"onBackdropClick($event)\"\n role=\"presentation\"\n >\n <ed-drawer\n size=\"xl\"\n class=\"slide-in-rtl ed-main-sidepanel h-full\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Agent Setting\"\n >\n <ed-drawer-header class=\"shrink-0 border-b border-zinc-200 bg-white shadow-none\">\n <h6 data-new-heading=\"true\">Agent Setting</h6>\n <ed-icon-button\n name=\"close\"\n label=\"Close\"\n size=\"sm\"\n ghost\n (click$)=\"close()\"\n />\n </ed-drawer-header>\n\n <ed-drawer-body class=\"min-h-0 flex-1 overflow-visible p-0\">\n <eds-settings-page\n #settingsForm\n presentation=\"drawer\"\n />\n </ed-drawer-body>\n\n <ed-drawer-footer class=\"shrink-0 flex-row-reverse bg-lighter\">\n <ed-button\n variant=\"primary\"\n fill\n size=\"sm\"\n [disabled]=\"settingsForm.saving()\"\n (click$)=\"settingsForm.save()\"\n >\n {{ settingsForm.saving() ? 'Saving…' : 'Save' }}\n </ed-button>\n <ed-button\n variant=\"default\"\n outline\n size=\"sm\"\n (click$)=\"close()\"\n >\n Cancel\n </ed-button>\n @if (settingsForm.saved()) {\n <span class=\"mr-auto fs-sm font-medium text-green-500\">Saved</span>\n }\n </ed-drawer-footer>\n </ed-drawer>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n signal,\n} from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\nimport { EdButtonComponent } from '../ui/ed-button.component';\n\nimport { AgentSettingsDrawerComponent } from '../components/agent-settings-drawer/agent-settings-drawer.component';\nimport {\n VOICE_RECEPTIONIST_CONFIG,\n VOICE_RECEPTIONIST_SESSION,\n} from '../config';\nimport { AgentOnlineService } from '../services/agent-online.service';\nimport { AgentSettingsDrawerService } from '../services/agent-settings-drawer.service';\nimport { ModalComponent } from '../shared/modal.component';\nimport { ToastService } from '../shared/toast.service';\nimport { IconComponent } from '../ui/ed-icon.component';\n\ninterface NavItem {\n id: string;\n label: string;\n icon: string;\n route: string;\n badge?: number;\n pulse?: boolean;\n adminOnly?: boolean;\n}\n\n@Component({\n selector: 'eds-module-nav',\n imports: [\n RouterLink,\n RouterLinkActive,\n IconComponent,\n ModalComponent,\n AgentSettingsDrawerComponent,\n EdButtonComponent,\n ],\n templateUrl: './eds-module-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n host: { class: 'block shrink-0' },\n})\nexport class EdsModuleNavComponent {\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\n private readonly session = inject(VOICE_RECEPTIONIST_SESSION);\n private readonly agentOnline = inject(AgentOnlineService);\n private readonly toast = inject(ToastService);\n private readonly settingsDrawer = inject(AgentSettingsDrawerService);\n\n protected readonly includePracticeNav = !!this.config.includePracticeNav;\n\n\n /** Standalone Voice Hub only — never show logout in EHR embed (no module nav there). */\n protected readonly showLogout = computed(() => !!this.session);\n protected readonly userEmail = computed(() => this.session?.email() ?? null);\n\n protected readonly online = this.agentOnline.online;\n protected readonly agentLoading = this.agentOnline.loading;\n protected readonly toggling = this.agentOnline.toggling;\n /** Avoid `[class.bg-violet-500/15]` — the `/` terminates the tag in Angular HTML. */\n protected readonly brandIconToneClass = computed(() =>\n this.online() === false\n ? 'bg-danger-50 text-danger'\n : 'bg-violet-500/15 text-violet-500',\n );\n protected readonly confirmOffOpen = signal(false);\n protected readonly headerMenuOpen = signal(false);\n\n protected readonly agentSwitchDisabled = computed(\n () => this.agentLoading() || this.toggling() || this.online() === null,\n );\n\n protected readonly receptionistNav: NavItem[] = [\n { id: 'dashboard', label: 'Home', icon: 'home', route: 'dashboard' },\n { id: 'live', label: 'Live Calls', icon: 'phone_call', route: 'live' },\n { id: 'history', label: 'Call History', icon: 'history', route: 'history' },\n { id: 'activities', label: 'Activities', icon: 'format_list_bulleted', route: 'activities' },\n { id: 'analytics', label: 'Analytics', icon: 'chartline', route: 'analytics' },\n ];\n\n protected readonly practiceNav: NavItem[] = [\n { id: 'patients', label: 'Patients', icon: 'groups', route: 'patients' },\n { id: 'providers', label: 'Providers', icon: 'stethoscope', route: 'providers' },\n { id: 'appointments', label: 'Appointments', icon: 'calendar_month', route: 'appointments' },\n { id: 'admin', label: 'Admin', icon: 'admin_panel_settings', route: 'admin', adminOnly: true },\n ];\n\n constructor() {\n this.agentOnline.refresh();\n }\n\n protected showNavItem(item: NavItem): boolean {\n if (!item.adminOnly) return true;\n return !!this.session?.isAdmin() || !!this.session?.isSuperAdmin?.();\n }\n\n protected toggleHeaderMenu(): void {\n this.headerMenuOpen.update((open) => !open);\n }\n\n protected closeHeaderMenu(): void {\n this.headerMenuOpen.set(false);\n }\n\n protected onHeaderMenuDocClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n if (!target?.closest('[data-header-menu]')) {\n this.headerMenuOpen.set(false);\n }\n }\n\n protected onAgentToggleClick(): void {\n if (this.agentSwitchDisabled()) return;\n if (this.online()) {\n this.confirmOffOpen.set(true);\n return;\n }\n this.applyOnline(true);\n }\n\n protected cancelConfirmOff(): void {\n this.confirmOffOpen.set(false);\n }\n\n protected confirmTurnOff(): void {\n this.confirmOffOpen.set(false);\n this.applyOnline(false);\n }\n\n protected logout(): void {\n this.session?.logout();\n }\n\n protected openSettingsDrawer(): void {\n this.closeHeaderMenu();\n this.settingsDrawer.show();\n }\n\n private applyOnline(enabled: boolean): void {\n this.agentOnline.setOnline(enabled).subscribe({\n next: () => {\n this.toast.show(\n enabled\n ? 'AI receptionist is online — it will answer inbound calls.'\n : 'AI receptionist is offline — calls go to the front desk.',\n 'success',\n );\n },\n error: (err: { message?: string }) => {\n this.toast.show(err.message ?? 'Failed to update agent status.', 'error');\n this.agentOnline.refresh();\n },\n });\n }\n}\n","<nav\n class=\"sticky top-0 flex h-screen min-h-screen w-52 flex-col overflow-y-auto border-r border-base bg-white \"\n aria-label=\"AI Receptionist\"\n>\n <div class=\"flex min-h-0 flex-1 flex-col \">\n <div\n class=\"relative shrink-0 p-sm\"\n data-header-menu\n (document:click)=\"onHeaderMenuDocClick($event)\"\n >\n <button\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-between gap-xs rounded-md border-0 bg-transparent p-2xs text-left transition-colors hover:bg-purple-50 hover:shadow-sm\"\n aria-label=\"AI Receptionist menu\"\n [attr.aria-expanded]=\"headerMenuOpen()\"\n aria-haspopup=\"menu\"\n (click)=\"$event.stopPropagation(); toggleHeaderMenu()\"\n >\n <div class=\"flex min-w-0 flex-1 items-center gap-xs\">\n <span\n class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg\"\n [class]=\"brandIconToneClass()\"\n aria-hidden=\"true\"\n >\n <ed-icon\n [name]=\"online() === false ? 'phone_disabled' : 'sparkle'\"\n [size]=\"20\"\n color=\"currentColor\"\n />\n </span>\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"fs-base font-semibold text-dark\">AI Receptionist</span>\n <span class=\"inline-flex items-center gap-2xs\">\n <span\n class=\"inline-block h-xs w-xs shrink-0 rounded-full\"\n [class.bg-success]=\"online() === true\"\n [class.bg-danger]=\"online() === false\"\n [class.bg-dark]=\"online() === null\"\n aria-hidden=\"true\"\n ></span>\n <span\n class=\"fs-2xs font-semibold uppercase tracking-wide\"\n [class.text-success]=\"online() === true\"\n [class.text-danger]=\"online() === false\"\n [class.text-light]=\"online() === null\"\n >\n @if (agentLoading() && online() === null) {\n Checking\n } @else if (online() === true) {\n Live\n } @else if (online() === false) {\n Offline\n } @else {\n Unknown\n }\n </span>\n </span>\n </div>\n </div>\n <ed-icon\n name=\"caret_down\"\n [size]=\"16\"\n color=\"currentColor\"\n class=\"shrink-0 text-light\"\n aria-hidden=\"true\"\n />\n </button>\n @if (headerMenuOpen()) {\n <div\n class=\"fade-in absolute right-0 top-full z-20 mt-2xs flex w-44 origin-top flex-col gap-2xs rounded-md border border-light bg-white p-2xs shadow-md\"\n role=\"menu\"\n aria-label=\"AI Receptionist menu\"\n >\n <a\n class=\"flex w-full items-center rounded-sm px-sm py-xs fs-sm text-dark no-underline transition-colors hover:bg-lighter\"\n routerLink=\"audit\"\n routerLinkActive=\"bg-lighter\"\n role=\"menuitem\"\n (click)=\"closeHeaderMenu()\"\n >\n Audit Logs\n </a>\n <button\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center rounded-sm border-0 bg-transparent px-sm py-xs text-left fs-sm text-dark transition-colors hover:bg-lighter\"\n role=\"menuitem\"\n (click)=\"openSettingsDrawer()\"\n >\n Settings\n </button>\n <div class=\"w-full border-b border-light\" role=\"presentation\"></div>\n <div class=\"flex w-full items-center gap-2xs px-sm py-xs\" role=\"menuitem\">\n <span class=\"min-w-0 flex-1 fs-sm text-dark\">\n @if (online() === true) {\n Agent is Live\n } @else if (online() === false) {\n Agent is Offline\n } @else {\n Agent status\n }\n </span>\n <button\n type=\"button\"\n class=\"inline-flex h-4 w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent p-2xs transition-colors disabled:cursor-not-allowed disabled:opacity-55\"\n [class.bg-primary]=\"online() === true\"\n [class.justify-end]=\"online() === true\"\n [class.bg-lighter]=\"online() !== true\"\n [class.justify-start]=\"online() !== true\"\n [disabled]=\"agentSwitchDisabled()\"\n [attr.aria-pressed]=\"online() === true\"\n [attr.aria-label]=\"online() === true ? 'Turn off AI receptionist' : 'Turn on AI receptionist'\"\n (click)=\"$event.stopPropagation(); onAgentToggleClick()\"\n >\n <span class=\"block h-3 w-3 rounded-full bg-white\"></span>\n </button>\n </div>\n </div>\n }\n </div>\n\n <div class=\"w-full border-b border-light\" role=\"presentation\"></div>\n\n <ul role=\"menu\" class=\"m-0 list-none p-0\">\n @for (item of receptionistNav; track item.id) {\n <li\n tabindex=\"0\"\n role=\"menuitem\"\n class=\"cursor-pointer px-base py-xs text-left fs-base leading-[1.8] hover:bg-lighter active:bg-base\"\n [attr.data-value]=\"item.label\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"bg-light\"\n [routerLinkActiveOptions]=\"{ exact: item.route === 'dashboard' }\"\n (keydown.enter)=\"$any($event.target)?.click()\"\n >{{ item.label }}</li>\n }\n </ul>\n\n @if (includePracticeNav) {\n <p class=\"mb-0 mt-0 fs-sm font-semibold text-light\">Practice</p>\n <ul role=\"menu\" class=\"m-0 list-none p-0\">\n @for (item of practiceNav; track item.id) {\n @if (showNavItem(item)) {\n <li\n tabindex=\"0\"\n role=\"menuitem\"\n class=\"cursor-pointer px-base py-xs text-left fs-base leading-[1.8] hover:bg-lighter active:bg-base\"\n [attr.data-value]=\"item.label\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"bg-light\"\n (keydown.enter)=\"$any($event.target)?.click()\"\n >{{ item.label }}</li>\n }\n }\n </ul>\n }\n </div>\n\n @if (showLogout()) {\n <div class=\"mt-auto border-t border-light pt-sm\">\n @if (userEmail(); as email) {\n <p class=\"mb-xs truncate px-xs fs-xs text-light\" [title]=\"email\">{{ email }}</p>\n }\n <button\n type=\"button\"\n class=\"group/link relative flex h-10 w-full cursor-pointer items-center gap-xs rounded-md border-0 bg-transparent px-xs text-left fs-base font-medium text-light transition-colors hover:bg-lighter hover:text-dark\"\n (click)=\"logout()\"\n aria-label=\"Log out\"\n title=\"Log out\"\n >\n <ed-icon class=\"shrink-0\" name=\"logout\" [size]=\"24\" color=\"currentColor\" />\n <span class=\"min-w-0 flex-1\">Log out</span>\n </button>\n </div>\n }\n</nav>\n\n@if (confirmOffOpen()) {\n <app-modal\n title=\"Turn off AI receptionist?\"\n subtitle=\"Inbound callers will be transferred to the front desk instead of the AI.\"\n maxWidth=\"480px\"\n (closed)=\"cancelConfirmOff()\"\n >\n <p class=\"mb-4 m-0 text-sm leading-normal text-zinc-500\">While offline, the AI will not answer calls. Callers are routed to the human receptionist.</p>\n <div class=\"flex justify-end gap-2\">\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"cancelConfirmOff()\">Cancel</ed-button>\n <ed-button variant=\"danger\" fill size=\"sm\" [disabled]=\"toggling()\" (click$)=\"confirmTurnOff()\">\n Turn off AI receptionist\n </ed-button>\n </div>\n </app-modal>\n}\n\n<eds-agent-settings-drawer />\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n Router,\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n/**\n * Thin top progress bar + soft content veil while Angular navigates\n * (lazy chunks, guards). Use once at the host root or app shell.\n */\n@Component({\n selector: 'eds-route-progress',\n standalone: true,\n template: `\n @if (active()) {\n <div class=\"eds-route-progress\" role=\"progressbar\" aria-busy=\"true\" aria-label=\"Loading page\">\n <div class=\"eds-route-progress__bar\"></div>\n </div>\n <div class=\"eds-route-progress__veil\" aria-hidden=\"true\">\n <div class=\"eds-route-progress__panel\">\n <span class=\"eds-route-progress__spinner\"></span>\n <span class=\"eds-route-progress__label\">Loading…</span>\n </div>\n </div>\n }\n `,\n styles: `\n :host {\n display: contents;\n }\n\n .eds-route-progress {\n position: fixed;\n inset: 0 0 auto;\n z-index: 9999;\n height: 3px;\n overflow: hidden;\n pointer-events: none;\n background: transparent;\n }\n\n .eds-route-progress__bar {\n height: 100%;\n width: 40%;\n border-radius: 0 2px 2px 0;\n background: linear-gradient(90deg, #2162f0, #8e51ff);\n animation: eds-route-progress-slide 1.05s ease-in-out infinite;\n }\n\n .eds-route-progress__veil {\n position: fixed;\n inset: 0;\n z-index: 9998;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: all;\n background: rgba(247, 250, 255, 0.55);\n backdrop-filter: blur(1px);\n }\n\n .eds-route-progress__panel {\n display: inline-flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1.1rem;\n border: 1px solid #e2e8f0;\n border-radius: 0.75rem;\n background: #fff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);\n color: #334155;\n font-family: Inter, system-ui, sans-serif;\n font-size: 0.875rem;\n font-weight: 500;\n }\n\n .eds-route-progress__spinner {\n width: 1.1rem;\n height: 1.1rem;\n border: 2px solid #dbeafe;\n border-top-color: #2162f0;\n border-radius: 999px;\n animation: eds-route-progress-spin 0.7s linear infinite;\n }\n\n .eds-route-progress__label {\n letter-spacing: -0.01em;\n }\n\n @keyframes eds-route-progress-slide {\n 0% {\n transform: translateX(-120%);\n }\n 100% {\n transform: translateX(320%);\n }\n }\n\n @keyframes eds-route-progress-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsRouteProgressComponent {\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n\n protected readonly active = signal(false);\n\n constructor() {\n this.router.events\n .pipe(\n filter(\n (e) =>\n e instanceof NavigationStart ||\n e instanceof NavigationEnd ||\n e instanceof NavigationCancel ||\n e instanceof NavigationError,\n ),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => {\n if (e instanceof NavigationStart) {\n this.clearHideTimer();\n this.active.set(true);\n return;\n }\n // Keep visible briefly so fast navigations still feel intentional.\n this.clearHideTimer();\n this.hideTimer = setTimeout(() => this.active.set(false), 180);\n });\n\n this.destroyRef.onDestroy(() => this.clearHideTimer());\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n} from '@angular/core';\n\nexport type EdAvatarTone = 'gray' | 'brand' | 'warm' | 'green' | 'amber' | 'violet' | 'rose';\nexport type EdAvatarShape = 'circle' | 'box';\nexport type EdAvatarSize = 'xs' | 'sm' | 'base' | 'md' | 'lg';\n\n@Component({\n selector: 'ed-avatar',\n standalone: true,\n template: `<span class=\"ed-avatar\">{{ initials }}</span>`,\n styleUrl: './ed-avatar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'inline-flex shrink-0',\n },\n})\nexport class EdAvatarComponent {\n @Input() initials = '?';\n @Input() tone: EdAvatarTone | string = 'gray';\n @Input() shape: EdAvatarShape = 'circle';\n @Input() size: EdAvatarSize = 'base';\n @Input({ transform: booleanAttribute }) gradient = false;\n\n @HostBinding('attr.shape')\n get shapeAttr(): EdAvatarShape {\n return this.shape;\n }\n\n @HostBinding('attr.size')\n get sizeAttr(): EdAvatarSize {\n return this.size;\n }\n\n @HostBinding('attr.data-tone')\n get toneAttr(): string {\n return this.tone;\n }\n\n @HostBinding('class.ed-avatar--gradient')\n get gradientClass(): boolean {\n return this.gradient;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nimport { EdButtonComponent } from '../ui/ed-button.component';\n\nimport { VOICE_RECEPTIONIST_CONFIG, VOICE_RECEPTIONIST_SESSION } from '../config';\nimport { AgentOnlineService } from '../services/agent-online.service';\nimport { EdAvatarComponent } from '../ui/ed-avatar.component';\nimport { EdIconButtonComponent } from '../ui/ed-icon-button.component';\nimport { IconComponent } from '../ui/ed-icon.component';\n\nconst PAGE_TITLES: Record<string, string> = {\n dashboard: 'Home',\n live: 'Live Calls',\n history: 'Call History',\n activities: 'Activities',\n tasks: 'Tasks & Follow-ups',\n analytics: 'Analytics',\n audit: 'Audit Logs',\n settings: 'Agent settings',\n knowledge: 'Knowledge Base',\n wizard: 'Setup Wizard',\n patients: 'Patients',\n providers: 'Providers',\n appointments: 'Appointments',\n admin: 'Admin',\n};\n\n@Component({\n selector: 'eds-topbar',\n imports: [IconComponent, EdButtonComponent, EdIconButtonComponent, EdAvatarComponent],\n templateUrl: './eds-topbar.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsTopbarComponent {\n private readonly router = inject(Router);\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\n private readonly sessionAdapter = inject(VOICE_RECEPTIONIST_SESSION);\n private readonly agentOnline = inject(AgentOnlineService);\n\n protected readonly pageTitle = signal('Home');\n protected readonly online = this.agentOnline.online;\n protected readonly loading = this.agentOnline.loading;\n\n protected readonly userEmail = computed(() => this.sessionAdapter?.email() ?? null);\n protected readonly showUser = computed(() => !!this.userEmail());\n /** Standalone only — hide logout when embedded in EHR (`showModuleNav` false). */\n protected readonly showLogout = computed(\n () => !!this.config.showModuleNav && !!this.sessionAdapter,\n );\n\n protected readonly userInitials = computed(() => {\n const email = this.userEmail()?.trim() ?? '';\n if (!email) return '?';\n const local = email.split('@')[0] ?? '';\n const parts = local.split(/[._-]+/).filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase();\n }\n return local.slice(0, 2).toUpperCase() || '?';\n });\n\n protected readonly statusLabel = computed(() => {\n if (this.loading() && this.online() === null) return 'Checking status…';\n if (this.online() === null) return 'Status unknown';\n return this.online()\n ? 'AI receptionist is answering calls'\n : 'AI is offline — calls go to front desk';\n });\n\n constructor() {\n this.agentOnline.refresh();\n this.updateTitle(this.router.url);\n this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e) => this.updateTitle(e.urlAfterRedirects));\n }\n\n protected logout(): void {\n this.sessionAdapter?.logout();\n }\n\n private updateTitle(url: string): void {\n const base = url.split('?')[0].split(';')[0];\n const segments = base.split('/').filter(Boolean);\n const last = segments[segments.length - 1] ?? '';\n const prev = segments[segments.length - 2] ?? '';\n\n if (prev === 'settings' && last === 'outbound-purposes') {\n this.pageTitle.set('Outbound Purposes');\n return;\n }\n if (prev === 'live' && last && last !== 'live') {\n this.pageTitle.set('Live Monitor');\n return;\n }\n if (prev === 'history' && last && last !== 'history') {\n this.pageTitle.set('Call Details');\n return;\n }\n this.pageTitle.set(PAGE_TITLES[last] ?? 'AI Receptionist');\n }\n}\n","<header class=\"sticky top-0 z-10 flex items-center justify-between gap-base border-b border-base bg-white p-sm hidden\">\n <div class=\"flex shrink-0 items-center gap-base\">\n <ed-icon name=\"reorder\" [size]=\"24\" color=\"currentColor\" class=\"text-dark\" aria-hidden=\"true\" />\n <nav class=\"inline-flex items-center gap-2xs fs-base text-light\" aria-label=\"Breadcrumb\">\n <span>AI Receptionist</span>\n <ed-icon name=\"chevron_right\" [size]=\"16\" color=\"currentColor\" />\n <span class=\"font-semibold text-dark\">{{ pageTitle() }}</span>\n </nav>\n </div>\n\n <div class=\"flex items-center gap-xs\">\n <div class=\"flex items-center gap-xs\">\n <ed-button variant=\"primary\" fill size=\"sm\">\n <ed-icon slot=\"prefix\" name=\"add\" [size]=\"16\" />\n Create\n </ed-button>\n\n <div class=\"relative w-72\">\n <input\n type=\"search\"\n class=\"form-input h-9 w-full\"\n placeholder=\"Search Patient...\"\n aria-label=\"Search Patient\"\n autocomplete=\"off\"\n />\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-sm text-light\" aria-hidden=\"true\">\n <ed-icon name=\"search\" [size]=\"20\" color=\"currentColor\" />\n </span>\n </div>\n </div>\n\n <div\n class=\"inline-flex h-9 items-center gap-xs rounded-md border border-dark bg-white px-sm\"\n [title]=\"statusLabel()\"\n >\n <span\n class=\"h-xs w-xs shrink-0 rounded-full\"\n [class.bg-success]=\"online() === true\"\n [class.bg-danger]=\"online() === false\"\n [class.bg-dark]=\"online() === null\"\n aria-hidden=\"true\"\n ></span>\n <span class=\"whitespace-nowrap fs-base font-semibold text-dark\">\n @if (loading() && online() === null) {\n Checking…\n } @else if (online() === true) {\n Agent online\n } @else if (online() === false) {\n Agent offline\n } @else {\n Status unknown\n }\n </span>\n </div>\n\n <button\n type=\"button\"\n class=\"inline-flex h-9 items-center gap-2xs rounded-md border border-dark bg-white px-sm text-light\"\n aria-label=\"Location\"\n >\n <ed-icon name=\"location_on\" [size]=\"20\" color=\"currentColor\" />\n <span class=\"fs-base font-medium text-light\">Venus Healthcare</span>\n <ed-icon name=\"caret_down\" [size]=\"20\" color=\"currentColor\" />\n </button>\n\n <ed-icon-button name=\"notifications\" label=\"Notifications\" size=\"md\" outline />\n <ed-icon-button name=\"help\" label=\"Help\" size=\"md\" outline />\n\n @if (showUser()) {\n <div class=\"inline-flex max-w-52 items-center gap-xs\" [title]=\"userEmail()!\">\n <ed-avatar shape=\"circle\" size=\"md\" tone=\"brand\" [initials]=\"userInitials()\" />\n <span class=\"truncate fs-sm text-light max-[1100px]:hidden\">{{ userEmail() }}</span>\n </div>\n }\n\n @if (showLogout()) {\n <button\n type=\"button\"\n class=\"inline-flex h-9 cursor-pointer items-center gap-xs rounded-md border border-dark bg-white px-sm text-light transition-colors hover:bg-lighter hover:text-dark\"\n (click)=\"logout()\"\n aria-label=\"Sign out\"\n title=\"Sign out\"\n >\n <ed-icon name=\"logout\" [size]=\"18\" color=\"currentColor\" />\n <span class=\"fs-base\">Log out</span>\n </button>\n }\n </div>\n</header>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\nimport { AgentOnlineService } from '../services/agent-online.service';\nimport { ToastContainerComponent } from '../shared/toast-container.component';\nimport { EdsModuleNavComponent } from './eds-module-nav.component';\nimport { EdsRouteProgressComponent } from './eds-route-progress.component';\nimport { EdsTopbarComponent } from './eds-topbar.component';\n\n@Component({\n selector: 'eds-app-shell',\n imports: [\n RouterOutlet,\n EdsModuleNavComponent,\n EdsTopbarComponent,\n ToastContainerComponent,\n EdsRouteProgressComponent,\n ],\n templateUrl: './eds-app-shell.component.html',\n styleUrl: './eds-app-shell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsAppShellComponent {\n /** EHR embed: false (default). Standalone Voice Hub: set showModuleNav: true. */\n protected readonly showModuleNav = !!inject(VOICE_RECEPTIONIST_CONFIG).showModuleNav;\n /**\n * Standalone Voice Hub mounts progress on app-root. EHR embeds that only use\n * this shell still need a nav loader — enable when host nav is hidden.\n */\n protected readonly showRouteProgress = !this.showModuleNav;\n\n constructor() {\n inject(AgentOnlineService).refresh();\n }\n}\n","<div class=\"eds-layout flex h-screen overflow-hidden\">\n @if (showRouteProgress) {\n <eds-route-progress />\n }\n @if (showModuleNav) {\n <eds-module-nav />\n }\n <div class=\"eds-main flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n @if (showModuleNav) {\n <eds-topbar />\n }\n <div class=\"eds-content flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto\">\n <router-outlet />\n </div>\n </div>\n <app-toast-container />\n</div>\n","import { Injectable, inject, signal } from '@angular/core';\nimport { io, Socket } from 'socket.io-client';\n\nimport { createVoiceReceptionistPaths } from '../api-paths';\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\n\ntype SocketHandler = (...args: unknown[]) => void;\n\n/**\n * Single shared Socket.io connection to the `/dashboard` namespace.\n * Used by live calls list + per-call transcript stream.\n */\n@Injectable({ providedIn: 'root' })\nexport class DashboardSocketService {\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\n private readonly paths = createVoiceReceptionistPaths(this.config);\n\n readonly connected = signal(false);\n\n private socket: Socket | null = null;\n private refCount = 0;\n private readonly handlers = new Map<string, Map<SocketHandler, SocketHandler>>();\n private readonly connectCallbacks = new Set<() => void>();\n\n acquire(): void {\n this.refCount++;\n if (this.refCount === 1) {\n this.connect();\n }\n }\n\n release(): void {\n this.refCount = Math.max(0, this.refCount - 1);\n if (this.refCount === 0) {\n this.disconnect();\n }\n }\n\n onConnect(callback: () => void): void {\n this.connectCallbacks.add(callback);\n if (this.connected()) {\n callback();\n }\n }\n\n offConnect(callback: () => void): void {\n this.connectCallbacks.delete(callback);\n }\n\n on<T>(event: string, handler: (payload: T) => void): void {\n const wrapped: SocketHandler = (payload) => handler(payload as T);\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Map());\n }\n this.handlers.get(event)!.set(handler as SocketHandler, wrapped);\n\n if (this.socket) {\n this.socket.on(event, wrapped);\n }\n }\n\n off<T>(event: string, handler: (payload: T) => void): void {\n const eventHandlers = this.handlers.get(event);\n const wrapped = eventHandlers?.get(handler as SocketHandler);\n if (wrapped) {\n this.socket?.off(event, wrapped);\n eventHandlers!.delete(handler as SocketHandler);\n }\n }\n\n emit(event: string, payload?: unknown): void {\n this.socket?.emit(event, payload);\n }\n\n private connect(): void {\n if (this.config.useMockApi) {\n this.connected.set(true);\n this.fireConnectCallbacks();\n return;\n }\n\n this.socket = io(`${this.paths.apiRoot()}/dashboard`, {\n path: '/socket.io',\n transports: ['websocket'],\n autoConnect: false,\n });\n\n this.socket.on('connect', () => {\n this.connected.set(true);\n this.fireConnectCallbacks();\n });\n\n this.socket.on('disconnect', () => {\n this.connected.set(false);\n });\n\n this.socket.io.on('reconnect', () => {\n this.fireConnectCallbacks();\n });\n\n for (const [event, handlerMap] of this.handlers) {\n for (const wrapped of handlerMap.values()) {\n this.socket.on(event, wrapped);\n }\n }\n\n this.socket.connect();\n }\n\n private disconnect(): void {\n if (!this.socket) {\n this.connected.set(false);\n return;\n }\n\n for (const [event, handlerMap] of this.handlers) {\n for (const wrapped of handlerMap.values()) {\n this.socket.off(event, wrapped);\n }\n }\n\n this.socket.removeAllListeners();\n this.socket.disconnect();\n this.socket = null;\n this.connected.set(false);\n }\n\n private fireConnectCallbacks(): void {\n for (const cb of this.connectCallbacks) {\n cb();\n }\n }\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { Subscription, filter, interval } from 'rxjs';\n\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\nimport { LiveCall } from '../models/ai-receptionist.types';\nimport { AiReceptionistApiService } from './ai-receptionist-api.service';\nimport { DashboardSocketService } from './dashboard-socket.service';\n\nconst DEFAULT_POLL_MS = 12_000;\n\n/**\n * Shared live calls list — REST + `live_calls_updated` socket + fallback poll.\n */\n@Injectable({ providedIn: 'root' })\nexport class LiveCallsListService {\n private readonly api = inject(AiReceptionistApiService);\n private readonly socket = inject(DashboardSocketService);\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\n\n readonly calls = signal<LiveCall[]>([]);\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n readonly lastUpdated = signal<number | null>(null);\n\n private subscriberCount = 0;\n private pollSub?: Subscription;\n private refreshSub?: Subscription;\n private refreshId = 0;\n private visibilityHandler?: () => void;\n private mockPollTimer: ReturnType<typeof setInterval> | null = null;\n\n private readonly onLiveCallsUpdated = () => this.refresh(false);\n private readonly onSocketConnect = () => this.refresh(false);\n\n start(): void {\n this.subscriberCount++;\n if (this.subscriberCount > 1) {\n this.refresh(false);\n return;\n }\n\n this.socket.acquire();\n this.socket.on('live_calls_updated', this.onLiveCallsUpdated);\n this.socket.onConnect(this.onSocketConnect);\n this.bindVisibility();\n this.refresh(true);\n this.startFallbackPoll();\n }\n\n stop(): void {\n this.subscriberCount = Math.max(0, this.subscriberCount - 1);\n if (this.subscriberCount > 0) {\n return;\n }\n\n this.refreshId++;\n this.refreshSub?.unsubscribe();\n this.refreshSub = undefined;\n this.stopFallbackPoll();\n this.unbindVisibility();\n this.socket.off('live_calls_updated', this.onLiveCallsUpdated);\n this.socket.offConnect(this.onSocketConnect);\n this.socket.release();\n }\n\n refresh(showLoading = true): void {\n const requestId = ++this.refreshId;\n if (showLoading && this.calls().length === 0) {\n this.loading.set(true);\n }\n\n this.refreshSub?.unsubscribe();\n this.refreshSub = this.api.getLiveCalls().subscribe({\n next: ({ data }) => {\n if (requestId !== this.refreshId) return;\n this.calls.set(data);\n this.lastUpdated.set(Date.now());\n this.loading.set(false);\n this.error.set(null);\n },\n error: (err: unknown) => {\n if (requestId !== this.refreshId) return;\n this.loading.set(false);\n const message =\n err instanceof Error ? err.message : 'Could not load live calls.';\n this.error.set(message);\n },\n });\n }\n\n private startFallbackPoll(): void {\n const pollMs = this.config.liveCallsPollIntervalMs ?? DEFAULT_POLL_MS;\n\n if (this.config.useMockApi) {\n this.mockPollTimer = setInterval(() => {\n if (!document.hidden) {\n this.refresh(false);\n }\n }, pollMs);\n return;\n }\n\n this.pollSub = interval(pollMs)\n .pipe(filter(() => !document.hidden))\n .subscribe(() => this.refresh(false));\n }\n\n private stopFallbackPoll(): void {\n this.pollSub?.unsubscribe();\n this.pollSub = undefined;\n if (this.mockPollTimer) {\n clearInterval(this.mockPollTimer);\n this.mockPollTimer = null;\n }\n }\n\n private bindVisibility(): void {\n this.visibilityHandler = () => {\n if (!document.hidden) {\n this.refresh(false);\n }\n };\n document.addEventListener('visibilitychange', this.visibilityHandler);\n }\n\n private unbindVisibility(): void {\n if (this.visibilityHandler) {\n document.removeEventListener('visibilitychange', this.visibilityHandler);\n this.visibilityHandler = undefined;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\nimport { LiveCallsListService } from '../../services/live-calls-list.service';\n\n/**\n * Owns live-calls polling/socket for both the list and the per-call monitor\n * so navigating list → detail → back does not tear down the shared list.\n */\n@Component({\n selector: 'eds-live-calls-shell',\n imports: [RouterOutlet],\n template: '<router-outlet />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: contents;\n }\n `,\n})\nexport class LiveCallsShellComponent implements OnInit, OnDestroy {\n private readonly liveCallsList = inject(LiveCallsListService);\n\n ngOnInit(): void {\n this.liveCallsList.start();\n }\n\n ngOnDestroy(): void {\n this.liveCallsList.stop();\n }\n}\n","import { Routes } from '@angular/router';\n\nimport { EdsAppShellComponent } from './layout/eds-app-shell.component';\nimport { LiveCallsShellComponent } from './pages/live-calls-page/live-calls-shell.component';\n\n/** Feature child routes (under the embed shell). */\nexport const VOICE_RECEPTIONIST_FEATURE_ROUTES: Routes = [\n { path: '', pathMatch: 'full', redirectTo: 'dashboard' },\n {\n path: 'dashboard',\n loadComponent: () =>\n import('./pages/dashboard-page/dashboard-page.component').then(\n (m) => m.DashboardPageComponent,\n ),\n },\n {\n path: 'live',\n component: LiveCallsShellComponent,\n children: [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./pages/live-calls-page/live-calls-page.component').then(\n (m) => m.LiveCallsPageComponent,\n ),\n },\n {\n path: ':id',\n loadComponent: () =>\n import('./pages/live-monitor-page/live-monitor-page.component').then(\n (m) => m.LiveMonitorPageComponent,\n ),\n },\n ],\n },\n {\n path: 'history',\n loadComponent: () =>\n import('./pages/call-history-page/call-history-page.component').then(\n (m) => m.CallHistoryPageComponent,\n ),\n },\n {\n path: 'history/:id',\n loadComponent: () =>\n import('./pages/call-history-detail-page/call-history-detail-page.component').then(\n (m) => m.CallHistoryDetailPageComponent,\n ),\n },\n {\n path: 'activities',\n loadComponent: () =>\n import('./pages/activities-page/activities-page.component').then(\n (m) => m.ActivitiesPageComponent,\n ),\n },\n {\n path: 'tasks',\n loadComponent: () =>\n import('./pages/tasks-page/tasks-page.component').then((m) => m.TasksPageComponent),\n },\n {\n path: 'analytics',\n loadComponent: () =>\n import('./pages/analytics-page/analytics-page.component').then(\n (m) => m.AnalyticsPageComponent,\n ),\n },\n {\n path: 'audit',\n loadComponent: () =>\n import('./pages/audit-page/audit-page.component').then(\n (m) => m.AuditPageComponent,\n ),\n },\n {\n path: 'settings',\n loadComponent: () =>\n import('./pages/settings-page/settings-page.component').then(\n (m) => m.SettingsPageComponent,\n ),\n },\n {\n path: 'settings/outbound-purposes',\n loadComponent: () =>\n import('./pages/outbound-purposes-page/outbound-purposes-page.component').then(\n (m) => m.OutboundPurposesPageComponent,\n ),\n },\n {\n path: 'knowledge',\n loadComponent: () =>\n import('./pages/settings-page/settings-page.component').then(\n (m) => m.SettingsPageComponent,\n ),\n data: { settingsTab: 'knowledge' },\n },\n {\n path: 'wizard',\n loadComponent: () =>\n import('./pages/wizard-page/wizard-page.component').then((m) => m.WizardPageComponent),\n },\n];\n\n/**\n * Lazy-loadable routes for EHR (and standalone hosts).\n * Mount under a host path, e.g. `{ path: 'ai-receptionist', children: VOICE_RECEPTIONIST_ROUTES }`.\n */\nexport const VOICE_RECEPTIONIST_ROUTES: Routes = [\n {\n path: '',\n component: EdsAppShellComponent,\n children: VOICE_RECEPTIONIST_FEATURE_ROUTES,\n },\n];\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/** Maps to `ed-badge-2` variant attribute values in `_badge.scss`. */\nexport type BadgeTone =\n | 'primary'\n | 'success'\n | 'warning'\n | 'warning2'\n | 'danger'\n | 'opened'\n | 'light'\n | 'info'\n | 'dark'\n | 'muted';\n\n@Component({\n selector: 'eds-badge',\n standalone: true,\n template: `<span class=\"eds-badge inline-flex items-center gap-2 py-1 px-2\" [attr.data-tone]=\"tone()\"><ng-content /></span>`,\n styleUrl: './eds-badge.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsBadgeComponent {\n readonly tone = input<BadgeTone>('light');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'positive';\n\n@Component({\n selector: 'eds-button',\n standalone: true,\n template: `\n <button [type]=\"type()\" [disabled]=\"disabled()\" [attr.data-variant]=\"variant()\" class=\"eds-btn inline-flex items-center justify-center gap-2 py-2 px-4\">\n <ng-content />\n </button>\n `,\n styleUrl: './eds-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EdsButtonComponent {\n readonly variant = input<ButtonVariant>('secondary');\n readonly type = input<'button' | 'submit'>('button');\n readonly disabled = input(false);\n}\n","/*\n * Public API Surface of @edvak99/voice-receptionist-widget\n *\n * Only export host-facing symbols here. Internal pages/services stay private\n * and are reached via VOICE_RECEPTIONIST_ROUTES / FEATURE_ROUTES.\n */\n\n// Config & DI\nexport {\n VOICE_RECEPTIONIST_CONFIG,\n VOICE_RECEPTIONIST_SESSION,\n type VoiceReceptionistConfig,\n type VoiceReceptionistSession,\n} from './lib/config';\nexport {\n provideVoiceReceptionist,\n type ProvideVoiceReceptionistOptions,\n} from './lib/provide-voice-receptionist';\n\n// Routes (lazy or eager mount in host router)\nexport {\n VOICE_RECEPTIONIST_ROUTES,\n VOICE_RECEPTIONIST_FEATURE_ROUTES,\n} from './lib/routes';\n\n// Shell layout (standalone host / Voice Hub)\nexport { EdsAppShellComponent } from './lib/layout/eds-app-shell.component';\nexport { EdsRouteProgressComponent } from './lib/layout/eds-route-progress.component';\n\n// Shared UI / services hosts may reuse outside routed pages\nexport { ToastService, type ToastMessage } from './lib/shared/toast.service';\nexport { ToastContainerComponent } from './lib/shared/toast-container.component';\nexport { EdsBadgeComponent, type BadgeTone } from './lib/ui/eds-badge.component';\nexport { EdsButtonComponent } from './lib/ui/eds-button.component';\nexport { IconComponent as EdIconComponent, IconComponent } from './lib/ui/ed-icon.component';\nexport { EdAvatarComponent, type EdAvatarTone, type EdAvatarShape, type EdAvatarSize } from './lib/ui/ed-avatar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["strOrNull","now","filter"],"mappings":"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"}
|