@edvak99/voice-receptionist-widget 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +3 -0
  2. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-DT9UKvQO.mjs +307 -0
  3. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-DT9UKvQO.mjs.map +1 -0
  4. package/fesm2022/{edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CMhknpGf.mjs → edvak99-voice-receptionist-widget-ai-receptionist-api.service-48cifVPF.mjs} +1351 -579
  5. package/fesm2022/edvak99-voice-receptionist-widget-ai-receptionist-api.service-48cifVPF.mjs.map +1 -0
  6. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-C5inEHJw.mjs +278 -0
  7. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-C5inEHJw.mjs.map +1 -0
  8. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-sYhM20CE.mjs +418 -0
  9. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-sYhM20CE.mjs.map +1 -0
  10. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-DpwajEOE.mjs +194 -0
  11. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-DpwajEOE.mjs.map +1 -0
  12. package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-AN6GcSDq.mjs → edvak99-voice-receptionist-widget-call-recording-player.component-CgkRcFOl.mjs} +5 -4
  13. package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-AN6GcSDq.mjs.map → edvak99-voice-receptionist-widget-call-recording-player.component-CgkRcFOl.mjs.map} +1 -1
  14. package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cy_Bf7AO.mjs → edvak99-voice-receptionist-widget-call-review.service-CIMcjGKX.mjs} +2 -2
  15. package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-Cy_Bf7AO.mjs.map → edvak99-voice-receptionist-widget-call-review.service-CIMcjGKX.mjs.map} +1 -1
  16. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs +21 -0
  17. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs.map +1 -0
  18. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CxbO0eDS.mjs +440 -0
  19. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CxbO0eDS.mjs.map +1 -0
  20. package/fesm2022/{edvak99-voice-receptionist-widget-eds-elapsed.pipe-ouRlPpwT.mjs → edvak99-voice-receptionist-widget-dashboard-socket.service-BX91r74O.mjs} +5 -21
  21. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-socket.service-BX91r74O.mjs.map +1 -0
  22. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-CWRiJGfv.mjs +38 -0
  23. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-CWRiJGfv.mjs.map +1 -0
  24. package/fesm2022/edvak99-voice-receptionist-widget-eds-button.component-Bg5T5BN8.mjs +27 -0
  25. package/fesm2022/edvak99-voice-receptionist-widget-eds-button.component-Bg5T5BN8.mjs.map +1 -0
  26. package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BFCiJOT3.mjs +22 -0
  27. package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-BFCiJOT3.mjs.map +1 -0
  28. package/fesm2022/{edvak99-voice-receptionist-widget-live-calls-list.service-CDtFRW8w.mjs → edvak99-voice-receptionist-widget-eds-pulse-dot.component-BPY6xN7C.mjs} +15 -5
  29. package/fesm2022/edvak99-voice-receptionist-widget-eds-pulse-dot.component-BPY6xN7C.mjs.map +1 -0
  30. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-BsBQIS_f.mjs +203 -0
  31. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-BsBQIS_f.mjs.map +1 -0
  32. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-CaSDMxpV.mjs +81 -0
  33. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-CaSDMxpV.mjs.map +1 -0
  34. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-Cy3ND-c-.mjs +1070 -0
  35. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-Cy3ND-c-.mjs.map +1 -0
  36. package/fesm2022/edvak99-voice-receptionist-widget-modal.component-COfi7biN.mjs +48 -0
  37. package/fesm2022/edvak99-voice-receptionist-widget-modal.component-COfi7biN.mjs.map +1 -0
  38. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs +127 -0
  39. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs.map +1 -0
  40. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-fHVzpiVk.mjs +268 -0
  41. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-fHVzpiVk.mjs.map +1 -0
  42. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-Bok64X2q.mjs +968 -0
  43. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-Bok64X2q.mjs.map +1 -0
  44. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-Bb9lPcYi.mjs +317 -0
  45. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-Bb9lPcYi.mjs.map +1 -0
  46. package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CJLa5pia.mjs → edvak99-voice-receptionist-widget-wizard-page.component-BZVlWLWh.mjs} +6 -4
  47. package/fesm2022/{edvak99-voice-receptionist-widget-wizard-page.component-CJLa5pia.mjs.map → edvak99-voice-receptionist-widget-wizard-page.component-BZVlWLWh.mjs.map} +1 -1
  48. package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
  49. package/lib/components/call-conversation-panel/call-conversation-panel.component.d.ts +9 -6
  50. package/lib/components/call-tasks-panel/call-tasks-panel.component.d.ts +8 -8
  51. package/lib/components/knowledge-test-modal/knowledge-test-modal.component.d.ts +28 -0
  52. package/lib/components/live-transcript-panel/live-transcript-panel.component.d.ts +7 -4
  53. package/lib/components/outbound-dial-modal/outbound-dial-modal.component.d.ts +26 -0
  54. package/lib/layout/eds-module-nav.component.d.ts +0 -3
  55. package/lib/mocks/agent-activity.seed.d.ts +2 -0
  56. package/lib/models/agent-activity.types.d.ts +54 -0
  57. package/lib/models/ai-receptionist.types.d.ts +26 -0
  58. package/lib/models/api-dto.types.d.ts +18 -0
  59. package/lib/models/live-transcript.types.d.ts +2 -1
  60. package/lib/models/outbound-patient.types.d.ts +23 -0
  61. package/lib/models/outbound-purpose.types.d.ts +2 -0
  62. package/lib/models/pagination.d.ts +11 -0
  63. package/lib/models/staff-media.types.d.ts +36 -0
  64. package/lib/pages/activities-page/activities-page.component.d.ts +57 -0
  65. package/lib/pages/analytics-page/analytics-page.component.d.ts +38 -14
  66. package/lib/pages/call-history-detail-page/call-history-detail-page.component.d.ts +2 -3
  67. package/lib/pages/call-history-page/call-history-page.component.d.ts +16 -9
  68. package/lib/pages/dashboard-page/dashboard-page.component.d.ts +12 -8
  69. package/lib/pages/live-calls-page/live-calls-page.component.d.ts +14 -24
  70. package/lib/pages/live-monitor-page/live-monitor-page.component.d.ts +34 -1
  71. package/lib/pages/settings-page/settings-fields.config.d.ts +16 -0
  72. package/lib/pages/settings-page/settings-page.component.d.ts +48 -14
  73. package/lib/pages/tasks-page/tasks-page.component.d.ts +6 -0
  74. package/lib/services/ai-receptionist-api.mock.d.ts +44 -9
  75. package/lib/services/ai-receptionist-api.service.d.ts +65 -10
  76. package/lib/services/live-transcript.service.d.ts +1 -0
  77. package/lib/services/staff-media.service.d.ts +52 -0
  78. package/lib/ui/eds-avatar.component.d.ts +5 -2
  79. package/lib/ui/eds-button.component.d.ts +1 -1
  80. package/lib/utils/call-history-display.util.d.ts +21 -0
  81. package/lib/utils/outbound-purpose.util.d.ts +19 -0
  82. package/lib/utils/transcript-timing.util.d.ts +1 -1
  83. package/lib/utils/welcome-message.util.d.ts +1 -1
  84. package/package.json +2 -1
  85. package/styles/_index.scss +5 -40
  86. package/styles/chat-ui.scss +18 -18
  87. package/styles/eds.scss +188 -119
  88. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CW5OKmik.mjs +0 -113
  89. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CW5OKmik.mjs.map +0 -1
  90. package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DL1GfQyF.mjs +0 -35
  91. package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-DL1GfQyF.mjs.map +0 -1
  92. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-CTwfUHUf.mjs +0 -316
  93. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-CTwfUHUf.mjs.map +0 -1
  94. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cj4wxd4e.mjs +0 -138
  95. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cj4wxd4e.mjs.map +0 -1
  96. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs +0 -70
  97. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-DQLIw7xb.mjs.map +0 -1
  98. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-DzdIt2A7.mjs +0 -248
  99. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-DzdIt2A7.mjs.map +0 -1
  100. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs +0 -27
  101. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-PCnIWeOA.mjs.map +0 -1
  102. package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-ouRlPpwT.mjs.map +0 -1
  103. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CMhknpGf.mjs.map +0 -1
  104. package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-cZqBuull.mjs +0 -575
  105. package/fesm2022/edvak99-voice-receptionist-widget-knowledge-hub.page-cZqBuull.mjs.map +0 -1
  106. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-list.service-CDtFRW8w.mjs.map +0 -1
  107. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DrYzXJQW.mjs +0 -115
  108. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-DrYzXJQW.mjs.map +0 -1
  109. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-D7dlk0y2.mjs +0 -574
  110. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-D7dlk0y2.mjs.map +0 -1
  111. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs +0 -54
  112. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-BQECIuJu.mjs.map +0 -1
  113. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CJ8NEjcj.mjs +0 -265
  114. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-CJ8NEjcj.mjs.map +0 -1
  115. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-Bo3XNK3b.mjs +0 -509
  116. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-Bo3XNK3b.mjs.map +0 -1
  117. package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs +0 -52
  118. package/fesm2022/edvak99-voice-receptionist-widget-task.util-DdtI0CR3.mjs.map +0 -1
  119. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-CBwl15NP.mjs +0 -237
  120. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-CBwl15NP.mjs.map +0 -1
  121. package/lib/knowledge/components/faq-empty-state/faq-empty-state.component.d.ts +0 -22
  122. package/lib/knowledge/components/faq-form/faq-form.component.d.ts +0 -27
  123. package/lib/knowledge/components/faq-search-tester/faq-search-tester.component.d.ts +0 -17
  124. package/lib/knowledge/mocks/practice-faq.seed.d.ts +0 -2
  125. package/lib/knowledge/models/practice-faq.model.d.ts +0 -47
  126. package/lib/knowledge/pages/knowledge-hub.page.d.ts +0 -47
  127. package/lib/knowledge/services/practice-faq-api.mock.d.ts +0 -16
  128. package/lib/knowledge/services/practice-faq-api.service.d.ts +0 -22
  129. package/lib/knowledge/utils/faq.util.d.ts +0 -3
  130. package/lib/layout/eds-topbar.component.d.ts +0 -29
  131. package/lib/pages/audit-page/audit-page.component.d.ts +0 -14
  132. package/lib/ui/eds-waveform.component.d.ts +0 -8
@@ -0,0 +1,52 @@
1
+ import { StaffMediaJoinResult, StaffMediaMode } from '../models/staff-media.types';
2
+ import * as i0 from "@angular/core";
3
+ export type StaffMediaConnectionState = 'idle' | 'connecting' | 'connected' | 'disconnecting' | 'error';
4
+ /**
5
+ * Browser softphone for staff Listen / Take Over via LiveKit.
6
+ * Secrets stay on the server — FE only uses short-lived clientToken + livekitUrl.
7
+ *
8
+ * Root-provided on purpose: the session must survive navigating away from the
9
+ * Live Monitor page, otherwise switching dashboard tabs would drop the call.
10
+ */
11
+ export declare class StaffMediaService {
12
+ readonly connectionState: import("@angular/core").WritableSignal<StaffMediaConnectionState>;
13
+ readonly mode: import("@angular/core").WritableSignal<StaffMediaMode | null>;
14
+ readonly micEnabled: import("@angular/core").WritableSignal<boolean>;
15
+ readonly error: import("@angular/core").WritableSignal<string | null>;
16
+ readonly activeCallId: import("@angular/core").WritableSignal<string | null>;
17
+ /** False when the browser blocks autoplay — UI should offer an "enable sound" action. */
18
+ readonly audioPlaybackAllowed: import("@angular/core").WritableSignal<boolean>;
19
+ /** True once remote caller audio is actually attached and playing. */
20
+ readonly remoteAudioAttached: import("@angular/core").WritableSignal<boolean>;
21
+ private room;
22
+ private audioContainer;
23
+ private readonly attached;
24
+ get isConnected(): boolean;
25
+ /** True when a softphone session is live for this call, regardless of page. */
26
+ isConnectedTo(callId: string): boolean;
27
+ /**
28
+ * getUserMedia only exists in a secure context (https or localhost) and, inside an
29
+ * iframe, requires allow="microphone". Returns null when capture is possible.
30
+ */
31
+ microphoneBlockedReason(): string | null;
32
+ join(join: StaffMediaJoinResult): Promise<void>;
33
+ setMicrophoneEnabled(enabled: boolean): Promise<void>;
34
+ toggleMicrophone(): Promise<void>;
35
+ /** Retry blocked autoplay — must be called from a user gesture. */
36
+ startAudioPlayback(): Promise<void>;
37
+ disconnect(): Promise<void>;
38
+ private readonly onTrackSubscribed;
39
+ private readonly onTrackUnsubscribed;
40
+ private readonly onParticipantDisconnected;
41
+ /** Staff tracks are dropped server-side as soon as they appear. */
42
+ private readonly onTrackPublished;
43
+ private attachExistingRemoteTracks;
44
+ private isStaff;
45
+ private detachKey;
46
+ private ensureAudioContainer;
47
+ private enableMicrophone;
48
+ private friendlyError;
49
+ private cleanupLocal;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<StaffMediaService, never>;
51
+ static ɵprov: i0.ɵɵInjectableDeclaration<StaffMediaService>;
52
+ }
@@ -1,8 +1,11 @@
1
1
  import * as i0 from "@angular/core";
2
+ export type EdsAvatarTone = 'gray' | 'brand' | 'green' | 'amber' | 'violet' | 'rose';
3
+ export type EdsAvatarShape = 'circle' | 'box';
2
4
  export declare class EdsAvatarComponent {
3
5
  readonly initials: import("@angular/core").InputSignal<string>;
4
- readonly tone: import("@angular/core").InputSignal<"brand" | "gray">;
6
+ readonly tone: import("@angular/core").InputSignal<string>;
7
+ readonly shape: import("@angular/core").InputSignal<EdsAvatarShape>;
5
8
  readonly gradient: import("@angular/core").InputSignal<boolean>;
6
9
  static ɵfac: i0.ɵɵFactoryDeclaration<EdsAvatarComponent, never>;
7
- static ɵcmp: i0.ɵɵComponentDeclaration<EdsAvatarComponent, "eds-avatar", never, { "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "gradient": { "alias": "gradient"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<EdsAvatarComponent, "eds-avatar", never, { "initials": { "alias": "initials"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "gradient": { "alias": "gradient"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
8
11
  }
@@ -2,7 +2,7 @@ import * as i0 from "@angular/core";
2
2
  export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'positive';
3
3
  export declare class EdsButtonComponent {
4
4
  readonly variant: import("@angular/core").InputSignal<ButtonVariant>;
5
- readonly type: import("@angular/core").InputSignal<"button" | "submit">;
5
+ readonly type: import("@angular/core").InputSignal<"submit" | "button">;
6
6
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<EdsButtonComponent, never>;
8
8
  static ɵcmp: i0.ɵɵComponentDeclaration<EdsButtonComponent, "eds-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -0,0 +1,21 @@
1
+ /** Call history table helpers — resolution badges + result chips. */
2
+ export type HistoryResolution = 'resolved' | 'needs_attention';
3
+ export declare function historyResolution(input: {
4
+ outcome?: string;
5
+ risk?: 'urgent' | 'review' | null;
6
+ }): HistoryResolution;
7
+ export declare function historyResolutionLabel(resolution: HistoryResolution): string;
8
+ export declare function resultChipIcon(label: string): string;
9
+ export declare function callerMetaLine(input: {
10
+ dob?: string | null;
11
+ age?: number | null;
12
+ gender?: string | null;
13
+ phone?: string | null;
14
+ name?: string | null;
15
+ matched?: boolean;
16
+ }): string;
17
+ /** Age in whole years from YYYY-MM-DD (or partial ISO). */
18
+ export declare function ageFromDob(dob: string | null | undefined, at?: Date): number | null;
19
+ export declare function isUnknownCaller(name: string | null | undefined, matched?: boolean): boolean;
20
+ /** Derive result chips from explicit actions, else from outcome text. */
21
+ export declare function historyResultChips(results: string[] | undefined, outcome: string): string[];
@@ -3,12 +3,31 @@ export declare const REQUIRED_FIELD_OPTIONS: {
3
3
  value: OutboundRequiredField;
4
4
  label: string;
5
5
  }[];
6
+ /** Live dialer values used to fill opening-template tokens. */
7
+ export interface OpeningPreviewValues {
8
+ patientName?: string;
9
+ appointmentDate?: string;
10
+ appointmentTime?: string;
11
+ providerName?: string;
12
+ practiceName?: string;
13
+ locationName?: string;
14
+ visitType?: string;
15
+ customScript?: string;
16
+ }
6
17
  export declare function requiredFieldLabel(field: OutboundRequiredField): string;
7
18
  export declare function formatRequiredFields(fields: OutboundRequiredField[]): string;
8
19
  /** Substitute placeholder tokens with sample values. */
9
20
  export declare function substitutePlaceholders(text: string, placeholders: OutboundPurposePlaceholder[]): string;
10
21
  /** Live preview: sampleOpening if set, else openingTemplate with substitutions. */
11
22
  export declare function renderOpeningPreview(sampleOpening: string, openingTemplate: string, placeholders: OutboundPurposePlaceholder[]): string;
23
+ /**
24
+ * Dialer preview: prefer openingTemplate and fill with live patient/appointment values.
25
+ * Unfilled tokens show as [Label] so staff see what is still missing.
26
+ */
27
+ export declare function renderLiveOpeningPreview(purpose: Pick<OutboundPurpose, 'openingTemplate' | 'sampleOpening' | 'placeholders'>, live: OpeningPreviewValues): string;
28
+ /** Human-friendly date/time for opening lines (from ISO or form fields). */
29
+ export declare function formatOpeningDate(isoOrYmd: string | null | undefined): string;
30
+ export declare function formatOpeningTime(isoOrHm: string | null | undefined, fallbackIso?: string | null): string;
12
31
  export declare function purposeShowsCustomScript(purpose: OutboundPurpose): boolean;
13
32
  export declare function isCustomScriptRequired(purpose: OutboundPurpose): boolean;
14
33
  export declare function isPurposeFormValid(purpose: OutboundPurpose | null, values: Record<string, string>): boolean;
@@ -14,4 +14,4 @@ export declare function buildTimedTranscript(lines: TranscriptLine[], durationSe
14
14
  export declare function activeTranscriptIndex(lines: TimedTranscriptLine[], currentSec: number): number;
15
15
  export declare function formatPlaybackTime(seconds: number): string;
16
16
  export declare function toolStateClass(state: ToolEvent['state']): string;
17
- export declare function transcriptRoleLabel(who: TranscriptLine['who']): string;
17
+ export declare function transcriptRoleLabel(who: TranscriptLine['who'], callerName?: string | null, callerMatched?: boolean): string;
@@ -1,5 +1,5 @@
1
1
  import { AgentSettings } from '../models/ai-receptionist.types';
2
- export declare const WELCOME_MESSAGE_MAX = 500;
2
+ export declare const WELCOME_MESSAGE_MAX = 1000;
3
3
  export declare function buildAutoWelcomeTemplate(practiceName: string, agentName: string): string;
4
4
  export declare function resolveWelcomePreview(welcomeMessage: string | undefined, practiceName: string, agentName: string): string;
5
5
  export declare function computeEffectiveWelcomeMessage(settings: Pick<AgentSettings, 'general'>): string;
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@edvak99/voice-receptionist-widget",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Edvak AI Receptionist — embeddable Angular routes and UI for EHR hosts",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^19.2.0",
7
7
  "@angular/core": "^19.2.0",
8
8
  "@angular/forms": "^19.2.0",
9
9
  "@angular/router": "^19.2.0",
10
+ "livekit-client": "^2.15.0",
10
11
  "rxjs": "^7.8.0",
11
12
  "socket.io-client": "^4.8.0"
12
13
  },
@@ -1,47 +1,12 @@
1
- /* @edvak99/voice-receptionist-widget styles — import in host global styles */
1
+ /* @edvak99/voice-receptionist-widget styles — import in host global styles.
2
+ *
3
+ * Tokens live on eds-app-shell / .voice-receptionist-host only (see eds.scss).
4
+ * This entry must NOT set unprefixed --color-primary (etc.) on :root.
5
+ */
2
6
 
3
7
  @use './eds';
4
8
  @use './chat-ui';
5
9
 
6
- :root {
7
- --color-primary: #3681f4;
8
- --color-primary-hover: #2f6de0;
9
- --color-primary-light: #eaf2ff;
10
- --color-accent: #5aa2ff;
11
- --color-accent-light: #d6e8ff;
12
- --color-bg: #f7faff;
13
- --color-surface: #ffffff;
14
- --color-surface-alt: #f8fafc;
15
- --color-sidebar-bg: #0f172a;
16
- --color-chat-ai: #f1f5f9;
17
- --color-text: #0f172a;
18
- --color-text-muted: #64748b;
19
- --color-text-soft: #94a3b8;
20
- --color-border: #e2e8f0;
21
- --color-border-strong: #cbd5e1;
22
- --color-success: #22c55e;
23
- --color-success-soft: #ecfdf3;
24
- --color-warning: #f59e0b;
25
- --color-warning-soft: #fffbeb;
26
- --color-danger: #ef4444;
27
- --color-danger-soft: #fef2f2;
28
- --color-info: #3b82f6;
29
- --color-info-soft: #eff6ff;
30
- --color-primary-soft: var(--color-primary-light);
31
- --shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.05);
32
- --shadow-md: 0 6px 16px rgba(0, 0, 0, 0.08);
33
- --shadow-card: var(--shadow-sm);
34
- --shadow-modal: var(--shadow-md);
35
- --radius-sm: 8px;
36
- --radius-md: 10px;
37
- --radius-lg: 12px;
38
- --radius-xl: 16px;
39
- --sidebar-width: 240px;
40
- --space-sm: 16px;
41
- --space-md: 24px;
42
- --space-lg: 32px;
43
- }
44
-
45
10
  .visually-hidden {
46
11
  position: absolute;
47
12
  width: 1px;
@@ -5,9 +5,9 @@
5
5
  flex-direction: column;
6
6
  gap: 12px;
7
7
  padding: 16px;
8
- background: var(--color-bg);
9
- border: 1px solid var(--color-border);
10
- border-radius: var(--radius-lg);
8
+ background: var(--eds-color-bg);
9
+ border: 1px solid var(--eds-color-border);
10
+ border-radius: var(--eds-radius-lg);
11
11
  scroll-behavior: smooth;
12
12
  }
13
13
 
@@ -36,31 +36,31 @@
36
36
  gap: 4px;
37
37
  max-width: min(78%, 520px);
38
38
  padding: 10px 14px;
39
- border-radius: var(--radius-lg);
39
+ border-radius: var(--eds-radius-lg);
40
40
  transition: background 150ms ease, box-shadow 150ms ease;
41
41
  }
42
42
 
43
43
  .chat-bubble--agent,
44
44
  .chat-bubble--ai {
45
- background: var(--color-chat-ai);
46
- border: 1px solid var(--color-border);
47
- border-bottom-left-radius: var(--radius-sm);
48
- box-shadow: var(--shadow-sm);
45
+ background: var(--eds-color-chat-ai);
46
+ border: 1px solid var(--eds-color-border);
47
+ border-bottom-left-radius: var(--eds-radius-sm);
48
+ box-shadow: var(--eds-shadow-sm);
49
49
 
50
50
  .chat-label {
51
- color: var(--color-accent);
51
+ color: var(--eds-color-accent);
52
52
  }
53
53
 
54
54
  .chat-content {
55
- color: var(--color-text);
55
+ color: var(--eds-color-text);
56
56
  }
57
57
  }
58
58
 
59
59
  .chat-bubble--caller,
60
60
  .chat-bubble--user {
61
- background: var(--color-primary);
61
+ background: var(--eds-color-primary);
62
62
  color: #fff;
63
- border-bottom-right-radius: var(--radius-sm);
63
+ border-bottom-right-radius: var(--eds-radius-sm);
64
64
  box-shadow: 0 4px 12px rgba(54, 129, 244, 0.22);
65
65
 
66
66
  .chat-label {
@@ -80,21 +80,21 @@
80
80
  .chat-bubble--tool {
81
81
  max-width: min(92%, 640px);
82
82
  padding: 8px 14px;
83
- background: var(--color-primary-light);
84
- border: 1px dashed var(--color-accent-light);
85
- border-radius: var(--radius-md);
83
+ background: var(--eds-color-primary-light);
84
+ border: 1px dashed var(--eds-color-accent-light);
85
+ border-radius: var(--eds-radius-md);
86
86
  text-align: center;
87
87
 
88
88
  .chat-label {
89
89
  justify-content: center;
90
- color: var(--color-text-muted);
90
+ color: var(--eds-color-text-muted);
91
91
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
92
92
  font-size: 11.5px;
93
93
  }
94
94
 
95
95
  .chat-content {
96
96
  font-size: 12.5px;
97
- color: var(--color-text-muted);
97
+ color: var(--eds-color-text-muted);
98
98
  text-align: left;
99
99
  }
100
100
  }
@@ -128,6 +128,6 @@
128
128
 
129
129
  .chat-time {
130
130
  font-size: 10.5px;
131
- color: var(--color-text-soft);
131
+ color: var(--eds-color-text-soft);
132
132
  margin-top: 2px;
133
133
  }