@edvak99/voice-receptionist-widget 1.1.26 → 1.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -166
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-W_1bE_i2.mjs +537 -0
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-W_1bE_i2.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-BYnys-zI.mjs +462 -0
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-BYnys-zI.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-CT-iaUNh.mjs +107 -0
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-CT-iaUNh.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-DtCUvToS.mjs +348 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-DtCUvToS.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cp-Woc1p.mjs +265 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-Cp-Woc1p.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-Dy_81fZi.mjs +109 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-Dy_81fZi.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-DhLqgadd.mjs → edvak99-voice-receptionist-widget-call-review.service-D2-DDL-t.mjs} +2 -2
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.service-D2-DDL-t.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-rWIPxDtQ.mjs.map +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-Cwunrodb.mjs +310 -0
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-Cwunrodb.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-eds-elapsed.pipe-Dra7e7xN.mjs.map +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-eds-pulse-dot.component-B8yxY-7p.mjs.map +1 -1
- package/fesm2022/{edvak99-voice-receptionist-widget-eds-search-field.component-BDGCmkoP.mjs → edvak99-voice-receptionist-widget-eds-search-field.component-Bm4ay5d_.mjs} +36 -29
- package/fesm2022/edvak99-voice-receptionist-widget-eds-search-field.component-Bm4ay5d_.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CabSa0_n.mjs → edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DOYlRven.mjs} +68 -68
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DOYlRven.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-tJU0GeMR.mjs +437 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-tJU0GeMR.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-CsZ2GN-b.mjs +1130 -0
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-CsZ2GN-b.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs.map +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-xTutBkx7.mjs +273 -0
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-xTutBkx7.mjs.map +1 -0
- package/fesm2022/{edvak99-voice-receptionist-widget-smart-tooltip.directive-ChEdIem3.mjs → edvak99-voice-receptionist-widget-smart-tooltip.directive-BSyOMZd4.mjs} +50 -50
- package/fesm2022/edvak99-voice-receptionist-widget-smart-tooltip.directive-BSyOMZd4.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-table-skeleton.constants-C1Dg9Z_2.mjs.map +1 -1
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-fU9dsmkA.mjs +208 -0
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-fU9dsmkA.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-COk5Tyy3.mjs +154 -0
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-COk5Tyy3.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-transcript-timing.util-Bbt6JFKa.mjs +107 -0
- package/fesm2022/edvak99-voice-receptionist-widget-transcript-timing.util-Bbt6JFKa.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-DhRrm_1S.mjs +47 -0
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-DhRrm_1S.mjs.map +1 -0
- package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
- package/lib/components/call-conversation-panel/call-conversation-panel.component.d.ts +2 -1
- package/lib/components/call-recording-player/call-recording-player.component.d.ts +2 -1
- package/lib/models/live-transcript.types.d.ts +4 -0
- package/lib/pages/activities-page/activities-page.component.d.ts +1 -0
- package/lib/pages/analytics-page/analytics-page.component.d.ts +5 -1
- package/lib/pages/audit-page/audit-page.component.d.ts +5 -4
- package/lib/pages/call-history-detail-page/call-history-detail-page.component.d.ts +3 -1
- package/lib/pages/call-history-page/call-history-page.component.d.ts +5 -2
- package/lib/ui/eds-search-field.component.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/CkBuilder/LICENSE.md +49 -49
- package/src/assets/CkBuilder/README.md +68 -68
- package/src/assets/CkBuilder/build/ckeditor.js +5 -5
- package/src/assets/CkBuilder/webpack.config.js +97 -97
- package/src/assets/Mike/index.js +2 -2
- package/src/assets/annyang.js +724 -724
- package/src/assets/client.js +186 -186
- package/src/assets/css/Ed_style.scss +832 -832
- package/src/assets/css/_alerts.scss +65 -65
- package/src/assets/css/_animation.scss +87 -87
- package/src/assets/css/_api-log-chips.scss +30 -30
- package/src/assets/css/_avatar.scss +316 -316
- package/src/assets/css/_badge.scss +126 -126
- package/src/assets/css/_buttons.scss +110 -110
- package/src/assets/css/_checkbox_radio.scss +173 -173
- package/src/assets/css/_colors.scss +313 -313
- package/src/assets/css/_customfile_upload.scss +17 -17
- package/src/assets/css/_date_picker.scss +118 -118
- package/src/assets/css/_focus.scss +56 -56
- package/src/assets/css/_headings.scss +87 -87
- package/src/assets/css/_input.scss +152 -152
- package/src/assets/css/_list.scss +82 -82
- package/src/assets/css/_main-layout.scss +122 -122
- package/src/assets/css/_material_symbols.scss +31 -31
- package/src/assets/css/_ng-select.scss +123 -123
- package/src/assets/css/_resize-handler.directive.scss +45 -45
- package/src/assets/css/_root.scss +258 -258
- package/src/assets/css/_select.scss +71 -71
- package/src/assets/css/_smart-scroll.scss +93 -93
- package/src/assets/css/_smooth-scrollbar.scss +195 -195
- package/src/assets/css/_tables.scss +814 -814
- package/src/assets/css/_tabs.scss +22 -22
- package/src/assets/css/_tag.scss +17 -17
- package/src/assets/css/_zindex.scss +2 -2
- package/src/assets/css/animations.css +16 -16
- package/src/assets/css/custom-elements.scss +741 -741
- package/src/assets/css/font-awesome.css +4585 -4585
- package/src/assets/css/foxit/contextMenu.css +297 -297
- package/src/assets/css/foxit/datepicker.css +31931 -31931
- package/src/assets/css/foxit/foxit.css +8499 -8499
- package/src/assets/css/icons.scss +56 -56
- package/src/assets/css/masonrt.scss +36 -36
- package/src/assets/css/patient-portal-disclaimer-global.scss +68 -68
- package/src/assets/css/printstyle.css +839 -839
- package/src/assets/css/shoelace-edit.scss +512 -512
- package/src/assets/css/task-description-tiptap-global.scss +84 -84
- package/src/assets/css/themes/default.css +484 -484
- package/src/assets/css/themes/green-bright.css +484 -484
- package/src/assets/css/themes/light.css +471 -471
- package/src/assets/css/tour-guide.scss +238 -238
- package/src/assets/data/growth-chart/GROWTH_CHART_LMS.json +27201 -27201
- package/src/assets/fonts/call-hover.svg +6 -6
- package/src/assets/fonts/edvak-fonts.svg +49 -49
- package/src/assets/fonts/flaticon_mycollection.css +23 -23
- package/src/assets/fonts/flaticon_mycollection.html +463 -463
- package/src/assets/fonts/flaticon_mycollection.scss +29 -29
- package/src/assets/fonts/flaticon_mycollection.svg +15 -15
- package/src/assets/fonts/font_face.txt +233 -233
- package/src/assets/fonts/inter.css +566 -566
- package/src/assets/fonts/lato.css +71 -71
- package/src/assets/fonts/message-hover.svg +7 -7
- package/src/assets/fonts/notes-hover.svg +8 -8
- package/src/assets/fonts/poppins-v20-latin-100.svg +320 -320
- package/src/assets/fonts/poppins-v20-latin-100italic.svg +341 -341
- package/src/assets/fonts/poppins-v20-latin-200.svg +319 -319
- package/src/assets/fonts/poppins-v20-latin-200italic.svg +336 -336
- package/src/assets/fonts/poppins-v20-latin-300.svg +321 -321
- package/src/assets/fonts/poppins-v20-latin-300italic.svg +336 -336
- package/src/assets/fonts/poppins-v20-latin-500.svg +323 -323
- package/src/assets/fonts/poppins-v20-latin-500italic.svg +338 -338
- package/src/assets/fonts/poppins-v20-latin-600.svg +322 -322
- package/src/assets/fonts/poppins-v20-latin-600italic.svg +338 -338
- package/src/assets/fonts/poppins-v20-latin-700.svg +322 -322
- package/src/assets/fonts/poppins-v20-latin-700italic.svg +336 -336
- package/src/assets/fonts/poppins-v20-latin-800.svg +320 -320
- package/src/assets/fonts/poppins-v20-latin-800italic.svg +335 -335
- package/src/assets/fonts/poppins-v20-latin-900.svg +321 -321
- package/src/assets/fonts/poppins-v20-latin-900italic.svg +335 -335
- package/src/assets/fonts/poppins-v20-latin-italic.svg +336 -336
- package/src/assets/fonts/poppins-v20-latin-regular.svg +323 -323
- package/src/assets/fonts/schedule-hover.svg +13 -13
- package/src/assets/fonts/video-call-hover.svg +6 -6
- package/src/assets/home.css +151 -151
- package/src/assets/icons/AI.svg +15 -15
- package/src/assets/icons/AddressBook.svg +3 -3
- package/src/assets/icons/ArrowArcLeft.svg +3 -3
- package/src/assets/icons/ArrowCircleDownLeft.svg +3 -3
- package/src/assets/icons/ArrowClockwise.svg +3 -3
- package/src/assets/icons/ArrowLeft.svg +3 -3
- package/src/assets/icons/ArrowUpRight.svg +3 -3
- package/src/assets/icons/ArrowsCounterClockwise.svg +3 -3
- package/src/assets/icons/ArrowsLeftRight.svg +3 -3
- package/src/assets/icons/Avatar.svg +4 -4
- package/src/assets/icons/Baby.svg +3 -3
- package/src/assets/icons/BookOpenText.svg +3 -3
- package/src/assets/icons/CalendarCheck.svg +3 -3
- package/src/assets/icons/CalendarDot.svg +3 -3
- package/src/assets/icons/CalendarDots.svg +3 -3
- package/src/assets/icons/CalendarX.svg +3 -3
- package/src/assets/icons/Camera.svg +3 -3
- package/src/assets/icons/CameraDisable.svg +3 -3
- package/src/assets/icons/ChatText.svg +3 -3
- package/src/assets/icons/ClockCountdown.svg +3 -3
- package/src/assets/icons/ClockCounterClockwise.svg +3 -3
- package/src/assets/icons/ClockUser.svg +3 -3
- package/src/assets/icons/CloudCheck.svg +3 -3
- package/src/assets/icons/CrownSimple.svg +3 -3
- package/src/assets/icons/CurrencyDollar.svg +3 -3
- package/src/assets/icons/Desktop.svg +3 -3
- package/src/assets/icons/Encounter.svg +4 -4
- package/src/assets/icons/EnvelopeSimple.svg +3 -3
- package/src/assets/icons/FileDoc.svg +3 -3
- package/src/assets/icons/FilePdf.svg +3 -3
- package/src/assets/icons/FileText.svg +3 -3
- package/src/assets/icons/FileTextNew.svg +3 -3
- package/src/assets/icons/FileXml.svg +4 -4
- package/src/assets/icons/FirstAid.svg +3 -3
- package/src/assets/icons/Gif.svg +3 -3
- package/src/assets/icons/Globe.svg +3 -3
- package/src/assets/icons/HandPointing.svg +3 -3
- package/src/assets/icons/Headset.svg +5 -5
- package/src/assets/icons/Heart.svg +3 -3
- package/src/assets/icons/Image-ic.svg +3 -3
- package/src/assets/icons/Labs_Imaging.svg +8 -8
- package/src/assets/icons/Link.svg +3 -3
- package/src/assets/icons/LockSimple.svg +3 -3
- package/src/assets/icons/MapPin.svg +3 -3
- package/src/assets/icons/MapPin_new.svg +3 -3
- package/src/assets/icons/Microscope.svg +3 -3
- package/src/assets/icons/MinusCircle.svg +3 -3
- package/src/assets/icons/NoFile.svg +4 -4
- package/src/assets/icons/NotePencil.svg +3 -3
- package/src/assets/icons/Notepad.svg +3 -3
- package/src/assets/icons/OfficeChair.svg +3 -3
- package/src/assets/icons/Other Files.svg +3 -3
- package/src/assets/icons/PaperPlaneTilt.svg +3 -3
- package/src/assets/icons/Paperclip.svg +3 -3
- package/src/assets/icons/Password.svg +3 -3
- package/src/assets/icons/Phone.svg +3 -3
- package/src/assets/icons/Pulse.svg +3 -3
- package/src/assets/icons/Refund_Icon.svg +5 -5
- package/src/assets/icons/Refund_new.svg +5 -5
- package/src/assets/icons/Robot.svg +3 -3
- package/src/assets/icons/ShieldCheck.svg +3 -3
- package/src/assets/icons/Suitcase.svg +3 -3
- package/src/assets/icons/Table-ic.svg +3 -3
- package/src/assets/icons/TagSimple.svg +3 -3
- package/src/assets/icons/TextAlignLeft.svg +3 -3
- package/src/assets/icons/Translate.svg +3 -3
- package/src/assets/icons/Trash.svg +3 -3
- package/src/assets/icons/User.svg +3 -3
- package/src/assets/icons/UserCheck.svg +3 -3
- package/src/assets/icons/User_new.svg +10 -10
- package/src/assets/icons/Users.svg +3 -3
- package/src/assets/icons/WarningCircle.svg +3 -3
- package/src/assets/icons/accessibility.svg +8 -8
- package/src/assets/icons/account_tree.svg +8 -8
- package/src/assets/icons/add.svg +8 -8
- package/src/assets/icons/add_circle.svg +8 -8
- package/src/assets/icons/add_link.svg +8 -8
- package/src/assets/icons/add_reaction.svg +8 -8
- package/src/assets/icons/add_text.svg +3 -3
- package/src/assets/icons/admin_panel_settings.svg +8 -8
- package/src/assets/icons/ai_1.svg +4 -4
- package/src/assets/icons/ai_headset.svg +5 -5
- package/src/assets/icons/ai_new.svg +8 -8
- package/src/assets/icons/alarm.svg +8 -8
- package/src/assets/icons/alternate_email.svg +8 -8
- package/src/assets/icons/ambulance.svg +15 -15
- package/src/assets/icons/ambulance_2.svg +17 -17
- package/src/assets/icons/android.svg +6 -6
- package/src/assets/icons/appointments.svg +3 -3
- package/src/assets/icons/archive.svg +8 -8
- package/src/assets/icons/archive_new.svg +3 -3
- package/src/assets/icons/arrow-bar-right.svg +2 -2
- package/src/assets/icons/arrow-repeat.svg +3 -3
- package/src/assets/icons/arrow_back.svg +8 -8
- package/src/assets/icons/arrow_downward_alt.svg +8 -8
- package/src/assets/icons/arrow_drop_down.svg +8 -8
- package/src/assets/icons/arrow_fat_up.svg +3 -3
- package/src/assets/icons/arrow_left_alt.svg +8 -8
- package/src/assets/icons/arrow_right.svg +3 -3
- package/src/assets/icons/arrow_right_alt.svg +8 -8
- package/src/assets/icons/arrow_top_left.svg +8 -8
- package/src/assets/icons/arrow_upward.svg +8 -8
- package/src/assets/icons/arrow_upward_alt.svg +8 -8
- package/src/assets/icons/arrows_merge.svg +3 -3
- package/src/assets/icons/article-off.svg +8 -8
- package/src/assets/icons/article.svg +8 -8
- package/src/assets/icons/at.svg +2 -2
- package/src/assets/icons/atr.svg +8 -8
- package/src/assets/icons/attach_file.svg +8 -8
- package/src/assets/icons/attach_file_45.svg +8 -8
- package/src/assets/icons/attach_money.svg +8 -8
- package/src/assets/icons/attachment.svg +8 -8
- package/src/assets/icons/auto_awesome_mosaic.svg +8 -8
- package/src/assets/icons/auto_pay.xml +10 -10
- package/src/assets/icons/auto_pay_new.svg +8 -8
- package/src/assets/icons/backspace_fill.svg +8 -8
- package/src/assets/icons/bandaids.svg +3 -3
- package/src/assets/icons/bell_simple_ringing.svg +3 -3
- package/src/assets/icons/bell_simple_z.svg +3 -3
- package/src/assets/icons/block.svg +8 -8
- package/src/assets/icons/bolt.svg +8 -8
- package/src/assets/icons/bolt_ai.svg +3 -3
- package/src/assets/icons/bolt_new.svg +11 -11
- package/src/assets/icons/book_open.svg +3 -3
- package/src/assets/icons/border_color.svg +8 -8
- package/src/assets/icons/box_edit.svg +8 -8
- package/src/assets/icons/brightness_1.svg +8 -8
- package/src/assets/icons/bubble.svg +8 -8
- package/src/assets/icons/building_apartment.svg +3 -3
- package/src/assets/icons/cached.svg +8 -8
- package/src/assets/icons/calculate.svg +8 -8
- package/src/assets/icons/calendar-star.svg +3 -3
- package/src/assets/icons/calendar-x.svg +3 -3
- package/src/assets/icons/calendar_clock.svg +8 -8
- package/src/assets/icons/calendar_dot.svg +3 -3
- package/src/assets/icons/calendar_down.svg +9 -9
- package/src/assets/icons/calendar_month.svg +8 -8
- package/src/assets/icons/calendar_plus.svg +3 -3
- package/src/assets/icons/calendar_today.svg +8 -8
- package/src/assets/icons/calendar_up.svg +9 -9
- package/src/assets/icons/call-fill.svg +8 -8
- package/src/assets/icons/call.svg +8 -8
- package/src/assets/icons/call_fill.svg +8 -8
- package/src/assets/icons/call_made.svg +8 -8
- package/src/assets/icons/campaign.svg +8 -8
- package/src/assets/icons/cancel.svg +8 -8
- package/src/assets/icons/card-list.svg +3 -3
- package/src/assets/icons/caret_down.svg +3 -3
- package/src/assets/icons/caret_left.svg +3 -3
- package/src/assets/icons/caret_right.svg +3 -3
- package/src/assets/icons/caret_up.svg +3 -3
- package/src/assets/icons/cash.svg +16 -16
- package/src/assets/icons/changelog.svg +3 -3
- package/src/assets/icons/chart_data.svg +8 -8
- package/src/assets/icons/chartline.svg +3 -3
- package/src/assets/icons/chat.svg +8 -8
- package/src/assets/icons/chat_bubble.svg +8 -8
- package/src/assets/icons/chat_new.svg +3 -3
- package/src/assets/icons/chat_text.svg +3 -3
- package/src/assets/icons/check-circle-fill.svg +2 -2
- package/src/assets/icons/check-tooltip-success.svg +8 -8
- package/src/assets/icons/check.svg +15 -15
- package/src/assets/icons/check2-all.svg +3 -3
- package/src/assets/icons/check_circle.svg +8 -8
- package/src/assets/icons/check_circle_fill.svg +8 -8
- package/src/assets/icons/check_square.svg +3 -3
- package/src/assets/icons/chevron_left.svg +15 -15
- package/src/assets/icons/chevron_right.svg +8 -8
- package/src/assets/icons/circle-fill.svg +2 -2
- package/src/assets/icons/clinic.svg +3 -3
- package/src/assets/icons/clinic_settings.svg +3 -3
- package/src/assets/icons/clinical_notes.svg +8 -8
- package/src/assets/icons/clipboard-check.svg +4 -4
- package/src/assets/icons/clipboard_text.svg +3 -3
- package/src/assets/icons/clock-history.svg +4 -4
- package/src/assets/icons/clock.svg +3 -3
- package/src/assets/icons/clock_countdown.svg +3 -3
- package/src/assets/icons/clock_loader_40.svg +8 -8
- package/src/assets/icons/close_circle_fill.svg +4 -4
- package/src/assets/icons/collapse_content.svg +8 -8
- package/src/assets/icons/columns.svg +3 -3
- package/src/assets/icons/comment.svg +15 -15
- package/src/assets/icons/compare_arrows.svg +8 -8
- package/src/assets/icons/contact_page.svg +8 -8
- package/src/assets/icons/content_copy.svg +8 -8
- package/src/assets/icons/copy.svg +3 -3
- package/src/assets/icons/copy_all.svg +8 -8
- package/src/assets/icons/copy_simple.svg +3 -3
- package/src/assets/icons/create_new_folder.svg +8 -8
- package/src/assets/icons/credit_card.svg +8 -8
- package/src/assets/icons/cube.svg +3 -3
- package/src/assets/icons/currency_circle_dollar.svg +3 -3
- package/src/assets/icons/cursor_click.svg +3 -3
- package/src/assets/icons/custom_dropdown.svg +8 -8
- package/src/assets/icons/dangerous.svg +8 -8
- package/src/assets/icons/darwinIcon.svg +4 -4
- package/src/assets/icons/dash-circle.svg +3 -3
- package/src/assets/icons/dashboard_customize.svg +8 -8
- package/src/assets/icons/data_object.svg +8 -8
- package/src/assets/icons/data_object_bold.svg +8 -8
- package/src/assets/icons/delete.svg +8 -8
- package/src/assets/icons/demography.svg +8 -8
- package/src/assets/icons/derm-lesion.svg +3 -3
- package/src/assets/icons/derm-site.svg +2 -2
- package/src/assets/icons/description.svg +15 -15
- package/src/assets/icons/desktop_windows.svg +8 -8
- package/src/assets/icons/do_not_disturb_off.svg +8 -8
- package/src/assets/icons/do_not_disturb_on.svg +8 -8
- package/src/assets/icons/document_scanner.svg +8 -8
- package/src/assets/icons/dollar_note.svg +8 -8
- package/src/assets/icons/domain.svg +8 -8
- package/src/assets/icons/done_all.svg +8 -8
- package/src/assets/icons/dot.svg +2 -2
- package/src/assets/icons/dots_three.svg +3 -3
- package/src/assets/icons/download.svg +8 -8
- package/src/assets/icons/draft.svg +8 -8
- package/src/assets/icons/draw.svg +3 -3
- package/src/assets/icons/eFax.svg +17 -17
- package/src/assets/icons/east.svg +8 -8
- package/src/assets/icons/ecg.svg +8 -8
- package/src/assets/icons/ecg_heart.svg +8 -8
- package/src/assets/icons/ed-doctor.svg +15 -15
- package/src/assets/icons/ed-event_history.svg +8 -8
- package/src/assets/icons/ed-form-disable.svg +9 -9
- package/src/assets/icons/ed-past_history.svg +9 -9
- package/src/assets/icons/ed-payment_history.svg +9 -9
- package/src/assets/icons/ed-receive.svg +9 -9
- package/src/assets/icons/ed-refund.svg +9 -9
- package/src/assets/icons/ed-regular-notes.svg +6 -6
- package/src/assets/icons/ed_transaction_download.svg +6 -6
- package/src/assets/icons/edit.svg +15 -15
- package/src/assets/icons/edit_calendar.svg +8 -8
- package/src/assets/icons/edit_document.svg +8 -8
- package/src/assets/icons/edvak_icon.svg +12 -12
- package/src/assets/icons/email.svg +8 -8
- package/src/assets/icons/encounters_h.svg +2 -2
- package/src/assets/icons/endocrinology.svg +8 -8
- package/src/assets/icons/ent.svg +8 -8
- package/src/assets/icons/error.svg +8 -8
- package/src/assets/icons/erx.svg +8 -8
- package/src/assets/icons/event.svg +8 -8
- package/src/assets/icons/event_busy.svg +8 -8
- package/src/assets/icons/expand_content.svg +8 -8
- package/src/assets/icons/expand_less.svg +8 -8
- package/src/assets/icons/expand_more.svg +8 -8
- package/src/assets/icons/expansion_panels.svg +3 -3
- package/src/assets/icons/export_notes.svg +8 -8
- package/src/assets/icons/favorite.svg +8 -8
- package/src/assets/icons/feedback.svg +3 -3
- package/src/assets/icons/fiber_manual_record.svg +15 -15
- package/src/assets/icons/fiber_smart_record.svg +8 -8
- package/src/assets/icons/file-arrow-up.svg +3 -3
- package/src/assets/icons/file_csv.svg +3 -3
- package/src/assets/icons/file_docx.svg +3 -3
- package/src/assets/icons/file_image.svg +3 -3
- package/src/assets/icons/file_jpg.svg +3 -3
- package/src/assets/icons/file_pdf.svg +3 -3
- package/src/assets/icons/file_png.svg +3 -3
- package/src/assets/icons/file_text_new.svg +3 -3
- package/src/assets/icons/file_xls.svg +3 -3
- package/src/assets/icons/files.svg +2 -2
- package/src/assets/icons/files_new.svg +3 -3
- package/src/assets/icons/filetype-pdf.svg +2 -2
- package/src/assets/icons/filter_alt.svg +8 -8
- package/src/assets/icons/flag.svg +3 -3
- package/src/assets/icons/flash_on.svg +22 -22
- package/src/assets/icons/flask.svg +3 -3
- package/src/assets/icons/floppy_disk_back.svg +3 -3
- package/src/assets/icons/folder.svg +8 -8
- package/src/assets/icons/folder_open.svg +8 -8
- package/src/assets/icons/folder_plus.svg +3 -3
- package/src/assets/icons/folder_simple.svg +4 -4
- package/src/assets/icons/folders.svg +3 -3
- package/src/assets/icons/format_align_center.svg +8 -8
- package/src/assets/icons/format_align_justify.svg +8 -8
- package/src/assets/icons/format_align_left.svg +8 -8
- package/src/assets/icons/format_align_right.svg +8 -8
- package/src/assets/icons/format_bold.svg +8 -8
- package/src/assets/icons/format_clear.svg +8 -8
- package/src/assets/icons/format_color_text.svg +8 -8
- package/src/assets/icons/format_ink_highlighter.svg +8 -8
- package/src/assets/icons/format_italic.svg +8 -8
- package/src/assets/icons/format_list_bulleted.svg +8 -8
- package/src/assets/icons/format_list_numbered.svg +8 -8
- package/src/assets/icons/format_underlined.svg +8 -8
- package/src/assets/icons/funnel.svg +3 -3
- package/src/assets/icons/gastroenterology.svg +8 -8
- package/src/assets/icons/gavel.svg +3 -3
- package/src/assets/icons/gesture.svg +8 -8
- package/src/assets/icons/gift.svg +3 -3
- package/src/assets/icons/git_merge.svg +3 -3
- package/src/assets/icons/googleSync.svg +6 -6
- package/src/assets/icons/google_icon.svg +7 -7
- package/src/assets/icons/gpp_bad.svg +8 -8
- package/src/assets/icons/gpp_bad_fill.svg +8 -8
- package/src/assets/icons/gpp_maybe.svg +8 -8
- package/src/assets/icons/gpp_maybe_fill.svg +8 -8
- package/src/assets/icons/grab.svg +4 -4
- package/src/assets/icons/grabbing.svg +17 -17
- package/src/assets/icons/graph.svg +8 -8
- package/src/assets/icons/graph_new.svg +3 -3
- package/src/assets/icons/grid_view.svg +8 -8
- package/src/assets/icons/group.svg +8 -8
- package/src/assets/icons/group_n.svg +3 -3
- package/src/assets/icons/growth_chart_trend_down.svg +3 -3
- package/src/assets/icons/growth_chart_trend_grey_down.svg +3 -3
- package/src/assets/icons/growth_chart_trend_grey_up.svg +3 -3
- package/src/assets/icons/growth_chart_trend_up.svg +3 -3
- package/src/assets/icons/health_and_safety.svg +8 -8
- package/src/assets/icons/health_and_safety_fill.svg +8 -8
- package/src/assets/icons/heartbeat.svg +3 -3
- package/src/assets/icons/help.svg +8 -8
- package/src/assets/icons/history.svg +8 -8
- package/src/assets/icons/history_toggle_off.svg +8 -8
- package/src/assets/icons/home.svg +8 -8
- package/src/assets/icons/home_pin.svg +8 -8
- package/src/assets/icons/horizontal_rule.svg +8 -8
- package/src/assets/icons/hospital.svg +3 -3
- package/src/assets/icons/how_to_reg.svg +8 -8
- package/src/assets/icons/id_card.svg +8 -8
- package/src/assets/icons/identification_card.svg +3 -3
- package/src/assets/icons/imagesmode.svg +8 -8
- package/src/assets/icons/import.svg +4 -4
- package/src/assets/icons/inactive_user.svg +9 -9
- package/src/assets/icons/info-square.svg +3 -3
- package/src/assets/icons/info.svg +8 -8
- package/src/assets/icons/inprogress.svg +3 -3
- package/src/assets/icons/inventory_2.svg +8 -8
- package/src/assets/icons/ios.svg +4 -4
- package/src/assets/icons/journal-plus.svg +4 -4
- package/src/assets/icons/journal-plus1.svg +4 -4
- package/src/assets/icons/keep.svg +8 -8
- package/src/assets/icons/key-person.svg +3 -3
- package/src/assets/icons/keyboard_arrow_down.svg +8 -8
- package/src/assets/icons/keyboard_arrow_left.svg +15 -15
- package/src/assets/icons/keyboard_arrow_right.svg +8 -8
- package/src/assets/icons/keyboard_arrow_up.svg +8 -8
- package/src/assets/icons/keyboard_double_arrow_left.svg +8 -8
- package/src/assets/icons/keyboard_double_arrow_right.svg +8 -8
- package/src/assets/icons/lab_profile.svg +8 -8
- package/src/assets/icons/label-tag.svg +9 -9
- package/src/assets/icons/label.svg +8 -8
- package/src/assets/icons/label_important.svg +8 -8
- package/src/assets/icons/labs.svg +15 -15
- package/src/assets/icons/language.svg +8 -8
- package/src/assets/icons/library.svg +8 -8
- package/src/assets/icons/lightning-charge-fill.svg +2 -2
- package/src/assets/icons/lightning.svg +3 -3
- package/src/assets/icons/link-45deg.svg +3 -3
- package/src/assets/icons/link-break.svg +3 -3
- package/src/assets/icons/link-simple-horizontal.svg +3 -3
- package/src/assets/icons/link_new.svg +3 -3
- package/src/assets/icons/list_checks.svg +3 -3
- package/src/assets/icons/list_magnifying_glass.svg +3 -3
- package/src/assets/icons/list_star.svg +3 -3
- package/src/assets/icons/local_activity.svg +8 -8
- package/src/assets/icons/local_atm.svg +8 -8
- package/src/assets/icons/local_pharmacy.svg +8 -8
- package/src/assets/icons/local_post_office.svg +8 -8
- package/src/assets/icons/location_home.svg +8 -8
- package/src/assets/icons/location_on-fill.svg +8 -8
- package/src/assets/icons/location_on.svg +8 -8
- package/src/assets/icons/lock-new.svg +25 -25
- package/src/assets/icons/lock.svg +8 -8
- package/src/assets/icons/lock_person.svg +8 -8
- package/src/assets/icons/logos_google-calendar.svg +17 -17
- package/src/assets/icons/magnifying_glass.svg +3 -3
- package/src/assets/icons/mail.svg +8 -8
- package/src/assets/icons/mark_chat_unread.svg +10 -10
- package/src/assets/icons/mask_group.svg +8 -8
- package/src/assets/icons/material-symbol-1.svg +5 -5
- package/src/assets/icons/material-symbol.svg +22 -22
- package/src/assets/icons/medication.svg +8 -8
- package/src/assets/icons/medication_liquid.svg +8 -8
- package/src/assets/icons/mic.svg +8 -8
- package/src/assets/icons/mic_off.svg +8 -8
- package/src/assets/icons/microscope_purple.svg +3 -3
- package/src/assets/icons/mingcute_user-3-fill.svg +4 -4
- package/src/assets/icons/minus.svg +8 -8
- package/src/assets/icons/mode_comment.svg +8 -8
- package/src/assets/icons/monetization_on.svg +3 -3
- package/src/assets/icons/money-wavy.svg +3 -3
- package/src/assets/icons/monitor.svg +3 -3
- package/src/assets/icons/monitor_heart.svg +8 -8
- package/src/assets/icons/monitoring.svg +8 -8
- package/src/assets/icons/mood.svg +8 -8
- package/src/assets/icons/more_horiz.svg +8 -8
- package/src/assets/icons/more_vert.svg +8 -8
- package/src/assets/icons/morphology-icon.svg +19 -19
- package/src/assets/icons/motion_photos_paused.svg +8 -8
- package/src/assets/icons/move.svg +13 -13
- package/src/assets/icons/musculoskeletal.svg +11 -11
- package/src/assets/icons/neurology.svg +8 -8
- package/src/assets/icons/no_insurance.svg +8 -8
- package/src/assets/icons/no_insurance_fill.svg +8 -8
- package/src/assets/icons/non_administered.svg +38 -38
- package/src/assets/icons/non_administered_new.svg +4 -4
- package/src/assets/icons/non_administered_v1.svg +7 -7
- package/src/assets/icons/not_allow.svg +8 -8
- package/src/assets/icons/not_allow_fill.svg +8 -8
- package/src/assets/icons/not_verified.svg +8 -8
- package/src/assets/icons/not_verified_fill.svg +8 -8
- package/src/assets/icons/note.svg +3 -3
- package/src/assets/icons/note_add.svg +8 -8
- package/src/assets/icons/note_pad.svg +3 -3
- package/src/assets/icons/note_pad_new.svg +3 -3
- package/src/assets/icons/note_stack.svg +8 -8
- package/src/assets/icons/notifications.svg +8 -8
- package/src/assets/icons/notifications_active.svg +8 -8
- package/src/assets/icons/offline_bolt.svg +8 -8
- package/src/assets/icons/open_in_new.svg +8 -8
- package/src/assets/icons/order_approve.svg +8 -8
- package/src/assets/icons/overview.svg +8 -8
- package/src/assets/icons/paid.svg +8 -8
- package/src/assets/icons/paper-plane-right.svg +3 -3
- package/src/assets/icons/paper_claim.svg +8 -8
- package/src/assets/icons/paper_plane_tilt.svg +3 -3
- package/src/assets/icons/party_mode.svg +8 -8
- package/src/assets/icons/password_2.svg +8 -8
- package/src/assets/icons/patient-chart.svg +8 -8
- package/src/assets/icons/patient_list.svg +8 -8
- package/src/assets/icons/pause.svg +3 -3
- package/src/assets/icons/pause_circle.svg +8 -8
- package/src/assets/icons/pen_edit.svg +8 -8
- package/src/assets/icons/pencil-square.svg +3 -3
- package/src/assets/icons/pencil_simple.svg +3 -3
- package/src/assets/icons/pending.svg +3 -3
- package/src/assets/icons/people.svg +2 -2
- package/src/assets/icons/percent.svg +3 -3
- package/src/assets/icons/permissions.svg +18 -18
- package/src/assets/icons/person-bounding-box.svg +3 -3
- package/src/assets/icons/person-circle.svg +3 -3
- package/src/assets/icons/person-plus.svg +3 -3
- package/src/assets/icons/person-rolodex.svg +3 -3
- package/src/assets/icons/person-up.svg +3 -3
- package/src/assets/icons/person-vcard.svg +3 -3
- package/src/assets/icons/person.svg +2 -2
- package/src/assets/icons/person_add-fill.svg +8 -8
- package/src/assets/icons/person_add.svg +8 -8
- package/src/assets/icons/person_remove.svg +8 -8
- package/src/assets/icons/personal_injury.svg +15 -15
- package/src/assets/icons/phone_call.svg +3 -3
- package/src/assets/icons/phone_disabled.svg +6 -6
- package/src/assets/icons/phone_forwarded.svg +8 -8
- package/src/assets/icons/photo_camera.svg +8 -8
- package/src/assets/icons/photo_camera_fill.svg +8 -8
- package/src/assets/icons/pill.svg +3 -3
- package/src/assets/icons/pill_green.svg +3 -3
- package/src/assets/icons/pin.svg +8 -8
- package/src/assets/icons/play_arrow.svg +8 -8
- package/src/assets/icons/play_circle.svg +3 -3
- package/src/assets/icons/plug-connection.svg +10 -10
- package/src/assets/icons/prescriptions.svg +8 -8
- package/src/assets/icons/preventive.svg +5 -5
- package/src/assets/icons/price_change.svg +8 -8
- package/src/assets/icons/print.svg +8 -8
- package/src/assets/icons/printer.svg +3 -3
- package/src/assets/icons/priorAuth.svg +4 -4
- package/src/assets/icons/prior_auth.svg +4 -4
- package/src/assets/icons/priority.svg +3 -3
- package/src/assets/icons/problemsicon.svg +3 -3
- package/src/assets/icons/prohibit.svg +3 -3
- package/src/assets/icons/prompt_suggestion.svg +8 -8
- package/src/assets/icons/psychology.svg +8 -8
- package/src/assets/icons/pulmonology.svg +8 -8
- package/src/assets/icons/push_pin.svg +8 -8
- package/src/assets/icons/question_fill.svg +9 -9
- package/src/assets/icons/question_mark.svg +8 -8
- package/src/assets/icons/question_mark_fill.svg +9 -9
- package/src/assets/icons/quickreply.svg +8 -8
- package/src/assets/icons/radio_button_checked.svg +8 -8
- package/src/assets/icons/radio_button_unchecked.svg +8 -8
- package/src/assets/icons/radiology.svg +8 -8
- package/src/assets/icons/radiology_new.svg +8 -8
- package/src/assets/icons/receipt.svg +3 -3
- package/src/assets/icons/receipt_long.svg +15 -15
- package/src/assets/icons/receipt_x.svg +3 -3
- package/src/assets/icons/record-circle.svg +3 -3
- package/src/assets/icons/redo.svg +8 -8
- package/src/assets/icons/referral.svg +8 -8
- package/src/assets/icons/refresh.svg +8 -8
- package/src/assets/icons/refund.svg +10 -10
- package/src/assets/icons/reg-note.svg +8 -8
- package/src/assets/icons/reg-notes.svg +8 -8
- package/src/assets/icons/remove.svg +8 -8
- package/src/assets/icons/remove_moderator.svg +8 -8
- package/src/assets/icons/remove_moderator_fill.svg +8 -8
- package/src/assets/icons/reorder.svg +8 -8
- package/src/assets/icons/repeat.svg +8 -8
- package/src/assets/icons/replay.svg +8 -8
- package/src/assets/icons/request_quote.svg +8 -8
- package/src/assets/icons/roadmap.svg +3 -3
- package/src/assets/icons/rocket_launch.svg +8 -8
- package/src/assets/icons/rotate_left.svg +8 -8
- package/src/assets/icons/rule_settings.svg +8 -8
- package/src/assets/icons/scan.svg +3 -3
- package/src/assets/icons/scanner.svg +8 -8
- package/src/assets/icons/schedule.svg +8 -8
- package/src/assets/icons/search.svg +8 -8
- package/src/assets/icons/selection_all.svg +3 -3
- package/src/assets/icons/self_pay.svg +8 -8
- package/src/assets/icons/self_pay_fill.svg +8 -8
- package/src/assets/icons/send.svg +8 -8
- package/src/assets/icons/settings.svg +8 -8
- package/src/assets/icons/settings_applications.svg +8 -8
- package/src/assets/icons/shapes.svg +3 -3
- package/src/assets/icons/shield.svg +3 -3
- package/src/assets/icons/shield_person.svg +8 -8
- package/src/assets/icons/shield_person_fill.svg +8 -8
- package/src/assets/icons/shield_plus.svg +3 -3
- package/src/assets/icons/shift_timing_activate.svg +5 -5
- package/src/assets/icons/shift_timing_deactivate.svg +5 -5
- package/src/assets/icons/sign.svg +3 -3
- package/src/assets/icons/signal_cellular_alt.svg +8 -8
- package/src/assets/icons/simple-notes.svg +8 -8
- package/src/assets/icons/skin.svg +11 -11
- package/src/assets/icons/smartphone.svg +8 -8
- package/src/assets/icons/smiley-angry-fill.svg +5 -5
- package/src/assets/icons/smiley-fill.svg +5 -5
- package/src/assets/icons/smiley-meh-fill.svg +5 -5
- package/src/assets/icons/smiley-nervous-fill.svg +5 -5
- package/src/assets/icons/sort.svg +8 -8
- package/src/assets/icons/sort_ascending.svg +12 -12
- package/src/assets/icons/sort_by_alpha.svg +8 -8
- package/src/assets/icons/sort_descending.svg +12 -12
- package/src/assets/icons/source_notes.svg +8 -8
- package/src/assets/icons/sparkle.svg +3 -3
- package/src/assets/icons/sparkle_gradient.svg +9 -9
- package/src/assets/icons/splitscreen_bottom.svg +8 -8
- package/src/assets/icons/stack.svg +3 -3
- package/src/assets/icons/star-fill.svg +2 -2
- package/src/assets/icons/star.svg +3 -3
- package/src/assets/icons/stethoscope.svg +3 -3
- package/src/assets/icons/stethoscope_check.svg +8 -8
- package/src/assets/icons/stickies.svg +3 -3
- package/src/assets/icons/sticky_note_2.svg +8 -8
- package/src/assets/icons/stop.svg +8 -8
- package/src/assets/icons/stop_circle.svg +8 -8
- package/src/assets/icons/store.svg +8 -8
- package/src/assets/icons/straight.svg +3 -3
- package/src/assets/icons/strikethrough_s.svg +8 -8
- package/src/assets/icons/sub-task.svg +9 -9
- package/src/assets/icons/subdirectory_arrow_left.svg +8 -8
- package/src/assets/icons/subscript.svg +8 -8
- package/src/assets/icons/summarize.svg +8 -8
- package/src/assets/icons/superscript.svg +8 -8
- package/src/assets/icons/swap_vert.svg +8 -8
- package/src/assets/icons/swipe_left_alt.svg +8 -8
- package/src/assets/icons/syringe.svg +3 -3
- package/src/assets/icons/table.svg +8 -8
- package/src/assets/icons/tag.svg +3 -3
- package/src/assets/icons/task.svg +8 -8
- package/src/assets/icons/telemedicine.svg +15 -15
- package/src/assets/icons/text_field.svg +4 -4
- package/src/assets/icons/thumbs_down.svg +3 -3
- package/src/assets/icons/thumbs_up.svg +3 -3
- package/src/assets/icons/thunder-big.svg +12 -12
- package/src/assets/icons/thunder.svg +12 -12
- package/src/assets/icons/treatment.svg +5 -5
- package/src/assets/icons/trend_down.svg +3 -3
- package/src/assets/icons/tune.svg +8 -8
- package/src/assets/icons/turn_right.svg +8 -8
- package/src/assets/icons/unarchive.svg +8 -8
- package/src/assets/icons/undo.svg +8 -8
- package/src/assets/icons/unfold_more.svg +8 -8
- package/src/assets/icons/universal-access.svg +2 -2
- package/src/assets/icons/universal_currency_alt.svg +8 -8
- package/src/assets/icons/up-arrow.svg +10 -10
- package/src/assets/icons/update_disabled.svg +8 -8
- package/src/assets/icons/upload.svg +8 -8
- package/src/assets/icons/upload_file.svg +8 -8
- package/src/assets/icons/upload_simple.svg +3 -3
- package/src/assets/icons/urology.svg +8 -8
- package/src/assets/icons/user_check.svg +3 -3
- package/src/assets/icons/user_circle.svg +3 -3
- package/src/assets/icons/user_minus.svg +3 -3
- package/src/assets/icons/user_plus.svg +3 -3
- package/src/assets/icons/users_three.svg +3 -3
- package/src/assets/icons/vaccines.svg +8 -8
- package/src/assets/icons/verified_user.svg +8 -8
- package/src/assets/icons/verified_user_fill.svg +8 -8
- package/src/assets/icons/video-camera.svg +3 -3
- package/src/assets/icons/videocam.svg +8 -8
- package/src/assets/icons/videocam_off.svg +8 -8
- package/src/assets/icons/view_week.svg +8 -8
- package/src/assets/icons/virus.svg +3 -3
- package/src/assets/icons/visibility-fill.svg +8 -8
- package/src/assets/icons/visibility.svg +8 -8
- package/src/assets/icons/visibility_off-fill.svg +8 -8
- package/src/assets/icons/visibility_off.svg +8 -8
- package/src/assets/icons/vpn_key.svg +10 -10
- package/src/assets/icons/warning.svg +8 -8
- package/src/assets/icons/warning_fill.svg +8 -8
- package/src/assets/icons/water_drop.svg +8 -8
- package/src/assets/icons/west.svg +8 -8
- package/src/assets/icons/where_to_vote.svg +8 -8
- package/src/assets/icons/widgets.svg +8 -8
- package/src/assets/icons/writeOff.svg +4 -4
- package/src/assets/icons/x-circle.svg +3 -3
- package/src/assets/icons/x-square.svg +3 -3
- package/src/assets/icons/zift.svg +19 -19
- package/src/assets/images/Ai-S.svg +55 -55
- package/src/assets/images/Ed_New_sprite.svg +14 -14
- package/src/assets/images/Ed_spriteuse.svg +979 -979
- package/src/assets/images/No collections.svg +62 -62
- package/src/assets/images/Upload-file.svg +16 -16
- package/src/assets/images/UserCircle.svg +3 -3
- package/src/assets/images/allergy.svg +16 -16
- package/src/assets/images/amex-card.svg +1 -1
- package/src/assets/images/amex-new.svg +5 -5
- package/src/assets/images/amex.svg +5 -5
- package/src/assets/images/android-kiosk.svg +1 -1
- package/src/assets/images/app-store.svg +8 -8
- package/src/assets/images/banner/banner_23-04-2026/Sparkle.svg +3 -3
- package/src/assets/images/banner/banner_23-04-2026/icon1.svg +21 -21
- package/src/assets/images/banner/banner_23-04-2026/icon2.svg +5 -5
- package/src/assets/images/banner/banner_23-04-2026/icon3.svg +3 -3
- package/src/assets/images/banner/banner_new/v2_img10.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img11.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img12.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img13.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img14.svg +3 -3
- package/src/assets/images/banner/banner_new/v2_img15.svg +4 -4
- package/src/assets/images/banner/banner_new/v2_img16.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img17.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img18.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img19.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img20.svg +3 -3
- package/src/assets/images/banner/banner_new/v2_img5.svg +10 -10
- package/src/assets/images/banner/banner_new/v2_img6.svg +13 -13
- package/src/assets/images/banner/banner_new/v2_img7.svg +4 -4
- package/src/assets/images/banner/banner_new/v2_img8.svg +3 -3
- package/src/assets/images/banner/banner_new/v2_img9.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_1.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_10.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_2.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_3.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_4.svg +12 -12
- package/src/assets/images/banner/banner_new10/svg_5.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_6.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_7.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_8.svg +10 -10
- package/src/assets/images/banner/banner_new10/svg_9.svg +10 -10
- package/src/assets/images/banner/banner_new3/CurrencyDollarSimple.svg +3 -3
- package/src/assets/images/banner/banner_new3/IdentificationCard.svg +3 -3
- package/src/assets/images/banner/banner_new3/ListNumbers.svg +3 -3
- package/src/assets/images/banner/banner_new3/Wrench.svg +3 -3
- package/src/assets/images/banner/banner_new3/assessment 1.svg +10 -10
- package/src/assets/images/banner/banner_new3/calendar-check 1.svg +10 -10
- package/src/assets/images/banner/banner_new3/fax (2) 1.svg +10 -10
- package/src/assets/images/banner/banner_new4/v4_svg1.svg +3 -3
- package/src/assets/images/banner/banner_new4/v4_svg2.svg +3 -3
- package/src/assets/images/banner/banner_new4/v4_svg3.svg +10 -10
- package/src/assets/images/banner/banner_new4/v4_svg4.svg +3 -3
- package/src/assets/images/banner/banner_new4/v4_svg5.svg +3 -3
- package/src/assets/images/banner/banner_new4/v4_svg6.svg +3 -3
- package/src/assets/images/banner/banner_new5/Wrench.svg +3 -3
- package/src/assets/images/banner/banner_new6/improvements/add-document.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/attribution-pencil.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/bell-notification.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/billing-header.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/binary.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/box-dollar.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/check-circle.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/clinical-header.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/credit-security.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/document-circle-wrong.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/fax.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/file-prescription.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/map-marker-check.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/marker.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/member-search.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/memo-circle-check-2.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/memo-circle-check.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/others-header.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/paper-plane.svg +6 -6
- package/src/assets/images/banner/banner_new6/improvements/payroll-calendar.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/payroll-check.svg +5 -5
- package/src/assets/images/banner/banner_new6/improvements/receipt.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/referrals-header.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/reminder-appointment.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/scheduling-header.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/settings.svg +5 -5
- package/src/assets/images/banner/banner_new6/improvements/subscription-alt.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/tasks.svg +10 -10
- package/src/assets/images/banner/banner_new6/improvements/time-check.svg +11 -11
- package/src/assets/images/banner/banner_new8/improvements/compliance-document.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/envelope-open-text.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/fax.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/file-invoice-dollar.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/file-signature.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/settings.svg +10 -10
- package/src/assets/images/banner/banner_new8/improvements/social-media-notification.svg +10 -10
- package/src/assets/images/banner/banner_new8/svg_1.svg +10 -10
- package/src/assets/images/banner/banner_new8/svg_2.svg +10 -10
- package/src/assets/images/banner/banner_new8/svg_3.svg +3 -3
- package/src/assets/images/banner/banner_new8/svg_4.svg +10 -10
- package/src/assets/images/banner/banner_new8/svg_5.svg +10 -10
- package/src/assets/images/banner/banner_new8/svg_6.svg +12 -12
- package/src/assets/images/banner/banner_new9/svg_10.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_11.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_12.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_13.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_3.svg +3 -3
- package/src/assets/images/banner/banner_new9/svg_5.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_6.svg +12 -12
- package/src/assets/images/banner/banner_new9/svg_7.svg +10 -10
- package/src/assets/images/banner/banner_new9/svg_8.svg +15 -15
- package/src/assets/images/banner/banner_new9/svg_9.svg +10 -10
- package/src/assets/images/banner/v2_img10.svg +11 -11
- package/src/assets/images/banner/v2_img5.svg +11 -11
- package/src/assets/images/banner/v2_img6.svg +11 -11
- package/src/assets/images/banner/v2_img7.svg +13 -13
- package/src/assets/images/banner/v2_img8.svg +11 -11
- package/src/assets/images/banner/v2_img9.svg +11 -11
- package/src/assets/images/bgstrips -1.svg +30 -30
- package/src/assets/images/bgstrips.svg +40 -40
- package/src/assets/images/blood-test.svg +13 -13
- package/src/assets/images/blue-stripes.svg +12 -12
- package/src/assets/images/bolt_ai.svg +3 -3
- package/src/assets/images/box_edit.svg +8 -8
- package/src/assets/images/cam.svg +3 -3
- package/src/assets/images/card-1.svg +9 -9
- package/src/assets/images/card-2.svg +9 -9
- package/src/assets/images/card-3.svg +9 -9
- package/src/assets/images/card-4.svg +9 -9
- package/src/assets/images/card-5.svg +9 -9
- package/src/assets/images/card-6.svg +9 -9
- package/src/assets/images/carelink-logo.svg +9 -9
- package/src/assets/images/cash-Cancelled.svg +20 -20
- package/src/assets/images/check_fill2.svg +4 -4
- package/src/assets/images/cirrus-card.svg +50 -50
- package/src/assets/images/compare_arrows.svg +8 -8
- package/src/assets/images/data_object_content.svg +9 -9
- package/src/assets/images/desktop-view.svg +78 -78
- package/src/assets/images/detecting.svg +28 -28
- package/src/assets/images/discover-new.svg +9 -9
- package/src/assets/images/discover.svg +9 -9
- package/src/assets/images/drop-bg.svg +3 -3
- package/src/assets/images/duration.svg +3 -3
- package/src/assets/images/eCareHub.svg +10 -10
- package/src/assets/images/ecarehub_logo.svg +9 -9
- package/src/assets/images/edvak_logo.svg +11 -11
- package/src/assets/images/edvak_logo_temp.svg +9 -9
- package/src/assets/images/edvak_logo_temp1.svg +9 -9
- package/src/assets/images/edvaklogo-old.svg +9 -9
- package/src/assets/images/edvaklogo.svg +5 -5
- package/src/assets/images/emptry-list.svg +59 -59
- package/src/assets/images/empty-list.svg +59 -59
- package/src/assets/images/empty-list2.svg +52 -52
- package/src/assets/images/fax-1.svg +8 -8
- package/src/assets/images/fax-2.svg +8 -8
- package/src/assets/images/file_csv.svg +14 -14
- package/src/assets/images/file_xlsx.svg +15 -15
- package/src/assets/images/flash.svg +3 -3
- package/src/assets/images/formNoteIcon.svg +15 -15
- package/src/assets/images/gettingstarted.svg +9 -9
- package/src/assets/images/google-store.svg +10 -10
- package/src/assets/images/graph-dec.svg +9 -9
- package/src/assets/images/graph-inc.svg +9 -9
- package/src/assets/images/graphic.svg +8 -8
- package/src/assets/images/handheld-connected.svg +9 -9
- package/src/assets/images/handheld-not-connected.svg +9 -9
- package/src/assets/images/health-care-logo.svg +13 -13
- package/src/assets/images/healthcare-logo.svg +27 -27
- package/src/assets/images/icons/material-symbols/300/rounded/add_reaction.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/alternate_email.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/cached.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/chat_bubble.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/keep.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/label_important.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/mood.svg +8 -8
- package/src/assets/images/icons/material-symbols/300/rounded/prompt_suggestion.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/accessibility.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/account_tree.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/add.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/add_circle.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/add_link.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/add_reaction.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/alarm.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/alternate_email.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/ambulance.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/ambulance_2.svg +17 -17
- package/src/assets/images/icons/material-symbols/400/rounded/arrow-bar-right.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/arrow-repeat.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/arrow_downward_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/arrow_right_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/arrow_top_left.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/arrow_upward_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/at.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/atr.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/attach_money.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/auto_awesome_mosaic.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/auto_pay.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/backspace_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/block.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/border_color.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/brightness_1.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/bubble.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/cached.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/calculate.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/calendar-x.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/calendar_down.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/calendar_month.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/calendar_today.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/calendar_up.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/call_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/campaign.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/cancel.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/card-list.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/cash.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/chart_data.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/chat.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/chat_bubble.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/check-circle-fill.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/check2-all.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/check_circle-fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/check_circle.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/check_circle_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/chevron_left.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/chevron_right.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/circle-fill.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/clinic.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/clinic_settings.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/clipboard-check.svg +4 -4
- package/src/assets/images/icons/material-symbols/400/rounded/clock-history.svg +4 -4
- package/src/assets/images/icons/material-symbols/400/rounded/clock_loader_40.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/collapse_content.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/contact_page.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/content_copy.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/copy_all.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/create_new_folder.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/dangerous.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/dash-circle.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/dashboard_customize.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/data_object.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/data_object_bold.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/demography.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/description.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/desktop_windows.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/do_not_disturb_off.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/do_not_disturb_on.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/document_scanner.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/done_all.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/dot.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/download.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/draft.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/eFax.svg +17 -17
- package/src/assets/images/icons/material-symbols/400/rounded/east.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/ecg_heart.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/ed-doctor.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/ed-form-disable.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/ed-invoice download.svg +13 -13
- package/src/assets/images/icons/material-symbols/400/rounded/ed-payment_history.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/ed-receive.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/ed-refund.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/ed-regular-notes.svg +6 -6
- package/src/assets/images/icons/material-symbols/400/rounded/ed-transaction download.svg +11 -11
- package/src/assets/images/icons/material-symbols/400/rounded/edit_calendar.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/edit_document.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/email.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/encounters_h.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/endocrinology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/ent.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/event.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/event_busy.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/expand_content.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/expand_less.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/expand_more.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/export_notes.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/favorite.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/fiber_manual_record.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/fiber_smart_record.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/file-arrow-up.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/files.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/filetype-pdf.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/filter_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/folder.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/folder_open.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/format_list_bulleted.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/gastroenterology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/gpp_bad.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/gpp_bad_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/gpp_maybe.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/gpp_maybe_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/grid_view.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/health_and_safety.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/health_and_safety_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/history_toggle_off.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/how_to_reg.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/id_card.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/info-square.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/inventory_2.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/journal-plus.svg +4 -4
- package/src/assets/images/icons/material-symbols/400/rounded/journal-plus1.svg +4 -4
- package/src/assets/images/icons/material-symbols/400/rounded/keep.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/key-person.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_down.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/keyboard_double_arrow_left.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/keyboard_double_arrow_right.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/lab_profile.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/label.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/label_important.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/labs.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/language.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/library.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/lightning-charge-fill.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/link-45deg.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/local_activity.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/local_atm.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/local_pharmacy.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/local_post_office.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/location_home.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/lock_person.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/mic_off.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/monitor_heart.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/monitoring.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/mood.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/more_horiz.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/motion_photos_paused.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/move.svg +13 -13
- package/src/assets/images/icons/material-symbols/400/rounded/musculoskeletal.svg +11 -11
- package/src/assets/images/icons/material-symbols/400/rounded/neurology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/no_insurance.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/no_insurance_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/not_allow.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/not_allow_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/not_verified.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/not_verified_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/note_add.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/note_stack.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/offline_bolt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/open_in_new.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/overview.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/paid.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/patient_list.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/pause.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/pause_circle.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/pen_edit.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/pencil-square.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/people.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/person-bounding-box.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person-circle.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person-plus.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person-rolodex.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person-up.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person-vcard.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/person.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/person_remove.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/personal_injury.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/phone_forwarded.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/photo_camera.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/play_arrow.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/prescriptions.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/price_change.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/print.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/printer.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/prompt_suggestion.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/psychology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/published_with_changes.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/pulmonology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/push_pin.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/question_mark.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/quickreply.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/radio_button_checked.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/radio_button_unchecked.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/receipt_long.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/record-circle.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/redo.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/refresh.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/refund.svg +10 -10
- package/src/assets/images/icons/material-symbols/400/rounded/reg-notes.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/remove.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/remove_moderator.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/remove_moderator_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/repeat.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/replay.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/request_quote.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/rocket_launch.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/rule_settings.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/schedule.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/search.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/self_pay.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/self_pay_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/settings.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/settings_applications.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/shield_person.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/shield_person_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/signal_cellular_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/simple-notes.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/skin.svg +11 -11
- package/src/assets/images/icons/material-symbols/400/rounded/smartphone.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/sort.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/sort_by_alpha.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/star-fill.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/stickies.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/stop_circle.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/straight.svg +3 -3
- package/src/assets/images/icons/material-symbols/400/rounded/sub-task.svg +9 -9
- package/src/assets/images/icons/material-symbols/400/rounded/subdirectory_arrow_left.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/summarize.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/swap_vert.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/swipe_left_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/syringe.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/table.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/task.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/telemedicine.svg +15 -15
- package/src/assets/images/icons/material-symbols/400/rounded/tune.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/unarchive.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/undo.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/unfold_more.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/universal-access.svg +2 -2
- package/src/assets/images/icons/material-symbols/400/rounded/universal_currency_alt.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/update_disabled.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/upload.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/upload_file.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/urology.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/verified_user.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/verified_user_fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/videocam.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/videocam_off.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/view_week.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/visibility-fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/visibility.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/visibility_off-fill.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/visibility_off.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/vpn_key.svg +10 -10
- package/src/assets/images/icons/material-symbols/400/rounded/warning.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/water_drop.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/west.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/where_to_vote.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/widgets.svg +8 -8
- package/src/assets/images/icons/material-symbols/400/rounded/x-square.svg +3 -3
- package/src/assets/images/icons.svg +723 -723
- package/src/assets/images/iconsnew.svg +120 -120
- package/src/assets/images/insurance-covers-outline.svg +7 -7
- package/src/assets/images/insurance-covers.svg +3 -3
- package/src/assets/images/ios-kiosk.svg +1 -1
- package/src/assets/images/jpg.svg +67 -67
- package/src/assets/images/link-new.svg +11 -11
- package/src/assets/images/list-check.svg +8 -8
- package/src/assets/images/loader.svg +55 -55
- package/src/assets/images/loading.svg +17 -17
- package/src/assets/images/log.svg +6 -6
- package/src/assets/images/logo-old.svg +11 -11
- package/src/assets/images/logo.svg +10 -10
- package/src/assets/images/master-card.svg +1 -1
- package/src/assets/images/master-new.svg +11 -11
- package/src/assets/images/master.svg +13 -13
- package/src/assets/images/medicine.svg +16 -16
- package/src/assets/images/message-icon.svg +24 -24
- package/src/assets/images/mic-bg.svg +10 -10
- package/src/assets/images/middleware-mobile/Android1.svg +10 -10
- package/src/assets/images/middleware-mobile/IOS.svg +8 -8
- package/src/assets/images/middleware-mobile/android.svg +9 -9
- package/src/assets/images/middleware-mobile/apple 1.svg +9 -9
- package/src/assets/images/middleware-mobile/ecare.svg +9 -9
- package/src/assets/images/middleware-mobile/f-icon.svg +5 -5
- package/src/assets/images/middleware-mobile/folder.svg +8 -8
- package/src/assets/images/middleware-mobile/logo.svg +10 -10
- package/src/assets/images/middleware-mobile/payment.svg +8 -8
- package/src/assets/images/middleware-mobile/telemedicine.svg +16 -16
- package/src/assets/images/middleware-mobile/web.svg +9 -9
- package/src/assets/images/mobile-view-new.svg +53 -53
- package/src/assets/images/mobile-view.svg +26 -26
- package/src/assets/images/mobileapp.svg +13 -13
- package/src/assets/images/nail-map/left-foot.svg +9 -9
- package/src/assets/images/nail-map/left-hand.svg +9 -9
- package/src/assets/images/nail-map/right-foot.svg +9 -9
- package/src/assets/images/nail-map/right-hand.svg +9 -9
- package/src/assets/images/new-19/Labs_Imaging.svg +8 -8
- package/src/assets/images/new-19/attach_file.svg +8 -8
- package/src/assets/images/new-19/box_edit.svg +8 -8
- package/src/assets/images/new-19/clinical_notes.svg +8 -8
- package/src/assets/images/new-19/close.svg +8 -8
- package/src/assets/images/new-19/delete.svg +8 -8
- package/src/assets/images/new-19/folder_open.svg +8 -8
- package/src/assets/images/new-19/format_list_bulleted.svg +8 -8
- package/src/assets/images/new-19/photo_camera.svg +8 -8
- package/src/assets/images/new-19/source_notes.svg +8 -8
- package/src/assets/images/new-19/splitscreen_bottom.svg +8 -8
- package/src/assets/images/new-19/stack.svg +8 -8
- package/src/assets/images/new-19/sticky_note_2.svg +8 -8
- package/src/assets/images/new-19/thunder.svg +12 -12
- package/src/assets/images/no-graphs.svg +29 -29
- package/src/assets/images/no-insurance-covers-outline.svg +8 -8
- package/src/assets/images/no-insurance-covers.svg +3 -3
- package/src/assets/images/no-messges.svg +80 -80
- package/src/assets/images/no_action_items.svg +54 -54
- package/src/assets/images/no_clinical_decision_support_found.svg +25 -25
- package/src/assets/images/no_documents_founds.svg +40 -40
- package/src/assets/images/no_encounter_notes_found.svg +16 -16
- package/src/assets/images/no_internet.svg +8 -8
- package/src/assets/images/no_referrals_found.svg +30 -30
- package/src/assets/images/no_templates_found.svg +43 -43
- package/src/assets/images/not_found.svg +10 -10
- package/src/assets/images/note-arrow.svg +4 -4
- package/src/assets/images/onboarding_loader.svg +24 -24
- package/src/assets/images/p-1.svg +15 -15
- package/src/assets/images/p-2.svg +15 -15
- package/src/assets/images/p-3.svg +15 -15
- package/src/assets/images/p-4.svg +15 -15
- package/src/assets/images/p-5.svg +15 -15
- package/src/assets/images/p-6.svg +15 -15
- package/src/assets/images/p-7.svg +10 -10
- package/src/assets/images/p-8.svg +15 -15
- package/src/assets/images/p-lab.svg +8 -8
- package/src/assets/images/padlock.svg +7 -7
- package/src/assets/images/paper_claim.svg +8 -8
- package/src/assets/images/pdf.svg +51 -51
- package/src/assets/images/person.svg +18 -18
- package/src/assets/images/plus-button.svg +10 -10
- package/src/assets/images/print_location.svg +3 -3
- package/src/assets/images/qrcode.svg +445 -445
- package/src/assets/images/reports.svg +9 -9
- package/src/assets/images/schedule.svg +5 -5
- package/src/assets/images/send.svg +8 -8
- package/src/assets/images/sort_ascending.svg +12 -12
- package/src/assets/images/sort_descending.svg +12 -12
- package/src/assets/images/sort_none.svg +13 -13
- package/src/assets/images/stop_circle.svg +8 -8
- package/src/assets/images/summarize.svg +13 -13
- package/src/assets/images/time.svg +3 -3
- package/src/assets/images/tour_guide_1.svg +31 -31
- package/src/assets/images/tour_guide_2.svg +34 -34
- package/src/assets/images/tour_guide_3.svg +29 -29
- package/src/assets/images/tour_guide_4.svg +23 -23
- package/src/assets/images/tour_guide_5.svg +37 -37
- package/src/assets/images/tour_guide_6.svg +35 -35
- package/src/assets/images/tour_guide_7.svg +58 -58
- package/src/assets/images/tour_guide_8.svg +73 -73
- package/src/assets/images/upload-new.svg +6 -6
- package/src/assets/images/visa-card.svg +1 -1
- package/src/assets/images/visa-new.svg +8 -8
- package/src/assets/images/visa.svg +10 -10
- package/src/assets/images/vitals.svg +3 -3
- package/src/assets/images/voice1.svg +9 -9
- package/src/assets/images/welcome-intro.svg +19 -19
- package/src/assets/images/welcome-intro1.svg +84 -84
- package/src/assets/scripts/SIPml-api.js +33514 -33514
- package/src/assets/scripts/annyang.min.js +6 -6
- package/src/assets/scripts/call.js +385 -385
- package/src/assets/scripts/jquery-3.3.1.min.js +1 -1
- package/src/assets/scripts/jquery.inputmask.min.js +7 -7
- package/src/assets/scripts/jstree.min.js +5 -5
- package/src/assets/scripts/scannerDocument.html +130 -130
- package/src/assets/scripts/shoelace.js +320 -320
- package/src/assets/scripts/tailwindcss.js +64 -64
- package/src/assets/scripts/wave.js +6094 -6094
- package/src/assets/svg/telemedicine.svg +16 -16
- package/src/styles.scss +3607 -3607
- package/styles/_index.scss +14 -14
- package/styles/embed.scss +337 -339
- package/styles/standalone.scss +4 -4
- package/tailwind.config.js +190 -190
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-BlOth9CN.mjs +0 -533
- package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-BlOth9CN.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-Cr02cCqy.mjs +0 -435
- package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-Cr02cCqy.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-IKR5CpVe.mjs +0 -96
- package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-IKR5CpVe.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-pRSrt5C2.mjs +0 -441
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-pRSrt5C2.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CtdkYCXC.mjs +0 -254
- package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-CtdkYCXC.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-D9hxkypQ.mjs +0 -110
- package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-D9hxkypQ.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-call-review.service-DhLqgadd.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CoqHpfH4.mjs +0 -311
- package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-CoqHpfH4.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-eds-search-field.component-BDGCmkoP.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-CabSa0_n.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-BLJTOY-p.mjs +0 -437
- package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-BLJTOY-p.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-MS9bpOBv.mjs +0 -1117
- package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-MS9bpOBv.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-Wxq3Aqip.mjs +0 -273
- package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-Wxq3Aqip.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-smart-tooltip.directive-ChEdIem3.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-CAsLgIJB.mjs +0 -208
- package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-CAsLgIJB.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-9X8YjNaO.mjs +0 -154
- package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-9X8YjNaO.mjs.map +0 -1
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-CktmVrGt.mjs +0 -47
- package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-CktmVrGt.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-DOYlRven.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';\r\n\r\n/** Host-provided session for topbar / admin-only nav. */\r\nexport interface VoiceReceptionistSession {\r\n /** Current user email for display. */\r\n readonly email: Signal<string | null>;\r\n /** Current role when the host knows it (used for super-admin API log filters). */\r\n readonly role?: Signal<string | null>;\r\n isAdmin(): boolean;\r\n /** Optional; falls back to role-based detection when omitted. */\r\n isSuperAdmin?(): boolean;\r\n logout(): void;\r\n}\r\n\r\nexport interface VoiceReceptionistConfig {\r\n /** Backend base URL (no trailing slash), e.g. https://api.example.com */\r\n apiBaseUrl: string;\r\n /** Use in-memory mock API (local demos). Default false. */\r\n useMockApi?: boolean;\r\n callLogsLimit?: number;\r\n liveCallsPollIntervalMs?: number;\r\n /**\r\n * Show Practice nav links (patients / providers / appointments / admin).\r\n * Enable in the standalone Voice Hub host; leave false for EHR embed.\r\n */\r\n includePracticeNav?: boolean;\r\n /**\r\n * Show the AI Receptionist side nav (Dashboard, Live Calls, …).\r\n * Default false for EHR embed (host owns primary nav). Standalone Voice Hub should set true.\r\n */\r\n showModuleNav?: boolean;\r\n}\r\n\r\nexport const VOICE_RECEPTIONIST_CONFIG = new InjectionToken<VoiceReceptionistConfig>(\r\n 'VOICE_RECEPTIONIST_CONFIG',\r\n);\r\n\r\nexport const VOICE_RECEPTIONIST_SESSION = new InjectionToken<VoiceReceptionistSession | null>(\r\n 'VOICE_RECEPTIONIST_SESSION',\r\n { factory: () => null },\r\n);\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\n\r\nimport {\r\n VOICE_RECEPTIONIST_CONFIG,\r\n VOICE_RECEPTIONIST_SESSION,\r\n VoiceReceptionistConfig,\r\n VoiceReceptionistSession,\r\n} from './config';\r\n\r\nexport interface ProvideVoiceReceptionistOptions extends VoiceReceptionistConfig {\r\n session?: VoiceReceptionistSession | null;\r\n}\r\n\r\nexport function provideVoiceReceptionist(\r\n options: ProvideVoiceReceptionistOptions,\r\n): EnvironmentProviders {\r\n const { session, ...config } = options;\r\n const providers: { provide: unknown; useValue: unknown }[] = [\r\n { provide: VOICE_RECEPTIONIST_CONFIG, useValue: config },\r\n ];\r\n // Only set SESSION when the host passes one — otherwise leave the token\r\n // unset so a separate host factory (or the token default) can provide it.\r\n if (session !== undefined) {\r\n providers.push({ provide: VOICE_RECEPTIONIST_SESSION, useValue: session });\r\n }\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","import { VoiceReceptionistConfig } from './config';\r\n\r\nexport interface VoiceReceptionistPaths {\r\n apiRoot(): string;\r\n authPath(suffix?: string): string;\r\n v1Path(suffix?: string): string;\r\n apiPath(suffix?: string): string;\r\n aiReceptionistPath(suffix?: string): string;\r\n healthPath(suffix?: string): string;\r\n}\r\n\r\n/** Build URL helpers from a config (or raw base URL). Safe outside injection context. */\r\nexport function createVoiceReceptionistPaths(\r\n configOrBase: VoiceReceptionistConfig | string,\r\n): VoiceReceptionistPaths {\r\n const base =\r\n typeof configOrBase === 'string' ? configOrBase : configOrBase.apiBaseUrl;\r\n const root = base.replace(/\\/$/, '');\r\n\r\n return {\r\n apiRoot: () => root,\r\n authPath: (suffix = '') => `${root}/api/auth${suffix}`,\r\n v1Path: (suffix = '') => `${root}/api/v1${suffix}`,\r\n apiPath: (suffix = '') => `${root}/api${suffix}`,\r\n aiReceptionistPath: (suffix = '') => `${root}/api/ai-receptionist${suffix}`,\r\n healthPath: (suffix = '') => `${root}/health${suffix}`,\r\n };\r\n}\r\n","/** Normalize list/detail API payloads into a row array. */\r\nexport function extractApiRows(body: unknown): unknown[] {\r\n if (Array.isArray(body)) return body;\r\n if (!body || typeof body !== 'object') return [];\r\n const o = body as Record<string, unknown>;\r\n const list = o['items'] ?? o['patients'] ?? o['appointments'] ?? o['providers'] ?? o['data'];\r\n if (Array.isArray(list)) return list;\r\n if (o['patientId'] || o['patient_id'] || o['appointmentId'] || o['appointment_id']) {\r\n return [body];\r\n }\r\n return [];\r\n}\r\n","/** Lightweight patient hit for outbound dialer typeahead. */\r\nexport interface OutboundPatientHit {\r\n patientId: string;\r\n firstName: string;\r\n lastName: string;\r\n fullName: string;\r\n phone: string | null;\r\n dob: string | null;\r\n}\r\n\r\n/** Upcoming appointment option for a selected patient. */\r\nexport interface OutboundAppointmentHit {\r\n appointmentId: string;\r\n startTime: string | null;\r\n endTime: string | null;\r\n providerName: string | null;\r\n locationName: string | null;\r\n status: string | null;\r\n visitType: string | null;\r\n}\r\n\r\nexport function mapOutboundPatientHit(raw: unknown): OutboundPatientHit | null {\r\n if (!raw || typeof raw !== 'object') return null;\r\n const r = raw as Record<string, unknown>;\r\n const patientId = String(r['patientId'] ?? r['patient_id'] ?? r['id'] ?? '').trim();\r\n if (!patientId) return null;\r\n const firstName = String(r['firstName'] ?? r['first_name'] ?? '').trim();\r\n const lastName = String(r['lastName'] ?? r['last_name'] ?? '').trim();\r\n const full =\r\n String(r['fullName'] ?? r['full_name'] ?? r['name'] ?? '').trim() ||\r\n [firstName, lastName].filter(Boolean).join(' ');\r\n const phone = String(r['mobilePhone'] ?? r['phone'] ?? r['mobile_phone'] ?? '').trim() || null;\r\n const dobRaw = String(r['dateOfBirth'] ?? r['dob'] ?? '').trim();\r\n return {\r\n patientId,\r\n firstName,\r\n lastName,\r\n fullName: full || 'Unknown patient',\r\n phone,\r\n dob: dobRaw ? dobRaw.slice(0, 10) : null,\r\n };\r\n}\r\n\r\nexport function mapOutboundAppointmentHit(raw: unknown): OutboundAppointmentHit | null {\r\n if (!raw || typeof raw !== 'object') return null;\r\n const r = raw as Record<string, unknown>;\r\n const appointmentId = String(\r\n r['appointmentId'] ?? r['appointment_id'] ?? r['id'] ?? '',\r\n ).trim();\r\n if (!appointmentId) return null;\r\n\r\n const providerObj =\r\n r['provider'] && typeof r['provider'] === 'object'\r\n ? (r['provider'] as Record<string, unknown>)\r\n : null;\r\n const locationObj =\r\n r['location'] && typeof r['location'] === 'object'\r\n ? (r['location'] as Record<string, unknown>)\r\n : null;\r\n const visitObj =\r\n r['visitType'] && typeof r['visitType'] === 'object'\r\n ? (r['visitType'] as Record<string, unknown>)\r\n : null;\r\n\r\n const providerName =\r\n String(\r\n r['providerName'] ??\r\n r['provider_name'] ??\r\n providerObj?.['fullName'] ??\r\n [providerObj?.['firstName'], providerObj?.['lastName']].filter(Boolean).join(' ') ??\r\n '',\r\n ).trim() || null;\r\n\r\n const locationName =\r\n String(\r\n r['locationName'] ?? r['location_name'] ?? locationObj?.['locationName'] ?? '',\r\n ).trim() || null;\r\n\r\n const visitTypeRaw = r['visitType'];\r\n const visitType =\r\n (typeof visitTypeRaw === 'string' ? visitTypeRaw.trim() : '') ||\r\n String(\r\n r['visitTypeName'] ??\r\n r['visit_type'] ??\r\n visitObj?.['visitTypeName'] ??\r\n visitObj?.['name'] ??\r\n '',\r\n ).trim() ||\r\n null;\r\n\r\n return {\r\n appointmentId,\r\n startTime: String(r['startTime'] ?? r['start_time'] ?? '').trim() || null,\r\n endTime: String(r['endTime'] ?? r['end_time'] ?? '').trim() || null,\r\n providerName,\r\n locationName,\r\n status: String(r['appointmentStatus'] ?? r['status'] ?? r['visitStatus'] ?? '').trim() || null,\r\n visitType,\r\n };\r\n}\r\n\r\n/** Best-effort E.164 for US/local numbers used in dialer. */\r\nexport function toE164Phone(raw: string | null | undefined): string {\r\n const digits = String(raw ?? '').replace(/\\D/g, '');\r\n if (!digits) return '';\r\n if (String(raw ?? '').trim().startsWith('+') && /^\\+[1-9]\\d{6,14}$/.test(String(raw).trim())) {\r\n return String(raw).trim();\r\n }\r\n if (digits.length === 10) return `+1${digits}`;\r\n if (digits.length === 11 && digits.startsWith('1')) return `+${digits}`;\r\n if (digits.length >= 8) return `+${digits}`;\r\n return String(raw ?? '').trim();\r\n}\r\n","import { CallControlMode } from './ai-receptionist.types';\r\n\r\n/** Staff softphone join modes. */\r\nexport type StaffMediaMode = 'listen' | 'takeover';\r\n\r\n/**\r\n * Response from POST /calls/:callId/media/join (also takeover / listen).\r\n * Staff join the existing LiveKit room `call-{callId}` — not Vonage Conversation.\r\n */\r\nexport interface StaffMediaJoinResult {\r\n ok: boolean;\r\n callId: string;\r\n mode: StaffMediaMode;\r\n provider: 'livekit' | string;\r\n /** LiveKit WebSocket URL for Room.connect */\r\n livekitUrl: string;\r\n /** Short-lived LiveKit access token — never a server secret */\r\n clientToken: string;\r\n tokenExpiresAt?: string | null;\r\n conversationId?: string | null;\r\n memberId?: string | null;\r\n roomName?: string | null;\r\n iceServers?: unknown[];\r\n controlMode?: CallControlMode | string | null;\r\n aiPaused?: boolean;\r\n /** True once staff took over — the AI left the call and cannot be resumed. */\r\n aiHandedOff?: boolean;\r\n assigned?: string | null;\r\n}\r\n\r\nexport interface CallControlChangedEvent {\r\n callId: string;\r\n controlMode?: CallControlMode | string | null;\r\n aiPaused?: boolean;\r\n aiHandedOff?: boolean;\r\n assigned?: string | null;\r\n status?: string | null;\r\n}\r\n\r\nexport function mapStaffMediaJoinResult(raw: unknown): StaffMediaJoinResult | null {\r\n if (!raw || typeof raw !== 'object') return null;\r\n const r = raw as Record<string, unknown>;\r\n const data =\r\n r['data'] && typeof r['data'] === 'object'\r\n ? (r['data'] as Record<string, unknown>)\r\n : r;\r\n\r\n const livekitUrl = String(\r\n data['livekitUrl'] ?? data['livekit_url'] ?? data['url'] ?? '',\r\n ).trim();\r\n const clientToken = String(\r\n data['clientToken'] ?? data['client_token'] ?? data['token'] ?? '',\r\n ).trim();\r\n const modeRaw = String(data['mode'] ?? 'takeover').toLowerCase();\r\n const mode: StaffMediaMode = modeRaw === 'listen' ? 'listen' : 'takeover';\r\n\r\n if (!livekitUrl || !clientToken) return null;\r\n\r\n return {\r\n ok: data['ok'] !== false,\r\n callId: String(data['callId'] ?? data['call_id'] ?? ''),\r\n mode,\r\n provider: String(data['provider'] ?? 'livekit'),\r\n livekitUrl,\r\n clientToken,\r\n tokenExpiresAt: strOrNull(data['tokenExpiresAt'] ?? data['token_expires_at']),\r\n conversationId: strOrNull(data['conversationId'] ?? data['conversation_id']),\r\n memberId: strOrNull(data['memberId'] ?? data['member_id']),\r\n roomName: strOrNull(data['roomName'] ?? data['room_name']),\r\n iceServers: Array.isArray(data['iceServers']) ? data['iceServers'] : undefined,\r\n controlMode: strOrNull(data['controlMode'] ?? data['control_mode']),\r\n aiPaused:\r\n typeof data['aiPaused'] === 'boolean'\r\n ? data['aiPaused']\r\n : typeof data['ai_paused'] === 'boolean'\r\n ? (data['ai_paused'] as boolean)\r\n : mode === 'takeover',\r\n aiHandedOff:\r\n typeof data['aiHandedOff'] === 'boolean'\r\n ? data['aiHandedOff']\r\n : mode === 'takeover',\r\n assigned: strOrNull(data['assigned']),\r\n };\r\n}\r\n\r\nfunction strOrNull(value: unknown): string | null {\r\n const s = String(value ?? '').trim();\r\n return s || null;\r\n}\r\n","/** Agent activity feed item (patients, appointments, tasks created by AI). */\r\nexport type AgentActivityType =\r\n | 'patient_created'\r\n | 'appointment_booked'\r\n | 'task_created'\r\n | string;\r\n\r\nexport type ActivitiesTab = 'task_created' | 'appointment_booked' | 'patient_created';\r\n\r\nexport interface AgentActivity {\r\n id: string;\r\n type: AgentActivityType;\r\n occurredAt: string;\r\n title: string;\r\n detail: string;\r\n patientId?: string | null;\r\n patientName?: string | null;\r\n appointmentId?: string | null;\r\n taskId?: string | null;\r\n callId?: string | null;\r\n /** Appointment window start (ISO or date string). */\r\n startAt?: string | null;\r\n /** Appointment window end (ISO). */\r\n endAt?: string | null;\r\n durationMinutes?: number | null;\r\n /** Visit / appointment category shown under the time. */\r\n visitType?: string | null;\r\n practiceName?: string | null;\r\n patientDob?: string | null;\r\n patientAge?: number | null;\r\n patientGender?: string | null;\r\n patientInitials?: string | null;\r\n /** Medical record number when known. */\r\n patientMrn?: string | null;\r\n /** True/false when the backend knows the coverage status; null when it never told us. */\r\n hasInsurance?: boolean | null;\r\n /** Payer / plan name, shown as the insurance tooltip when present. */\r\n insuranceName?: string | null;\r\n providerId?: string | null;\r\n providerName?: string | null;\r\n providerInitials?: string | null;\r\n providerSpecialty?: string | null;\r\n /** Task priority for task_created rows. */\r\n priority?: ActivityPriority | null;\r\n}\r\n\r\nexport type ActivityPriority = 'urgent' | 'high' | 'medium' | 'low' | 'normal';\r\n\r\nexport interface AgentActivityFilters {\r\n page?: number;\r\n limit?: number;\r\n /** Comma-separated or multi types filter. */\r\n types?: string;\r\n search?: string;\r\n from?: string;\r\n to?: string;\r\n /** Restrict to activities created during a specific call. */\r\n callId?: string;\r\n}\r\n\r\nexport function mapAgentActivity(raw: unknown, index = 0): AgentActivity {\r\n if (!raw || typeof raw !== 'object') {\r\n return {\r\n id: `activity-${index}`,\r\n type: 'unknown',\r\n occurredAt: new Date().toISOString(),\r\n title: 'Activity',\r\n detail: '',\r\n };\r\n }\r\n const r = raw as Record<string, unknown>;\r\n const nestedPatient = asRecord(r['patient']);\r\n const nestedProvider = asRecord(r['provider'] ?? r['practitioner'] ?? r['doctor']);\r\n\r\n const type = String(r['type'] ?? r['activityType'] ?? 'unknown');\r\n const patientName =\r\n strOrNull(r['patientName'] ?? r['patient_name']) ?? strOrNull(nestedPatient?.['name']);\r\n const providerName =\r\n strOrNull(\r\n r['providerName'] ??\r\n r['provider_name'] ??\r\n r['practitionerName'] ??\r\n r['practitioner_name'] ??\r\n r['doctorName'] ??\r\n r['doctor_name'],\r\n ) ?? strOrNull(nestedProvider?.['name']);\r\n\r\n const detail = String(r['detail'] ?? r['description'] ?? '').trim();\r\n const parsed = parseActivityDetail(detail);\r\n const insurance = resolveInsurance(r, nestedPatient);\r\n\r\n const visitType =\r\n strOrNull(r['visitType'] ?? r['visit_type'] ?? r['category'] ?? r['reason']) ??\r\n parsed.visitType;\r\n const startAt =\r\n strOrNull(r['startAt'] ?? r['start_at'] ?? r['appointmentStart'] ?? r['appointment_start']) ??\r\n parsed.startAt;\r\n const endAt = strOrNull(r['endAt'] ?? r['end_at'] ?? r['appointmentEnd'] ?? r['appointment_end']);\r\n const practiceName =\r\n strOrNull(r['practiceName'] ?? r['practice_name'] ?? r['location'] ?? r['clinic']) ??\r\n parsed.practiceName;\r\n\r\n return {\r\n id: String(r['id'] ?? r['activityId'] ?? `activity-${index}`),\r\n type,\r\n occurredAt: String(r['occurredAt'] ?? r['occurred_at'] ?? r['createdAt'] ?? ''),\r\n title: String(r['title'] ?? r['summary'] ?? '').trim() || activityTypeLabel(type),\r\n detail,\r\n patientId: strOrNull(r['patientId'] ?? r['patient_id'] ?? nestedPatient?.['id']),\r\n patientName,\r\n appointmentId: strOrNull(r['appointmentId'] ?? r['appointment_id']),\r\n taskId: strOrNull(r['taskId'] ?? r['task_id']),\r\n callId: strOrNull(r['callId'] ?? r['call_id']),\r\n startAt,\r\n endAt,\r\n durationMinutes: numOrNull(r['durationMinutes'] ?? r['duration_minutes'] ?? r['duration']),\r\n visitType,\r\n practiceName,\r\n patientDob: strOrNull(\r\n r['patientDob'] ?? r['patient_dob'] ?? r['dob'] ?? nestedPatient?.['dob'],\r\n ),\r\n patientAge: numOrNull(\r\n r['patientAge'] ?? r['patient_age'] ?? r['age'] ?? nestedPatient?.['age'],\r\n ),\r\n patientGender: normalizeGender(\r\n r['patientGender'] ?? r['patient_gender'] ?? r['gender'] ?? nestedPatient?.['gender'],\r\n ),\r\n patientInitials:\r\n strOrNull(\r\n r['patientInitials'] ??\r\n r['patient_initials'] ??\r\n r['initials'] ??\r\n nestedPatient?.['initials'],\r\n ) ?? initialsFromName(patientName),\r\n patientMrn: strOrNull(\r\n r['patientMrn'] ??\r\n r['patient_mrn'] ??\r\n r['mrn'] ??\r\n r['MRN'] ??\r\n nestedPatient?.['mrn'] ??\r\n nestedPatient?.['MRN'],\r\n ),\r\n hasInsurance: insurance.hasInsurance,\r\n insuranceName: insurance.name,\r\n providerId: strOrNull(\r\n r['providerId'] ?? r['provider_id'] ?? nestedProvider?.['id'],\r\n ),\r\n providerName,\r\n providerInitials:\r\n strOrNull(\r\n r['providerInitials'] ??\r\n r['provider_initials'] ??\r\n nestedProvider?.['initials'],\r\n ) ?? initialsFromName(providerName),\r\n providerSpecialty: strOrNull(\r\n r['providerSpecialty'] ??\r\n r['provider_specialty'] ??\r\n r['specialty'] ??\r\n nestedProvider?.['specialty'] ??\r\n nestedProvider?.['speciality'],\r\n ),\r\n priority: normalizePriority(r['priority'] ?? r['taskPriority'] ?? r['task_priority']),\r\n };\r\n}\r\n\r\nconst INSURED_WORDS = ['active', 'verified', 'covered', 'insured', 'yes', 'true', 'eligible'];\r\nconst UNINSURED_WORDS = [\r\n 'none',\r\n 'no',\r\n 'false',\r\n 'uninsured',\r\n 'self_pay',\r\n 'self-pay',\r\n 'selfpay',\r\n 'inactive',\r\n 'expired',\r\n 'missing',\r\n];\r\n\r\n/**\r\n * Coverage can arrive as a boolean, a status string, a payer name or a nested object.\r\n * Unknown stays null so the UI can distinguish \"no coverage\" from \"never told us\".\r\n */\r\nfunction resolveInsurance(\r\n r: Record<string, unknown>,\r\n patient: Record<string, unknown> | null,\r\n): { hasInsurance: boolean | null; name: string | null } {\r\n const nested = asRecord(r['insurance'] ?? patient?.['insurance']);\r\n\r\n const name =\r\n strOrNull(\r\n r['insuranceName'] ??\r\n r['insurance_name'] ??\r\n r['payerName'] ??\r\n r['payer_name'] ??\r\n r['payer'] ??\r\n patient?.['insuranceName'] ??\r\n patient?.['insurance_name'] ??\r\n nested?.['name'] ??\r\n nested?.['payer'] ??\r\n nested?.['planName'],\r\n ) ?? (typeof r['insurance'] === 'string' ? strOrNull(r['insurance']) : null);\r\n\r\n const flag =\r\n firstBoolean([\r\n r['hasInsurance'],\r\n r['has_insurance'],\r\n r['insured'],\r\n r['isInsured'],\r\n patient?.['hasInsurance'],\r\n patient?.['has_insurance'],\r\n patient?.['insured'],\r\n nested?.['active'],\r\n nested?.['isActive'],\r\n ]);\r\n if (flag !== null) return { hasInsurance: flag, name };\r\n\r\n const status = String(\r\n r['insuranceStatus'] ??\r\n r['insurance_status'] ??\r\n patient?.['insuranceStatus'] ??\r\n patient?.['insurance_status'] ??\r\n nested?.['status'] ??\r\n (typeof r['insurance'] === 'string' ? r['insurance'] : '') ??\r\n '',\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (status) {\r\n if (INSURED_WORDS.includes(status)) return { hasInsurance: true, name };\r\n if (UNINSURED_WORDS.includes(status)) return { hasInsurance: false, name };\r\n }\r\n\r\n // A payer name on its own implies coverage.\r\n return { hasInsurance: name ? true : null, name };\r\n}\r\n\r\nfunction firstBoolean(values: unknown[]): boolean | null {\r\n for (const value of values) {\r\n if (typeof value === 'boolean') return value;\r\n }\r\n return null;\r\n}\r\n\r\n/** Pull visit type / slot / practice out of a messy free-text detail blob. */\r\nfunction parseActivityDetail(detail: string): {\r\n visitType: string | null;\r\n startAt: string | null;\r\n practiceName: string | null;\r\n} {\r\n if (!detail) return { visitType: null, startAt: null, practiceName: null };\r\n\r\n const visitMatch = /\\(([^)]+)\\)\\s*$/.exec(detail);\r\n const visitType = visitMatch?.[1]?.trim() || null;\r\n\r\n const dateMatch =\r\n /\\bfor\\s+(\\d{4}-\\d{2}-\\d{2})(?:\\s+(\\d{1,2}:\\d{2}(?::\\d{2})?))?/i.exec(detail) ??\r\n /\\b(\\d{4}-\\d{2}-\\d{2})[ T](\\d{1,2}:\\d{2}(?::\\d{2})?)/.exec(detail);\r\n let startAt: string | null = null;\r\n if (dateMatch) {\r\n const date = dateMatch[1];\r\n const time = dateMatch[2] ? dateMatch[2].padStart(5, '0') : '00:00';\r\n startAt = `${date}T${time.length === 5 ? `${time}:00` : time}`;\r\n }\r\n\r\n const practiceMatch = /\\bAT\\s+([A-Z0-9][A-Z0-9 ,.'&-]{2,}?)(?:\\s*\\(|$)/.exec(detail);\r\n const practiceName = practiceMatch?.[1]?.trim().replace(/,\\s*$/, '') || null;\r\n\r\n return { visitType, startAt, practiceName };\r\n}\r\n\r\nexport function activityTypeLabel(type: string): string {\r\n switch (type) {\r\n case 'patient_created':\r\n return 'Patient created';\r\n case 'appointment_booked':\r\n return 'Appointment booked';\r\n case 'task_created':\r\n return 'Task created';\r\n default:\r\n return type.replace(/_/g, ' ') || 'Activity';\r\n }\r\n}\r\n\r\nexport function initialsFromName(name: string | null | undefined): string | null {\r\n if (!name?.trim()) return null;\r\n const cleaned = name.replace(/^dr\\.?\\s+/i, '').trim();\r\n const parts = cleaned.split(/\\s+/).filter(Boolean);\r\n if (!parts.length) return null;\r\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\r\n return `${parts[0][0] ?? ''}${parts[parts.length - 1][0] ?? ''}`.toUpperCase();\r\n}\r\n\r\nfunction normalizeGender(value: unknown): string | null {\r\n const s = String(value ?? '').trim();\r\n if (!s) return null;\r\n const key = s.toLowerCase();\r\n if (key === 'm' || key === 'male') return 'M';\r\n if (key === 'f' || key === 'female') return 'F';\r\n if (key === 'o' || key === 'other' || key === 'non-binary' || key === 'nonbinary') return 'O';\r\n return s.length <= 3 ? s.toUpperCase() : s;\r\n}\r\n\r\nfunction normalizePriority(value: unknown): ActivityPriority | null {\r\n const key = String(value ?? '')\r\n .trim()\r\n .toLowerCase()\r\n .replace(/[\\s-]+/g, '_');\r\n if (!key) return null;\r\n if (key === 'urgent' || key === 'critical') return 'urgent';\r\n if (key === 'high') return 'high';\r\n if (key === 'medium' || key === 'med' || key === 'normal') return 'medium';\r\n if (key === 'low') return 'low';\r\n return null;\r\n}\r\n\r\nfunction asRecord(value: unknown): Record<string, unknown> | null {\r\n return value && typeof value === 'object' && !Array.isArray(value)\r\n ? (value as Record<string, unknown>)\r\n : null;\r\n}\r\n\r\nfunction strOrNull(value: unknown): string | null {\r\n const s = String(value ?? '').trim();\r\n return s || null;\r\n}\r\n\r\nfunction numOrNull(value: unknown): number | null {\r\n if (value == null || value === '') return null;\r\n const n = Number(value);\r\n return Number.isFinite(n) ? n : null;\r\n}\r\n","/** Standard list pagination envelope from AI Receptionist APIs. */\r\nexport interface PaginatedResult<T> {\r\n items: T[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n}\r\n\r\nexport const DEFAULT_PAGE_SIZE = 50;\r\n\r\n/** Parse `{ items, total, page, limit }` or a bare array (legacy). */\r\nexport function asPaginatedResult<T>(\r\n body: unknown,\r\n fallbackPage = 1,\r\n fallbackLimit = DEFAULT_PAGE_SIZE,\r\n): PaginatedResult<T> {\r\n if (Array.isArray(body)) {\r\n return {\r\n items: body as T[],\r\n total: body.length,\r\n page: fallbackPage,\r\n limit: fallbackLimit,\r\n };\r\n }\r\n if (!body || typeof body !== 'object') {\r\n return { items: [], total: 0, page: fallbackPage, limit: fallbackLimit };\r\n }\r\n const o = body as Record<string, unknown>;\r\n const rawItems = o['items'] ?? o['data'];\r\n const items = Array.isArray(rawItems) ? (rawItems as T[]) : [];\r\n const total = typeof o['total'] === 'number' ? o['total'] : items.length;\r\n const page = typeof o['page'] === 'number' ? o['page'] : fallbackPage;\r\n const limit = typeof o['limit'] === 'number' ? o['limit'] : fallbackLimit;\r\n return { items, total, page, limit };\r\n}\r\n\r\nexport function totalPages(total: number, pageSize: number): number {\r\n return Math.max(1, Math.ceil(total / pageSize));\r\n}\r\n","import { AgentSettings } from '../models/ai-receptionist.types';\r\n\r\nexport const WELCOME_MESSAGE_MAX = 1000;\r\n\r\nexport function buildAutoWelcomeTemplate(practiceName: string, agentName: string): string {\r\n const practice = practiceName.trim() || 'our office';\r\n const agent = agentName.trim() || 'your AI receptionist';\r\n return `Hi, thanks for calling ${practice}. This is ${agent}. How can I help you today?`;\r\n}\r\n\r\nexport function resolveWelcomePreview(\r\n welcomeMessage: string | undefined,\r\n practiceName: string,\r\n agentName: string,\r\n): string {\r\n const custom = welcomeMessage?.trim();\r\n if (custom) return custom;\r\n return buildAutoWelcomeTemplate(practiceName, agentName);\r\n}\r\n\r\nexport function computeEffectiveWelcomeMessage(settings: Pick<AgentSettings, 'general'>): string {\r\n const general = settings.general;\r\n const custom = String(general['welcomeMessage'] ?? '').trim();\r\n if (custom) return custom;\r\n return buildAutoWelcomeTemplate(\r\n String(general['practiceName'] ?? ''),\r\n String(general['agentName'] ?? ''),\r\n );\r\n}\r\n","/** Call history table helpers — resolution badges + result chips. */\r\n\r\nexport type HistoryResolution = 'resolved' | 'needs_attention';\r\n\r\nexport function historyResolution(input: {\r\n outcome?: string;\r\n resolution?: string | null;\r\n risk?: 'urgent' | 'review' | null;\r\n}): HistoryResolution {\r\n if (input.risk === 'urgent' || input.risk === 'review') return 'needs_attention';\r\n\r\n const r = String(input.resolution ?? '').trim().toLowerCase();\r\n if (r === 'resolved') return 'resolved';\r\n if (r === 'unresolved' || r.includes('needs') || r.includes('attention')) {\r\n return 'needs_attention';\r\n }\r\n\r\n const o = String(input.outcome ?? '').toLowerCase();\r\n if (\r\n o.includes('unresolved') ||\r\n o.includes('fail') ||\r\n o.includes('escalat') ||\r\n o.includes('abandon') ||\r\n o.includes('attention') ||\r\n o.includes('voicemail') ||\r\n o === 'transferred'\r\n ) {\r\n return 'needs_attention';\r\n }\r\n if (o === 'completed' || o.includes('completed')) return 'resolved';\r\n return 'resolved';\r\n}\r\n\r\nexport function historyResolutionLabel(resolution: HistoryResolution): string {\r\n return resolution === 'resolved' ? 'RESOLVED' : 'NEEDS ATTENTION';\r\n}\r\n\r\nexport function resultChipIcon(label: string): string {\r\n const key = label.toLowerCase();\r\n if (key.includes('appointment') || key.includes('book')) return 'calendar_month';\r\n if (key.includes('task')) return 'check_circle';\r\n if (key.includes('register') || key.includes('patient')) return 'person_add';\r\n if (key.includes('info')) return 'info';\r\n if (key.includes('transfer')) return 'phone_forwarded';\r\n if (key.includes('refill')) return 'medication';\r\n return 'label';\r\n}\r\n\r\nexport function callerMetaLine(input: {\r\n dob?: string | null;\r\n age?: number | null;\r\n gender?: string | null;\r\n phone?: string | null;\r\n name?: string | null;\r\n matched?: boolean;\r\n}): string {\r\n if (isUnknownCaller(input.name, input.matched)) {\r\n return String(input.phone ?? '').trim() || '—';\r\n }\r\n const age = input.age ?? ageFromDob(input.dob);\r\n if (!input.dob && age == null && !input.gender) {\r\n return String(input.phone ?? '').trim() || '—';\r\n }\r\n const parts: string[] = [];\r\n if (input.dob) {\r\n parts.push(`DOB: ${formatDobDisplay(input.dob)}`);\r\n }\r\n const ageGender: string[] = [];\r\n if (age != null) ageGender.push(`${age}Y`);\r\n if (input.gender) ageGender.push(String(input.gender).charAt(0).toUpperCase());\r\n if (ageGender.length) {\r\n parts.push(parts.length ? `• ${ageGender.join(' | ')}` : ageGender.join(' | '));\r\n }\r\n return parts.join(' ') || String(input.phone ?? '').trim() || '—';\r\n}\r\n\r\nfunction formatDobDisplay(dob: string): string {\r\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(dob.trim());\r\n if (m) return `${m[2]}-${m[3]}-${m[1]}`;\r\n return dob;\r\n}\r\n\r\n/** Age in whole years from YYYY-MM-DD (or partial ISO). */\r\nexport function ageFromDob(dob: string | null | undefined, at = new Date()): number | null {\r\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(String(dob ?? '').trim());\r\n if (!m) return null;\r\n const y = Number(m[1]);\r\n const mo = Number(m[2]);\r\n const d = Number(m[3]);\r\n if (!y || !mo || !d) return null;\r\n let age = at.getFullYear() - y;\r\n const hadBirthday =\r\n at.getMonth() + 1 > mo || (at.getMonth() + 1 === mo && at.getDate() >= d);\r\n if (!hadBirthday) age -= 1;\r\n return age >= 0 && age < 130 ? age : null;\r\n}\r\n\r\nexport function isUnknownCaller(name: string | null | undefined, matched?: boolean): boolean {\r\n if (matched === false) return true;\r\n const n = String(name ?? '').trim();\r\n return !n || /^unknown/i.test(n) || n === '?';\r\n}\r\n\r\n/** Derive result chips from explicit actions, else from outcome text. */\r\nexport function historyResultChips(results: string[] | undefined, outcome: string): string[] {\r\n if (results?.length) return results;\r\n const o = outcome.trim();\r\n if (!o) return [];\r\n const lower = o.toLowerCase();\r\n if (lower.includes('appointment') || lower.includes('book')) return ['Appointment Booked'];\r\n if (lower.includes('task')) return ['Task Created'];\r\n if (lower.includes('register')) return ['Patient Registered'];\r\n if (lower.includes('info') || lower.includes('hours') || lower.includes('direction')) {\r\n return ['Information Provided'];\r\n }\r\n if (lower === 'completed') return ['Information Provided'];\r\n return [o];\r\n}\r\n","/** V3 agent tool labels — mirrors GET /api/agent-tools/catalog */\r\nexport const AGENT_TOOL_LABELS: Record<string, string> = {\r\n find_doctors: 'Found Doctors',\r\n check_doctor_availability: 'Checked Doctor Availability',\r\n list_visit_types: 'Listed Visit Types',\r\n search_patients: 'Searched Patients',\r\n search_practice_faq: 'Searched Practice FAQ',\r\n book_existing_appointment: 'Booked Appointment',\r\n register_and_book_appointment: 'Registered & Booked Appointment',\r\n submit_medication_refill: 'Submitted Medication Refill',\r\n};\r\n\r\nfunction looksLikeToolKey(value: string): boolean {\r\n return /^[a-z][a-z0-9_]*$/.test(value.trim());\r\n}\r\n\r\nfunction humanizeToolKey(key: string): string {\r\n return key\r\n .replace(/^tool_/, '')\r\n .split('_')\r\n .filter(Boolean)\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join(' ');\r\n}\r\n\r\n/** Prefer API `name`; fall back to catalog label or a readable key. */\r\nexport function resolveToolDisplayName(key: string | undefined, name: string): string {\r\n const trimmed = name?.trim() ?? '';\r\n if (trimmed && !looksLikeToolKey(trimmed)) return trimmed;\r\n\r\n const lookupKey = key?.trim() || (looksLikeToolKey(trimmed) ? trimmed : '');\r\n if (lookupKey && AGENT_TOOL_LABELS[lookupKey]) return AGENT_TOOL_LABELS[lookupKey];\r\n\r\n if (lookupKey) return humanizeToolKey(lookupKey);\r\n return trimmed || 'Tool activity';\r\n}\r\n\r\n/** Derive tool key from legacy `tech` values like `tool_check_doctor_availability`. */\r\nexport function inferToolKeyFromTech(tech: string): string | undefined {\r\n const trimmed = tech?.trim();\r\n if (!trimmed) return undefined;\r\n if (trimmed.startsWith('tool_')) return trimmed.slice(5);\r\n if (looksLikeToolKey(trimmed)) return trimmed;\r\n return undefined;\r\n}\r\n\r\nexport function resolveToolKey(\r\n key: string | undefined,\r\n name: string,\r\n tech: string,\r\n): string | undefined {\r\n const explicit = key?.trim();\r\n if (explicit) return explicit;\r\n if (looksLikeToolKey(name)) return name.trim();\r\n return inferToolKeyFromTech(tech);\r\n}\r\n\r\n/** Stable @for track key — avoid ?? in template track expressions (Angular compiler bug). */\r\nexport function toolEventTrackKey(\r\n tool: { key?: string; t: string; tech: string; name: string },\r\n index: number,\r\n): string {\r\n return `${tool.key ?? ''}|${tool.t}|${tool.tech}|${tool.name}|${index}`;\r\n}\r\n","import {\r\n AgentSettings,\r\n AiCreatedAppointment,\r\n BookingMode,\r\n BookingModeOption,\r\n BookingModeSettings,\r\n AiReceptionistStatus,\r\n AnalyticsData,\r\n AnalyticsPeakSeries,\r\n AnalyticsVolumeSeries,\r\n AttentionItem,\r\n AuditEvent,\r\n CallStatus,\r\n CallControlMode,\r\n DashboardData,\r\n HistoryCall,\r\n HistoryDetail,\r\n LiveCall,\r\n LocationOption,\r\n ProviderOption,\r\n Sentiment,\r\n SetupData,\r\n TaskItem,\r\n CreateTaskRequest,\r\n TaskFilters,\r\n ToolEvent,\r\n TranscriptLine,\r\n Verification,\r\n CallRecordingMeta,\r\n CallRecordingStatus,\r\n RegenerateSummaryResult,\r\n} from '../models/ai-receptionist.types';\r\nimport {\r\n AnalyticsDto,\r\n AiCreatedAppointmentDto,\r\n AnalyticsPeakSeriesDto,\r\n AnalyticsVolumeSeriesDto,\r\n AttentionItemDto,\r\n AuditEventDto,\r\n DashboardSummaryDto,\r\n HistoryCallDto,\r\n HistoryDetailDto,\r\n HistoryListDto,\r\n LiveCallDto,\r\n LiveTranscriptLineDto,\r\n SetupDto,\r\n TaskDto,\r\n CreateTaskDto,\r\n AiStatusDto,\r\n RecordingDto,\r\n RegenerateSummaryResponseDto,\r\n} from '../models/api-dto.types';\r\nimport { computeEffectiveWelcomeMessage } from '../utils/welcome-message.util';\r\nimport { ageFromDob } from '../utils/call-history-display.util';\r\nimport { resolveToolDisplayName, resolveToolKey } from '../utils/tool-labels.util';\r\n\r\nconst TONE_COLORS: Record<string, string> = {\r\n brand: '#3681F4',\r\n pos: '#0ABF52',\r\n notice: '#FFB900',\r\n neg: '#F03740',\r\n violet: '#8E51FF',\r\n gray: '#71717A',\r\n};\r\n\r\nconst DAY_LABELS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\r\n\r\nexport function parseDurToSeconds(dur: string): number {\r\n if (!dur) return 0;\r\n const parts = dur.split(':').map((p) => Number(p.trim()));\r\n if (parts.some((n) => !Number.isFinite(n))) return 0;\r\n if (parts.length === 2) return parts[0] * 60 + parts[1];\r\n if (parts.length === 3) return parts[0] * 3600 + parts[1] * 60 + parts[2];\r\n return 0;\r\n}\r\n\r\nexport function parsePercent(value: string): number {\r\n const n = Number(String(value).replace('%', '').trim());\r\n return Number.isFinite(n) ? n : 0;\r\n}\r\n\r\nfunction normalizeConfidence(value: number): number {\r\n if (value <= 1) return Math.round(value * 100);\r\n return Math.round(value);\r\n}\r\n\r\nfunction mapVerification(raw: string): Verification {\r\n const v = raw?.toLowerCase();\r\n if (v === 'verified' || v === 'partial' || v === 'failed' || v === 'unknown') return v;\r\n return 'unknown';\r\n}\r\n\r\nfunction mapCallStatus(raw: string): CallStatus {\r\n const s = String(raw ?? 'ai').toLowerCase().replace(/_/g, '-');\r\n const allowed: CallStatus[] = [\r\n 'ai',\r\n 'needs-help',\r\n 'human-requested',\r\n 'urgent',\r\n 'takeover',\r\n 'transferring',\r\n ];\r\n return allowed.includes(s as CallStatus) ? (s as CallStatus) : 'ai';\r\n}\r\n\r\nfunction mapControlMode(\r\n raw: string | null | undefined,\r\n status: string | null | undefined,\r\n aiPaused?: boolean,\r\n): CallControlMode {\r\n const mode = String(raw ?? '').toLowerCase().replace(/_/g, '-');\r\n if (mode === 'ai' || mode === 'takeover' || mode === 'listen' || mode === 'paused') {\r\n return mode;\r\n }\r\n if (aiPaused === true) return 'paused';\r\n const st = String(status ?? '').toLowerCase().replace(/_/g, '-');\r\n if (st === 'takeover') return 'takeover';\r\n if (st === 'paused' || st === 'pause') return 'paused';\r\n if (st === 'listen' || st === 'listening') return 'listen';\r\n return 'ai';\r\n}\r\n\r\nfunction mapSentiment(raw: string): Sentiment {\r\n const s = String(raw ?? 'neutral').toLowerCase();\r\n if (s === 'calm' || s === 'neutral' || s === 'frustrated' || s === 'urgent') return s;\r\n return 'neutral';\r\n}\r\n\r\nexport function mapTranscriptLine(\r\n line: LiveTranscriptLineDto & { at?: number; offsetSeconds?: number; startTime?: number },\r\n): TranscriptLine {\r\n return {\r\n who: line.who,\r\n text: line.text,\r\n flag: line.flag as TranscriptLine['flag'],\r\n at: line.at ?? line.offsetSeconds ?? line.startTime,\r\n };\r\n}\r\n\r\nexport function mapToolEvent(tool: {\r\n t: string;\r\n key?: string;\r\n name: string;\r\n tech: string;\r\n result: string;\r\n state: string;\r\n}): ToolEvent {\r\n const state = tool.state as ToolEvent['state'];\r\n const key = resolveToolKey(tool.key, tool.name, tool.tech);\r\n return {\r\n t: tool.t,\r\n key,\r\n name: resolveToolDisplayName(key, tool.name),\r\n tech: tool.tech,\r\n result: tool.result,\r\n state: ['ok', 'warn', 'error', 'active'].includes(state) ? state : 'ok',\r\n };\r\n}\r\n\r\nexport function normalizeRecordingStatus(\r\n status: string | undefined,\r\n url: string | null | undefined,\r\n): CallRecordingStatus {\r\n const known: CallRecordingStatus[] = ['ready', 'pending', 'unavailable', 'failed'];\r\n if (status && known.includes(status as CallRecordingStatus)) {\r\n return status as CallRecordingStatus;\r\n }\r\n return url ? 'ready' : 'unavailable';\r\n}\r\n\r\nexport function mapRecordingMeta(dto: RecordingDto): CallRecordingMeta {\r\n return {\r\n callId: dto.callId,\r\n status: normalizeRecordingStatus(dto.status, dto.url),\r\n url: dto.url ?? null,\r\n contentType: dto.contentType,\r\n durationSeconds: dto.durationSeconds,\r\n message: dto.message,\r\n };\r\n}\r\n\r\nexport function mapLiveCallDto(dto: LiveCallDto): LiveCall {\r\n const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();\r\n const dob = dobRaw ? dobRaw.slice(0, 10) : undefined;\r\n const ageNum =\r\n typeof dto.age === 'number'\r\n ? dto.age\r\n : dto.age != null && String(dto.age).trim()\r\n ? Number(dto.age)\r\n : null;\r\n const age =\r\n ageNum != null && Number.isFinite(ageNum) ? ageNum : ageFromDob(dob);\r\n const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;\r\n\r\n return {\r\n id: dto.id,\r\n name: dto.name,\r\n initials: dto.initials || (dto.matched ? '' : '?'),\r\n avatar: dto.avatar,\r\n phone: dto.phone,\r\n verification: mapVerification(dto.verification),\r\n direction: dto.direction,\r\n reason: dto.reason,\r\n status: mapCallStatus(dto.status),\r\n started: dto.started,\r\n sentiment: mapSentiment(dto.sentiment),\r\n confidence: normalizeConfidence(dto.confidence),\r\n goal: dto.goal,\r\n dob,\r\n age,\r\n gender,\r\n location: dto.location ?? '',\r\n provider: dto.provider,\r\n language: dto.language,\r\n matched: dto.matched,\r\n assigned: dto.assigned,\r\n controlMode: mapControlMode(dto.controlMode, dto.status, dto.aiPaused),\r\n tools: (dto.tools ?? []).map(mapToolEvent),\r\n transcript: (dto.transcript ?? []).map(mapTranscriptLine),\r\n aiPaused: dto.aiPaused === true || String(dto.controlMode ?? '').toLowerCase() === 'paused',\r\n aiHandedOff: dto.aiHandedOff === true,\r\n };\r\n}\r\n\r\nexport function mapHistoryCallDto(dto: HistoryCallDto): HistoryCall {\r\n const parsedStarted = Date.parse(dto.startedAt ?? dto.when);\r\n const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();\r\n const ageNum =\r\n typeof dto.age === 'number'\r\n ? dto.age\r\n : dto.age != null && String(dto.age).trim()\r\n ? Number(dto.age)\r\n : null;\r\n const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;\r\n const handledRaw = String(dto.handledBy ?? dto.handler ?? '').trim().toLowerCase();\r\n let handledBy: HistoryCall['handledBy'];\r\n if (handledRaw === 'staff' || handledRaw === 'human' || handledRaw === 'user') {\r\n handledBy = 'staff';\r\n } else if (handledRaw === 'ai' || handledRaw === 'agent' || handledRaw === 'ava') {\r\n handledBy = 'ai';\r\n } else if (String(dto.outcome ?? '').toLowerCase().includes('transfer')) {\r\n handledBy = 'staff';\r\n } else {\r\n handledBy = 'ai';\r\n }\r\n\r\n return {\r\n id: dto.id,\r\n name: dto.name,\r\n initials: dto.initials || '?',\r\n phone: dto.phone,\r\n direction: dto.dir,\r\n outcome: dto.outcome,\r\n resolution: dto.resolution ?? null,\r\n reason: dto.reason,\r\n duration: parseDurToSeconds(dto.dur),\r\n durationLabel: dto.dur,\r\n started: Number.isFinite(parsedStarted) ? parsedStarted : 0,\r\n whenLabel: Number.isFinite(parsedStarted) ? undefined : dto.when,\r\n location: dto.location,\r\n verification: mapVerification(dto.verify),\r\n review: dto.review === 'reviewed' ? 'reviewed' : 'needs',\r\n handledBy,\r\n dob: dobRaw ? dobRaw.slice(0, 10) : null,\r\n age: ageNum != null && Number.isFinite(ageNum) ? ageNum : null,\r\n gender,\r\n results: Array.isArray(dto.actions)\r\n ? dto.actions.map((a) => String(a).trim()).filter(Boolean)\r\n : [],\r\n risk: dto.risk ?? null,\r\n };\r\n}\r\n\r\nexport function mapHistoryDetailDto(\r\n call: HistoryCallDto,\r\n detail: HistoryDetailDto,\r\n recordingUrl?: string | null,\r\n): HistoryDetail {\r\n const base = mapHistoryCallDto(call);\r\n return {\r\n ...base,\r\n summary: detail.summary,\r\n transcript: (detail.transcript ?? []).map(mapTranscriptLine),\r\n tools: (detail.tools ?? []).map(mapToolEvent),\r\n recordingUrl: recordingUrl ?? undefined,\r\n };\r\n}\r\n\r\nexport function mapAttentionItemDto(dto: AttentionItemDto): AttentionItem {\r\n return {\r\n id: dto.id,\r\n callId: dto.id,\r\n title: dto.name,\r\n detail: dto.why || dto.reason,\r\n severity: dto.sev === 'urgent' ? 'urgent' : 'warn',\r\n time: Date.now(),\r\n timeLabel: dto.time,\r\n };\r\n}\r\n\r\nexport function mapDashboardSummaryDto(dto: DashboardSummaryDto): DashboardData['stats'] {\r\n return {\r\n activeCalls: dto.liveCalls,\r\n answeredToday: dto.callsToday,\r\n appointmentsBooked: dto.appointmentsBooked ?? 0,\r\n tasksCreated: dto.openTasks,\r\n completionRate: parsePercent(dto.aiHandledRate),\r\n };\r\n}\r\n\r\nexport function mapAiCreatedAppointmentDto(\r\n dto: AiCreatedAppointmentDto,\r\n): AiCreatedAppointment {\r\n return {\r\n id: dto.id,\r\n appointmentId: dto.appointmentId ?? dto.id,\r\n patientName: dto.patientName || 'Unknown patient',\r\n providerName: dto.providerName ?? null,\r\n startTime: Date.parse(dto.startTime) || 0,\r\n createdAt: Date.parse(dto.createdAt) || 0,\r\n callId: dto.callId ?? null,\r\n status: dto.status ?? null,\r\n };\r\n}\r\n\r\nexport function mapTaskDto(dto: TaskDto): TaskItem {\r\n let status: TaskItem['status'] = 'open';\r\n if (dto.status === 'done') status = 'done';\r\n else if (dto.status === 'in-progress') status = 'in_progress';\r\n\r\n return {\r\n id: dto.id,\r\n created: dto.created ? Date.parse(dto.created) || Date.now() : Date.now(),\r\n title: dto.title || dto.type || 'Task',\r\n type: dto.type || 'Other',\r\n description: dto.summary ?? '',\r\n patient: dto.patient || '—',\r\n priority: dto.priority ?? 'normal',\r\n status,\r\n source: dto.source ?? 'voice',\r\n assignee: dto.assignee || '—',\r\n callId: dto.call || undefined,\r\n edvakTaskId: dto.edvakTaskId,\r\n edvakStatus: dto.edvakStatus,\r\n medicationName: dto.medicationName,\r\n medicationId: dto.medicationId,\r\n };\r\n}\r\n\r\nexport function toApiTaskStatus(status: TaskItem['status']): TaskDto['status'] {\r\n if (status === 'done') return 'done';\r\n if (status === 'in_progress') return 'in-progress';\r\n return 'open';\r\n}\r\n\r\nexport function mapCreateTaskRequest(req: CreateTaskRequest): CreateTaskDto {\r\n return {\r\n title: req.title.trim(),\r\n type: req.type,\r\n call: req.callId,\r\n summary: req.description?.trim() || undefined,\r\n patient: req.patient?.trim() || undefined,\r\n priority: req.priority,\r\n assignee: req.assignee?.trim() || undefined,\r\n };\r\n}\r\n\r\nexport function mapRegenerateSummaryResponse(\r\n dto: RegenerateSummaryResponseDto,\r\n): RegenerateSummaryResult {\r\n return {\r\n callId: dto.callId,\r\n summary: dto.summary,\r\n summaryModel: dto.summaryModel,\r\n summaryGeneratedAt: dto.summaryGeneratedAt,\r\n transcriptTurnCount: dto.transcriptTurnCount,\r\n };\r\n}\r\n\r\nexport function mapAuditEventDto(dto: AuditEventDto, index: number): AuditEvent {\r\n return {\r\n id: `${dto.ts}-${index}`,\r\n actor: dto.actorName || dto.actor,\r\n action: dto.event,\r\n target: dto.call || dto.patient || dto.cat,\r\n detail: dto.detail,\r\n at: dto.ts ? Date.parse(dto.ts) || Date.now() : Date.now(),\r\n };\r\n}\r\n\r\nexport function mapAnalyticsDto(dto: AnalyticsDto, range: string): AnalyticsData {\r\n const volume = mapVolumeSeries(dto.volume);\r\n const peakHours = mapPeakSeries(dto.peak);\r\n\r\n const outcomes = (dto.outcomes ?? []).map((o) => ({\r\n label: o.label,\r\n value: o.v,\r\n color: TONE_COLORS[o.tone] ?? TONE_COLORS['brand'],\r\n }));\r\n\r\n const reasons = (dto.reasons ?? []).map((r) => ({ label: r.label, value: r.v }));\r\n const transfers = (dto.transfers ?? []).map((t) => ({ label: t.label, value: t.v }));\r\n\r\n const kpiCards: AnalyticsData['kpiCards'] = (dto.kpis ?? []).map((k) => ({\r\n label: k.label,\r\n value: k.value,\r\n delta: k.delta,\r\n tone: k.tone,\r\n sub: k.sub,\r\n }));\r\n\r\n const kpiMap: Record<string, number> = {};\r\n for (const k of dto.kpis ?? []) {\r\n const key = k.label.toLowerCase();\r\n const num = parseAnalyticsNumber(k.value);\r\n if (key.includes('handled') || key.includes('total call') || key === 'calls') {\r\n kpiMap['totalCalls'] = num;\r\n } else if (key.includes('handle time') || key.includes('avg duration') || key.includes('duration')) {\r\n kpiMap['avgDuration'] = parseDurationSeconds(k.value);\r\n } else if (key.includes('resolution') || key.includes('booking')) {\r\n kpiMap['bookingRate'] = num;\r\n } else if (key.includes('transfer')) {\r\n kpiMap['transferRate'] = num;\r\n }\r\n }\r\n\r\n return {\r\n range,\r\n kpiCards,\r\n volume,\r\n outcomes,\r\n reasons,\r\n transfers,\r\n peakHours,\r\n kpis: {\r\n totalCalls: kpiMap['totalCalls'] ?? 0,\r\n avgDuration: kpiMap['avgDuration'] ?? 0,\r\n bookingRate: kpiMap['bookingRate'] ?? 0,\r\n transferRate: kpiMap['transferRate'] ?? 0,\r\n },\r\n };\r\n}\r\n\r\nfunction parseAnalyticsNumber(value: string): number {\r\n const cleaned = String(value).replace(/[^\\d.]/g, '');\r\n const num = Number(cleaned);\r\n return Number.isFinite(num) ? num : 0;\r\n}\r\n\r\nfunction parseDurationSeconds(value: string): number {\r\n const trimmed = value.trim();\r\n const clock = /^(\\d+):(\\d{2})$/.exec(trimmed);\r\n if (clock) {\r\n return Number(clock[1]) * 60 + Number(clock[2]);\r\n }\r\n return parseAnalyticsNumber(trimmed);\r\n}\r\n\r\nfunction isVolumeSeriesDto(raw: AnalyticsDto['volume']): raw is AnalyticsVolumeSeriesDto {\r\n return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;\r\n}\r\n\r\nfunction isPeakSeriesDto(raw: AnalyticsDto['peak']): raw is AnalyticsPeakSeriesDto {\r\n return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;\r\n}\r\n\r\nfunction formatLegacyHourLabel(hour: number): string {\r\n if (hour === 0) return '12 AM';\r\n if (hour < 12) return `${hour} AM`;\r\n if (hour === 12) return '12 PM';\r\n return `${hour - 12} PM`;\r\n}\r\n\r\nfunction mapVolumeSeries(raw: AnalyticsDto['volume']): AnalyticsVolumeSeries {\r\n if (isVolumeSeriesDto(raw)) {\r\n return {\r\n timezone: raw.timezone ?? 'UTC',\r\n startDate: raw.startDate ?? '',\r\n endDate: raw.endDate ?? '',\r\n points: (raw.points ?? []).map((p) => ({\r\n date: p.date,\r\n day: p.day,\r\n label: p.label,\r\n count: p.count,\r\n inbound: p.inbound,\r\n outbound: p.outbound,\r\n })),\r\n };\r\n }\r\n\r\n const values = Array.isArray(raw) ? raw : [];\r\n return {\r\n timezone: 'UTC',\r\n startDate: '',\r\n endDate: '',\r\n points: values.map((count, i) => ({\r\n date: '',\r\n day: DAY_LABELS[i % DAY_LABELS.length] ?? `D${i + 1}`,\r\n label: DAY_LABELS[i % DAY_LABELS.length] ?? `Day ${i + 1}`,\r\n count,\r\n })),\r\n };\r\n}\r\n\r\nfunction mapPeakSeries(raw: AnalyticsDto['peak']): AnalyticsPeakSeries {\r\n if (isPeakSeriesDto(raw)) {\r\n return {\r\n timezone: raw.timezone ?? 'UTC',\r\n points: (raw.points ?? []).map((p) => ({\r\n hour: p.hour,\r\n label: p.label,\r\n count: p.count,\r\n })),\r\n };\r\n }\r\n\r\n const values = Array.isArray(raw) ? raw : [];\r\n return {\r\n timezone: 'UTC',\r\n points: values.map((count, hour) => ({\r\n hour,\r\n label: formatLegacyHourLabel(hour),\r\n count,\r\n })),\r\n };\r\n}\r\n\r\nfunction asExplicitBool(value: unknown): boolean | undefined {\r\n if (typeof value === 'boolean') return value;\r\n if (value === 1 || value === 'true' || value === '1') return true;\r\n if (value === 0 || value === 'false' || value === '0') return false;\r\n return undefined;\r\n}\r\n\r\n/** True/false only when the payload has a real online flag — not setup `activated`. */\r\nexport function readExplicitAgentOnline(\r\n raw: unknown,\r\n opts?: { acceptEnabled?: boolean },\r\n): boolean | undefined {\r\n if (!raw || typeof raw !== 'object') return undefined;\r\n const r = raw as Record<string, unknown>;\r\n const nested = r['data'];\r\n const sources: Record<string, unknown>[] = [r];\r\n if (nested && typeof nested === 'object' && !Array.isArray(nested)) {\r\n sources.push(nested as Record<string, unknown>);\r\n }\r\n const keys = opts?.acceptEnabled\r\n ? ['agentOnline', 'agent_online', 'agentOn', 'agent_on', 'enabled']\r\n : ['agentOnline', 'agent_online', 'agentOn', 'agent_on'];\r\n for (const src of sources) {\r\n for (const key of keys) {\r\n const parsed = asExplicitBool(src[key]);\r\n if (parsed !== undefined) return parsed;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function mapStatusDto(\r\n dto: AiStatusDto,\r\n opts?: { acceptEnabled?: boolean },\r\n): AiReceptionistStatus {\r\n const explicit = readExplicitAgentOnline(dto, opts);\r\n const step = dto.setupStep ?? (dto.activated ? 11 : 0);\r\n return {\r\n agentOn: explicit ?? false,\r\n agentOnExplicit: explicit !== undefined,\r\n mode: 'live',\r\n readiness: Math.min(100, Math.round((step / 11) * 100)),\r\n };\r\n}\r\n\r\nexport function mapSetupDto(dto: SetupDto): SetupData {\r\n const stepCount = 11;\r\n const steps = Array.from({ length: stepCount }, (_, i) => ({\r\n id: i + 1,\r\n title: `Setup step ${i + 1}`,\r\n description: dto.activated ? 'Complete' : i + 1 < dto.step ? 'Complete' : 'Pending',\r\n complete: dto.activated || i + 1 < dto.step,\r\n }));\r\n\r\n return {\r\n readiness: Math.min(100, Math.round((dto.step / stepCount) * 100)),\r\n steps,\r\n testTranscript: [],\r\n };\r\n}\r\n\r\nexport function mapSettingsResponse(body: unknown, safetyBody: unknown): AgentSettings {\r\n const raw = body as {\r\n settings?: Record<string, unknown>;\r\n effectiveWelcomeMessage?: string;\r\n };\r\n const settings = raw?.settings ?? (body as Record<string, unknown>) ?? {};\r\n\r\n const section = (key: string): Record<string, string | boolean | number> => {\r\n const val = settings[key];\r\n if (val && typeof val === 'object' && !Array.isArray(val)) {\r\n return val as Record<string, string | boolean | number>;\r\n }\r\n return {};\r\n };\r\n\r\n const safetyRaw = safetyBody as {\r\n checks?: Array<{ id: string; ok: boolean; label?: string }>;\r\n };\r\n const safety = (safetyRaw?.checks ?? []).map((c) => ({\r\n id: c.id,\r\n label: c.label ?? humanizeSettingsKey(c.id),\r\n status: c.ok ? ('ok' as const) : ('warn' as const),\r\n }));\r\n\r\n const mapped: AgentSettings = {\r\n general: normalizeGeneralSection(section('general')),\r\n phone: normalizePhoneSection(section('phoneAvailability')),\r\n tasks: section('allowedTasks'),\r\n scheduling: section('schedulingRules'),\r\n refill: section('refillRules'),\r\n verify: section('patientVerification'),\r\n escalation: section('humanEscalation'),\r\n outbound: section('outboundCalling'),\r\n knowledge: normalizeKnowledgeSection(section('knowledgeBase')),\r\n safety,\r\n transcripts: normalizeTranscriptsSection(section('transcriptsRecording')),\r\n advanced: normalizeAdvancedSection(section('advanced')),\r\n };\r\n\r\n mapped.effectiveWelcomeMessage =\r\n raw.effectiveWelcomeMessage ?? computeEffectiveWelcomeMessage(mapped);\r\n\r\n const root = body as Record<string, unknown>;\r\n mapped.effectiveVoiceSystemPrompt = String(\r\n root['effectiveVoiceSystemPrompt'] ??\r\n root['effective_voice_system_prompt'] ??\r\n mapped.advanced['voiceSystemPrompt'] ??\r\n '',\r\n );\r\n const usingDefaultRaw =\r\n root['usingDefaultVoiceSystemPrompt'] ?? root['using_default_voice_system_prompt'];\r\n mapped.usingDefaultVoiceSystemPrompt =\r\n typeof usingDefaultRaw === 'boolean'\r\n ? usingDefaultRaw\r\n : !String(mapped.advanced['voiceSystemPrompt'] ?? '').trim();\r\n\r\n if (!mapped.knowledge) {\r\n mapped.knowledge = { whatToSay: '', whatNotToSay: '' };\r\n }\r\n\r\n return mapped;\r\n}\r\n\r\nfunction normalizeAdvancedSection(\r\n raw: Record<string, string | boolean | number>,\r\n): Record<string, string | boolean | number> {\r\n return {\r\n ...raw,\r\n voiceSystemPrompt: String(\r\n raw['voiceSystemPrompt'] ?? raw['voice_system_prompt'] ?? '',\r\n ),\r\n customVoiceInstructions: String(\r\n raw['customVoiceInstructions'] ?? raw['custom_voice_instructions'] ?? '',\r\n ),\r\n };\r\n}\r\n\r\nfunction normalizeKnowledgeSection(\r\n raw: Record<string, string | boolean | number>,\r\n): Record<string, string | boolean | number> {\r\n return {\r\n ...raw,\r\n whatToSay: String(raw['whatToSay'] ?? raw['what_to_say'] ?? ''),\r\n whatNotToSay: String(raw['whatNotToSay'] ?? raw['what_not_to_say'] ?? ''),\r\n };\r\n}\r\n\r\nfunction normalizeGeneralSection(\r\n raw: Record<string, string | boolean | number>,\r\n): Record<string, string | boolean | number> {\r\n const language = String(raw['language'] ?? 'English');\r\n const languagesRaw = raw['languages'] ?? raw['languageList'] ?? language;\r\n const languages = Array.isArray(languagesRaw)\r\n ? languagesRaw.map(String).join(',')\r\n : String(languagesRaw || language);\r\n return {\r\n ...raw,\r\n languages,\r\n tone: String(raw['tone'] ?? 'professional'),\r\n };\r\n}\r\n\r\nfunction normalizePhoneSection(\r\n raw: Record<string, string | boolean | number>,\r\n): Record<string, string | boolean | number> {\r\n const locationIds = raw['locationIds'] ?? raw['location_ids'] ?? raw['locationsHandled'] ?? '';\r\n const locations =\r\n Array.isArray(locationIds) ? locationIds.map(String).join(',') : String(locationIds ?? '');\r\n const afterHoursBehavior = String(\r\n raw['afterHoursBehavior'] ??\r\n raw['after_hours_behavior'] ??\r\n (raw['afterHours'] === false ? 'voicemail' : 'ai_answers'),\r\n );\r\n return {\r\n ...raw,\r\n answerMode: String(raw['answerMode'] ?? raw['answer_mode'] ?? 'always_first'),\r\n mainNumber: String(raw['mainNumber'] ?? raw['main_number'] ?? ''),\r\n transferNumber: String(raw['transferNumber'] ?? raw['transfer_number'] ?? ''),\r\n ringTimeout: Number(raw['ringTimeout'] ?? raw['ring_timeout'] ?? 20) || 20,\r\n createFollowUpTask: Boolean(\r\n raw['createFollowUpTask'] ?? raw['create_follow_up_task'] ?? false,\r\n ),\r\n locationIds: locations,\r\n maxCallDurationMin:\r\n Number(raw['maxCallDurationMin'] ?? raw['max_call_duration_min'] ?? 5) || 5,\r\n silenceTimeoutSec:\r\n Number(raw['silenceTimeoutSec'] ?? raw['silence_timeout_sec'] ?? 30) || 30,\r\n afterHoursBehavior,\r\n };\r\n}\r\n\r\nfunction normalizeTranscriptsSection(\r\n raw: Record<string, string | boolean | number>,\r\n): Record<string, string | boolean | number> {\r\n const legacyRetain = Number(raw['retainDays'] ?? raw['retain_days'] ?? 30) || 30;\r\n return {\r\n ...raw,\r\n recordingRetainDays:\r\n Number(raw['recordingRetainDays'] ?? raw['recording_retain_days'] ?? legacyRetain) ||\r\n legacyRetain,\r\n transcriptRetainDays:\r\n Number(raw['transcriptRetainDays'] ?? raw['transcript_retain_days'] ?? legacyRetain) ||\r\n legacyRetain,\r\n disclosureWarningEnabled: Boolean(\r\n raw['disclosureWarningEnabled'] ?? raw['disclosure_warning_enabled'] ?? true,\r\n ),\r\n disclosureWarningText: String(\r\n raw['disclosureWarningText'] ??\r\n raw['disclosure_warning_text'] ??\r\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.',\r\n ),\r\n };\r\n}\r\n\r\nfunction humanizeSettingsKey(key: string): string {\r\n return key\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/_/g, ' ')\r\n .trim()\r\n .replace(/^\\w/, (c) => c.toUpperCase());\r\n}\r\n\r\nconst DEFAULT_BOOKING_MODE_OPTIONS: BookingModeOption[] = [\r\n {\r\n value: 'confirmed',\r\n label: 'Confirm appointment',\r\n description:\r\n 'Creates a live appointment in the EHR (create-new-appointment). The caller hears that they are booked.',\r\n },\r\n {\r\n value: 'pending',\r\n label: 'Pending appointment',\r\n description:\r\n 'Submits an Online Request for staff review. Do not tell the caller the visit is confirmed.',\r\n },\r\n];\r\n\r\nfunction unwrapBookingModePayload(body: unknown): {\r\n bookingMode?: string;\r\n options?: Array<{ value?: string; label?: string; description?: string }>;\r\n} {\r\n if (!body || typeof body !== 'object') return {};\r\n const raw = body as Record<string, unknown>;\r\n if (typeof raw['bookingMode'] === 'string' || Array.isArray(raw['options'])) {\r\n return raw as {\r\n bookingMode?: string;\r\n options?: Array<{ value?: string; label?: string; description?: string }>;\r\n };\r\n }\r\n if (raw['data'] && typeof raw['data'] === 'object') {\r\n return unwrapBookingModePayload(raw['data']);\r\n }\r\n if (raw['settings'] && typeof raw['settings'] === 'object') {\r\n return unwrapBookingModePayload(raw['settings']);\r\n }\r\n return raw as {\r\n bookingMode?: string;\r\n options?: Array<{ value?: string; label?: string; description?: string }>;\r\n };\r\n}\r\n\r\nexport function mapBookingModeSettings(body: unknown): BookingModeSettings {\r\n const raw = unwrapBookingModePayload(body);\r\n const mode = String(raw.bookingMode ?? '').trim().toLowerCase();\r\n const bookingMode: BookingMode = mode === 'pending' ? 'pending' : 'confirmed';\r\n const options =\r\n Array.isArray(raw.options) && raw.options.length\r\n ? raw.options\r\n .map((o) => {\r\n const value = String(o?.value ?? '').trim().toLowerCase();\r\n if (value !== 'confirmed' && value !== 'pending') return null;\r\n return {\r\n value: value as BookingMode,\r\n label:\r\n String(o?.label ?? '').trim() ||\r\n (value === 'pending' ? 'Pending appointment' : 'Confirm appointment'),\r\n description: String(o?.description ?? '').trim(),\r\n } satisfies BookingModeOption;\r\n })\r\n .filter((o): o is BookingModeOption => !!o)\r\n : DEFAULT_BOOKING_MODE_OPTIONS;\r\n return {\r\n bookingMode,\r\n options: options.length ? options : DEFAULT_BOOKING_MODE_OPTIONS,\r\n };\r\n}\r\n\r\n/** Map frontend AgentSettings → backend PUT body section keys. */\r\nexport function mapSettingsToRequest(settings: AgentSettings): Record<string, unknown> {\r\n return {\r\n general: settings.general,\r\n phoneAvailability: settings.phone,\r\n allowedTasks: settings.tasks,\r\n schedulingRules: settings.scheduling,\r\n refillRules: settings.refill,\r\n patientVerification: settings.verify,\r\n humanEscalation: settings.escalation,\r\n outboundCalling: settings.outbound,\r\n knowledgeBase: settings.knowledge,\r\n transcriptsRecording: settings.transcripts,\r\n advanced: settings.advanced,\r\n };\r\n}\r\n\r\nexport function mapLocationDto(raw: unknown): LocationOption {\r\n const r = raw as { locationId?: string; locationName?: string; id?: string; name?: string };\r\n return {\r\n id: r.locationId ?? r.id ?? '',\r\n name: r.locationName ?? r.name ?? '',\r\n };\r\n}\r\n\r\nexport function mapProviderDto(raw: unknown): ProviderOption {\r\n const r = raw as { providerId?: string; fullName?: string; id?: string; name?: string };\r\n return {\r\n id: r.providerId ?? r.id ?? '',\r\n name: r.fullName ?? r.name ?? '',\r\n };\r\n}\r\n\r\nexport function asTranscriptList(body: unknown): LiveTranscriptLineDto[] {\r\n if (Array.isArray(body)) return body as LiveTranscriptLineDto[];\r\n if (!body || typeof body !== 'object') return [];\r\n const o = body as Record<string, unknown>;\r\n const list = o['lines'] ?? o['transcript'] ?? o['items'] ?? o['data'];\r\n return Array.isArray(list) ? (list as LiveTranscriptLineDto[]) : [];\r\n}\r\n\r\nexport function isHistoryCallDto(raw: unknown): raw is HistoryCallDto {\r\n return !!raw && typeof raw === 'object' && 'dir' in (raw as object);\r\n}\r\n\r\nexport function asHistoryList(body: unknown): HistoryCallDto[] {\r\n if (Array.isArray(body)) return body as HistoryCallDto[];\r\n const list = body as HistoryListDto;\r\n return list?.items ?? [];\r\n}\r\n\r\nexport function asLiveCallList(body: unknown): LiveCallDto[] {\r\n if (Array.isArray(body)) return body as LiveCallDto[];\r\n if (!body || typeof body !== 'object') return [];\r\n const o = body as Record<string, unknown>;\r\n const list = o['items'] ?? o['data'] ?? o['calls'] ?? o['liveCalls'];\r\n return Array.isArray(list) ? (list as LiveCallDto[]) : [];\r\n}\r\n\r\nexport function asTaskList(body: unknown): TaskDto[] {\r\n if (Array.isArray(body)) return body as TaskDto[];\r\n const list = body as { items?: TaskDto[] };\r\n return list?.items ?? [];\r\n}\r\n\r\nexport function asAuditList(body: unknown): AuditEventDto[] {\r\n if (Array.isArray(body)) return body as AuditEventDto[];\r\n const list = body as { items?: AuditEventDto[] };\r\n return list?.items ?? [];\r\n}\r\n\r\nexport function asAttentionList(body: unknown): AttentionItemDto[] {\r\n if (Array.isArray(body)) return body as AttentionItemDto[];\r\n return [];\r\n}\r\n","export function filenameFromContentDisposition(\r\n header: string | null | undefined,\r\n fallback: string,\r\n): string {\r\n if (!header) return fallback;\r\n const utf = /filename\\*=(?:UTF-8'')?([^;]+)/i.exec(header);\r\n if (utf?.[1]) {\r\n try {\r\n return decodeURIComponent(utf[1].trim().replace(/^\"(.*)\"$/, '$1'));\r\n } catch {\r\n return utf[1].trim();\r\n }\r\n }\r\n const plain = /filename=\"?([^\";]+)\"?/i.exec(header);\r\n return plain?.[1]?.trim() || fallback;\r\n}\r\n\r\nexport function triggerBlobDownload(blob: Blob, filename: string): void {\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.rel = 'noopener';\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n","import { ApiLogDetail, ApiLogListItem, ApiLogStats } from '../models/api-log.types';\r\n\r\nconst now = Date.now();\r\n\r\nfunction item(\r\n partial: Partial<ApiLogListItem> & Pick<ApiLogListItem, 'id' | 'provider' | 'operation'>,\r\n): ApiLogListItem {\r\n return {\r\n callId: 'LC-4821',\r\n clientPracticeId: 'practice-demo',\r\n method: 'POST',\r\n urlPath: '/api/v1/patients/search',\r\n statusCode: 200,\r\n success: true,\r\n durationMs: 340,\r\n toolName: null,\r\n errorMessage: null,\r\n startedAt: new Date(now - 120_000).toISOString(),\r\n requestPreview: '{\"phone\":\"+15551234567\"}',\r\n responsePreview: '{\"items\":[{\"id\":\"p1\"}]}',\r\n ...partial,\r\n };\r\n}\r\n\r\nexport const SEED_CALL_API_LOGS: Record<string, ApiLogListItem[]> = {\r\n 'LC-4821': [\r\n item({\r\n id: 'log-1',\r\n provider: 'vonage',\r\n operation: 'answer_call',\r\n method: 'POST',\r\n urlPath: '/vonage/answer',\r\n statusCode: 200,\r\n durationMs: 120,\r\n startedAt: new Date(now - 300_000).toISOString(),\r\n requestPreview: '{\"callId\":\"...\"}',\r\n responsePreview: '{\"status\":\"connected\"}',\r\n }),\r\n item({\r\n id: 'log-2',\r\n provider: 'edvak',\r\n operation: 'search_patient',\r\n toolName: 'search_patient',\r\n method: 'GET',\r\n urlPath: '/api/v1/patients',\r\n statusCode: 200,\r\n durationMs: 420,\r\n startedAt: new Date(now - 240_000).toISOString(),\r\n }),\r\n item({\r\n id: 'log-3',\r\n provider: 'openai',\r\n operation: 'chat_completion',\r\n method: 'POST',\r\n urlPath: '/v1/chat/completions',\r\n statusCode: 200,\r\n durationMs: 890,\r\n startedAt: new Date(now - 180_000).toISOString(),\r\n requestPreview: '{\"model\":\"gpt-4o-mini\"}',\r\n responsePreview: '{\"choices\":[...]}',\r\n }),\r\n item({\r\n id: 'log-4',\r\n provider: 'edvak',\r\n operation: 'create_appointment',\r\n toolName: 'create_appointment',\r\n method: 'POST',\r\n urlPath: '/api/appointments',\r\n statusCode: 201,\r\n durationMs: 560,\r\n startedAt: new Date(now - 60_000).toISOString(),\r\n }),\r\n ],\r\n 'HC-9001': [\r\n item({\r\n id: 'log-f1',\r\n callId: 'HC-9001',\r\n provider: 'edvak',\r\n operation: 'search_patient',\r\n toolName: 'search_patient',\r\n statusCode: 500,\r\n success: false,\r\n durationMs: 2100,\r\n errorMessage: 'Internal Server Error',\r\n startedAt: new Date(now - 86_400_000).toISOString(),\r\n }),\r\n ],\r\n};\r\n\r\nexport const SEED_API_LOG_DETAILS: Record<string, ApiLogDetail> = {\r\n 'log-4': {\r\n ...SEED_CALL_API_LOGS['LC-4821'][3],\r\n traceId: 'trace-abc-123',\r\n requestBody: { patientId: 'p1', slotId: 'slot-9', reason: 'Annual checkup' },\r\n responseBody: { appointmentId: 'apt-42', status: 'confirmed' },\r\n metadata: { practiceId: 'prac-1', locationId: 'loc-1' },\r\n completedAt: new Date(now - 59_500).toISOString(),\r\n },\r\n 'log-f1': {\r\n ...SEED_CALL_API_LOGS['HC-9001'][0],\r\n traceId: 'trace-err-999',\r\n requestBody: { phone: '+15559876543' },\r\n responseBody: { error: 'Internal Server Error', message: 'Database timeout' },\r\n metadata: { retryCount: 1 },\r\n completedAt: new Date(now - 86_398_000).toISOString(),\r\n },\r\n};\r\n\r\nexport function allSeedLogs(): ApiLogListItem[] {\r\n return Object.values(SEED_CALL_API_LOGS).flat();\r\n}\r\n\r\nexport const SEED_API_LOG_STATS: ApiLogStats = {\r\n last24h: { total: 128, failed: 4, avgDurationMs: 680 },\r\n byProvider: [\r\n { provider: 'edvak', total: 52, failed: 3 },\r\n { provider: 'openai', total: 38, failed: 0 },\r\n { provider: 'vonage', total: 24, failed: 1 },\r\n { provider: 'livekit', total: 14, failed: 0 },\r\n ],\r\n recentFailures: [\r\n item({\r\n id: 'log-fail-1',\r\n callId: 'HC-9001',\r\n provider: 'edvak',\r\n operation: 'search_patient',\r\n statusCode: 500,\r\n success: false,\r\n durationMs: 2100,\r\n errorMessage: 'Internal Server Error',\r\n startedAt: new Date(now - 3_600_000).toISOString(),\r\n }),\r\n item({\r\n id: 'log-fail-2',\r\n callId: 'LC-4819',\r\n provider: 'vonage',\r\n operation: 'transfer',\r\n statusCode: 503,\r\n success: false,\r\n durationMs: 1500,\r\n errorMessage: 'Service unavailable',\r\n startedAt: new Date(now - 7_200_000).toISOString(),\r\n }),\r\n item({\r\n id: 'log-fail-3',\r\n callId: null,\r\n provider: 'edvak',\r\n operation: 'list_providers',\r\n statusCode: 500,\r\n success: false,\r\n durationMs: 980,\r\n errorMessage: 'Gateway timeout',\r\n startedAt: new Date(now - 10_800_000).toISOString(),\r\n }),\r\n ],\r\n};\r\n","import {\r\n AgentSettings,\r\n AnalyticsData,\r\n AuditEvent,\r\n DashboardData,\r\n HistoryCall,\r\n HistoryDetail,\r\n LiveCall,\r\n LocationOption,\r\n ProviderOption,\r\n SetupData,\r\n TaskItem,\r\n TranscriptLine,\r\n} from '../models/ai-receptionist.types';\r\n\r\nconst now = Date.now();\r\nconst min = (m: number) => now - m * 60_000;\r\n\r\nconst baseTranscript: TranscriptLine[] = [\r\n { who: 'system', text: 'Call connected · inbound PSTN' },\r\n {\r\n who: 'ai',\r\n text: 'Good afternoon, thank you for calling Riverside Family Medicine. How can I help you today?',\r\n },\r\n { who: 'patient', text: \"Hi, I'd like to reschedule my appointment for next Tuesday.\" },\r\n {\r\n who: 'ai',\r\n text: 'I can help with that. May I verify your date of birth and the name on the account?',\r\n flag: 'verify',\r\n },\r\n { who: 'patient', text: 'March 14, 1985 — Maria Santos.' },\r\n { who: 'ai', text: 'Thank you, Maria. I found your chart. You have a visit with Dr. Chen on Tuesday at 2:30 PM.' },\r\n { who: 'patient', text: 'Can we move it to Thursday morning instead?' },\r\n { who: 'ai', text: 'Checking availability with scheduling…' },\r\n];\r\n\r\nconst streamingLines: TranscriptLine[] = [\r\n { who: 'ai', text: 'I have Thursday at 9:15 AM or 10:40 AM with Dr. Chen. Which works better?' },\r\n { who: 'patient', text: '9:15 is perfect.' },\r\n { who: 'ai', text: 'Great — I’ve moved your appointment to Thursday at 9:15 AM. You’ll receive a confirmation text shortly.' },\r\n];\r\n\r\nexport const SEED_LIVE_CALLS: LiveCall[] = [\r\n {\r\n id: 'LC-4821',\r\n name: 'Maria Santos',\r\n initials: 'MS',\r\n avatar: null,\r\n phone: '+1 (512) 555-0142',\r\n verification: 'verified',\r\n direction: 'inbound',\r\n reason: 'Reschedule appointment',\r\n status: 'ai',\r\n started: min(4),\r\n sentiment: 'calm',\r\n confidence: 92,\r\n goal: 'Reschedule visit with Dr. Chen',\r\n dob: '1985-03-14',\r\n age: 41,\r\n gender: 'F',\r\n location: 'Riverside Main',\r\n provider: 'Dr. Elena Chen',\r\n language: 'English',\r\n matched: true,\r\n assigned: null,\r\n tools: [\r\n {\r\n t: '0:42',\r\n key: 'search_patients',\r\n name: 'Searched Patients',\r\n tech: 'tool_search_patients',\r\n result: 'Matched DOB + name',\r\n state: 'ok',\r\n },\r\n {\r\n t: '1:18',\r\n key: 'check_doctor_availability',\r\n name: 'Checked Doctor Availability',\r\n tech: 'tool_check_doctor_availability',\r\n result: '1 upcoming visit',\r\n state: 'ok',\r\n },\r\n {\r\n t: '2:05',\r\n key: 'check_doctor_availability',\r\n name: 'Checked Doctor Availability',\r\n tech: 'tool_check_doctor_availability',\r\n result: '2 slots found',\r\n state: 'active',\r\n },\r\n ],\r\n transcript: [...baseTranscript],\r\n },\r\n {\r\n id: 'LC-4819',\r\n name: 'James Okonkwo',\r\n initials: 'JO',\r\n avatar: null,\r\n phone: '+1 (737) 555-0198',\r\n verification: 'partial',\r\n direction: 'inbound',\r\n reason: 'Medication refill — urgent',\r\n status: 'needs-help',\r\n started: min(7),\r\n sentiment: 'frustrated',\r\n confidence: 71,\r\n goal: 'Refill lisinopril 10mg',\r\n dob: '1978-09-22',\r\n age: 47,\r\n gender: 'M',\r\n location: 'North Clinic',\r\n provider: 'Dr. Patel',\r\n language: 'English',\r\n matched: true,\r\n assigned: 'Front desk queue',\r\n tools: [\r\n {\r\n t: '0:55',\r\n key: 'search_patients',\r\n name: 'Searched Patients',\r\n tech: 'tool_search_patients',\r\n result: 'Partial match',\r\n state: 'warn',\r\n },\r\n {\r\n t: '1:40',\r\n key: 'submit_medication_refill',\r\n name: 'Submitted Medication Refill',\r\n tech: 'tool_submit_medication_refill',\r\n result: 'Requires staff review',\r\n state: 'warn',\r\n },\r\n ],\r\n transcript: [\r\n { who: 'ai', text: 'Thank you for calling North Clinic. How may I assist you?' },\r\n { who: 'patient', text: 'I need my blood pressure medication refilled today — I’m out of pills.' },\r\n { who: 'ai', text: 'I understand. Let me pull up your chart and check refill eligibility.', flag: 'verify' },\r\n { who: 'patient', text: \"I've been a patient for years, this shouldn't be so hard.\" },\r\n { who: 'system', text: 'Escalation suggested — sentiment frustrated', flag: 'escalate' },\r\n ],\r\n },\r\n {\r\n id: 'LC-4815',\r\n name: 'Unknown caller',\r\n initials: '?',\r\n avatar: null,\r\n phone: '+1 (512) 555-0881',\r\n verification: 'unknown',\r\n direction: 'inbound',\r\n reason: 'Billing question',\r\n status: 'human-requested',\r\n started: min(2),\r\n sentiment: 'neutral',\r\n confidence: 58,\r\n goal: 'Speak with billing',\r\n location: 'Riverside Main',\r\n provider: null,\r\n language: 'English',\r\n matched: false,\r\n assigned: null,\r\n tools: [\r\n {\r\n t: '0:30',\r\n key: 'search_practice_faq',\r\n name: 'Searched Practice FAQ',\r\n tech: 'tool_search_practice_faq',\r\n result: 'Billing / human handoff',\r\n state: 'ok',\r\n },\r\n ],\r\n transcript: [\r\n { who: 'ai', text: 'Good afternoon. How can I help you today?' },\r\n { who: 'patient', text: 'I need to talk to someone in billing about my statement.' },\r\n { who: 'ai', text: 'I can connect you with our billing team. One moment while I transfer you.' },\r\n ],\r\n },\r\n];\r\n\r\nexport const SEED_ATTENTION = [\r\n {\r\n id: 'ATT-1',\r\n callId: 'LC-4819',\r\n title: 'Refill needs staff approval',\r\n detail: 'Patient out of medication — partial verification',\r\n severity: 'urgent' as const,\r\n time: min(1),\r\n },\r\n {\r\n id: 'ATT-2',\r\n callId: 'LC-4815',\r\n title: 'Human requested',\r\n detail: 'Billing transfer pending',\r\n severity: 'warn' as const,\r\n time: min(0.5),\r\n },\r\n {\r\n id: 'ATT-3',\r\n callId: 'LC-4821',\r\n title: 'Scheduling in progress',\r\n detail: 'AI handling — monitor recommended',\r\n severity: 'info' as const,\r\n time: min(3),\r\n },\r\n];\r\n\r\nexport const SEED_HISTORY: HistoryCall[] = [\r\n {\r\n id: 'HC-9001',\r\n name: 'Sooraj Jagadeesh',\r\n initials: 'SJ',\r\n phone: '+1 (512) 555-0211',\r\n direction: 'inbound',\r\n outcome: 'Appointment booked',\r\n reason: 'Appointment Refill',\r\n duration: 252,\r\n durationLabel: '4:12',\r\n started: Date.parse('2026-06-12T14:20:00'),\r\n location: 'Riverside Main',\r\n verification: 'verified',\r\n review: 'reviewed',\r\n handledBy: 'ai',\r\n dob: '2002-06-30',\r\n age: 23,\r\n gender: 'M',\r\n results: ['Appointment Booked'],\r\n },\r\n {\r\n id: 'HC-9002',\r\n name: 'Unknown Caller',\r\n initials: '?',\r\n phone: '+1 (555) 010-2299',\r\n direction: 'outbound',\r\n outcome: 'Task created',\r\n reason: 'Appointment',\r\n duration: 165,\r\n durationLabel: '2:45',\r\n started: Date.parse('2026-06-12T11:05:00'),\r\n location: 'North Clinic',\r\n verification: 'unknown',\r\n review: 'needs',\r\n handledBy: 'ai',\r\n results: ['Task Created'],\r\n risk: 'review',\r\n },\r\n {\r\n id: 'HC-9003',\r\n name: 'Dinesh Kumar',\r\n initials: 'DK',\r\n phone: '+1 (512) 555-0444',\r\n direction: 'inbound',\r\n outcome: 'Completed',\r\n reason: 'Appointment',\r\n duration: 372,\r\n durationLabel: '6:12',\r\n started: Date.parse('2026-06-11T16:45:00'),\r\n location: 'Riverside Main',\r\n verification: 'verified',\r\n review: 'reviewed',\r\n handledBy: 'staff',\r\n dob: '1988-03-14',\r\n age: 38,\r\n gender: 'M',\r\n results: ['Patient Registered', 'Appointment Booked'],\r\n },\r\n {\r\n id: 'HC-9004',\r\n name: 'Meera Banerjee',\r\n initials: 'MB',\r\n phone: '+1 (512) 555-0555',\r\n direction: 'inbound',\r\n outcome: 'Completed',\r\n reason: 'Information',\r\n duration: 93,\r\n durationLabel: '1:33',\r\n started: Date.parse('2026-06-11T09:12:00'),\r\n location: 'South Clinic',\r\n verification: 'partial',\r\n review: 'needs',\r\n handledBy: 'ai',\r\n dob: '1995-11-02',\r\n age: 30,\r\n gender: 'F',\r\n results: ['Information Provided'],\r\n },\r\n {\r\n id: 'HC-9005',\r\n name: 'Emily Foster',\r\n initials: 'EF',\r\n phone: '+1 (737) 555-0666',\r\n direction: 'inbound',\r\n outcome: 'Completed',\r\n reason: 'Hours & directions',\r\n duration: 89,\r\n durationLabel: '1:29',\r\n started: Date.parse('2026-06-10T13:40:00'),\r\n location: 'North Clinic',\r\n verification: 'unknown',\r\n review: 'reviewed',\r\n handledBy: 'ai',\r\n results: ['Information Provided'],\r\n },\r\n];\r\n\r\nexport const SEED_HISTORY_DETAILS: Record<string, HistoryDetail> = {\r\n 'HC-9001': {\r\n ...SEED_HISTORY[0],\r\n summary:\r\n 'New patient intake completed. AI collected demographics, verified insurance, and booked initial visit with Dr. Chen for next Monday at 10:00 AM.',\r\n transcript: [\r\n { who: 'ai', text: 'Welcome to Riverside Family Medicine. Are you a new patient?', at: 8 },\r\n { who: 'patient', text: 'Yes, I need to establish care.', at: 22 },\r\n { who: 'ai', text: 'I can help schedule your first visit. May I collect a few details?', at: 38 },\r\n { who: 'patient', text: 'Sure.', at: 62 },\r\n { who: 'ai', text: 'Booked: Mon 10:00 AM with Dr. Chen. Confirmation sent via SMS.', at: 285 },\r\n ],\r\n tools: [\r\n {\r\n t: '1:02',\r\n key: 'register_and_book_appointment',\r\n name: 'Registered & Booked Appointment',\r\n tech: 'tool_register_and_book_appointment',\r\n result: 'Chart created',\r\n state: 'ok',\r\n },\r\n {\r\n t: '3:45',\r\n key: 'book_existing_appointment',\r\n name: 'Booked Appointment',\r\n tech: 'tool_book_existing_appointment',\r\n result: 'Slot reserved',\r\n state: 'ok',\r\n },\r\n ],\r\n recordingUrl: '#mock-recording',\r\n },\r\n};\r\n\r\nexport const SEED_TASKS: TaskItem[] = [\r\n {\r\n id: 'TK-101',\r\n created: min(180),\r\n title: 'Refill: Lisinopril 10mg',\r\n type: 'Refill request',\r\n description: 'Patient requested refill for lisinopril 10mg. Last filled 28 days ago.',\r\n patient: 'James Okonkwo',\r\n priority: 'urgent',\r\n status: 'open',\r\n source: 'voice',\r\n assignee: 'Clinical staff',\r\n callId: 'HC-9001',\r\n edvakTaskId: 'EDV-8821',\r\n edvakStatus: 'Pending review',\r\n medicationName: 'Lisinopril 10mg',\r\n medicationId: 'RX-4492',\r\n },\r\n {\r\n id: 'TK-102',\r\n created: min(240),\r\n title: 'Billing follow-up',\r\n type: 'Billing',\r\n description: 'Caller disputed a statement charge from March visit. Needs billing review.',\r\n patient: 'Unknown caller',\r\n priority: 'normal',\r\n status: 'open',\r\n source: 'voice',\r\n assignee: 'Billing',\r\n callId: 'LC-4815',\r\n },\r\n {\r\n id: 'TK-103',\r\n created: min(300),\r\n title: 'Callback requested',\r\n type: 'Callback',\r\n description: 'Sarah Williams asked for a nurse callback regarding prior auth status.',\r\n patient: 'Sarah Williams',\r\n priority: 'normal',\r\n status: 'in_progress',\r\n source: 'voice',\r\n assignee: 'Front desk',\r\n callId: 'HC-9003',\r\n },\r\n {\r\n id: 'TK-104',\r\n created: min(360),\r\n title: 'Callback — lab results',\r\n type: 'Callback',\r\n description: 'Carlos Mendez requested nurse callback about recent lab results.',\r\n patient: 'Carlos Mendez',\r\n priority: 'normal',\r\n status: 'done',\r\n source: 'sync',\r\n assignee: 'Nurse line',\r\n callId: 'HC-9004',\r\n },\r\n {\r\n id: 'TK-105',\r\n created: min(90),\r\n title: 'Schedule follow-up visit',\r\n type: 'Scheduling',\r\n description: 'Patient needs a 2-week follow-up after ER visit.',\r\n patient: 'Maria Chen',\r\n priority: 'normal',\r\n status: 'open',\r\n source: 'manual',\r\n assignee: 'Scheduling',\r\n },\r\n];\r\n\r\nexport const SEED_AUDIT: AuditEvent[] = [\r\n {\r\n id: 'AU-1',\r\n actor: 'admin@riverside.fm',\r\n action: 'Updated welcome message',\r\n target: 'Agent Settings',\r\n detail: 'Changed inbound greeting',\r\n at: min(30),\r\n },\r\n {\r\n id: 'AU-2',\r\n actor: 'system',\r\n action: 'Agent activated',\r\n target: 'AI Receptionist',\r\n detail: 'After-hours mode enabled',\r\n at: min(120),\r\n },\r\n {\r\n id: 'AU-3',\r\n actor: 'staff@riverside.fm',\r\n action: 'Takeover',\r\n target: 'LC-4780',\r\n detail: 'Staff joined live call',\r\n at: min(300),\r\n },\r\n];\r\n\r\nexport const SEED_ANALYTICS: AnalyticsData = {\r\n range: '30d',\r\n kpiCards: [\r\n {\r\n label: 'Estimated Impact This Month',\r\n value: '96 hours',\r\n delta: '',\r\n tone: 'pos',\r\n sub: 'of front-desk time handled by the AI ~2.4 full work weeks.',\r\n },\r\n {\r\n label: 'AI Autonomous Resolution',\r\n value: '89%',\r\n delta: '+12%',\r\n tone: 'pos',\r\n sub: 'without staff intervention',\r\n },\r\n {\r\n label: 'Appointments Booked',\r\n value: '34',\r\n delta: '-35%',\r\n tone: 'warn',\r\n sub: 'Created by AI',\r\n },\r\n {\r\n label: 'Tasks Created',\r\n value: '19',\r\n delta: '-35%',\r\n tone: 'warn',\r\n sub: 'Created by AI',\r\n },\r\n {\r\n label: 'Patients Registered',\r\n value: '75',\r\n delta: '-6%',\r\n tone: 'warn',\r\n sub: 'Created by AI',\r\n },\r\n {\r\n label: 'Calls Handled',\r\n value: '1,234',\r\n delta: '+25%',\r\n tone: 'pos',\r\n sub: 'Inbound 104 · Outbound 24',\r\n },\r\n ],\r\n volume: {\r\n timezone: 'America/Chicago',\r\n startDate: '2025-05-01',\r\n endDate: '2025-05-28',\r\n points: [\r\n { date: '2025-05-01', day: 'Week 1', label: 'Week 1', count: 210, inbound: 170, outbound: 40 },\r\n { date: '2025-05-08', day: 'Week 2', label: 'Week 2', count: 255, inbound: 200, outbound: 55 },\r\n { date: '2025-05-15', day: 'Week 3', label: 'Week 3', count: 180, inbound: 145, outbound: 35 },\r\n { date: '2025-05-22', day: 'Week 4', label: 'Week 4', count: 290, inbound: 230, outbound: 60 },\r\n ],\r\n },\r\n outcomes: [\r\n { label: 'AI handled', value: 78, color: '#DAB2FF' },\r\n { label: 'Human Assisted', value: 18, color: '#A3B3FF' },\r\n { label: 'Needs Attention', value: 4, color: '#FFA1AD' },\r\n ],\r\n reasons: [\r\n { label: 'Appointments', value: 68 },\r\n { label: 'Medication/Refills', value: 24 },\r\n { label: 'Message', value: 20 },\r\n { label: 'Information', value: 23 },\r\n { label: 'Registration', value: 5 },\r\n { label: 'Tasks', value: 20 },\r\n { label: 'Others', value: 9 },\r\n ],\r\n transfers: [\r\n { label: 'Out of Scope', value: 68 },\r\n { label: 'Multiple Requests', value: 24 },\r\n { label: 'Identity Unresolved', value: 20 },\r\n { label: 'Others', value: 23 },\r\n ],\r\n peakHours: {\r\n timezone: 'America/Chicago',\r\n points: Array.from({ length: 24 }, (_, hour) => ({\r\n hour,\r\n label: hour === 0 ? '12 AM' : hour < 12 ? `${hour} AM` : hour === 12 ? '12 PM' : `${hour - 12} PM`,\r\n count:\r\n hour >= 8 && hour <= 20\r\n ? Math.round(30 + Math.sin((hour - 8) / 2.2) * 45 + (hour === 11 || hour === 16 ? 25 : 0))\r\n : 4 + (hour % 3),\r\n })),\r\n },\r\n kpis: {\r\n totalCalls: 1234,\r\n avgDuration: 186,\r\n bookingRate: 89,\r\n transferRate: 4,\r\n },\r\n};\r\n\r\nexport const SEED_SETTINGS: AgentSettings = {\r\n general: {\r\n practiceName: 'Riverside Family Medicine',\r\n timezone: 'America/Chicago',\r\n language: 'English',\r\n languages: 'English,Spanish,Chinese,Hindi',\r\n agentName: 'Robin',\r\n tone: 'professional',\r\n welcomeMessage:\r\n 'Thanks for calling {{practiceName}}! This is {{agentName}}, the practice’s virtual assistant. How can I help you today?',\r\n ttsVoiceId: '7EzWGsX10sAS4c9m9cPf',\r\n },\r\n phone: {\r\n answerMode: 'always_first',\r\n mainNumber: '+1 (234) 092-0129',\r\n transferNumber: '+1 (234) 092-0129',\r\n ringTimeout: 20,\r\n createFollowUpTask: true,\r\n locationIds: 'loc-1,loc-2,loc-3',\r\n maxCallDurationMin: 5,\r\n silenceTimeoutSec: 30,\r\n afterHoursBehavior: 'ai_answers',\r\n afterHours: true,\r\n },\r\n tasks: { autoCreate: true, defaultAssignee: 'Front desk' },\r\n scheduling: { leadTimeHours: 4, allowSameDay: true },\r\n refill: { autoApproveDays: 7, requireStaffReview: true },\r\n verify: { requireDob: true, requireName: true, maxAttempts: 3 },\r\n escalation: { sentimentThreshold: 'frustrated', urgentKeywords: 'emergency, chest pain' },\r\n outbound: { enabled: true, callerId: '+1 (512) 555-0100' },\r\n knowledge: {\r\n whatToSay:\r\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.',\r\n whatNotToSay:\r\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.',\r\n },\r\n safety: [\r\n { id: 's1', label: 'HIPAA logging enabled', status: 'ok' },\r\n { id: 's2', label: 'Recording consent script', status: 'ok' },\r\n { id: 's3', label: 'Emergency routing tested', status: 'warn' },\r\n { id: 's4', label: 'PHI redaction in transcripts', status: 'ok' },\r\n ],\r\n transcripts: {\r\n recordingRetainDays: 30,\r\n transcriptRetainDays: 30,\r\n disclosureWarningEnabled: true,\r\n disclosureWarningText:\r\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.',\r\n retainDays: 30,\r\n redactPhi: true,\r\n },\r\n advanced: {\r\n modelVersion: 'edvak-v2',\r\n debugMode: false,\r\n voiceSystemPrompt: '',\r\n customVoiceInstructions: '',\r\n },\r\n effectiveWelcomeMessage:\r\n 'Thanks for calling Riverside Family Medicine! This is Robin, the practice’s virtual assistant. How can I help you today?',\r\n};\r\n\r\nexport const SEED_SETUP: SetupData = {\r\n readiness: 92,\r\n steps: [\r\n { id: 1, title: 'Practice profile', description: 'Name, locations, hours', complete: true },\r\n { id: 2, title: 'Phone routing', description: 'Connect Vonage numbers', complete: true },\r\n { id: 3, title: 'EHR integration', description: 'FHIR scheduling & charts', complete: true },\r\n { id: 4, title: 'Welcome message', description: 'Inbound call greeting', complete: true },\r\n { id: 5, title: 'Verification rules', description: 'Identity checks', complete: true },\r\n { id: 6, title: 'Task routing', description: 'Assignees & SLAs', complete: true },\r\n { id: 7, title: 'Escalation paths', description: 'Human handoff rules', complete: true },\r\n { id: 8, title: 'Safety checklist', description: 'Compliance review', complete: false },\r\n { id: 9, title: 'Test call', description: 'Simulated inbound call', complete: false },\r\n { id: 10, title: 'Staff training', description: 'Takeover & monitoring', complete: true },\r\n { id: 11, title: 'Go live', description: 'Activate AI receptionist', complete: false },\r\n ],\r\n testTranscript: [\r\n { who: 'ai', text: 'Test call started — simulating inbound patient.' },\r\n { who: 'patient', text: 'I would like to book an appointment.' },\r\n { who: 'ai', text: 'Happy to help. May I verify your date of birth?' },\r\n ],\r\n};\r\n\r\nexport const SEED_LOCATIONS: LocationOption[] = [\r\n { id: 'loc-1', name: 'Riverside Main' },\r\n { id: 'loc-2', name: 'North Clinic' },\r\n { id: 'loc-3', name: 'South Clinic' },\r\n];\r\n\r\nexport const SEED_PROVIDERS: ProviderOption[] = [\r\n { id: 'prov-1', name: 'Dr. Elena Chen' },\r\n { id: 'prov-2', name: 'Dr. Raj Patel' },\r\n { id: 'prov-3', name: 'Dr. Amy Foster' },\r\n];\r\n\r\nexport function buildDashboard(): DashboardData {\r\n return {\r\n stats: {\r\n activeCalls: SEED_LIVE_CALLS.length,\r\n answeredToday: 47,\r\n appointmentsBooked: 6,\r\n tasksCreated: 8,\r\n completionRate: 86,\r\n },\r\n liveCalls: SEED_LIVE_CALLS,\r\n latestTasks: SEED_TASKS.slice(0, 5),\r\n latestAppointments: [\r\n {\r\n id: 'appt-ai-1',\r\n appointmentId: 'appt-ai-1',\r\n patientName: 'Maria Garcia',\r\n providerName: 'Dr. Elena Chen',\r\n startTime: Date.now() + 86_400_000,\r\n createdAt: min(25),\r\n callId: 'HC-9001',\r\n status: 'booked',\r\n },\r\n ],\r\n recentHistory: SEED_HISTORY.slice(0, 5),\r\n };\r\n}\r\n\r\nexport function getStreamingLines(): TranscriptLine[] {\r\n return streamingLines;\r\n}\r\n\r\nexport function cloneLiveCalls(): LiveCall[] {\r\n return SEED_LIVE_CALLS.map((c) => ({\r\n ...c,\r\n tools: c.tools.map((t) => ({ ...t })),\r\n transcript: c.transcript.map((l) => ({ ...l })),\r\n }));\r\n}\r\n\r\nexport function cloneHistory(): HistoryCall[] {\r\n return SEED_HISTORY.map((h) => ({ ...h }));\r\n}\r\n\r\nexport function cloneTasks(): TaskItem[] {\r\n return SEED_TASKS.map((t) => ({ ...t }));\r\n}\r\n","import {\r\n OutboundPurpose,\r\n OutboundPurposePlaceholder,\r\n} from '../models/outbound-purpose.types';\r\n\r\nexport const DEFAULT_PLACEHOLDERS: OutboundPurposePlaceholder[] = [\r\n { token: '{{patientName}}', label: 'Patient name', sampleValue: 'Maria Garcia' },\r\n { token: '{{appointmentDate}}', label: 'Appointment date', sampleValue: 'March 15' },\r\n { token: '{{appointmentTime}}', label: 'Appointment time', sampleValue: '2:30 PM' },\r\n { token: '{{providerName}}', label: 'Provider name', sampleValue: 'Dr. Patel' },\r\n { token: '{{practiceName}}', label: 'Practice name', sampleValue: 'Edvak Family Medicine' },\r\n];\r\n\r\nexport const SEED_OUTBOUND_PURPOSES: OutboundPurpose[] = [\r\n {\r\n purposeId: 'purpose-confirm-appt',\r\n label: 'Confirm appointment',\r\n description: 'Remind patient of upcoming visit and confirm attendance.',\r\n sampleOpening:\r\n 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',\r\n openingTemplate:\r\n 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',\r\n agentContextHint: 'Confirm attendance; offer reschedule if patient cannot make it.',\r\n requiredFields: ['appointmentDate', 'appointmentTime', 'providerName'],\r\n allowsCustomScript: false,\r\n isSystem: true,\r\n isActive: true,\r\n sortOrder: 1,\r\n placeholders: DEFAULT_PLACEHOLDERS,\r\n },\r\n {\r\n purposeId: 'purpose-recall',\r\n label: 'Recall / follow-up',\r\n description: 'Invite patient to schedule a follow-up visit.',\r\n sampleOpening:\r\n 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',\r\n openingTemplate:\r\n 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',\r\n agentContextHint: null,\r\n requiredFields: ['providerName'],\r\n allowsCustomScript: true,\r\n isSystem: true,\r\n isActive: true,\r\n sortOrder: 2,\r\n placeholders: DEFAULT_PLACEHOLDERS,\r\n },\r\n {\r\n purposeId: 'purpose-custom',\r\n label: 'Custom outreach',\r\n description: 'Staff-defined script for one-off calls.',\r\n sampleOpening: '',\r\n openingTemplate: 'Hi {{patientName}}, this is {{practiceName}}.',\r\n agentContextHint: 'Follow the custom script closely.',\r\n requiredFields: ['customScript'],\r\n allowsCustomScript: true,\r\n isSystem: false,\r\n isActive: false,\r\n sortOrder: 99,\r\n placeholders: DEFAULT_PLACEHOLDERS,\r\n },\r\n];\r\n","import { AgentActivity } from '../models/agent-activity.types';\r\n\r\nconst hour = 60 * 60 * 1000;\r\nconst now = Date.now();\r\n\r\nfunction todayAt(h: number, m = 0): string {\r\n const d = new Date();\r\n d.setHours(h, m, 0, 0);\r\n return d.toISOString();\r\n}\r\n\r\nexport const SEED_ACTIVITIES: AgentActivity[] = [\r\n {\r\n id: 'act-appt-1',\r\n type: 'appointment_booked',\r\n occurredAt: new Date(now - 0.4 * hour).toISOString(),\r\n title: 'Appointment booked',\r\n detail: '',\r\n patientId: 'pat-1001',\r\n patientName: 'Sooraj Jagadeesh',\r\n patientInitials: 'SJ',\r\n patientDob: '2002-06-30',\r\n patientAge: 23,\r\n patientGender: 'M',\r\n providerName: 'Dr. Anika Mehra',\r\n providerInitials: 'AM',\r\n providerSpecialty: 'Cardiologist',\r\n appointmentId: 'appt-9001',\r\n callId: 'LC-4801',\r\n startAt: todayAt(8, 0),\r\n endAt: todayAt(8, 15),\r\n durationMinutes: 15,\r\n visitType: 'Follow Up',\r\n hasInsurance: true,\r\n insuranceName: 'Aetna PPO',\r\n },\r\n {\r\n id: 'act-appt-1b',\r\n type: 'task_created',\r\n occurredAt: new Date(now - 0.35 * hour).toISOString(),\r\n title: 'Needs Scheduling Assistance',\r\n detail: '',\r\n patientId: 'pat-1001',\r\n patientName: 'Sooraj Jagadeesh',\r\n patientInitials: 'SJ',\r\n patientDob: '2002-06-30',\r\n patientAge: 23,\r\n patientGender: 'M',\r\n providerName: 'Front Desk',\r\n providerInitials: 'FD',\r\n providerSpecialty: 'Operations',\r\n taskId: 'task-4801',\r\n callId: 'LC-4801',\r\n startAt: todayAt(8, 5),\r\n visitType: 'Insurance verification',\r\n durationMinutes: 10,\r\n priority: 'medium',\r\n },\r\n {\r\n id: 'act-appt-2',\r\n type: 'appointment_booked',\r\n occurredAt: new Date(now - 1.1 * hour).toISOString(),\r\n title: 'Appointment booked',\r\n detail: '',\r\n patientId: 'pat-1005',\r\n patientName: 'Lisa Sullivan',\r\n patientInitials: 'LS',\r\n patientDob: '1998-03-12',\r\n patientAge: 28,\r\n patientGender: 'F',\r\n providerName: 'Dr. Marcus Webb',\r\n providerInitials: 'MW',\r\n providerSpecialty: 'Endocrinologist',\r\n appointmentId: 'appt-9003',\r\n callId: 'LC-4800',\r\n startAt: todayAt(8, 15),\r\n endAt: todayAt(8, 30),\r\n durationMinutes: 15,\r\n visitType: 'Lab Results Review',\r\n hasInsurance: false,\r\n },\r\n {\r\n id: 'act-appt-3',\r\n type: 'appointment_booked',\r\n occurredAt: new Date(now - 2.2 * hour).toISOString(),\r\n title: 'Appointment booked',\r\n detail: '',\r\n patientId: 'pat-1006',\r\n patientName: 'Aiden Rivera',\r\n patientInitials: 'AR',\r\n patientDob: '1995-11-04',\r\n patientAge: 30,\r\n patientGender: 'M',\r\n providerName: 'Dr. Priya Nair',\r\n providerInitials: 'PN',\r\n providerSpecialty: 'General Practitioner',\r\n appointmentId: 'appt-9004',\r\n callId: 'LC-4799',\r\n startAt: todayAt(8, 30),\r\n endAt: todayAt(8, 45),\r\n durationMinutes: 15,\r\n visitType: 'Routine Checkup',\r\n },\r\n {\r\n id: 'act-appt-4',\r\n type: 'appointment_booked',\r\n occurredAt: new Date(now - 8 * hour).toISOString(),\r\n title: 'Appointment booked',\r\n detail: '',\r\n patientId: 'pat-1003',\r\n patientName: 'Aisha Patel',\r\n patientInitials: 'AP',\r\n patientDob: '1988-01-19',\r\n patientAge: 38,\r\n patientGender: 'F',\r\n providerName: 'Dr. Jordan Lee',\r\n providerInitials: 'JL',\r\n providerSpecialty: 'Internal Medicine',\r\n appointmentId: 'appt-9002',\r\n callId: 'LC-4790',\r\n startAt: todayAt(14, 30),\r\n endAt: todayAt(15, 0),\r\n durationMinutes: 30,\r\n visitType: 'Annual Wellness',\r\n hasInsurance: true,\r\n insuranceName: 'BlueCross Blue Shield',\r\n },\r\n {\r\n id: 'act-1',\r\n type: 'patient_created',\r\n occurredAt: new Date(now - 0.5 * hour).toISOString(),\r\n title: 'Patient registered',\r\n detail: '',\r\n patientId: 'pat-1008',\r\n patientName: 'Maria Garcia',\r\n patientInitials: 'MG',\r\n patientDob: '1991-04-22',\r\n patientAge: 35,\r\n patientGender: 'F',\r\n callId: 'LC-4801',\r\n startAt: todayAt(9, 12),\r\n visitType: 'New registration',\r\n hasInsurance: true,\r\n insuranceName: 'UnitedHealthcare',\r\n },\r\n {\r\n id: 'act-5',\r\n type: 'patient_created',\r\n occurredAt: new Date(now - 26 * hour).toISOString(),\r\n title: 'Patient registered',\r\n detail: '',\r\n patientId: 'pat-1004',\r\n patientName: 'Sam Okonkwo',\r\n patientInitials: 'SO',\r\n patientDob: '1979-09-08',\r\n patientAge: 46,\r\n patientGender: 'M',\r\n callId: 'LC-4782',\r\n startAt: new Date(now - 26 * hour).toISOString(),\r\n visitType: 'Outbound registration',\r\n hasInsurance: false,\r\n },\r\n {\r\n id: 'act-3',\r\n type: 'task_created',\r\n occurredAt: new Date(now - 3 * hour).toISOString(),\r\n title: 'Needs Scheduling Assistance',\r\n detail: '',\r\n patientId: 'pat-1002',\r\n patientName: 'James Chen',\r\n patientInitials: 'JC',\r\n patientDob: '1985-12-01',\r\n patientAge: 40,\r\n patientGender: 'M',\r\n providerName: 'Front Desk',\r\n providerInitials: 'FD',\r\n providerSpecialty: 'Operations',\r\n taskId: 'task-301',\r\n callId: 'LC-4798',\r\n startAt: new Date(now - 3 * hour).toISOString(),\r\n visitType: 'Insurance verification',\r\n durationMinutes: 15,\r\n priority: 'medium',\r\n },\r\n {\r\n id: 'act-6',\r\n type: 'task_created',\r\n occurredAt: new Date(now - 5 * hour).toISOString(),\r\n title: 'Needs Scheduling Assistance',\r\n detail: '',\r\n patientId: 'pat-1007',\r\n patientName: 'Elena Foster',\r\n patientInitials: 'EF',\r\n patientDob: '1993-07-15',\r\n patientAge: 32,\r\n patientGender: 'F',\r\n providerName: 'Nurse Station',\r\n providerInitials: 'NS',\r\n providerSpecialty: 'Clinical support',\r\n taskId: 'task-302',\r\n callId: 'LC-4795',\r\n startAt: new Date(now - 5 * hour).toISOString(),\r\n visitType: 'Clinical callback',\r\n durationMinutes: 10,\r\n priority: 'medium',\r\n },\r\n];\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { delay, map, Observable, of, throwError } from 'rxjs';\r\n\r\nimport {\r\n AgentSettings,\r\n AiReceptionistStatus,\r\n BookingMode,\r\n BookingModeSettings,\r\n AnalyticsData,\r\n AnalyticsQuery,\r\n AuditEvent,\r\n CallListFilters,\r\n CsvExportResult,\r\n DashboardData,\r\n CallRecordingMeta,\r\n HistoryCall,\r\n HistoryDetail,\r\n LiveCall,\r\n LocationOption,\r\n ProviderOption,\r\n SetupData,\r\n TaskItem,\r\n CreateTaskRequest,\r\n TaskFilters,\r\n RegenerateSummaryResult,\r\n ToolEvent,\r\n TranscriptLine,\r\n} from '../models/ai-receptionist.types';\r\nimport { StaffMediaJoinResult, StaffMediaMode } from '../models/staff-media.types';\r\nimport { DEFAULT_PAGE_SIZE, type PaginatedResult } from '../models/pagination';\r\nimport { computeEffectiveWelcomeMessage } from '../utils/welcome-message.util';\r\nimport {\r\n allSeedLogs,\r\n SEED_API_LOG_DETAILS,\r\n SEED_API_LOG_STATS,\r\n SEED_CALL_API_LOGS,\r\n} from '../mocks/api-log.seed';\r\nimport {\r\n ApiLogDetail,\r\n ApiLogFilters,\r\n ApiLogListResponse,\r\n ApiLogStats,\r\n} from '../models/api-log.types';\r\nimport {\r\n buildDashboard,\r\n cloneHistory,\r\n cloneLiveCalls,\r\n cloneTasks,\r\n getStreamingLines,\r\n SEED_ANALYTICS,\r\n SEED_AUDIT,\r\n SEED_HISTORY_DETAILS,\r\n SEED_SETTINGS,\r\n SEED_SETUP,\r\n SEED_LOCATIONS,\r\n SEED_PROVIDERS,\r\n} from '../mocks/seed-data';\r\nimport {\r\n DEFAULT_PLACEHOLDERS,\r\n SEED_OUTBOUND_PURPOSES,\r\n} from '../mocks/outbound-purpose.seed';\r\nimport {\r\n CreateOutboundPurposeRequest,\r\n OutboundPurpose,\r\n OutboundPurposesResponse,\r\n PlaceOutboundCallRequest,\r\n PlaceOutboundCallResponse,\r\n UpdateOutboundPurposeRequest,\r\n} from '../models/outbound-purpose.types';\r\nimport type {\r\n OutboundAppointmentHit,\r\n OutboundPatientHit,\r\n} from '../models/outbound-patient.types';\r\nimport type {\r\n AgentActivity,\r\n AgentActivityFilters,\r\n} from '../models/agent-activity.types';\r\nimport { SEED_ACTIVITIES } from '../mocks/agent-activity.seed';\r\n\r\nconst MOCK_DELAY_MS = 200;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AiReceptionistApiMockService {\r\n private readonly liveCalls = signal(cloneLiveCalls());\r\n private readonly tasks = signal(cloneTasks());\r\n private readonly history = signal(cloneHistory());\r\n private readonly settings = signal<AgentSettings>(structuredClone(SEED_SETTINGS));\r\n private bookingMode: BookingMode = 'confirmed';\r\n private readonly status = signal<AiReceptionistStatus>({\r\n agentOn: true,\r\n agentOnExplicit: true,\r\n mode: 'after-hours',\r\n readiness: SEED_SETUP.readiness,\r\n });\r\n private readonly outboundPurposes = signal<OutboundPurpose[]>(\r\n structuredClone(SEED_OUTBOUND_PURPOSES),\r\n );\r\n\r\n private mock<T>(data: T): Observable<{ data: T }> {\r\n return of({ data }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n private paginate<T>(\r\n rows: T[],\r\n page = 1,\r\n limit = DEFAULT_PAGE_SIZE,\r\n ): Observable<PaginatedResult<T>> {\r\n const safePage = Math.max(1, page);\r\n const safeLimit = Math.min(100, Math.max(1, limit));\r\n const start = (safePage - 1) * safeLimit;\r\n return of({\r\n items: rows.slice(start, start + safeLimit),\r\n total: rows.length,\r\n page: safePage,\r\n limit: safeLimit,\r\n }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getStatus(): Observable<{ data: AiReceptionistStatus }> {\r\n return this.mock(this.status());\r\n }\r\n\r\n setAgentOn(on: boolean): void {\r\n this.status.update((s) => ({ ...s, agentOn: on, agentOnExplicit: true }));\r\n }\r\n\r\n getDashboard(): Observable<{ data: DashboardData }> {\r\n const dash = buildDashboard();\r\n dash.liveCalls = [];\r\n return this.mock(dash);\r\n }\r\n\r\n getLiveCalls(): Observable<{ data: LiveCall[] }> {\r\n return this.mock(this.liveCalls());\r\n }\r\n\r\n getLiveCall(id: string): Observable<{ data: LiveCall | null }> {\r\n const call = this.liveCalls().find((c) => c.id === id) ?? null;\r\n return this.mock(call ? structuredClone(call) : null);\r\n }\r\n\r\n getCallTranscript(id: string): Observable<{ data: TranscriptLine[] }> {\r\n const call = this.liveCalls().find((c) => c.id === id);\r\n return this.mock(call ? call.transcript.map((l) => ({ ...l })) : []);\r\n }\r\n\r\n getCallSummary(id: string): Observable<{\r\n data: { summary: string; transcript: TranscriptLine[]; tools: ToolEvent[] } | null;\r\n }> {\r\n const detail = SEED_HISTORY_DETAILS[id];\r\n if (detail) {\r\n return this.mock({\r\n summary: detail.summary,\r\n transcript: detail.transcript.map((l) => ({ ...l })),\r\n tools: detail.tools.map((t) => ({ ...t })),\r\n });\r\n }\r\n const call = this.liveCalls().find((c) => c.id === id);\r\n if (call) {\r\n return this.mock({\r\n summary: 'Call summary will appear here after processing.',\r\n transcript: call.transcript.map((l) => ({ ...l })),\r\n tools: call.tools.map((t) => ({ ...t })),\r\n });\r\n }\r\n return this.mock(null);\r\n }\r\n\r\n getCallRecording(callId: string): Observable<CallRecordingMeta> {\r\n const detail = SEED_HISTORY_DETAILS[callId];\r\n if (detail?.recordingUrl) {\r\n const meta: CallRecordingMeta = {\r\n callId,\r\n status: 'ready',\r\n url: `/api/ai-receptionist/calls/${callId}/recording/audio`,\r\n contentType: 'audio/ogg',\r\n durationSeconds: detail.duration || 120,\r\n };\r\n return of<CallRecordingMeta>(meta).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n const unavailable: CallRecordingMeta = {\r\n callId,\r\n status: 'unavailable',\r\n url: null,\r\n message: 'No recording available for this call',\r\n };\r\n return of<CallRecordingMeta>(unavailable).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getCallRecordingBlob(): Observable<Blob> {\r\n return of(new Blob([], { type: 'audio/ogg' })).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getHistory(\r\n filters?: CallListFilters & { page?: number; limit?: number },\r\n ): Observable<PaginatedResult<HistoryCall>> {\r\n let rows = this.history();\r\n const q = filters?.q?.toLowerCase().trim();\r\n if (q) {\r\n rows = rows.filter(\r\n (h) =>\r\n h.name.toLowerCase().includes(q) ||\r\n h.phone.includes(q) ||\r\n h.reason.toLowerCase().includes(q) ||\r\n h.id.toLowerCase().includes(q),\r\n );\r\n }\r\n if (filters?.dir) rows = rows.filter((h) => h.direction === filters.dir);\r\n if (filters?.outcome) {\r\n rows = rows.filter((h) => h.outcome.toLowerCase().includes(filters.outcome!.toLowerCase()));\r\n }\r\n if (filters?.location) rows = rows.filter((h) => h.location === filters.location);\r\n if (filters?.review) rows = rows.filter((h) => h.review === filters.review);\r\n return this.paginate(rows, filters?.page, filters?.limit);\r\n }\r\n\r\n getCallDetail(id: string): Observable<{ data: HistoryDetail | null }> {\r\n const detail = SEED_HISTORY_DETAILS[id] ?? null;\r\n return this.mock(detail ? structuredClone(detail) : null);\r\n }\r\n\r\n regenerateCallSummary(callId: string): Observable<{ data: RegenerateSummaryResult }> {\r\n const detail = SEED_HISTORY_DETAILS[callId];\r\n if (!detail) {\r\n return throwError(() => ({ message: 'Call not found.', status: 404 }));\r\n }\r\n if (!detail.transcript.length) {\r\n return throwError(() => ({ message: 'No transcript on this call.', status: 400 }));\r\n }\r\n\r\n const turnCount = detail.transcript.filter((line) => line.who !== 'system').length;\r\n const summary = `Regenerated summary (${new Date().toLocaleString()}): ${detail.summary}`;\r\n detail.summary = summary;\r\n SEED_HISTORY_DETAILS[callId] = detail;\r\n\r\n return this.mock({\r\n callId,\r\n summary,\r\n summaryModel: 'gpt-4o-mini',\r\n summaryGeneratedAt: new Date().toISOString(),\r\n transcriptTurnCount: turnCount,\r\n });\r\n }\r\n\r\n postTakeover(id: string): Observable<{ data: { success: boolean } }> {\r\n return this.postMediaJoin(id, 'takeover').pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n postMediaJoin(\r\n id: string,\r\n mode: StaffMediaMode,\r\n ): Observable<{ data: StaffMediaJoinResult }> {\r\n this.patchLive(id, (c) => ({\r\n ...c,\r\n status: mode === 'takeover' ? 'takeover' : c.status,\r\n controlMode: mode,\r\n assigned: mode === 'takeover' ? 'You' : c.assigned,\r\n aiPaused: mode === 'takeover',\r\n }));\r\n // Mock tokens are placeholders — StaffMediaService is skipped when useMockApi is on.\r\n return this.mock({\r\n ok: true,\r\n callId: id,\r\n mode,\r\n provider: 'livekit',\r\n livekitUrl: 'wss://mock.livekit.local',\r\n clientToken: `mock-token-${mode}-${id}`,\r\n roomName: `call-${id}`,\r\n controlMode: mode,\r\n aiPaused: mode === 'takeover',\r\n assigned: mode === 'takeover' ? 'You' : null,\r\n });\r\n }\r\n\r\n postMediaLeave(id: string): Observable<{ data: { success: boolean } }> {\r\n this.patchLive(id, (c) => ({\r\n ...c,\r\n status: 'ai',\r\n controlMode: 'ai',\r\n assigned: null,\r\n aiPaused: false,\r\n }));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postResumeAi(id: string): Observable<{ data: { success: boolean } }> {\r\n return this.postMediaLeave(id);\r\n }\r\n\r\n postPause(id: string): Observable<{ data: { success: boolean } }> {\r\n this.patchLive(id, (c) => ({ ...c, controlMode: 'paused', aiPaused: true }));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postResume(id: string): Observable<{ data: { success: boolean } }> {\r\n this.patchLive(id, (c) => ({\r\n ...c,\r\n controlMode: c.status === 'takeover' || c.assigned ? 'takeover' : 'ai',\r\n aiPaused: false,\r\n }));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postListen(id: string): Observable<{ data: { success: boolean } }> {\r\n return this.postMediaJoin(id, 'listen').pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n postTransfer(id: string): Observable<{ data: { success: boolean } }> {\r\n this.patchLive(id, (c) => ({ ...c, status: 'transferring' }));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postEnd(id: string): Observable<{ data: { success: boolean } }> {\r\n this.liveCalls.update((calls) => calls.filter((c) => c.id !== id));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postMessage(id: string, text: string): Observable<{ data: { success: boolean } }> {\r\n this.patchLive(id, (c) => ({\r\n ...c,\r\n transcript: [...c.transcript, { who: 'staff' as const, text, at: Date.now() }],\r\n }));\r\n return this.mock({ success: true });\r\n }\r\n\r\n postReview(id: string): Observable<{ data: { review: string } }> {\r\n this.history.update((rows) =>\r\n rows.map((h) => (h.id === id ? { ...h, review: 'reviewed' as const } : h)),\r\n );\r\n const detail = SEED_HISTORY_DETAILS[id];\r\n if (detail) {\r\n detail.review = 'reviewed';\r\n }\r\n return this.mock({ review: 'reviewed' });\r\n }\r\n\r\n getTasks(filters?: TaskFilters): Observable<PaginatedResult<TaskItem>> {\r\n let rows = this.tasks();\r\n if (filters?.status) rows = rows.filter((t) => t.status === filters.status);\r\n if (filters?.type) rows = rows.filter((t) => t.type === filters.type);\r\n if (filters?.source) rows = rows.filter((t) => t.source === filters.source);\r\n if (filters?.callId) rows = rows.filter((t) => t.callId === filters.callId);\r\n return this.paginate(rows, filters?.page, filters?.limit);\r\n }\r\n\r\n getCallTasks(callId: string): Observable<{ data: TaskItem[] }> {\r\n return this.getTasks({ callId, limit: 100 }).pipe(\r\n map((page) => ({ data: page.items })),\r\n );\r\n }\r\n\r\n createTask(req: CreateTaskRequest): Observable<{ data: TaskItem }> {\r\n let description = req.description?.trim() ?? '';\r\n if (!description && req.callId) {\r\n description = SEED_HISTORY_DETAILS[req.callId]?.summary ?? '';\r\n }\r\n\r\n const task: TaskItem = {\r\n id: `TK-${Date.now()}`,\r\n created: Date.now(),\r\n title: req.title.trim(),\r\n type: req.type,\r\n description,\r\n patient: req.patient?.trim() || '—',\r\n priority: req.priority ?? 'normal',\r\n status: 'open',\r\n source: 'manual',\r\n assignee: req.assignee?.trim() || 'Front desk',\r\n callId: req.callId,\r\n };\r\n\r\n this.tasks.update((rows) => [task, ...rows]);\r\n return this.mock(task);\r\n }\r\n\r\n patchTask(id: string, status: TaskItem['status']): Observable<{ data: TaskItem | null }> {\r\n let updated: TaskItem | null = null;\r\n this.tasks.update((rows) =>\r\n rows.map((t) => {\r\n if (t.id !== id) return t;\r\n updated = { ...t, status };\r\n return updated;\r\n }),\r\n );\r\n return this.mock(updated);\r\n }\r\n\r\n getAnalytics(query: string | AnalyticsQuery): Observable<{ data: AnalyticsData }> {\r\n const range = (typeof query === 'string' ? query : query.range) || '30d';\r\n return this.mock({ ...SEED_ANALYTICS, range });\r\n }\r\n\r\n exportHistoryCsv(\r\n filters?: CallListFilters,\r\n ): Observable<CsvExportResult> {\r\n return this.getHistory({ ...filters, page: 1, limit: 10_000 }).pipe(\r\n map(({ items }) => {\r\n const header = [\r\n 'id',\r\n 'name',\r\n 'phone',\r\n 'direction',\r\n 'goal',\r\n 'handledBy',\r\n 'outcome',\r\n 'results',\r\n 'duration',\r\n 'started',\r\n 'review',\r\n ];\r\n const lines = items.map((r) =>\r\n [\r\n r.id,\r\n r.name,\r\n r.phone,\r\n r.direction,\r\n r.reason,\r\n r.handledBy ?? '',\r\n r.outcome,\r\n (r.results ?? []).join('; '),\r\n String(r.duration),\r\n String(r.started),\r\n r.review,\r\n ]\r\n .map((cell) => `\"${String(cell).replace(/\"/g, '\"\"')}\"`)\r\n .join(','),\r\n );\r\n const csv = [header.join(','), ...lines].join('\\n');\r\n return {\r\n blob: new Blob([csv], { type: 'text/csv;charset=utf-8' }),\r\n filename: 'call-history.csv',\r\n };\r\n }),\r\n );\r\n }\r\n\r\n exportAnalyticsCsv(filters?: AnalyticsQuery): Observable<CsvExportResult> {\r\n const range = filters?.range || '30d';\r\n const data = { ...SEED_ANALYTICS, range };\r\n const rows = [\r\n ['range', range],\r\n ['startDate', filters?.startDate ?? ''],\r\n ['endDate', filters?.endDate ?? ''],\r\n ['totalCalls', String(data.kpis.totalCalls ?? '')],\r\n ...data.kpiCards.map((k) => [k.label, k.value, k.delta ?? '', k.sub ?? '']),\r\n ];\r\n const csv = rows\r\n .map((row) => row.map((cell) => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','))\r\n .join('\\n');\r\n return of({\r\n blob: new Blob([csv], { type: 'text/csv;charset=utf-8' }),\r\n filename: `analytics-${range}.csv`,\r\n }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getSettings(): Observable<{ data: AgentSettings }> {\r\n const data = this.withEffectiveWelcome(this.settings());\r\n return this.mock(data);\r\n }\r\n\r\n putSettings(next: AgentSettings): Observable<{ data: AgentSettings }> {\r\n const saved = this.withEffectiveWelcome(structuredClone(next));\r\n this.settings.set(saved);\r\n return this.mock(saved);\r\n }\r\n\r\n getBookingMode(): Observable<{ data: BookingModeSettings }> {\r\n return this.mock({\r\n bookingMode: this.bookingMode,\r\n options: [\r\n {\r\n value: 'confirmed',\r\n label: 'Confirm appointment',\r\n description:\r\n 'Creates a live appointment in the EHR (create-new-appointment). The caller hears that they are booked.',\r\n },\r\n {\r\n value: 'pending',\r\n label: 'Pending appointment',\r\n description:\r\n 'Submits an Online Request for staff review. Do not tell the caller the visit is confirmed.',\r\n },\r\n ],\r\n } satisfies BookingModeSettings);\r\n }\r\n\r\n putBookingMode(bookingMode: BookingMode): Observable<{ data: BookingModeSettings }> {\r\n this.bookingMode = bookingMode === 'pending' ? 'pending' : 'confirmed';\r\n return this.getBookingMode();\r\n }\r\n\r\n getVoicePromptDefault(): Observable<{\r\n defaultVoiceSystemPrompt: string;\r\n voiceSystemPromptMaxLength: number;\r\n customVoiceInstructionsMaxLength: number;\r\n notes?: string;\r\n }> {\r\n return of({\r\n defaultVoiceSystemPrompt:\r\n 'You are an AI receptionist for a medical practice. Be warm, concise, and HIPAA-aware.',\r\n voiceSystemPromptMaxLength: 24000,\r\n customVoiceInstructionsMaxLength: 8000,\r\n notes: 'Leave voiceSystemPrompt empty to use this shipped default.',\r\n }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n previewVoice(_voiceId: string): Observable<Blob> {\r\n // Silent tiny wav so mock mode does not break the Play button.\r\n const silent = new Uint8Array([\r\n 0x52, 0x49, 0x46, 0x46, 0x24, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74,\r\n 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x80, 0x3e,\r\n 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,\r\n ]);\r\n return of(new Blob([silent], { type: 'audio/wav' })).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n testKnowledgeAnswer(params: {\r\n question: string;\r\n whatToSay: string;\r\n whatNotToSay: string;\r\n voiceId?: string;\r\n }): Observable<{ answer: string; voiceId: string; audioBlob: Blob }> {\r\n const answer =\r\n `Based on our guidance: for “${params.question.trim()}”, ` +\r\n `I'd share what's in our practice knowledge and avoid restricted topics.`;\r\n return this.previewVoice(params.voiceId ?? 'mock').pipe(\r\n map((audioBlob) => ({\r\n answer,\r\n voiceId: params.voiceId ?? 'mock',\r\n audioBlob,\r\n })),\r\n );\r\n }\r\n\r\n private withEffectiveWelcome(settings: AgentSettings): AgentSettings {\r\n return {\r\n ...settings,\r\n effectiveWelcomeMessage: computeEffectiveWelcomeMessage(settings),\r\n };\r\n }\r\n\r\n getAudit(\r\n q?: string,\r\n actor?: string,\r\n opts?: { page?: number; limit?: number },\r\n ): Observable<PaginatedResult<AuditEvent>> {\r\n let rows = SEED_AUDIT;\r\n if (q) {\r\n const needle = q.toLowerCase();\r\n rows = rows.filter(\r\n (e) =>\r\n e.action.toLowerCase().includes(needle) ||\r\n e.detail.toLowerCase().includes(needle) ||\r\n e.target.toLowerCase().includes(needle),\r\n );\r\n }\r\n if (actor) rows = rows.filter((e) => e.actor.toLowerCase().includes(actor.toLowerCase()));\r\n return this.paginate(rows, opts?.page, opts?.limit);\r\n }\r\n\r\n getActivities(filters?: AgentActivityFilters): Observable<PaginatedResult<AgentActivity>> {\r\n let rows = structuredClone(SEED_ACTIVITIES);\r\n const types = (filters?.types ?? '')\r\n .split(',')\r\n .map((t) => t.trim())\r\n .filter(Boolean);\r\n if (types.length) {\r\n rows = rows.filter((a) => types.includes(a.type));\r\n }\r\n if (filters?.callId?.trim()) {\r\n const callId = filters.callId.trim().toLowerCase();\r\n rows = rows.filter((a) => (a.callId || '').toLowerCase() === callId);\r\n }\r\n if (filters?.search?.trim()) {\r\n const needle = filters.search.trim().toLowerCase();\r\n rows = rows.filter((a) =>\r\n [a.title, a.detail, a.patientName, a.callId, a.type, a.providerName, a.visitType, a.patientMrn, a.insuranceName]\r\n .filter(Boolean)\r\n .join(' ')\r\n .toLowerCase()\r\n .includes(needle),\r\n );\r\n }\r\n return this.paginate(rows, filters?.page, filters?.limit);\r\n }\r\n\r\n getSetup(): Observable<{ data: SetupData }> {\r\n return this.mock(SEED_SETUP);\r\n }\r\n\r\n activateSetup(): Observable<{ data: { success: boolean } }> {\r\n return this.mock({ success: true });\r\n }\r\n\r\n getLocations(): Observable<{ data: LocationOption[] }> {\r\n return this.mock(SEED_LOCATIONS);\r\n }\r\n\r\n getProviders(): Observable<{ data: ProviderOption[] }> {\r\n return this.mock(SEED_PROVIDERS);\r\n }\r\n\r\n getStreamLines(): TranscriptLine[] {\r\n return getStreamingLines();\r\n }\r\n\r\n appendStreamLine(callId: string, line: TranscriptLine): void {\r\n this.patchLive(callId, (c) => ({\r\n ...c,\r\n transcript: [...c.transcript, line],\r\n }));\r\n }\r\n\r\n usesMockStreaming(): boolean {\r\n return true;\r\n }\r\n\r\n getCallApiLogs(callId: string): Observable<ApiLogListResponse> {\r\n const template = SEED_CALL_API_LOGS[callId] ?? SEED_CALL_API_LOGS['LC-4821'] ?? [];\r\n const items = template.map((row) => ({ ...row, callId }));\r\n return of({ items: structuredClone(items), total: items.length }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getApiLogs(filters: ApiLogFilters = {}): Observable<ApiLogListResponse> {\r\n let rows = allSeedLogs();\r\n if (filters.callId) {\r\n rows = rows.filter((r) => r.callId === filters.callId);\r\n }\r\n if (filters.provider) {\r\n const providers = filters.provider.split(',').filter(Boolean);\r\n rows = rows.filter((r) => providers.includes(r.provider));\r\n }\r\n if (filters.success !== undefined) {\r\n rows = rows.filter((r) => r.success === filters.success);\r\n }\r\n if (filters.statusCode != null) {\r\n rows = rows.filter((r) => r.statusCode === filters.statusCode);\r\n }\r\n if (filters.operation) {\r\n const op = filters.operation.toLowerCase();\r\n rows = rows.filter((r) => r.operation.toLowerCase().includes(op));\r\n }\r\n if (filters.search) {\r\n const q = filters.search.toLowerCase();\r\n rows = rows.filter(\r\n (r) =>\r\n r.operation.toLowerCase().includes(q) ||\r\n r.urlPath.toLowerCase().includes(q) ||\r\n (r.errorMessage?.toLowerCase().includes(q) ?? false) ||\r\n (r.toolName?.toLowerCase().includes(q) ?? false),\r\n );\r\n }\r\n if (filters.from) {\r\n const from = Date.parse(filters.from);\r\n rows = rows.filter((r) => Date.parse(r.startedAt) >= from);\r\n }\r\n if (filters.to) {\r\n const to = Date.parse(filters.to);\r\n rows = rows.filter((r) => Date.parse(r.startedAt) <= to);\r\n }\r\n if (filters.practiceId) {\r\n rows = rows.filter((r) => (r.clientPracticeId ?? '') === filters.practiceId);\r\n }\r\n rows = [...rows].sort((a, b) => Date.parse(b.startedAt) - Date.parse(a.startedAt));\r\n const page = filters.page ?? 1;\r\n const limit = filters.limit ?? 50;\r\n const start = (page - 1) * limit;\r\n const items = rows.slice(start, start + limit);\r\n return of({\r\n items,\r\n total: rows.length,\r\n page,\r\n limit,\r\n practiceId: filters.practiceId ?? null,\r\n }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n getApiLogDetail(logId: string): Observable<{ data: ApiLogDetail | null }> {\r\n const detail = SEED_API_LOG_DETAILS[logId];\r\n if (detail) {\r\n return this.mock(structuredClone(detail));\r\n }\r\n const listItem = allSeedLogs().find((r) => r.id === logId);\r\n if (!listItem) {\r\n return of({ data: null }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n const fallback: ApiLogDetail = {\r\n ...listItem,\r\n traceId: null,\r\n requestBody: listItem.requestPreview ? { preview: listItem.requestPreview } : null,\r\n responseBody: listItem.responsePreview ? { preview: listItem.responsePreview } : null,\r\n metadata: null,\r\n completedAt: listItem.startedAt,\r\n };\r\n return this.mock(fallback);\r\n }\r\n\r\n getApiLogStats(): Observable<{ data: ApiLogStats }> {\r\n return this.mock(structuredClone(SEED_API_LOG_STATS));\r\n }\r\n\r\n getOutboundPurposes(includeInactive = false): Observable<OutboundPurposesResponse> {\r\n let rows = [...this.outboundPurposes()].sort((a, b) => a.sortOrder - b.sortOrder);\r\n if (!includeInactive) {\r\n rows = rows.filter((p) => p.isActive);\r\n }\r\n return of({ purposes: structuredClone(rows) }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose> {\r\n const purpose: OutboundPurpose = {\r\n purposeId: `purpose-${Date.now()}`,\r\n label: body.label,\r\n description: body.description ?? '',\r\n sampleOpening: body.sampleOpening ?? '',\r\n openingTemplate: body.openingTemplate,\r\n agentContextHint: body.agentContextHint ?? null,\r\n requiredFields: body.requiredFields,\r\n allowsCustomScript: body.allowsCustomScript ?? false,\r\n isSystem: false,\r\n isActive: true,\r\n sortOrder: body.sortOrder ?? this.outboundPurposes().length + 1,\r\n placeholders: structuredClone(DEFAULT_PLACEHOLDERS),\r\n };\r\n this.outboundPurposes.update((list) => [...list, purpose]);\r\n return of(structuredClone(purpose)).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n updateOutboundPurpose(\r\n purposeId: string,\r\n body: UpdateOutboundPurposeRequest,\r\n ): Observable<OutboundPurpose> {\r\n let updated: OutboundPurpose | null = null;\r\n this.outboundPurposes.update((list) =>\r\n list.map((p) => {\r\n if (p.purposeId !== purposeId) return p;\r\n updated = {\r\n ...p,\r\n ...body,\r\n label: body.label ?? p.label,\r\n description: body.description ?? p.description,\r\n sampleOpening: body.sampleOpening ?? p.sampleOpening,\r\n openingTemplate: body.openingTemplate ?? p.openingTemplate,\r\n agentContextHint:\r\n body.agentContextHint !== undefined ? body.agentContextHint : p.agentContextHint,\r\n requiredFields: body.requiredFields ?? p.requiredFields,\r\n allowsCustomScript: body.allowsCustomScript ?? p.allowsCustomScript,\r\n isActive: body.isActive ?? p.isActive,\r\n sortOrder: body.sortOrder ?? p.sortOrder,\r\n };\r\n return updated;\r\n }),\r\n );\r\n if (!updated) {\r\n return throwError(() => new Error('Purpose not found'));\r\n }\r\n const saved: OutboundPurpose = updated;\r\n return of(structuredClone(saved)).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n deleteOutboundPurpose(purposeId: string): Observable<{ success: boolean }> {\r\n const target = this.outboundPurposes().find((p) => p.purposeId === purposeId);\r\n if (!target) {\r\n return of({ success: false }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n if (target.isSystem) {\r\n return of({ success: false }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n this.outboundPurposes.update((list) => list.filter((p) => p.purposeId !== purposeId));\r\n return of({ success: true }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse> {\r\n const idHint = body.appointmentId\r\n ? ` (appt ${body.appointmentId})`\r\n : body.patientId\r\n ? ` (patient ${body.patientId})`\r\n : '';\r\n return of({\r\n success: true,\r\n callId: `LC-${Math.floor(4800 + Math.random() * 100)}`,\r\n message: `Outbound call started to ${body.phone}${idHint}`,\r\n }).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n searchPatientsForOutbound(q: string, limit = 10): Observable<OutboundPatientHit[]> {\r\n const needle = q.trim().toLowerCase();\r\n const digits = q.replace(/\\D/g, '');\r\n const hits: OutboundPatientHit[] = [\r\n {\r\n patientId: 'pat-1001',\r\n firstName: 'Maria',\r\n lastName: 'Garcia',\r\n fullName: 'Maria Garcia',\r\n phone: '+14155550100',\r\n dob: '1988-04-12',\r\n },\r\n {\r\n patientId: 'pat-1002',\r\n firstName: 'James',\r\n lastName: 'Chen',\r\n fullName: 'James Chen',\r\n phone: '+14155550122',\r\n dob: '1975-11-03',\r\n },\r\n {\r\n patientId: 'pat-1003',\r\n firstName: 'Aisha',\r\n lastName: 'Patel',\r\n fullName: 'Aisha Patel',\r\n phone: '+14155550987',\r\n dob: '1992-07-21',\r\n },\r\n ].filter((p) => {\r\n if (!needle) return false;\r\n const hay = `${p.fullName} ${p.phone} ${p.patientId}`.toLowerCase();\r\n return hay.includes(needle) || (!!digits && (p.phone ?? '').includes(digits));\r\n });\r\n return of(hits.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n listPatientAppointmentsForOutbound(\r\n patientId: string,\r\n limit = 20,\r\n ): Observable<OutboundAppointmentHit[]> {\r\n const now = Date.now();\r\n const day = 24 * 60 * 60 * 1000;\r\n const all: OutboundAppointmentHit[] = [\r\n {\r\n appointmentId: `appt-${patientId}-1`,\r\n startTime: new Date(now + 2 * day).toISOString(),\r\n endTime: new Date(now + 2 * day + 30 * 60 * 1000).toISOString(),\r\n providerName: 'Dr. Patel',\r\n locationName: 'Main Clinic',\r\n status: 'scheduled',\r\n visitType: 'Follow-up',\r\n },\r\n {\r\n appointmentId: `appt-${patientId}-2`,\r\n startTime: new Date(now + 9 * day).toISOString(),\r\n endTime: new Date(now + 9 * day + 45 * 60 * 1000).toISOString(),\r\n providerName: 'Dr. Nguyen',\r\n locationName: 'West Wing',\r\n status: 'confirmed',\r\n visitType: 'Annual wellness',\r\n },\r\n ];\r\n return of(all.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));\r\n }\r\n\r\n private patchLive(id: string, fn: (call: LiveCall) => LiveCall): void {\r\n this.liveCalls.update((calls) =>\r\n calls.map((c) => (c.id === id ? fn(structuredClone(c)) : c)),\r\n );\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpParams, HttpResponse } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable, catchError, forkJoin, map, of, switchMap, throwError } from 'rxjs';\r\n\r\nimport { createVoiceReceptionistPaths } from '../api-paths';\r\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\r\nimport { extractApiRows } from '../extract-api-rows';\r\nimport {\r\n ApiLogDetail,\r\n ApiLogFilters,\r\n ApiLogListResponse,\r\n ApiLogStats,\r\n} from '../models/api-log.types';\r\nimport {\r\n CreateOutboundPurposeRequest,\r\n OutboundPurpose,\r\n OutboundPurposesResponse,\r\n PlaceOutboundCallRequest,\r\n PlaceOutboundCallResponse,\r\n UpdateOutboundPurposeRequest,\r\n} from '../models/outbound-purpose.types';\r\nimport {\r\n mapOutboundAppointmentHit,\r\n mapOutboundPatientHit,\r\n toE164Phone,\r\n type OutboundAppointmentHit,\r\n type OutboundPatientHit,\r\n} from '../models/outbound-patient.types';\r\nimport {\r\n mapStaffMediaJoinResult,\r\n type StaffMediaJoinResult,\r\n type StaffMediaMode,\r\n} from '../models/staff-media.types';\r\nimport {\r\n AgentSettings,\r\n AiReceptionistStatus,\r\n BookingMode,\r\n BookingModeSettings,\r\n AnalyticsData,\r\n AnalyticsQuery,\r\n AuditEvent,\r\n CallListFilters,\r\n CsvExportResult,\r\n DashboardData,\r\n HistoryCall,\r\n HistoryDetail,\r\n LiveCall,\r\n RegenerateSummaryResult,\r\n LocationOption,\r\n ProviderOption,\r\n SetupData,\r\n TaskItem,\r\n CreateTaskRequest,\r\n TaskFilters,\r\n ToolEvent,\r\n TranscriptLine,\r\n CallRecordingMeta,\r\n} from '../models/ai-receptionist.types';\r\nimport {\r\n mapAgentActivity,\r\n type AgentActivity,\r\n type AgentActivityFilters,\r\n} from '../models/agent-activity.types';\r\nimport {\r\n AnalyticsDto,\r\n AiCreatedAppointmentDto,\r\n BookingModeSettingsDto,\r\n DashboardSummaryDto,\r\n HistoryCallDto,\r\n HistoryDetailDto,\r\n LiveCallDto,\r\n AiStatusDto,\r\n SetupDto,\r\n RecordingDto,\r\n RegenerateSummaryResponseDto,\r\n TaskDto,\r\n} from '../models/api-dto.types';\r\nimport {\r\n asPaginatedResult,\r\n DEFAULT_PAGE_SIZE,\r\n type PaginatedResult,\r\n} from '../models/pagination';\r\nimport {\r\n asAuditList,\r\n asHistoryList,\r\n asLiveCallList,\r\n asTaskList,\r\n asTranscriptList,\r\n isHistoryCallDto,\r\n mapAnalyticsDto,\r\n mapAiCreatedAppointmentDto,\r\n mapAuditEventDto,\r\n mapDashboardSummaryDto,\r\n mapHistoryCallDto,\r\n mapHistoryDetailDto,\r\n mapLiveCallDto,\r\n mapLocationDto,\r\n mapProviderDto,\r\n mapRecordingMeta,\r\n mapRegenerateSummaryResponse,\r\n mapCreateTaskRequest,\r\n mapBookingModeSettings,\r\n mapSettingsResponse,\r\n mapSettingsToRequest,\r\n mapSetupDto,\r\n mapStatusDto,\r\n mapTaskDto,\r\n mapToolEvent,\r\n mapTranscriptLine,\r\n toApiTaskStatus,\r\n} from './ai-receptionist-api.mappers';\r\nimport { filenameFromContentDisposition } from '../utils/csv-download.util';\r\nimport { AiReceptionistApiMockService } from './ai-receptionist-api.mock';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AiReceptionistApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly mock = inject(AiReceptionistApiMockService);\r\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\r\n private readonly paths = createVoiceReceptionistPaths(this.config);\r\n private readonly arBase = this.paths.aiReceptionistPath();\r\n\r\n private get useMock(): boolean {\r\n return !!this.config.useMockApi;\r\n }\r\n\r\n getStatus(): Observable<{ data: AiReceptionistStatus }> {\r\n if (this.useMock) return this.mock.getStatus();\r\n return this.http.get<AiStatusDto>(`${this.arBase}/status`).pipe(\r\n map((body) => ({ data: mapStatusDto(body) })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => ({\r\n message: this.apiErrorMessage(err, 'Failed to load agent status.'),\r\n status: err.status,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n /** Prefer this for the dashboard On/Off switch — PUT { enabled }. */\r\n setAgentOnline(enabled: boolean): Observable<{ data: AiReceptionistStatus }> {\r\n if (this.useMock) {\r\n this.mock.setAgentOn(enabled);\r\n return this.mock.getStatus();\r\n }\r\n return this.http\r\n .put<AiStatusDto>(`${this.arBase}/agent-online`, { enabled })\r\n .pipe(\r\n map((body) => ({ data: mapStatusDto(body, { acceptEnabled: true }) })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => ({\r\n message: this.apiErrorMessage(err, 'Failed to update agent online status.'),\r\n status: err.status,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n /** @deprecated Prefer setAgentOnline — kept for setup wizard activate flow. */\r\n setAgentOn(on: boolean): void {\r\n if (this.useMock) {\r\n this.mock.setAgentOn(on);\r\n return;\r\n }\r\n const path = on ? 'activate' : 'deactivate';\r\n this.http.post(`${this.arBase}/${path}`, {}).subscribe();\r\n }\r\n\r\n getDashboard(): Observable<{ data: DashboardData }> {\r\n if (this.useMock) return this.mock.getDashboard();\r\n return forkJoin({\r\n summary: this.http.get<DashboardSummaryDto>(`${this.arBase}/dashboard/summary`),\r\n history: this.http.get<unknown>(`${this.arBase}/calls/history`, {\r\n params: new HttpParams().set('page', '1').set('limit', '5'),\r\n }),\r\n tasks: this.http\r\n .get<unknown>(`${this.arBase}/tasks`, {\r\n params: new HttpParams().set('source', 'voice').set('limit', '5'),\r\n })\r\n .pipe(catchError(() => of([]))),\r\n appointments: this.http\r\n .get<AiCreatedAppointmentDto[] | { items: AiCreatedAppointmentDto[] }>(\r\n `${this.arBase}/dashboard/appointments`,\r\n { params: new HttpParams().set('limit', '5') },\r\n )\r\n .pipe(catchError(() => of([] as AiCreatedAppointmentDto[]))),\r\n }).pipe(\r\n map(({ summary, history, tasks, appointments }) => ({\r\n data: {\r\n stats: mapDashboardSummaryDto(summary),\r\n liveCalls: [],\r\n latestTasks: asTaskList(tasks)\r\n .map(mapTaskDto)\r\n .sort((a, b) => b.created - a.created)\r\n .slice(0, 5),\r\n latestAppointments: (Array.isArray(appointments)\r\n ? appointments\r\n : appointments.items ?? []\r\n ).map(mapAiCreatedAppointmentDto),\r\n recentHistory: asHistoryList(history).map(mapHistoryCallDto),\r\n },\r\n })),\r\n );\r\n }\r\n\r\n getLiveCalls(): Observable<{ data: LiveCall[] }> {\r\n if (this.useMock) return this.mock.getLiveCalls();\r\n return this.http.get<unknown>(`${this.arBase}/calls/live`).pipe(\r\n map((body) => ({ data: asLiveCallList(body).map(mapLiveCallDto) })),\r\n );\r\n }\r\n\r\n getLiveCall(id: string): Observable<{ data: LiveCall | null }> {\r\n if (this.useMock) return this.mock.getLiveCall(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http.get<LiveCallDto>(`${this.arBase}/calls/${enc}`).pipe(\r\n map((dto) => ({ data: dto?.id ? mapLiveCallDto(dto) : null })),\r\n catchError(() => of({ data: null })),\r\n );\r\n }\r\n\r\n getCallTranscript(id: string): Observable<{ data: TranscriptLine[] }> {\r\n if (this.useMock) return this.mock.getCallTranscript(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http.get<unknown>(`${this.arBase}/calls/${enc}/transcript`).pipe(\r\n map((body) => ({ data: asTranscriptList(body).map(mapTranscriptLine) })),\r\n catchError(() => of({ data: [] })),\r\n );\r\n }\r\n\r\n getCallSummary(id: string): Observable<{\r\n data: { summary: string; transcript: TranscriptLine[]; tools: ToolEvent[] } | null;\r\n }> {\r\n if (this.useMock) return this.mock.getCallSummary(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http.get<HistoryDetailDto>(`${this.arBase}/calls/${enc}/summary`).pipe(\r\n map((dto) => ({\r\n data: dto\r\n ? {\r\n summary: dto.summary ?? '',\r\n transcript: (dto.transcript ?? []).map(mapTranscriptLine),\r\n tools: (dto.tools ?? []).map(mapToolEvent),\r\n }\r\n : null,\r\n })),\r\n catchError(() => of({ data: null })),\r\n );\r\n }\r\n\r\n getCallRecording(callId: string): Observable<CallRecordingMeta> {\r\n if (this.useMock) return this.mock.getCallRecording(callId);\r\n const enc = encodeURIComponent(callId);\r\n return this.http.get<RecordingDto>(`${this.arBase}/calls/${enc}/recording`).pipe(\r\n map((dto) => mapRecordingMeta(dto)),\r\n catchError(() =>\r\n of<CallRecordingMeta>({\r\n callId,\r\n status: 'unavailable',\r\n url: null,\r\n message: 'No recording available for this call',\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n /** Fetch audio bytes with JWT (interceptor). Pass relative path from metadata.url. */\r\n getCallRecordingBlob(audioPath: string): Observable<Blob> {\r\n if (this.useMock) return this.mock.getCallRecordingBlob();\r\n const url = audioPath.startsWith('http') ? audioPath : `${this.paths.apiRoot()}${audioPath}`;\r\n return this.http.get(url, { responseType: 'blob' });\r\n }\r\n\r\n getHistory(\r\n filters?: CallListFilters & { page?: number; limit?: number },\r\n ): Observable<PaginatedResult<HistoryCall>> {\r\n if (this.useMock) return this.mock.getHistory(filters);\r\n const page = filters?.page ?? 1;\r\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\r\n const params = this.callListParams(filters).set('page', String(page)).set('limit', String(limit));\r\n return this.http.get<unknown>(`${this.arBase}/calls/history`, { params }).pipe(\r\n map((body) => {\r\n const pageResult = asPaginatedResult<HistoryCallDto>(body, page, limit);\r\n return {\r\n ...pageResult,\r\n items: pageResult.items.map(mapHistoryCallDto),\r\n };\r\n }),\r\n );\r\n }\r\n\r\n getCallDetail(id: string): Observable<{ data: HistoryDetail | null }> {\r\n if (this.useMock) return this.mock.getCallDetail(id);\r\n const enc = encodeURIComponent(id);\r\n return forkJoin({\r\n call: this.http.get<HistoryCallDto | LiveCallDto>(`${this.arBase}/calls/${enc}`),\r\n summary: this.http.get<HistoryDetailDto>(`${this.arBase}/calls/${enc}/summary`),\r\n recording: this.http\r\n .get<RecordingDto>(`${this.arBase}/calls/${enc}/recording`)\r\n .pipe(catchError(() => of({ callId: id, url: null, message: '' }))),\r\n }).pipe(\r\n map(({ call, summary, recording }) => {\r\n if (!isHistoryCallDto(call)) return { data: null };\r\n return {\r\n data: mapHistoryDetailDto(call, summary, recording?.url),\r\n };\r\n }),\r\n catchError(() => of({ data: null })),\r\n );\r\n }\r\n\r\n regenerateCallSummary(callId: string): Observable<{ data: RegenerateSummaryResult }> {\r\n if (this.useMock) return this.mock.regenerateCallSummary(callId);\r\n const enc = encodeURIComponent(callId);\r\n return this.http\r\n .post<RegenerateSummaryResponseDto>(`${this.arBase}/calls/${enc}/summary/regenerate`, {})\r\n .pipe(\r\n map((body) => ({ data: mapRegenerateSummaryResponse(body) })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => ({\r\n message: this.apiErrorMessage(err, 'Failed to regenerate summary.'),\r\n status: err.status,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * Staff softphone join into LiveKit room `call-{callId}`.\r\n * POST /calls/:id/media/join { mode: listen|takeover }\r\n */\r\n postMediaJoin(\r\n id: string,\r\n mode: StaffMediaMode,\r\n ): Observable<{ data: StaffMediaJoinResult }> {\r\n if (this.useMock) return this.mock.postMediaJoin(id, mode);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<unknown>(`${this.arBase}/calls/${enc}/media/join`, { mode })\r\n .pipe(\r\n map((body) => {\r\n const data = mapStaffMediaJoinResult(body);\r\n if (!data) {\r\n throw new Error('media/join response missing livekitUrl or clientToken');\r\n }\r\n return { data: { ...data, callId: data.callId || id, mode } };\r\n }),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to join call media'))),\r\n ),\r\n );\r\n }\r\n\r\n /** Drop staff WebRTC only; does not hang up the patient. */\r\n postMediaLeave(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postMediaLeave(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<unknown>(`${this.arBase}/calls/${enc}/media/leave`, {})\r\n .pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n /**\r\n * Take over — same join payload as media/join { mode: takeover }.\r\n * Prefer this or postMediaJoin('takeover'); both are supported by BE.\r\n */\r\n postTakeover(id: string): Observable<{ data: StaffMediaJoinResult }> {\r\n if (this.useMock) return this.mock.postMediaJoin(id, 'takeover');\r\n const enc = encodeURIComponent(id);\r\n return this.http.post<unknown>(`${this.arBase}/calls/${enc}/takeover`, {}).pipe(\r\n map((body) => {\r\n const data = mapStaffMediaJoinResult(body);\r\n if (!data) {\r\n throw new Error('takeover response missing livekitUrl or clientToken');\r\n }\r\n const mode: StaffMediaMode = 'takeover';\r\n return { data: { ...data, callId: data.callId || id, mode } };\r\n }),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to take over call'))),\r\n ),\r\n );\r\n }\r\n\r\n postResumeAi(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postResumeAi(id);\r\n return this.postCallAction(id, 'resume-ai');\r\n }\r\n\r\n postPause(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postPause(id);\r\n return this.postCallAction(id, 'pause');\r\n }\r\n\r\n postResume(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postResume(id);\r\n return this.postCallAction(id, 'resume');\r\n }\r\n\r\n /** Listen — same join payload as media/join { mode: listen }. */\r\n postListen(id: string): Observable<{ data: StaffMediaJoinResult }> {\r\n if (this.useMock) return this.mock.postMediaJoin(id, 'listen');\r\n const enc = encodeURIComponent(id);\r\n return this.http.post<unknown>(`${this.arBase}/calls/${enc}/listen`, {}).pipe(\r\n map((body) => {\r\n const data = mapStaffMediaJoinResult(body);\r\n if (!data) {\r\n throw new Error('listen response missing livekitUrl or clientToken');\r\n }\r\n const mode: StaffMediaMode = 'listen';\r\n return { data: { ...data, callId: data.callId || id, mode } };\r\n }),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to listen to call'))),\r\n ),\r\n );\r\n }\r\n\r\n postTransfer(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postTransfer(id);\r\n return this.postCallAction(id, 'transfer');\r\n }\r\n\r\n postEnd(id: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postEnd(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/end`, {})\r\n .pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n postMessage(id: string, text: string): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.postMessage(id, text);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/messages`, { text })\r\n .pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n postReview(id: string): Observable<{ data: { review: string } }> {\r\n if (this.useMock) return this.mock.postReview(id);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<{ ok: boolean }>(`${this.arBase}/calls/${enc}/review`, {})\r\n .pipe(map(() => ({ data: { review: 'reviewed' } })));\r\n }\r\n\r\n getTasks(filters?: TaskFilters): Observable<PaginatedResult<TaskItem>> {\r\n if (this.useMock) return this.mock.getTasks(filters);\r\n const page = filters?.page ?? 1;\r\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\r\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\r\n if (filters?.status) {\r\n const apiStatus = filters.status === 'in_progress' ? 'in-progress' : filters.status;\r\n params = params.set('status', apiStatus);\r\n }\r\n if (filters?.type) params = params.set('type', filters.type);\r\n if (filters?.source) params = params.set('source', filters.source);\r\n if (filters?.callId) params = params.set('callId', filters.callId);\r\n return this.http.get<unknown>(`${this.arBase}/tasks`, { params }).pipe(\r\n map((body) => {\r\n const pageResult = asPaginatedResult<TaskDto>(body, page, limit);\r\n return {\r\n ...pageResult,\r\n items: pageResult.items.map(mapTaskDto),\r\n };\r\n }),\r\n );\r\n }\r\n\r\n getCallTasks(callId: string): Observable<{ data: TaskItem[] }> {\r\n if (this.useMock) return this.mock.getCallTasks(callId);\r\n const enc = encodeURIComponent(callId);\r\n return this.http.get<unknown>(`${this.arBase}/calls/${enc}/tasks`).pipe(\r\n map((body) => ({ data: asTaskList(body).map(mapTaskDto) })),\r\n );\r\n }\r\n\r\n createTask(req: CreateTaskRequest): Observable<{ data: TaskItem }> {\r\n if (this.useMock) return this.mock.createTask(req);\r\n return this.http\r\n .post<unknown>(`${this.arBase}/tasks`, mapCreateTaskRequest(req))\r\n .pipe(map((body) => ({ data: mapTaskDto(body as TaskDto) })));\r\n }\r\n\r\n patchTask(id: string, status: TaskItem['status']): Observable<{ data: TaskItem | null }> {\r\n if (this.useMock) return this.mock.patchTask(id, status);\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .patch<unknown>(`${this.arBase}/tasks/${enc}`, { status: toApiTaskStatus(status) })\r\n .pipe(map((body) => ({ data: mapTaskDto(body as TaskDto) })));\r\n }\r\n\r\n getAnalytics(query: string | AnalyticsQuery): Observable<{ data: AnalyticsData }> {\r\n const filters = typeof query === 'string' ? { range: query } : query;\r\n const range = filters.range || '30d';\r\n if (this.useMock) return this.mock.getAnalytics(filters);\r\n const params = this.analyticsParams(filters);\r\n return this.http.get<AnalyticsDto>(`${this.arBase}/analytics/summary`, { params }).pipe(\r\n map((body) => ({ data: mapAnalyticsDto(body, range) })),\r\n );\r\n }\r\n\r\n /** GET /calls/history/export — same filters as getHistory, no pagination. */\r\n exportHistoryCsv(\r\n filters?: CallListFilters,\r\n ): Observable<CsvExportResult> {\r\n if (this.useMock) return this.mock.exportHistoryCsv(filters);\r\n return this.getCsvExport('/calls/history/export', this.callListParams(filters), 'call-history.csv');\r\n }\r\n\r\n /** GET /analytics/export — same filters as getAnalytics including range. */\r\n exportAnalyticsCsv(filters?: AnalyticsQuery): Observable<CsvExportResult> {\r\n if (this.useMock) return this.mock.exportAnalyticsCsv(filters);\r\n const range = filters?.range || '30d';\r\n return this.getCsvExport(\r\n '/analytics/export',\r\n this.analyticsParams(filters),\r\n `analytics-${range}.csv`,\r\n );\r\n }\r\n\r\n getSettings(): Observable<{ data: AgentSettings }> {\r\n if (this.useMock) return this.mock.getSettings();\r\n return forkJoin({\r\n settings: this.http.get<unknown>(`${this.arBase}/settings`),\r\n safety: this.http.get<unknown>(`${this.arBase}/settings/safety-checks`),\r\n }).pipe(\r\n map(({ settings, safety }) => ({\r\n data: mapSettingsResponse(settings, safety),\r\n })),\r\n );\r\n }\r\n\r\n putSettings(next: AgentSettings): Observable<{ data: AgentSettings }> {\r\n if (this.useMock) return this.mock.putSettings(next);\r\n return this.http\r\n .put<unknown>(`${this.arBase}/settings`, { settings: mapSettingsToRequest(next) })\r\n .pipe(\r\n switchMap(() => this.getSettings()),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to save agent settings'))),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * Practice-level Confirm vs Pending booking mode.\r\n * Dedicated endpoint — JWT supplies the practice; do not send practiceId.\r\n */\r\n getBookingMode(): Observable<{ data: BookingModeSettings }> {\r\n if (this.useMock) return this.mock.getBookingMode();\r\n return this.http.get<BookingModeSettingsDto>(`${this.arBase}/settings/booking-mode`).pipe(\r\n map((body) => ({ data: mapBookingModeSettings(body) })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to load booking mode'))),\r\n ),\r\n );\r\n }\r\n\r\n putBookingMode(bookingMode: BookingMode): Observable<{ data: BookingModeSettings }> {\r\n if (this.useMock) return this.mock.putBookingMode(bookingMode);\r\n return this.http\r\n .put<BookingModeSettingsDto>(`${this.arBase}/settings/booking-mode`, { bookingMode })\r\n .pipe(\r\n map((body) => ({ data: mapBookingModeSettings(body) })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to save booking mode'))),\r\n ),\r\n );\r\n }\r\n\r\n /** Shipped default voice system prompt + max lengths. */\r\n getVoicePromptDefault(): Observable<{\r\n defaultVoiceSystemPrompt: string;\r\n voiceSystemPromptMaxLength: number;\r\n customVoiceInstructionsMaxLength: number;\r\n notes?: string;\r\n }> {\r\n if (this.useMock) return this.mock.getVoicePromptDefault();\r\n return this.http.get<{\r\n defaultVoiceSystemPrompt?: string;\r\n voiceSystemPromptMaxLength?: number;\r\n customVoiceInstructionsMaxLength?: number;\r\n notes?: string;\r\n }>(`${this.arBase}/settings/voice-prompt-default`).pipe(\r\n map((body) => ({\r\n defaultVoiceSystemPrompt: String(body?.defaultVoiceSystemPrompt ?? ''),\r\n voiceSystemPromptMaxLength: Number(body?.voiceSystemPromptMaxLength) || 24000,\r\n customVoiceInstructionsMaxLength:\r\n Number(body?.customVoiceInstructionsMaxLength) || 8000,\r\n notes: body?.notes ? String(body.notes) : undefined,\r\n })),\r\n );\r\n }\r\n\r\n /** ElevenLabs spoken sample for Agent Settings voice picker. */\r\n previewVoice(voiceId: string): Observable<Blob> {\r\n if (this.useMock) return this.mock.previewVoice(voiceId);\r\n return this.http\r\n .post(`${this.arBase}/settings/preview-voice`, { voiceId }, {\r\n responseType: 'blob',\r\n })\r\n .pipe(\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => new Error(this.apiErrorMessage(err, 'Failed to preview voice'))),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * Knowledge Base test: draft an answer from whatToSay / whatNotToSay and\r\n * return spoken audio in the practice (or selected) voice.\r\n */\r\n testKnowledgeAnswer(params: {\r\n question: string;\r\n whatToSay: string;\r\n whatNotToSay: string;\r\n voiceId?: string;\r\n }): Observable<{ answer: string; voiceId: string; audioBlob: Blob }> {\r\n if (this.useMock) {\r\n return this.mock.testKnowledgeAnswer(params);\r\n }\r\n return this.http\r\n .post<{\r\n answer?: string;\r\n voiceId?: string;\r\n audioBase64?: string;\r\n contentType?: string;\r\n }>(`${this.arBase}/settings/test-knowledge`, params)\r\n .pipe(\r\n map((body) => {\r\n const answer = String(body?.answer ?? '').trim();\r\n const b64 = String(body?.audioBase64 ?? '').trim();\r\n if (!answer || !b64) {\r\n throw new Error('Test response missing answer or audio');\r\n }\r\n const contentType = String(body?.contentType ?? 'audio/mpeg');\r\n const binary = atob(b64);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\r\n return {\r\n answer,\r\n voiceId: String(body?.voiceId ?? params.voiceId ?? ''),\r\n audioBlob: new Blob([bytes], { type: contentType }),\r\n };\r\n }),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(\r\n () => new Error(this.apiErrorMessage(err, 'Could not generate a test answer.')),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n getAudit(\r\n q?: string,\r\n opts?: { page?: number; limit?: number; actor?: string },\r\n ): Observable<PaginatedResult<AuditEvent>> {\r\n if (this.useMock) return this.mock.getAudit(q, opts?.actor, opts);\r\n const page = opts?.page ?? 1;\r\n const limit = opts?.limit ?? DEFAULT_PAGE_SIZE;\r\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\r\n if (q) params = params.set('search', q);\r\n if (opts?.actor?.trim()) params = params.set('actor', opts.actor.trim());\r\n return this.http.get<unknown>(`${this.arBase}/audit`, { params }).pipe(\r\n map((body) => {\r\n const pageResult = asPaginatedResult(body, page, limit);\r\n return {\r\n ...pageResult,\r\n items: asAuditList(body).map((e, i) => mapAuditEventDto(e, i)),\r\n };\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Agent activity feed: patients created, appointments booked, tasks from AI.\r\n * GET /api/ai-receptionist/activities\r\n */\r\n getActivities(\r\n filters?: AgentActivityFilters,\r\n ): Observable<PaginatedResult<AgentActivity>> {\r\n if (this.useMock) return this.mock.getActivities(filters);\r\n const page = filters?.page ?? 1;\r\n const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;\r\n let params = new HttpParams().set('page', String(page)).set('limit', String(limit));\r\n if (filters?.search?.trim()) params = params.set('search', filters.search.trim());\r\n if (filters?.types?.trim()) params = params.set('types', filters.types.trim());\r\n if (filters?.from?.trim()) params = params.set('from', filters.from.trim());\r\n if (filters?.to?.trim()) params = params.set('to', filters.to.trim());\r\n if (filters?.callId?.trim()) params = params.set('callId', filters.callId.trim());\r\n\r\n return this.http.get<unknown>(`${this.arBase}/activities`, { params }).pipe(\r\n map((body) => {\r\n const pageResult = asPaginatedResult(body, page, limit);\r\n return {\r\n ...pageResult,\r\n items: pageResult.items.map((row, i) => mapAgentActivity(row, i)),\r\n };\r\n }),\r\n );\r\n }\r\n\r\n getSetup(): Observable<{ data: SetupData }> {\r\n if (this.useMock) return this.mock.getSetup();\r\n return this.http.get<SetupDto>(`${this.arBase}/setup`).pipe(\r\n map((body) => ({ data: mapSetupDto(body) })),\r\n );\r\n }\r\n\r\n activateSetup(): Observable<{ data: { success: boolean } }> {\r\n if (this.useMock) return this.mock.activateSetup();\r\n return this.http\r\n .post<{ activated: boolean }>(`${this.arBase}/setup/activate`, {})\r\n .pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n getLocations(): Observable<{ data: LocationOption[] }> {\r\n if (this.useMock) return this.mock.getLocations();\r\n return this.http.get<unknown>(this.paths.apiPath('/locations')).pipe(\r\n map((body) => ({ data: extractApiRows(body).map(mapLocationDto) })),\r\n );\r\n }\r\n\r\n getProviders(): Observable<{ data: ProviderOption[] }> {\r\n if (this.useMock) return this.mock.getProviders();\r\n return this.http.get<unknown>(this.paths.v1Path('/providers')).pipe(\r\n map((body) => ({ data: extractApiRows(body).map(mapProviderDto) })),\r\n );\r\n }\r\n\r\n getStreamLines(): TranscriptLine[] {\r\n return this.mock.getStreamLines();\r\n }\r\n\r\n appendStreamLine(callId: string, line: TranscriptLine): void {\r\n this.mock.appendStreamLine(callId, line);\r\n }\r\n\r\n usesMockStreaming(): boolean {\r\n return this.useMock;\r\n }\r\n\r\n getCallApiLogs(callId: string): Observable<ApiLogListResponse> {\r\n if (this.useMock) return this.mock.getCallApiLogs(callId);\r\n const enc = encodeURIComponent(callId);\r\n return this.http.get<ApiLogListResponse>(`${this.arBase}/calls/${enc}/api-logs`).pipe(\r\n map((body) => ({\r\n items: [...(body.items ?? [])].sort(\r\n (a, b) => Date.parse(a.startedAt) - Date.parse(b.startedAt),\r\n ),\r\n total: body.total ?? body.items?.length ?? 0,\r\n })),\r\n );\r\n }\r\n\r\n getApiLogs(filters: ApiLogFilters = {}): Observable<ApiLogListResponse> {\r\n if (this.useMock) return this.mock.getApiLogs(filters);\r\n let params = new HttpParams();\r\n if (filters.provider) params = params.set('provider', filters.provider);\r\n if (filters.success !== undefined) params = params.set('success', String(filters.success));\r\n if (filters.statusCode != null) params = params.set('statusCode', String(filters.statusCode));\r\n if (filters.operation) params = params.set('operation', filters.operation);\r\n if (filters.callId) params = params.set('callId', filters.callId);\r\n if (filters.from) params = params.set('from', filters.from);\r\n if (filters.to) params = params.set('to', filters.to);\r\n if (filters.search) params = params.set('search', filters.search);\r\n if (filters.page != null) params = params.set('page', String(filters.page));\r\n if (filters.limit != null) params = params.set('limit', String(filters.limit));\r\n if (filters.practiceId) params = params.set('practiceId', filters.practiceId);\r\n return this.http.get<ApiLogListResponse>(`${this.arBase}/api-logs`, { params });\r\n }\r\n\r\n getApiLogDetail(logId: string): Observable<{ data: ApiLogDetail | null }> {\r\n if (this.useMock) return this.mock.getApiLogDetail(logId);\r\n const enc = encodeURIComponent(logId);\r\n return this.http\r\n .get<ApiLogDetail>(`${this.arBase}/api-logs/${enc}`)\r\n .pipe(map((data) => ({ data })));\r\n }\r\n\r\n getApiLogStats(practiceId?: string): Observable<{ data: ApiLogStats }> {\r\n if (this.useMock) return this.mock.getApiLogStats();\r\n let params = new HttpParams();\r\n if (practiceId) params = params.set('practiceId', practiceId);\r\n return this.http\r\n .get<ApiLogStats>(`${this.arBase}/api-logs/stats`, { params })\r\n .pipe(map((data) => ({ data })));\r\n }\r\n\r\n getOutboundPurposes(includeInactive = false): Observable<OutboundPurposesResponse> {\r\n if (this.useMock) return this.mock.getOutboundPurposes(includeInactive);\r\n const params = includeInactive ? new HttpParams().set('includeInactive', 'true') : undefined;\r\n return this.http.get<OutboundPurposesResponse>(`${this.arBase}/calls/outbound/purposes`, {\r\n params,\r\n });\r\n }\r\n\r\n createOutboundPurpose(body: CreateOutboundPurposeRequest): Observable<OutboundPurpose> {\r\n if (this.useMock) return this.mock.createOutboundPurpose(body);\r\n return this.http.post<OutboundPurpose>(`${this.arBase}/calls/outbound/purposes`, body);\r\n }\r\n\r\n updateOutboundPurpose(\r\n purposeId: string,\r\n body: UpdateOutboundPurposeRequest,\r\n ): Observable<OutboundPurpose> {\r\n if (this.useMock) return this.mock.updateOutboundPurpose(purposeId, body);\r\n const enc = encodeURIComponent(purposeId);\r\n return this.http.patch<OutboundPurpose>(`${this.arBase}/calls/outbound/purposes/${enc}`, body);\r\n }\r\n\r\n deleteOutboundPurpose(purposeId: string): Observable<{ success: boolean }> {\r\n if (this.useMock) return this.mock.deleteOutboundPurpose(purposeId);\r\n const enc = encodeURIComponent(purposeId);\r\n return this.http.delete<{ success: boolean }>(\r\n `${this.arBase}/calls/outbound/purposes/${enc}`,\r\n );\r\n }\r\n\r\n placeOutboundCall(body: PlaceOutboundCallRequest): Observable<PlaceOutboundCallResponse> {\r\n if (this.useMock) return this.mock.placeOutboundCall(body);\r\n return this.http.post<PlaceOutboundCallResponse>(`${this.arBase}/calls/outbound`, body).pipe(\r\n catchError((err: HttpErrorResponse) => {\r\n const detail =\r\n typeof err.error === 'object' && err.error && 'message' in err.error\r\n ? String((err.error as { message: unknown }).message)\r\n : err.message;\r\n return throwError(() => ({ message: detail || 'Failed to place outbound call.' }));\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Patient typeahead for outbound dialer.\r\n * Tries `/api/v1/patients/search`, then `/api/v1/patients?q=`, then by-phone for digit queries.\r\n */\r\n searchPatientsForOutbound(q: string, limit = 10): Observable<OutboundPatientHit[]> {\r\n const query = q.trim();\r\n if (!query) return of([]);\r\n if (this.useMock) return this.mock.searchPatientsForOutbound(query, limit);\r\n\r\n const params = new HttpParams().set('q', query).set('limit', String(limit));\r\n const searchUrl = this.paths.v1Path('/patients/search');\r\n const listUrl = this.paths.v1Path('/patients');\r\n\r\n return this.http.get<unknown>(searchUrl, { params }).pipe(\r\n map((body) => this.mapPatientHits(body)),\r\n catchError(() =>\r\n this.http.get<unknown>(listUrl, { params }).pipe(\r\n map((body) => this.mapPatientHits(body)),\r\n catchError(() => of([] as OutboundPatientHit[])),\r\n ),\r\n ),\r\n switchMap((hits) => {\r\n if (hits.length > 0) return of(hits);\r\n const phone = toE164Phone(query);\r\n if (!phone && !/\\d{7,}/.test(query)) return of([]);\r\n return this.http\r\n .get<unknown>(this.paths.v1Path('/patients/by-phone'), {\r\n params: new HttpParams().set('phone', phone || query.replace(/\\D/g, '')),\r\n })\r\n .pipe(\r\n map((body) => this.mapPatientHits(body)),\r\n catchError(() => of([] as OutboundPatientHit[])),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /** Upcoming appointments for a patient (dialer picker). */\r\n listPatientAppointmentsForOutbound(\r\n patientId: string,\r\n limit = 20,\r\n ): Observable<OutboundAppointmentHit[]> {\r\n const id = patientId.trim();\r\n if (!id) return of([]);\r\n if (this.useMock) return this.mock.listPatientAppointmentsForOutbound(id, limit);\r\n\r\n const from = new Date();\r\n from.setHours(0, 0, 0, 0);\r\n const params = new HttpParams()\r\n .set('patientId', id)\r\n .set('patient_id', id)\r\n .set('from', from.toISOString())\r\n .set('limit', String(limit));\r\n\r\n const v1Url = this.paths.v1Path('/appointments');\r\n const apiUrl = this.paths.apiPath('/appointments');\r\n\r\n // Prefer /api/appointments (current host contract), then /api/v1/appointments.\r\n return this.http.get<unknown>(apiUrl, { params }).pipe(\r\n map((body) => this.mapAppointmentHits(body)),\r\n catchError(() =>\r\n this.http.get<unknown>(v1Url, { params }).pipe(\r\n map((body) => this.mapAppointmentHits(body)),\r\n catchError(() => of([] as OutboundAppointmentHit[])),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n private mapPatientHits(body: unknown): OutboundPatientHit[] {\r\n return extractApiRows(body)\r\n .map(mapOutboundPatientHit)\r\n .filter((p): p is OutboundPatientHit => !!p);\r\n }\r\n\r\n private mapAppointmentHits(body: unknown): OutboundAppointmentHit[] {\r\n return extractApiRows(body)\r\n .map(mapOutboundAppointmentHit)\r\n .filter((a): a is OutboundAppointmentHit => !!a)\r\n .sort((a, b) => String(a.startTime ?? '').localeCompare(String(b.startTime ?? '')));\r\n }\r\n\r\n private postCallAction(id: string, action: string): Observable<{ data: { success: boolean } }> {\r\n const enc = encodeURIComponent(id);\r\n return this.http\r\n .post<unknown>(`${this.arBase}/calls/${enc}/${action}`, {})\r\n .pipe(map(() => ({ data: { success: true } })));\r\n }\r\n\r\n private analyticsParams(filters?: AnalyticsQuery): HttpParams {\r\n let params = this.callListParams(filters);\r\n const range = filters?.range || '30d';\r\n params = params.set('range', range);\r\n if (filters?.startDate) params = params.set('startDate', filters.startDate);\r\n if (filters?.endDate) params = params.set('endDate', filters.endDate);\r\n return params;\r\n }\r\n\r\n private callListParams(filters?: CallListFilters): HttpParams {\r\n let params = new HttpParams();\r\n if (filters?.q) params = params.set('search', filters.q);\r\n if (filters?.dir) params = params.set('direction', filters.dir);\r\n if (filters?.outcome) params = params.set('outcome', filters.outcome);\r\n if (filters?.location) params = params.set('location', filters.location);\r\n if (filters?.review) params = params.set('review', filters.review);\r\n return params;\r\n }\r\n\r\n private getCsvExport(\r\n path: string,\r\n params: HttpParams,\r\n fallbackName: string,\r\n ): Observable<CsvExportResult> {\r\n return this.http\r\n .get(`${this.arBase}${path}`, {\r\n params,\r\n responseType: 'blob',\r\n observe: 'response',\r\n })\r\n .pipe(\r\n map((res: HttpResponse<Blob>) => ({\r\n blob: res.body ?? new Blob([], { type: 'text/csv' }),\r\n filename: filenameFromContentDisposition(\r\n res.headers.get('Content-Disposition'),\r\n fallbackName,\r\n ),\r\n })),\r\n catchError((err: HttpErrorResponse) =>\r\n throwError(() => ({\r\n message: this.apiErrorMessage(err, 'Failed to export CSV.'),\r\n status: err.status,\r\n })),\r\n ),\r\n );\r\n }\r\n\r\n private apiErrorMessage(err: HttpErrorResponse, fallback: string): string {\r\n const body = err.error;\r\n if (typeof body === 'object' && body && 'message' in body) {\r\n const text = this.coerceErrorText((body as { message: unknown }).message);\r\n if (text) return text;\r\n }\r\n if (typeof body === 'string' && body.trim() && body !== '[object Object]') return body.trim();\r\n if (typeof err.message === 'string' && err.message.trim() && err.message !== '[object Object]') {\r\n return err.message.trim();\r\n }\r\n return fallback;\r\n }\r\n\r\n private coerceErrorText(value: unknown): string | null {\r\n if (typeof value === 'string' && value.trim() && value !== '[object Object]') {\r\n return value.trim();\r\n }\r\n if (Array.isArray(value)) {\r\n const parts = value.map((item) => this.coerceErrorText(item)).filter((item): item is string => !!item);\r\n return parts.length ? parts.join('; ') : null;\r\n }\r\n if (value && typeof value === 'object' && 'message' in value) {\r\n return this.coerceErrorText((value as { message: unknown }).message);\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { catchError, finalize, of, switchMap, tap, throwError } from 'rxjs';\r\n\r\nimport { AiReceptionistApiService } from './ai-receptionist-api.service';\r\n\r\nexport type AgentOnlineKnownState = boolean | null;\r\n\r\n/**\r\n * Shared source of truth for Ava online/offline across topbar + module nav.\r\n * Always re-fetches GET /status after mutations.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AgentOnlineService {\r\n private readonly api = inject(AiReceptionistApiService);\r\n\r\n /** true = online, false = offline, null = unknown / not loaded */\r\n private readonly _online = signal<AgentOnlineKnownState>(null);\r\n private readonly _loading = signal(false);\r\n private readonly _toggling = signal(false);\r\n private readonly _error = signal<string | null>(null);\r\n private readonly _readiness = signal<number | null>(null);\r\n\r\n readonly online = this._online.asReadonly();\r\n readonly loading = this._loading.asReadonly();\r\n readonly toggling = this._toggling.asReadonly();\r\n readonly error = this._error.asReadonly();\r\n readonly readiness = this._readiness.asReadonly();\r\n\r\n refresh(): void {\r\n this._loading.set(true);\r\n this._error.set(null);\r\n this.api.getStatus().subscribe({\r\n next: ({ data }) => {\r\n if (data.agentOnExplicit !== false) {\r\n this._online.set(data.agentOn);\r\n }\r\n this._readiness.set(data.readiness);\r\n this._loading.set(false);\r\n },\r\n error: (err: { message?: string }) => {\r\n this._online.set(null);\r\n this._error.set(err.message ?? 'Could not load agent status.');\r\n this._loading.set(false);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * PUT /agent-online then re-fetch GET /status.\r\n */\r\n setOnline(enabled: boolean) {\r\n this._toggling.set(true);\r\n this._error.set(null);\r\n\r\n return this.api.setAgentOnline(enabled).pipe(\r\n tap((putResult) => {\r\n this._online.set(\r\n putResult.data.agentOnExplicit !== false ? putResult.data.agentOn : enabled,\r\n );\r\n this._readiness.set(putResult.data.readiness);\r\n }),\r\n switchMap(() =>\r\n this.api.getStatus().pipe(\r\n catchError((err: { message?: string }) => {\r\n this._error.set(err.message ?? 'Status refresh failed after toggle.');\r\n return of(null);\r\n }),\r\n ),\r\n ),\r\n tap((result) => {\r\n if (result && result.data.agentOnExplicit !== false) {\r\n this._online.set(result.data.agentOn);\r\n this._readiness.set(result.data.readiness);\r\n }\r\n }),\r\n catchError((err: { message?: string }) => {\r\n this._error.set(err.message ?? 'Failed to update agent online status.');\r\n return throwError(() => err);\r\n }),\r\n finalize(() => this._toggling.set(false)),\r\n );\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\nexport interface ToastMessage {\r\n id: number;\r\n text: string;\r\n variant: 'info' | 'success' | 'error';\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n private nextId = 1;\r\n private timers = new Map<number, ReturnType<typeof setTimeout>>();\r\n\r\n private readonly _toasts = signal<ToastMessage[]>([]);\r\n readonly toasts = this._toasts.asReadonly();\r\n\r\n show(text: string, variant: ToastMessage['variant'] = 'info', durationMs = 3500): void {\r\n const id = this.nextId++;\r\n this._toasts.update((list) => [...list, { id, text, variant }]);\r\n const timer = setTimeout(() => this.dismiss(id), durationMs);\r\n this.timers.set(id, timer);\r\n }\r\n\r\n dismiss(id: number): void {\r\n const timer = this.timers.get(id);\r\n if (timer) {\r\n clearTimeout(timer);\r\n this.timers.delete(id);\r\n }\r\n this._toasts.update((list) => list.filter((t) => t.id !== id));\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\n\r\nimport { ToastService } from './toast.service';\r\n\r\n@Component({\r\n selector: 'app-toast-container',\r\n standalone: true,\r\n templateUrl: './toast-container.component.html',\r\n styleUrl: './toast-container.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ToastContainerComponent {\r\n protected readonly toastService = inject(ToastService);\r\n}\r\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\">\r\n @for (toast of toastService.toasts(); track toast.id) {\r\n <div\r\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)]\"\r\n role=\"status\"\r\n >\r\n <span\r\n class=\"inline-flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-full\"\r\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'\"\r\n aria-hidden=\"true\"\r\n >\r\n @switch (toast.variant) {\r\n @case ('success') {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n }\r\n @case ('error') {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n }\r\n @default {\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n }\r\n }\r\n </span>\r\n <span class=\"flex-1 leading-snug\">{{ toast.text }}</span>\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"toastService.dismiss(toast.id)\"\r\n aria-label=\"Dismiss notification\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Output,\r\n computed,\r\n input,\r\n effect,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\ntype Size = 'xs' | 'sm' | 'base' | 'md' | 'lg';\r\ntype Variant =\r\n | 'default'\r\n | 'primary'\r\n | 'secondary'\r\n | 'accent'\r\n | 'success'\r\n | 'danger'\r\n | 'warning'\r\n | 'info';\r\ntype Shape = 'square' | 'pill' | 'rounded';\r\n\r\n/** Coerce `[loading]` so attributes like `loading`, `loading=\"true\"|\"false\"`, or a label work. */\r\nfunction coerceLoading(value: unknown): boolean | string {\r\n if (value == null) return false;\r\n if (value === '' || value === true) return true;\r\n if (typeof value === 'string') {\r\n if (value === 'true') return true;\r\n if (value === 'false') return false;\r\n const v = value.trim();\r\n if (v === '') return false;\r\n if (v === 'true') return true;\r\n if (v === 'false') return false;\r\n return v;\r\n }\r\n if (typeof value === 'boolean') return value;\r\n return false;\r\n}\r\n\r\ndeclare const ngDevMode: boolean;\r\n\r\n@Component({\r\n selector: 'ed-button',\r\n standalone: true,\r\n imports: [CommonModule, RouterModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './ed-button.component.html',\r\n styleUrl: './ed-button.component.scss',\r\n})\r\nexport class EdButtonComponent {\r\n variant = input<Variant>('default');\r\n size = input<Size>('base');\r\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n ghost = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n outline = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n subtle = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n fill = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n loading = input<boolean | string, unknown>(false, {\r\n transform: coerceLoading,\r\n });\r\n\r\n block = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n elevated = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n shape = input<Shape>('rounded');\r\n\r\n type = input<'button' | 'submit' | 'reset'>('button');\r\n\r\n href = input<string | null>(null);\r\n routerLink = input<string | any[] | null>(null);\r\n rel = input<string | null>(null);\r\n target = input<string | null>(null);\r\n download = input<string | boolean | null>(null);\r\n\r\n ariaLabel = input<string | null>(null);\r\n\r\n @Output('click$') clicked = new EventEmitter<MouseEvent>();\r\n\r\n styleKind = computed<'ghost' | 'outline' | 'subtle' | 'fill'>(() => {\r\n if (this.ghost()) return 'ghost';\r\n if (this.outline()) return 'outline';\r\n if (this.subtle()) return 'subtle';\r\n if (this.fill()) return 'fill';\r\n return 'outline';\r\n });\r\n\r\n constructor() {\r\n if (typeof ngDevMode !== 'undefined' && ngDevMode) {\r\n effect(() => {\r\n const active = [\r\n this.ghost() && 'ghost',\r\n this.outline() && 'outline',\r\n this.subtle() && 'subtle',\r\n this.fill() && 'fill',\r\n ].filter(Boolean);\r\n if (active.length > 1) {\r\n console.warn(\r\n '[ed-button] Multiple style attributes set:',\r\n active.join(', '),\r\n '→ only the first one takes effect.',\r\n );\r\n }\r\n });\r\n\r\n effect(() => {\r\n const hasHref = !!this.href();\r\n const hasRouter = !!this.routerLink();\r\n if (hasHref && hasRouter) {\r\n console.warn(\r\n '[ed-button] Both href and routerLink provided. routerLink will be used and href ignored.',\r\n );\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.target() === '_blank') {\r\n const rel = (this.rel() ?? '').trim();\r\n const hasNoopener = /\\bnoopener\\b/.test(rel);\r\n const hasNoreferrer = /\\bnoreferrer\\b/.test(rel);\r\n if (!hasNoopener || !hasNoreferrer) {\r\n console.warn(\r\n '[ed-button] target=\"_blank\" without rel=\"noopener noreferrer\" → automatically applied.',\r\n );\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n linkMode = computed<'router' | 'href' | null>(() =>\r\n this.routerLink() ? 'router' : this.href() ? 'href' : null,\r\n );\r\n\r\n asAnchor = computed(() => this.linkMode() !== null);\r\n\r\n effectiveHref = computed<string | null>(() =>\r\n this.linkMode() === 'href' ? this.href() || null : null,\r\n );\r\n\r\n effectiveRouterLink = computed<string | any[] | null>(() =>\r\n this.linkMode() === 'router' ? this.routerLink() || null : null,\r\n );\r\n\r\n safeRel = computed<string | null>(() => {\r\n const tgt = this.target();\r\n const rel = (this.rel() ?? '').trim();\r\n\r\n if (tgt === '_blank') {\r\n const tokens = new Set(rel.split(/\\s+/).filter(Boolean));\r\n tokens.add('noopener');\r\n tokens.add('noreferrer');\r\n return Array.from(tokens).join(' ');\r\n }\r\n\r\n return rel || null;\r\n });\r\n\r\n private static readonly HEIGHTS: Record<Size, number> = {\r\n xs: 24,\r\n sm: 28,\r\n base: 32,\r\n md: 36,\r\n lg: 40,\r\n };\r\n\r\n private static readonly ICONS: Record<Size, number> = {\r\n xs: 14,\r\n sm: 16,\r\n base: 20,\r\n md: 18,\r\n lg: 20,\r\n };\r\n\r\n btnHeightPx = computed(() => EdButtonComponent.HEIGHTS[this.size()]);\r\n iconPx = computed(() => EdButtonComponent.ICONS[this.size()]);\r\n\r\n loadingOn = computed<boolean>(() => {\r\n const v = this.loading();\r\n return typeof v === 'string' ? v.trim().length > 0 : !!v;\r\n });\r\n\r\n loadingLabel = computed<string>(() => {\r\n const v = this.loading();\r\n return typeof v === 'string' && v.trim().length > 0 ? v : 'Loading…';\r\n });\r\n\r\n downloadAttr() {\r\n const d = this.download();\r\n return d === true ? '' : d || null;\r\n }\r\n\r\n onClick(evt: MouseEvent) {\r\n if (this.disabled() || this.loadingOn()) {\r\n evt.preventDefault();\r\n evt.stopImmediatePropagation();\r\n return;\r\n }\r\n this.clicked.emit(evt);\r\n }\r\n}\r\n","<ng-template #slotPrefix>\r\n <ng-content select='[slot=\"prefix\"]' />\r\n</ng-template>\r\n<ng-template #slotDefault>\r\n <ng-content />\r\n</ng-template>\r\n<ng-template #slotSuffix>\r\n <ng-content select='[slot=\"suffix\"]' />\r\n</ng-template>\r\n\r\n@if (!asAnchor()) {\r\n <button\r\n class=\"btn\"\r\n [attr.variant]=\"variant()\"\r\n [attr.size]=\"size()\"\r\n [class.is-block]=\"block()\"\r\n [class.is-elevated]=\"elevated()\"\r\n [class.shape-pill]=\"shape() === 'pill'\"\r\n [class.shape-square]=\"shape() === 'square'\"\r\n [disabled]=\"disabled() || loadingOn()\"\r\n [attr.type]=\"type()\"\r\n [attr.aria-busy]=\"loadingOn() ? 'true' : null\"\r\n [attr.inert]=\"(disabled() || loadingOn()) ? '' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (click)=\"onClick($event)\"\r\n [style.height.px]=\"btnHeightPx()\"\r\n [style.minHeight.px]=\"24\"\r\n [style.minWidth.px]=\"24\"\r\n [style.--btn-icon.px]=\"iconPx()\"\r\n [attr.ghost]=\"ghost() ? '' : null\"\r\n [attr.subtle]=\"subtle() ? '' : null\"\r\n [attr.fill]=\"fill() ? '' : null\"\r\n [attr.outline]=\"(outline() || (!ghost() && !subtle() && !fill())) ? '' : null\">\r\n @if (loadingOn()) {\r\n <span class=\"spinner\" aria-hidden=\"true\"></span>\r\n }\r\n\r\n @if (loadingOn()) {\r\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ loadingLabel() }}\r\n </span>\r\n }\r\n\r\n <span class=\"btn-inner\">\r\n <ng-container [ngTemplateOutlet]=\"slotPrefix\"></ng-container>\r\n\r\n <span class=\"label\">\r\n @if (loadingOn()) {\r\n {{ loadingLabel() }}\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"slotDefault\"></ng-container>\r\n }\r\n </span>\r\n\r\n <ng-container [ngTemplateOutlet]=\"slotSuffix\"></ng-container>\r\n </span>\r\n </button>\r\n} @else {\r\n <a\r\n class=\"btn\"\r\n [attr.variant]=\"variant()\"\r\n [attr.size]=\"size()\"\r\n [class.is-block]=\"block()\"\r\n [class.is-elevated]=\"elevated()\"\r\n [class.shape-pill]=\"shape() === 'pill'\"\r\n [class.shape-square]=\"shape() === 'square'\"\r\n [attr.href]=\"effectiveHref()\"\r\n [routerLink]=\"effectiveRouterLink()\"\r\n [attr.rel]=\"safeRel()\"\r\n [attr.target]=\"target() || null\"\r\n [attr.download]=\"downloadAttr()\"\r\n [attr.tabindex]=\"(disabled() || loadingOn()) ? -1 : 0\"\r\n [attr.aria-disabled]=\"(disabled() || loadingOn()) ? 'true' : null\"\r\n [attr.aria-busy]=\"loadingOn() ? 'true' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (click)=\"onClick($event)\"\r\n [style.height.px]=\"btnHeightPx()\"\r\n [style.minHeight.px]=\"24\"\r\n [style.minWidth.px]=\"24\"\r\n [style.--btn-icon.px]=\"iconPx()\"\r\n [attr.ghost]=\"ghost() ? '' : null\"\r\n [attr.subtle]=\"subtle() ? '' : null\"\r\n [attr.fill]=\"fill() ? '' : null\"\r\n [attr.outline]=\"(outline() || (!ghost() && !subtle() && !fill())) ? '' : null\">\r\n @if (loadingOn()) {\r\n <span class=\"spinner\" aria-hidden=\"true\"></span>\r\n }\r\n\r\n @if (loadingOn()) {\r\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ loadingLabel() }}\r\n </span>\r\n }\r\n\r\n <span class=\"btn-inner\">\r\n <ng-container [ngTemplateOutlet]=\"slotPrefix\"></ng-container>\r\n\r\n <span class=\"label\">\r\n @if (loadingOn()) {\r\n {{ loadingLabel() }}\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"slotDefault\"></ng-container>\r\n }\r\n </span>\r\n\r\n <ng-container [ngTemplateOutlet]=\"slotSuffix\"></ng-container>\r\n </span>\r\n </a>\r\n}\r\n","import { Component, Input, NgModule } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ed-skeleton',\r\n template: '',\r\n host: {\r\n '[class]': '_computedClass()',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class EdSkeletonComponent {\r\n @Input(\"class\") userClass: string = \"\";\r\n\r\n _computedClass() {\r\n return \"block animate-pulse rounded-md bg-lighter skeleton\" + \" \" + this.userClass;\r\n }\r\n}\r\n\r\n\r\n\r\n","/**\r\n * ed-icon\r\n * ----------\r\n * Renders an inline SVG icon from /assets/icons/{name}.svg\r\n * - Default size is \"base\" (24px).\r\n * - Optional color override applies to fill and stroke of child shapes.\r\n * - Optional additional CSS classes applied directly to the <svg>.\r\n *\r\n * Performance & correctness:\r\n * - ChangeDetectionStrategy.OnPush (no template binding).\r\n * - Aborts in-flight fetches on input changes & destroy (prevents races/leaks).\r\n * - Reuses a DOMParser instance.\r\n * - Caches raw SVG text in a static Map by file path (optional micro-optimization).\r\n * - Scopes internal SVG IDs (mask/clipPath/filter/gradient/use) per instance.\r\n * - Ensures a viewBox exists so removing width/height won’t blank the SVG.\r\n *\r\n * Accessibility:\r\n * - By default, icons are decorative → aria-hidden=\"true\", role=\"presentation\", focusable=\"false\".\r\n * - Overridable via inputs: decorative, ariaHidden, ariaLabel, title, desc.\r\n */\r\n\r\nimport {\r\n Component,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n ElementRef,\r\n Renderer2,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\n\r\n/* ──────────────────────────────── Types ───────────────────────────────────── */\r\ntype IconSize = 'xs' | 'sm' | 'md' | 'base' | 'lg' | number | string;\r\n\r\n@Component({\r\n selector: 'ed-icon',\r\n template: '',\r\n styles: [\r\n `\r\n :host {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n inline-size: var(--ed-icon-size, var(--btn-icon, 24px));\r\n block-size: var(--ed-icon-size, var(--btn-icon, 24px));\r\n line-height: 1;\r\n }\r\n :host svg {\r\n width: 100%;\r\n height: 100%;\r\n /* note: preserveAspectRatio is set as an SVG attribute in TS */\r\n }\r\n `,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class IconComponent implements OnChanges, OnDestroy {\r\n /** Icon file name (without .svg). */\r\n @Input() name: string = '';\r\n\r\n /** Size token or explicit pixel number. Defaults to base (24). */\r\n @Input() size: IconSize = 'base';\r\n\r\n /** Optional color override for fill/stroke. */\r\n @Input() color: string = '';\r\n\r\n /** Optional space-separated class list for the <svg>. */\r\n @Input() cssClass: string = '';\r\n\r\n // ─── Accessibility Inputs ───────────────────────────────────────────────────\r\n\r\n /** Mark the icon as decorative (not announced by screen readers). Default true. */\r\n @Input() decorative: boolean = true;\r\n\r\n /** Optional explicit override for aria-hidden. */\r\n @Input() ariaHidden?: boolean;\r\n\r\n /** Short accessible name for meaningful icons. */\r\n @Input() ariaLabel: string = '';\r\n\r\n /** Optional <title> text injected into the SVG and referenced via aria-labelledby. */\r\n @Input() title: string = '';\r\n\r\n /** Optional <desc> text injected into the SVG and referenced via aria-labelledby. */\r\n @Input() desc: string = '';\r\n\r\n /** Allow keyboard focus (for tooltips). Default: false (BC-safe) */\r\n @Input() focusable: boolean = false;\r\n\r\n /** Optional tabindex to use when focusable; defaults to 0 */\r\n @Input() tabIndex?: number;\r\n\r\n\r\n /** Host and utilities */\r\n private host!: HTMLElement;\r\n private parser = new DOMParser();\r\n private fetchController: AbortController | null = null;\r\n\r\n /** Tiny raw-SVG cache by path */\r\n private static cache = new Map<string, string>();\r\n private static inflight = new Map<string, Promise<string>>();\r\n\r\n /** Local UID seed for scoping and a11y IDs */\r\n private static uid = 0;\r\n private nextUid(prefix: string) {\r\n IconComponent.uid += 1;\r\n return `${prefix}-${IconComponent.uid}`;\r\n }\r\n\r\n /** NEW: keep reference to live SVG + observe host size/CSS var changes */\r\n private svgRef: SVGSVGElement | null = null;\r\n private ro: ResizeObserver | null = null;\r\n\r\n constructor(private el: ElementRef<HTMLElement>, private r: Renderer2) {\r\n this.host = el.nativeElement;\r\n }\r\n\r\n /** Lifecycle: runs whenever any @Input changes. */\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (\r\n changes['name'] ||\r\n changes['color'] ||\r\n changes['size'] ||\r\n changes['cssClass'] ||\r\n changes['decorative'] ||\r\n changes['ariaHidden'] ||\r\n changes['ariaLabel'] ||\r\n changes['title'] ||\r\n changes['desc'] ||\r\n changes['focusable'] || \r\n changes['tabIndex']\r\n ) {\r\n this.loadSvg();\r\n }\r\n }\r\n\r\n /** Lifecycle: component teardown. */\r\n ngOnDestroy() {\r\n if (this.fetchController) {\r\n this.fetchController.abort();\r\n this.fetchController = null;\r\n }\r\n if (this.ro) {\r\n this.ro.disconnect();\r\n this.ro = null;\r\n }\r\n this.svgRef = null;\r\n this.host.innerHTML = '';\r\n }\r\n\r\n /**\r\n * Fetches, parses, and injects the SVG into the host.\r\n * - Aborts previous request to prevent stale DOM writes.\r\n * - Applies size, classes, color, a11y, and ID scoping.\r\n */\r\n private async loadSvg() {\r\n if (!this.name) return;\r\n\r\n // Abort any in-flight request to prevent race conditions.\r\n if (this.fetchController) this.fetchController.abort();\r\n this.fetchController = new AbortController();\r\n\r\n // Clear existing content so we always replace with fresh markup.\r\n this.host.innerHTML = '';\r\n this.svgRef = null;\r\n\r\n const svgPath = `assets/icons/${this.name}.svg`;\r\n\r\n try {\r\n // 1) Try memory cache first\r\n // let svgText = IconComponent.cache.get(svgPath);\r\n\r\n // // 2) Hit the network (or browser cache) if not cached in memory.\r\n // if (!svgText) {\r\n // const res = await fetch(svgPath, {\r\n // cache: 'force-cache',\r\n // signal: this.fetchController.signal,\r\n // });\r\n // if (!res.ok) throw new Error(`HTTP ${res.status} for ${svgPath}`);\r\n // svgText = await res.text();\r\n // IconComponent.cache.set(svgPath, svgText);\r\n // }\r\n\r\n let svgText = IconComponent.cache.get(svgPath);\r\n\r\n if (!svgText) {\r\n // 2) De-dupe concurrent requests\r\n let p = IconComponent.inflight.get(svgPath);\r\n\r\n if (!p) {\r\n p = fetch(svgPath, { cache: 'no-cache' })\r\n .then(async (res) => {\r\n if (!res.ok) throw new Error(`HTTP ${res.status} for ${svgPath}`);\r\n const text = await res.text();\r\n // SPA fallback can return index.html with 200 for missing icons.\r\n if (!text.includes('<svg')) {\r\n throw new Error(`Not an SVG for ${svgPath}`);\r\n }\r\n return text;\r\n })\r\n .then((text) => {\r\n IconComponent.cache.set(svgPath, text);\r\n return text;\r\n })\r\n .finally(() => {\r\n IconComponent.inflight.delete(svgPath);\r\n });\r\n\r\n IconComponent.inflight.set(svgPath, p);\r\n }\r\n\r\n svgText = await p;\r\n }\r\n\r\n // 3) Parse raw SVG text into a document, then select the root <svg>.\r\n const doc = this.parser.parseFromString(svgText, 'image/svg+xml');\r\n const svgEl = doc.querySelector('svg') as SVGSVGElement | null;\r\n if (!svgEl) return; // guard: malformed file\r\n\r\n // 4) Normalize sizing & scaling\r\n svgEl.removeAttribute('width');\r\n svgEl.removeAttribute('height');\r\n svgEl.setAttribute('preserveAspectRatio', 'xMidYMid meet');\r\n this.ensureViewBox(svgEl);\r\n\r\n // 4.1) Scope internal IDs to avoid collisions across instances\r\n const scope = this.nextUid('edicon');\r\n this.scopeSvgIds(svgEl, scope);\r\n\r\n // 4.2) Apply component-declared size to CSS var and also prime width/height.\r\n // (We still mirror final computed vars again after append — see below.)\r\n // 4.2) Only force a size if it's explicit; otherwise inherit --btn-icon.\r\n const px = this.resolveSize(this.size);\r\n const explicitSize =\r\n (typeof this.size === 'number' && Number(this.size) > 0) ||\r\n (typeof this.size === 'string' && this.size !== 'base');\r\n\r\n if (explicitSize) {\r\n // icon controls its own size\r\n this.host.style.setProperty('--ed-icon-size', `${px}px`);\r\n svgEl.setAttribute('width', String(px));\r\n svgEl.setAttribute('height', String(px));\r\n } else {\r\n // inherit from container (e.g., ed-button via --btn-icon)\r\n this.host.style.removeProperty('--ed-icon-size');\r\n // do NOT set width/height here; we’ll mirror the computed var after append\r\n }\r\n\r\n\r\n // 6) Apply color override to shapes (if provided).\r\n this.setFillColor(svgEl);\r\n\r\n // 7) Apply accessibility attributes/elements.\r\n this.applyAccessibility(svgEl);\r\n\r\n // 8) Import into current document & append to host.\r\n const node = document.importNode(svgEl, true) as SVGSVGElement;\r\n this.r.appendChild(this.host, node);\r\n\r\n // 9) Keep a live ref and mirror the **effective** CSS var size to <svg> attrs.\r\n this.svgRef = node;\r\n this.syncSvgSizeFromCssVar();\r\n\r\n // 10) Watch for future changes (e.g., parent updates --btn-icon)\r\n if (!this.ro) {\r\n this.ro = new ResizeObserver(() => this.syncSvgSizeFromCssVar());\r\n } else {\r\n this.ro.disconnect();\r\n }\r\n this.ro.observe(this.host);\r\n } catch (err: any) {\r\n // AbortError is expected when inputs change rapidly; ignore it.\r\n if (err?.name !== 'AbortError') {\r\n console.error(`Icon load error: ${this.name}`, err);\r\n }\r\n } finally {\r\n // Release controller after completion (success or failure).\r\n this.fetchController = null;\r\n }\r\n }\r\n\r\n /** Ensure the SVG has a viewBox so it scales when width/height are removed. */\r\n private ensureViewBox(svgEl: SVGSVGElement) {\r\n if (!svgEl.hasAttribute('viewBox')) {\r\n // Best guess for 24px icons; adjust if your icon set differs.\r\n // If the SVG has width/height attributes originally, derive from them.\r\n const w = Number(svgEl.getAttribute('width')) || 24;\r\n const h = Number(svgEl.getAttribute('height')) || 24;\r\n svgEl.setAttribute('viewBox', `0 0 ${w} ${h}`);\r\n }\r\n }\r\n\r\n /**\r\n * Prefix all internal IDs and their url(#...) references to avoid DOM collisions.\r\n * Handles: mask, clipPath, filter, gradient, markers, use, and style/url(...) in attributes.\r\n */\r\n private scopeSvgIds(svgEl: SVGSVGElement, scope: string) {\r\n const idMap = new Map<string, string>();\r\n const urlAttrs = [\r\n 'fill',\r\n 'stroke',\r\n 'filter',\r\n 'mask',\r\n 'clip-path',\r\n 'marker-start',\r\n 'marker-mid',\r\n 'marker-end',\r\n ];\r\n\r\n // 1) Collect all elements with an id\r\n svgEl.querySelectorAll<HTMLElement>('[id]').forEach((el) => {\r\n const oldId = el.getAttribute('id')!;\r\n const newId = `${scope}-${oldId}`;\r\n idMap.set(oldId, newId);\r\n el.setAttribute('id', newId);\r\n });\r\n\r\n // 2) Rewrite attributes that reference url(#id)\r\n const all = svgEl.querySelectorAll<HTMLElement>('*');\r\n all.forEach((el) => {\r\n urlAttrs.forEach((attr) => {\r\n const val = el.getAttribute(attr);\r\n if (!val) return;\r\n const newVal = val.replace(/url\\(#([^)]+)\\)/g, (_, id) => {\r\n return idMap.has(id) ? `url(#${idMap.get(id)})` : `url(#${scope}-${id})`;\r\n });\r\n if (newVal !== val) el.setAttribute(attr, newVal);\r\n });\r\n\r\n // xlink:href / href on <use>, gradients, etc.\r\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\r\n if (href && href.startsWith('#')) {\r\n const raw = href.slice(1);\r\n const mapped = idMap.get(raw) ?? `${scope}-${raw}`;\r\n if (el.hasAttribute('href')) el.setAttribute('href', `#${mapped}`);\r\n if (el.hasAttribute('xlink:href')) el.setAttribute('xlink:href', `#${mapped}`);\r\n }\r\n\r\n // Inline style can also contain url(#id)\r\n const styleAttr = el.getAttribute('style');\r\n if (styleAttr && styleAttr.includes('url(#')) {\r\n const newStyle = styleAttr.replace(/url\\(#([^)]+)\\)/g, (_, id) => {\r\n return idMap.has(id) ? `url(#${idMap.get(id)})` : `url(#${scope}-${id})`;\r\n });\r\n if (newStyle !== styleAttr) el.setAttribute('style', newStyle);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Apply accessibility attributes/elements to the <svg>.\r\n * Defaults: aria-hidden=\"true\", role=\"presentation\", focusable=\"false\".\r\n * Overridable via inputs: decorative, ariaHidden, ariaLabel, title, desc.\r\n */\r\n private applyAccessibility(svgEl: SVGSVGElement) {\r\n const wantsFocus = !!this.focusable;\r\n\r\n // Decide visibility to AT (screen readers)\r\n // Default: decorative => hidden (unchanged)\r\n // If focusable is true, force it to be *not* hidden so SR can announce it.\r\n const hidden = wantsFocus ? false : (this.ariaHidden ?? this.decorative);\r\n\r\n // Manage tab focus\r\n if (wantsFocus) {\r\n this.r.setAttribute(svgEl, 'tabindex', String(\r\n Number.isFinite(this.tabIndex as any) ? this.tabIndex : 0\r\n ));\r\n this.r.setAttribute(svgEl, 'focusable', 'true');\r\n } else {\r\n svgEl.removeAttribute('tabindex');\r\n this.r.setAttribute(svgEl, 'focusable', 'false');\r\n }\r\n\r\n if (hidden) {\r\n // Decorative (unchanged default)\r\n this.r.setAttribute(svgEl, 'aria-hidden', 'true');\r\n this.r.setAttribute(svgEl, 'role', 'presentation');\r\n svgEl.removeAttribute('aria-label');\r\n svgEl.removeAttribute('aria-labelledby');\r\n return;\r\n }\r\n\r\n // Meaningful (when focusable or explicitly unhidden)\r\n this.r.setAttribute(svgEl, 'aria-hidden', 'false');\r\n this.r.setAttribute(svgEl, 'role', 'img');\r\n\r\n // Rebuild labeling\r\n svgEl.removeAttribute('aria-label');\r\n svgEl.removeAttribute('aria-labelledby');\r\n\r\n const ids: string[] = [];\r\n if (this.title) {\r\n const titleId = this.nextUid('ed-icon-title');\r\n const titleEl = this.r.createElement('title', 'svg') as SVGTitleElement;\r\n this.r.setAttribute(titleEl, 'id', titleId);\r\n (titleEl as any).textContent = this.title;\r\n svgEl.insertBefore(titleEl, svgEl.firstChild);\r\n ids.push(titleId);\r\n }\r\n if (this.desc) {\r\n const descId = this.nextUid('ed-icon-desc');\r\n const descEl = this.r.createElement('desc', 'svg') as SVGDescElement;\r\n this.r.setAttribute(descEl, 'id', descId);\r\n (descEl as any).textContent = this.desc;\r\n const afterTitle =\r\n (svgEl.querySelector('title')?.nextSibling as ChildNode | null) || svgEl.firstChild;\r\n svgEl.insertBefore(descEl, afterTitle);\r\n ids.push(descId);\r\n }\r\n if (ids.length > 0) {\r\n this.r.setAttribute(svgEl, 'aria-labelledby', ids.join(' '));\r\n } else {\r\n const label = this.ariaLabel?.trim() || this.name.replace(/[-_]/g, ' ');\r\n if (label) this.r.setAttribute(svgEl, 'aria-label', label);\r\n }\r\n}\r\n\r\n\r\n /**\r\n * Attempts to apply the provided `color` to relevant SVG child elements.\r\n */\r\n private setFillColor(svgElement: SVGSVGElement) {\r\n if (!this.color) return;\r\n\r\n const elements = svgElement.querySelectorAll<SVGElement>(\r\n 'path, circle, rect, polygon, ellipse, line, polyline'\r\n );\r\n\r\n elements.forEach((el) => {\r\n const fill = el.getAttribute('fill');\r\n const stroke = el.getAttribute('stroke');\r\n\r\n if (fill && fill !== 'none' && fill !== 'transparent')\r\n this.r.setAttribute(el, 'fill', this.color);\r\n if (stroke && stroke !== 'none' && stroke !== 'transparent')\r\n this.r.setAttribute(el, 'stroke', this.color);\r\n\r\n if (!fill && !stroke) this.r.setAttribute(el, 'fill', this.color);\r\n });\r\n\r\n const svgFill = svgElement.getAttribute('fill');\r\n const svgStroke = svgElement.getAttribute('stroke');\r\n if (svgFill && svgFill !== 'none' && svgFill !== 'transparent')\r\n this.r.setAttribute(svgElement, 'fill', this.color);\r\n if (svgStroke && svgStroke !== 'none' && svgStroke !== 'transparent')\r\n this.r.setAttribute(svgElement, 'stroke', this.color);\r\n }\r\n\r\n /**\r\n * Converts a semantic or numeric size to a pixel number.\r\n * - Known tokens: xs=16, sm=20, base=24, md=28, lg=32\r\n */\r\n private resolveSize(size: IconSize): number {\r\n const sizeMap: Record<'xs' | 'sm' | 'base' | 'md' | 'lg', number> = {\r\n xs: 16,\r\n sm: 20,\r\n base: 24,\r\n md: 28,\r\n lg: 32,\r\n };\r\n\r\n if (typeof size === 'string') {\r\n const asNum = Number(size);\r\n if (Number.isFinite(asNum) && asNum > 0) return asNum;\r\n return sizeMap[size as keyof typeof sizeMap] ?? sizeMap.base;\r\n }\r\n\r\n const num = Number(size);\r\n return Number.isFinite(num) && num > 0 ? num : sizeMap.base;\r\n }\r\n\r\n /* ───────────────────────────── Size mirroring helpers ───────────────────── */\r\n\r\n private parsePx(input: string | null | undefined, fallback = 24): number {\r\n if (!input) return fallback;\r\n const v = Number(String(input).trim().replace('px', ''));\r\n return Number.isFinite(v) && v > 0 ? v : fallback;\r\n }\r\n\r\n /** Reads computed --ed-icon-size/--btn-icon and mirrors them to <svg width/height>. */\r\n private syncSvgSizeFromCssVar() {\r\n if (!this.svgRef) return;\r\n\r\n const cs = getComputedStyle(this.host);\r\n const edIconVar = cs.getPropertyValue('--ed-icon-size').trim();\r\n const btnIconVar = cs.getPropertyValue('--btn-icon').trim();\r\n\r\n let px = this.parsePx(edIconVar || btnIconVar, this.resolveSize(this.size));\r\n if (!px || px <= 0) {\r\n px = Math.round(this.host.getBoundingClientRect().width) || 24;\r\n }\r\n\r\n this.svgRef.setAttribute('width', String(px));\r\n this.svgRef.setAttribute('height', String(px));\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Lightweight, reusable modal shell.\r\n *\r\n * Renders a centered card on top of a dimmed backdrop. Closes on backdrop\r\n * click, ESC key, or via the close button.\r\n *\r\n * Slots:\r\n * - default: scrollable body\r\n * - [modalStickyTop]: optional sticky content below the title header\r\n * - [modalFooter]: optional sticky footer (actions / preview)\r\n */\r\n@Component({\r\n selector: 'app-modal',\r\n standalone: true,\r\n templateUrl: './modal.component.html',\r\n styleUrl: './modal.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ModalComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) title!: string;\r\n @Input() subtitle?: string;\r\n @Input() maxWidth = '640px';\r\n @Output() readonly closed = new EventEmitter<void>();\r\n\r\n @ViewChild('backdrop', { static: true })\r\n private readonly backdrop?: ElementRef<HTMLElement>;\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private movedToBody = false;\r\n\r\n ngAfterViewInit(): void {\r\n const el = this.backdrop?.nativeElement;\r\n if (!el || el.parentElement === document.body) return;\r\n // Escape #content-area / .eds-content overflow clipping so the overlay\r\n // covers the full viewport above EHR chrome.\r\n this.renderer.appendChild(document.body, el);\r\n this.movedToBody = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const el = this.backdrop?.nativeElement;\r\n if (this.movedToBody && el?.parentElement) {\r\n this.renderer.removeChild(el.parentElement, el);\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscape(): void {\r\n this.closed.emit();\r\n }\r\n\r\n onBackdropClick(event: MouseEvent): void {\r\n if (event.target === event.currentTarget) {\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<div\r\n #backdrop\r\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]\"\r\n (click)=\"onBackdropClick($event)\"\r\n role=\"presentation\"\r\n>\r\n <div\r\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\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"title\"\r\n [style.max-width]=\"maxWidth\"\r\n >\r\n <header class=\"modal-header flex shrink-0 items-start justify-between gap-4 border-b border-base px-6 pb-4 pt-5\">\r\n <div class=\"flex min-w-0 flex-col gap-1\">\r\n <h2 class=\"m-0 text-base font-semibold tracking-tight text-dark\">{{ title }}</h2>\r\n @if (subtitle) {\r\n <p class=\"m-0 text-[13px] text-light\">{{ subtitle }}</p>\r\n }\r\n </div>\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"close()\"\r\n aria-label=\"Close dialog\"\r\n >\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </header>\r\n\r\n <div class=\"modal-sticky-top shrink-0 empty:hidden\">\r\n <ng-content select=\"[modalStickyTop]\" />\r\n </div>\r\n\r\n <div class=\"modal-body min-h-0 flex-1 overflow-y-auto overscroll-contain px-6 pb-6 pt-5\">\r\n <ng-content />\r\n </div>\r\n\r\n <div class=\"modal-footer shrink-0 empty:hidden\">\r\n <ng-content select=\"[modalFooter]\" />\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { EdButtonComponent } from '../../ui/ed-button.component';\r\n\r\nimport { AiReceptionistApiService } from '../../services/ai-receptionist-api.service';\r\nimport { IconComponent } from '../../ui/ed-icon.component';\r\nimport { ModalComponent } from '../../shared/modal.component';\r\nimport { ToastService } from '../../shared/toast.service';\r\n\r\nconst QUESTION_MAX = 500;\r\n\r\n@Component({\r\n selector: 'eds-knowledge-test-modal',\r\n imports: [FormsModule, ModalComponent, IconComponent, EdButtonComponent],\r\n templateUrl: './knowledge-test-modal.component.html',\r\n styleUrl: './knowledge-test-modal.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KnowledgeTestModalComponent implements OnChanges, OnDestroy {\r\n private readonly api = inject(AiReceptionistApiService);\r\n private readonly toast = inject(ToastService);\r\n\r\n @Input({ required: true }) open = false;\r\n @Input() whatToSay = '';\r\n @Input() whatNotToSay = '';\r\n @Input() voiceId = '';\r\n @Output() readonly closed = new EventEmitter<void>();\r\n\r\n protected readonly questionMax = QUESTION_MAX;\r\n protected readonly question = signal('');\r\n protected readonly testing = signal(false);\r\n protected readonly answer = signal<string | null>(null);\r\n protected readonly playing = signal(false);\r\n\r\n private audio: HTMLAudioElement | null = null;\r\n private objectUrl: string | null = null;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['open'] && this.open) {\r\n this.question.set('');\r\n this.answer.set(null);\r\n this.stopAudio();\r\n }\r\n if (changes['open'] && !this.open) {\r\n this.stopAudio();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopAudio();\r\n }\r\n\r\n protected close(): void {\r\n this.stopAudio();\r\n this.closed.emit();\r\n }\r\n\r\n protected onQuestionChange(value: string): void {\r\n this.question.set(value.slice(0, QUESTION_MAX));\r\n }\r\n\r\n protected runTest(): void {\r\n const q = this.question().trim();\r\n if (!q || this.testing()) return;\r\n\r\n const whatToSay = this.whatToSay.trim();\r\n const whatNotToSay = this.whatNotToSay.trim();\r\n if (!whatToSay || !whatNotToSay) {\r\n this.toast.show(\r\n 'Fill in both “What to say” and “What not to say” before testing.',\r\n 'error',\r\n );\r\n return;\r\n }\r\n\r\n this.testing.set(true);\r\n this.answer.set(null);\r\n this.stopAudio();\r\n\r\n this.api\r\n .testKnowledgeAnswer({\r\n question: q,\r\n whatToSay,\r\n whatNotToSay,\r\n voiceId: this.voiceId.trim() || undefined,\r\n })\r\n .subscribe({\r\n next: (result) => {\r\n this.testing.set(false);\r\n this.answer.set(result.answer);\r\n this.playAudio(result.audioBlob);\r\n },\r\n error: (err: unknown) => {\r\n this.testing.set(false);\r\n const message =\r\n err instanceof Error && err.message.trim()\r\n ? err.message\r\n : 'Could not generate a test answer.';\r\n this.toast.show(message, 'error');\r\n },\r\n });\r\n }\r\n\r\n protected replay(): void {\r\n if (!this.audio) return;\r\n this.audio.currentTime = 0;\r\n this.playing.set(true);\r\n void this.audio.play().catch(() => {\r\n this.playing.set(false);\r\n this.toast.show('Could not play audio in this browser.', 'error');\r\n });\r\n }\r\n\r\n private playAudio(blob: Blob): void {\r\n this.stopAudio();\r\n this.objectUrl = URL.createObjectURL(blob);\r\n const audio = new Audio(this.objectUrl);\r\n this.audio = audio;\r\n this.playing.set(true);\r\n audio.onended = () => this.playing.set(false);\r\n audio.onerror = () => {\r\n this.playing.set(false);\r\n this.toast.show('Could not play audio in this browser.', 'error');\r\n };\r\n void audio.play().catch(() => {\r\n this.playing.set(false);\r\n this.toast.show('Could not play audio in this browser.', 'error');\r\n });\r\n }\r\n\r\n private stopAudio(): void {\r\n if (this.audio) {\r\n this.audio.pause();\r\n this.audio.onended = null;\r\n this.audio.onerror = null;\r\n this.audio = null;\r\n }\r\n if (this.objectUrl) {\r\n URL.revokeObjectURL(this.objectUrl);\r\n this.objectUrl = null;\r\n }\r\n this.playing.set(false);\r\n }\r\n}\r\n","@if (open) {\r\n <app-modal\r\n title=\"Test Knowledge Base\"\r\n subtitle=\"Ask a sample caller question — hear how the agent answers with your guidance and voice\"\r\n maxWidth=\"560px\"\r\n (closed)=\"close()\"\r\n >\r\n <form id=\"knowledge-test-form\" class=\"flex flex-col gap-4\" (ngSubmit)=\"runTest()\" novalidate autocomplete=\"off\">\r\n <div class=\"mb-sm\">\r\n <label><span required>What might a caller ask?</span></label>\r\n <textarea\r\n class=\"form-textarea min-h-[84px]\"\r\n rows=\"3\"\r\n [maxlength]=\"questionMax\"\r\n [ngModel]=\"question()\"\r\n (ngModelChange)=\"onQuestionChange($event)\"\r\n name=\"question\"\r\n placeholder=\"e.g. What are your Saturday hours? Is parking free?\"\r\n [disabled]=\"testing()\"\r\n autocomplete=\"off\"\r\n ></textarea>\r\n <span class=\"kb-test__hint self-end text-xs\">{{ question().length }}/{{ questionMax }}</span>\r\n </div>\r\n\r\n @if (answer(); as spoken) {\r\n <div class=\"kb-test__answer rounded-lg border px-4 py-3\" role=\"status\">\r\n <div class=\"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide\">\r\n <ed-icon name=\"graph_new\" [size]=\"18\" />\r\n <span>Agent reply</span>\r\n @if (playing()) {\r\n <span class=\"kb-test__playing ml-auto font-medium normal-case tracking-normal\">Playing…</span>\r\n } @else {\r\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()\">\r\n Replay\r\n </button>\r\n }\r\n </div>\r\n <p class=\"m-0 text-sm leading-[1.55]\">{{ spoken }}</p>\r\n </div>\r\n }\r\n </form>\r\n\r\n <div modalFooter class=\"border-t border-base bg-white px-6 py-4\">\r\n <div class=\"flex justify-end gap-2\">\r\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"close()\" [disabled]=\"testing()\">\r\n Close\r\n </ed-button>\r\n <ed-button\r\n type=\"button\"\r\n variant=\"primary\"\r\n fill\r\n size=\"sm\"\r\n [disabled]=\"testing() || !question().trim()\"\r\n (click$)=\"runTest()\"\r\n >\r\n @if (testing()) {\r\n Generating…\r\n } @else {\r\n <ed-icon slot=\"prefix\" name=\"play_arrow\" [size]=\"16\" />\r\n Test\r\n }\r\n </ed-button>\r\n </div>\r\n </div>\r\n </app-modal>\r\n}\r\n","/** Curated ElevenLabs voices — keep in sync with backend `tts-voice-presets.ts`. */\r\n\r\nexport interface TtsVoicePreset {\r\n id: string;\r\n label: string;\r\n /** Display gender hint next to the voice name. */\r\n gender: 'M' | 'F';\r\n}\r\n\r\nexport const DEFAULT_TTS_VOICE_ID = '7EzWGsX10sAS4c9m9cPf';\r\n\r\nexport const TTS_VOICE_PRESETS: readonly TtsVoicePreset[] = [\r\n {\r\n id: '7EzWGsX10sAS4c9m9cPf',\r\n label: 'Jack John – Conversational and Upbeat',\r\n gender: 'M',\r\n },\r\n {\r\n id: 'NUjosfEayZAdRcDmcHM8',\r\n label: 'Madison – Cool, Calm & Conversational',\r\n gender: 'F',\r\n },\r\n {\r\n id: 'gE0owC0H9C8SzfDyIUtB',\r\n label: 'Ivanna – Sassy, Condescending and Clear',\r\n gender: 'F',\r\n },\r\n {\r\n id: 'Uc7anshoV8mdBhDnEZEX',\r\n label: 'Cecily – Clear and Warm',\r\n gender: 'F',\r\n },\r\n] as const;\r\n","import { AgentSettings } from '../../models/ai-receptionist.types';\r\nimport { TTS_VOICE_PRESETS } from './tts-voice-presets';\r\n\r\nexport type SettingsSection = Exclude<\r\n keyof AgentSettings,\r\n | 'safety'\r\n | 'effectiveWelcomeMessage'\r\n | 'effectiveVoiceSystemPrompt'\r\n | 'usingDefaultVoiceSystemPrompt'\r\n>;\r\n\r\nexport interface SettingsFieldOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\nexport interface SettingsFieldMeta {\r\n key: string;\r\n label: string;\r\n description: string;\r\n type: 'text' | 'number' | 'boolean' | 'select';\r\n options?: SettingsFieldOption[];\r\n readOnly?: boolean;\r\n}\r\n\r\nexport interface SettingsSectionMeta {\r\n title: string;\r\n description: string;\r\n}\r\n\r\nexport const AGENT_TONE_OPTIONS: SettingsFieldOption[] = [\r\n { value: 'warm_friendly', label: 'Warm & friendly' },\r\n { value: 'professional', label: 'Professional' },\r\n { value: 'efficient_brief', label: 'Efficient & brief' },\r\n { value: 'casual_friendly', label: 'Casual & friendly' },\r\n];\r\n\r\nexport const GREETING_VARIABLES: { key: string; label: string; token: string }[] = [\r\n { key: 'practiceName', label: 'Practice Name', token: '{{practiceName}}' },\r\n { key: 'agentName', label: 'Agent Name', token: '{{agentName}}' },\r\n { key: 'locationName', label: 'Location Name', token: '{{locationName}}' },\r\n { key: 'businessHours', label: 'Business Hours', token: '{{businessHours}}' },\r\n];\r\n\r\nexport const RETENTION_DAY_OPTIONS: SettingsFieldOption[] = [\r\n { value: '7', label: '7 days' },\r\n { value: '14', label: '14 days' },\r\n { value: '30', label: '30 days' },\r\n { value: '60', label: '60 days' },\r\n { value: '90', label: '90 days' },\r\n { value: '180', label: '180 days' },\r\n { value: '365', label: '1 year' },\r\n];\r\n\r\nexport const RING_TIMEOUT_OPTIONS: SettingsFieldOption[] = [\r\n { value: '10', label: '10 sec' },\r\n { value: '15', label: '15 sec' },\r\n { value: '20', label: '20 sec' },\r\n { value: '30', label: '30 sec' },\r\n { value: '45', label: '45 sec' },\r\n { value: '60', label: '60 sec' },\r\n];\r\n\r\nexport const MAX_CALL_DURATION_OPTIONS: SettingsFieldOption[] = [\r\n { value: '3', label: '3 min' },\r\n { value: '5', label: '5 min' },\r\n { value: '10', label: '10 min' },\r\n { value: '15', label: '15 min' },\r\n { value: '20', label: '20 min' },\r\n { value: '30', label: '30 min' },\r\n];\r\n\r\nexport const SILENCE_TIMEOUT_OPTIONS: SettingsFieldOption[] = [\r\n { value: '10', label: '10 seconds' },\r\n { value: '15', label: '15 seconds' },\r\n { value: '20', label: '20 seconds' },\r\n { value: '30', label: '30 seconds' },\r\n { value: '45', label: '45 seconds' },\r\n { value: '60', label: '60 seconds' },\r\n];\r\n\r\nexport const AI_ANSWER_MODE_OPTIONS: SettingsFieldOption[] = [\r\n { value: 'always_first', label: 'Always first' },\r\n { value: 'ring_then_ai', label: 'Ring staff, then AI' },\r\n { value: 'ai_backup', label: 'AI as backup only' },\r\n];\r\n\r\nexport const AFTER_HOURS_OPTIONS: SettingsFieldOption[] = [\r\n { value: 'ai_answers', label: 'AI answers' },\r\n { value: 'voicemail', label: 'Voicemail' },\r\n { value: 'transfer', label: 'Transfer to after-hours number' },\r\n];\r\n\r\nexport const DEFAULT_DISCLOSURE_WARNING =\r\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.';\r\n\r\nexport const SETTINGS_SECTION_META: Record<SettingsSection, SettingsSectionMeta> = {\r\n general: {\r\n title: 'AI Identity',\r\n description: 'Name, voice, languages, tone, and inbound greeting.',\r\n },\r\n phone: {\r\n title: 'Phone & Availability',\r\n description: 'Inbound routing, ring timing, locations, and after-hours behavior.',\r\n },\r\n tasks: {\r\n title: 'Task Rules',\r\n description: 'When the AI should create staff tasks after a call.',\r\n },\r\n scheduling: {\r\n title: 'Scheduling Rules',\r\n description: 'Rules for booking and rescheduling appointments.',\r\n },\r\n refill: {\r\n title: 'Medication refills',\r\n description: 'Refill approval windows and staff review requirements.',\r\n },\r\n verify: {\r\n title: 'Patient Verification',\r\n description: 'Identity checks before accessing chart or scheduling data.',\r\n },\r\n escalation: {\r\n title: 'Safety Escalation',\r\n description: 'When to offer a human or transfer to reception.',\r\n },\r\n outbound: {\r\n title: 'Outbound Purpose',\r\n description: 'Outbound dialer defaults. Purpose templates are managed separately.',\r\n },\r\n knowledge: {\r\n title: 'Knowledge Base',\r\n description: 'Practice information the AI should share — and topics it must avoid.',\r\n },\r\n transcripts: {\r\n title: 'Data & Compliance',\r\n description: 'Recording retention, transcripts, and disclosure warnings.',\r\n },\r\n advanced: {\r\n title: 'Advanced',\r\n description: 'Agent online status and model options.',\r\n },\r\n};\r\n\r\n/** Entire sections where every field is read-only (including unknown API fields). */\r\nexport const READ_ONLY_SECTIONS = new Set<SettingsSection>(['verify']);\r\n\r\n/** Settings tabs that stay visible but cannot be selected/edited. */\r\nexport const DISABLED_SETTINGS_TABS = new Set<SettingsSection>(['verify', 'escalation']);\r\n\r\n/** Individual fields locked for compliance, telephony, or core agent identity. */\r\nexport const READ_ONLY_FIELD_KEYS: ReadonlyArray<{ section: SettingsSection; key: string; reason: string }> = [\r\n { section: 'general', key: 'timezone', reason: 'Practice timezone' },\r\n { section: 'phone', key: 'mainNumber', reason: 'AI phone number' },\r\n { section: 'phone', key: 'transferNumber', reason: 'Transfer number' },\r\n { section: 'tasks', key: 'defaultAssignee', reason: 'Default task assignee' },\r\n { section: 'outbound', key: 'callerId', reason: 'Outbound caller ID' },\r\n { section: 'advanced', key: 'modelVersion', reason: 'Voice AI model profile' },\r\n { section: 'advanced', key: 'debugMode', reason: 'Debug logging' },\r\n];\r\n\r\nconst READ_ONLY_LOOKUP = new Set(\r\n READ_ONLY_FIELD_KEYS.map(({ section, key }) => `${section}.${key}`),\r\n);\r\n\r\nexport function isFieldReadOnly(section: SettingsSection, key: string): boolean {\r\n if (READ_ONLY_SECTIONS.has(section)) return true;\r\n return READ_ONLY_LOOKUP.has(`${section}.${key}`);\r\n}\r\n\r\nexport function readOnlyFieldReason(section: SettingsSection, key: string): string | undefined {\r\n return READ_ONLY_FIELD_KEYS.find((f) => f.section === section && f.key === key)?.reason;\r\n}\r\n\r\nexport const SETTINGS_FIELDS: Record<SettingsSection, SettingsFieldMeta[]> = {\r\n general: [\r\n {\r\n key: 'agentName',\r\n label: 'Name',\r\n description: 'How the assistant introduces itself.',\r\n type: 'text',\r\n },\r\n {\r\n key: 'ttsVoiceId',\r\n label: 'Voice',\r\n description: 'Spoken voice used on phone calls.',\r\n type: 'select',\r\n options: TTS_VOICE_PRESETS.map((p) => ({\r\n value: p.id,\r\n label: `${p.gender} · ${p.label}`,\r\n })),\r\n },\r\n {\r\n key: 'tone',\r\n label: 'Tone',\r\n description: 'Conversational style for the AI.',\r\n type: 'select',\r\n options: AGENT_TONE_OPTIONS,\r\n },\r\n {\r\n key: 'welcomeMessage',\r\n label: 'Inbound Greetings',\r\n description: 'Spoken when a caller connects.',\r\n type: 'text',\r\n },\r\n ],\r\n phone: [\r\n {\r\n key: 'answerMode',\r\n label: 'AI Answer Mode',\r\n description: 'When the AI picks up inbound calls.',\r\n type: 'select',\r\n options: AI_ANSWER_MODE_OPTIONS,\r\n },\r\n {\r\n key: 'mainNumber',\r\n label: 'AI Phone Number',\r\n description: 'Number patients dial for the AI receptionist.',\r\n type: 'text',\r\n },\r\n {\r\n key: 'transferNumber',\r\n label: 'Transfer Number',\r\n description: 'Staff / front-desk number for handoff.',\r\n type: 'text',\r\n },\r\n {\r\n key: 'ringTimeout',\r\n label: 'Ringing Time Wait',\r\n description: 'How long to ring before the AI answers.',\r\n type: 'select',\r\n options: RING_TIMEOUT_OPTIONS,\r\n },\r\n {\r\n key: 'createFollowUpTask',\r\n label: 'Create Follow-up Task',\r\n description: 'If no one answers in time, the agent auto-creates a high priority task.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'locationIds',\r\n label: 'Location Handled',\r\n description: 'Locations this AI receptionist covers.',\r\n type: 'text',\r\n },\r\n {\r\n key: 'maxCallDurationMin',\r\n label: 'Max AI Call Duration',\r\n description: 'Longest call the AI will stay on before wrapping up.',\r\n type: 'select',\r\n options: MAX_CALL_DURATION_OPTIONS,\r\n },\r\n {\r\n key: 'silenceTimeoutSec',\r\n label: 'Silence Timeout',\r\n description: 'How long silence lasts before the AI prompts or ends.',\r\n type: 'select',\r\n options: SILENCE_TIMEOUT_OPTIONS,\r\n },\r\n {\r\n key: 'afterHoursBehavior',\r\n label: 'After-Hours Behaviour',\r\n description: 'What happens outside business hours.',\r\n type: 'select',\r\n options: AFTER_HOURS_OPTIONS,\r\n },\r\n ],\r\n tasks: [\r\n {\r\n key: 'autoCreate',\r\n label: 'Auto-create tasks',\r\n description: 'Create a staff task when the AI cannot fully resolve a request.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'defaultAssignee',\r\n label: 'Default assignee',\r\n description: 'Team or role new tasks are routed to.',\r\n type: 'text',\r\n },\r\n ],\r\n scheduling: [\r\n {\r\n key: 'leadTimeHours',\r\n label: 'Minimum lead time (hours)',\r\n description: 'Earliest bookable slot from now.',\r\n type: 'number',\r\n },\r\n {\r\n key: 'allowSameDay',\r\n label: 'Allow same-day booking',\r\n description: 'Let patients book appointments today.',\r\n type: 'boolean',\r\n },\r\n ],\r\n refill: [\r\n {\r\n key: 'autoApproveDays',\r\n label: 'Auto-approve within (days)',\r\n description: 'Refills due within this window may be auto-approved.',\r\n type: 'number',\r\n },\r\n {\r\n key: 'requireStaffReview',\r\n label: 'Require staff review',\r\n description: 'All refill requests need staff approval before sending to pharmacy.',\r\n type: 'boolean',\r\n },\r\n ],\r\n verify: [\r\n {\r\n key: 'requireDob',\r\n label: 'Require date of birth',\r\n description: 'Ask for DOB before lookup or scheduling.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'requireName',\r\n label: 'Require full name',\r\n description: 'Ask for patient name during verification.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'maxAttempts',\r\n label: 'Max verification attempts',\r\n description: 'After this many failures, offer transfer to staff.',\r\n type: 'number',\r\n },\r\n ],\r\n escalation: [\r\n {\r\n key: 'sentimentThreshold',\r\n label: 'Sentiment threshold',\r\n description: 'Escalate when caller sentiment reaches this level (e.g. frustrated).',\r\n type: 'text',\r\n },\r\n {\r\n key: 'urgentKeywords',\r\n label: 'Urgent keywords',\r\n description: 'Comma-separated phrases that trigger immediate escalation.',\r\n type: 'text',\r\n },\r\n ],\r\n outbound: [\r\n {\r\n key: 'enabled',\r\n label: 'Outbound calls enabled',\r\n description: 'Allow staff to place outbound calls from the dashboard.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'callerId',\r\n label: 'Outbound caller ID',\r\n description: 'Number shown to patients on outbound calls.',\r\n type: 'text',\r\n },\r\n ],\r\n knowledge: [\r\n {\r\n key: 'whatToSay',\r\n label: 'What to say',\r\n description: 'Facts and guidance the AI may share with callers.',\r\n type: 'text',\r\n },\r\n {\r\n key: 'whatNotToSay',\r\n label: 'What not to say',\r\n description: 'Topics the AI must refuse or escalate.',\r\n type: 'text',\r\n },\r\n ],\r\n transcripts: [\r\n {\r\n key: 'recordingRetainDays',\r\n label: 'Keep Call Recordings',\r\n description: 'How long call recordings are retained.',\r\n type: 'select',\r\n options: RETENTION_DAY_OPTIONS,\r\n },\r\n {\r\n key: 'transcriptRetainDays',\r\n label: 'Keep Transcripts',\r\n description: 'How long call transcripts are retained.',\r\n type: 'select',\r\n options: RETENTION_DAY_OPTIONS,\r\n },\r\n {\r\n key: 'disclosureWarningEnabled',\r\n label: 'Disclosure Warning',\r\n description: 'Play or show a disclosure when the AI answers.',\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'disclosureWarningText',\r\n label: 'Disclosure text',\r\n description: 'Spoken or shown disclosure message.',\r\n type: 'text',\r\n },\r\n ],\r\n advanced: [\r\n {\r\n key: 'modelVersion',\r\n label: 'Model version',\r\n description: 'Voice AI model profile (set by Edvak support).',\r\n type: 'text',\r\n },\r\n {\r\n key: 'debugMode',\r\n label: 'Debug mode',\r\n description: 'Verbose logging for troubleshooting — not for production.',\r\n type: 'boolean',\r\n },\r\n ],\r\n};\r\n\r\n/** Fallback label for API fields not listed in config. */\r\nexport function humanizeFieldKey(key: string): string {\r\n return key\r\n .replace(/([A-Z])/g, ' $1')\r\n .replace(/_/g, ' ')\r\n .trim()\r\n .replace(/^\\w/, (c) => c.toUpperCase());\r\n}\r\n\r\nexport function resolveFieldMeta(\r\n section: SettingsSection,\r\n key: string,\r\n value: string | boolean | number,\r\n): SettingsFieldMeta {\r\n const known = SETTINGS_FIELDS[section]?.find((f) => f.key === key);\r\n if (known) return known;\r\n return {\r\n key,\r\n label: humanizeFieldKey(key),\r\n description: '',\r\n type: typeof value === 'boolean' ? 'boolean' : typeof value === 'number' ? 'number' : 'text',\r\n };\r\n}\r\n\r\nexport function parseCsvList(value: unknown): string[] {\r\n return String(value ?? '')\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function toCsvList(values: string[]): string {\r\n return values.map((v) => v.trim()).filter(Boolean).join(',');\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\nimport { EdButtonComponent } from '../../ui/ed-button.component';\r\nimport { EdSkeletonComponent } from '../../ui/ed-skeleton.component';\r\n\r\nimport { KnowledgeTestModalComponent } from '../../components/knowledge-test-modal/knowledge-test-modal.component';\r\nimport {\r\n AgentSettings,\r\n BookingMode,\r\n BookingModeOption,\r\n LocationOption,\r\n} from '../../models/ai-receptionist.types';\r\nimport { AiReceptionistApiService } from '../../services/ai-receptionist-api.service';\r\nimport { AgentOnlineService } from '../../services/agent-online.service';\r\nimport { ModalComponent } from '../../shared/modal.component';\r\nimport { ToastService } from '../../shared/toast.service';\r\nimport { IconComponent } from '../../ui/ed-icon.component';\r\nimport {\r\n buildAutoWelcomeTemplate,\r\n resolveWelcomePreview,\r\n WELCOME_MESSAGE_MAX,\r\n} from '../../utils/welcome-message.util';\r\nimport { DEFAULT_TTS_VOICE_ID, TTS_VOICE_PRESETS } from './tts-voice-presets';\r\nimport {\r\n AFTER_HOURS_OPTIONS,\r\n AGENT_TONE_OPTIONS,\r\n AI_ANSWER_MODE_OPTIONS,\r\n DEFAULT_DISCLOSURE_WARNING,\r\n DISABLED_SETTINGS_TABS,\r\n GREETING_VARIABLES,\r\n isFieldReadOnly,\r\n MAX_CALL_DURATION_OPTIONS,\r\n parseCsvList,\r\n READ_ONLY_SECTIONS,\r\n resolveFieldMeta,\r\n RETENTION_DAY_OPTIONS,\r\n RING_TIMEOUT_OPTIONS,\r\n SETTINGS_FIELDS,\r\n SETTINGS_SECTION_META,\r\n SettingsFieldMeta,\r\n SettingsSection,\r\n SILENCE_TIMEOUT_OPTIONS,\r\n toCsvList,\r\n} from './settings-fields.config';\r\n\r\ntype SettingsTab = Exclude<\r\n keyof AgentSettings,\r\n | 'safety'\r\n | 'effectiveWelcomeMessage'\r\n | 'effectiveVoiceSystemPrompt'\r\n | 'usingDefaultVoiceSystemPrompt'\r\n>;\r\n\r\nconst CUSTOM_PANEL_TABS = new Set<SettingsTab>([\r\n 'general',\r\n 'phone',\r\n 'transcripts',\r\n 'knowledge',\r\n 'advanced',\r\n]);\r\n\r\nconst SETTINGS_TABS: { id: SettingsTab; label: string }[] = [\r\n { id: 'general', label: 'Identity & Greetings' },\r\n { id: 'phone', label: 'Phone & Availability' },\r\n { id: 'knowledge', label: 'Knowledge Base' },\r\n { id: 'transcripts', label: 'Data & Compliance' },\r\n { id: 'advanced', label: 'Advanced' },\r\n];\r\nconst HIDDEN_GENERIC_KEYS = new Set([\r\n 'welcomeMessage',\r\n 'practiceName',\r\n 'language',\r\n 'languages',\r\n 'tone',\r\n 'timezone',\r\n 'voiceSystemPrompt',\r\n 'customVoiceInstructions',\r\n]);\r\nconst KNOWLEDGE_MAX = 8000;\r\nconst DISCLOSURE_MAX = 1000;\r\n\r\n@Component({\r\n selector: 'eds-settings-page',\r\n imports: [\r\n FormsModule,\r\n NgTemplateOutlet,\r\n IconComponent,\r\n EdButtonComponent,\r\n KnowledgeTestModalComponent,\r\n ModalComponent,\r\n EdSkeletonComponent,\r\n ],\r\n templateUrl: './settings-page.component.html',\r\n styleUrl: './settings-page.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.settings-page-host--drawer]': 'presentation() === \"drawer\"',\r\n },\r\n})\r\nexport class SettingsPageComponent implements OnInit, OnDestroy {\r\n private readonly api = inject(AiReceptionistApiService);\r\n private readonly toast = inject(ToastService);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly agentOnline = inject(AgentOnlineService);\r\n private originalSettings: AgentSettings | null = null;\r\n private voiceAudio: HTMLAudioElement | null = null;\r\n private voiceObjectUrl: string | null = null;\r\n\r\n /** `page` = routed full page chrome; `drawer` = embedded in Agent Settings drawer. */\r\n readonly presentation = input<'page' | 'drawer'>('page');\r\n readonly savedSuccessfully = output<void>();\r\n\r\n protected readonly isFieldReadOnly = isFieldReadOnly;\r\n protected readonly knowledgeMax = KNOWLEDGE_MAX;\r\n protected readonly disclosureMax = DISCLOSURE_MAX;\r\n protected readonly welcomeMax = WELCOME_MESSAGE_MAX;\r\n protected readonly voicePresets = TTS_VOICE_PRESETS;\r\n protected readonly toneOptions = AGENT_TONE_OPTIONS;\r\n protected readonly greetingVariables = GREETING_VARIABLES;\r\n protected readonly locationChipLimit = 3;\r\n protected readonly retentionOptions = RETENTION_DAY_OPTIONS;\r\n protected readonly ringTimeoutOptions = RING_TIMEOUT_OPTIONS;\r\n protected readonly maxCallDurationOptions = MAX_CALL_DURATION_OPTIONS;\r\n protected readonly silenceTimeoutOptions = SILENCE_TIMEOUT_OPTIONS;\r\n protected readonly answerModeOptions = AI_ANSWER_MODE_OPTIONS;\r\n protected readonly afterHoursOptions = AFTER_HOURS_OPTIONS;\r\n\r\n protected readonly settings = signal<AgentSettings | null>(null);\r\n protected readonly tab = signal<SettingsTab>('general');\r\n protected readonly loading = signal(true);\r\n protected readonly navSkeletonRows = [0, 1, 2, 3, 4] as const;\r\n protected readonly fieldSkeletonRows = [0, 1, 2, 3, 4, 5] as const;\r\n readonly saving = signal(false);\r\n readonly saved = signal(false);\r\n protected readonly knowledgeTestOpen = signal(false);\r\n protected readonly locations = signal<LocationOption[]>([]);\r\n protected readonly locationsMenuOpen = signal(false);\r\n protected readonly confirmOffOpen = signal(false);\r\n protected readonly voicePreviewBusy = signal(false);\r\n protected readonly voicePreviewPlaying = signal(false);\r\n\r\n /** Isolated from main settings body — practice-level EHR booking write path. */\r\n protected readonly bookingMode = signal<BookingMode>('confirmed');\r\n protected readonly bookingModeOptions = signal<BookingModeOption[]>([]);\r\n protected readonly bookingModeLoading = signal(true);\r\n protected readonly bookingModeError = signal<string | null>(null);\r\n private originalBookingMode: BookingMode | null = null;\r\n\r\n protected readonly online = this.agentOnline.online;\r\n protected readonly agentLoading = this.agentOnline.loading;\r\n protected readonly toggling = this.agentOnline.toggling;\r\n\r\n protected readonly tabs = SETTINGS_TABS;\r\n\r\n protected readonly sectionMeta = computed(() => {\r\n const id = this.tab();\r\n return SETTINGS_SECTION_META[id] ?? { title: String(id), description: '' };\r\n });\r\n\r\n protected readonly fieldsForTab = computed((): SettingsFieldMeta[] => {\r\n const s = this.settings();\r\n const id = this.tab();\r\n if (!s || CUSTOM_PANEL_TABS.has(id)) return [];\r\n\r\n const section = s[id] as Record<string, string | boolean | number>;\r\n const configured = SETTINGS_FIELDS[id] ?? [];\r\n const configuredKeys = new Set(configured.map((f) => f.key));\r\n\r\n const extras = Object.keys(section)\r\n .filter((key) => !HIDDEN_GENERIC_KEYS.has(key) && !configuredKeys.has(key))\r\n .map((key) => resolveFieldMeta(id, key, section[key]));\r\n\r\n return [...configured, ...extras];\r\n });\r\n\r\n protected readonly welcomeMessage = computed(() =>\r\n String(this.settings()?.general['welcomeMessage'] ?? ''),\r\n );\r\n\r\n protected readonly welcomePlaceholder = computed(() => {\r\n const s = this.settings();\r\n if (!s) return '';\r\n return buildAutoWelcomeTemplate(\r\n String(s.general['practiceName'] ?? ''),\r\n String(s.general['agentName'] ?? ''),\r\n );\r\n });\r\n\r\n protected readonly welcomePreview = computed(() => {\r\n const s = this.settings();\r\n if (!s) return '';\r\n const raw = resolveWelcomePreview(\r\n String(s.general['welcomeMessage'] ?? ''),\r\n String(s.general['practiceName'] ?? ''),\r\n String(s.general['agentName'] ?? ''),\r\n );\r\n return raw\r\n .replaceAll('{{practiceName}}', String(s.general['practiceName'] || 'our practice'))\r\n .replaceAll('{{agentName}}', String(s.general['agentName'] || 'your AI receptionist'))\r\n .replaceAll('{{locationName}}', 'Main location')\r\n .replaceAll('{{businessHours}}', 'Mon–Fri 8am–5pm');\r\n });\r\n\r\n protected readonly whatToSay = computed(() =>\r\n String(this.settings()?.knowledge?.['whatToSay'] ?? ''),\r\n );\r\n\r\n protected readonly whatNotToSay = computed(() =>\r\n String(this.settings()?.knowledge?.['whatNotToSay'] ?? ''),\r\n );\r\n\r\n protected readonly selectedLocationIds = computed(() =>\r\n parseCsvList(this.settings()?.phone?.['locationIds']),\r\n );\r\n\r\n protected readonly locationSummary = computed(() => {\r\n const selected = this.selectedLocationIds();\r\n const all = this.locations();\r\n if (!all.length) return 'No locations available.';\r\n if (!selected.length) return 'Select locations';\r\n const names = all.filter((l) => selected.includes(l.id)).map((l) => l.name);\r\n if (!names.length) return `${selected.length} selected`;\r\n if (names.length <= 2) return names.join(', ');\r\n return `${names[0]}, ${names[1]} +${names.length - 2}`;\r\n });\r\n\r\n protected readonly selectedLocations = computed(() => {\r\n const ids = this.selectedLocationIds();\r\n return this.locations().filter((l) => ids.includes(l.id));\r\n });\r\n\r\n protected readonly visibleSelectedLocations = computed(() =>\r\n this.selectedLocations().slice(0, this.locationChipLimit),\r\n );\r\n\r\n protected readonly hiddenLocationCount = computed(() =>\r\n Math.max(0, this.selectedLocations().length - this.locationChipLimit),\r\n );\r\n\r\n protected readonly selectedTone = computed(() =>\r\n String(this.settings()?.general?.['tone'] ?? 'professional'),\r\n );\r\n\r\n protected readonly disclosureEnabled = computed(\r\n () => this.settings()?.transcripts?.['disclosureWarningEnabled'] !== false,\r\n );\r\n\r\n protected readonly disclosureText = computed(() =>\r\n String(this.settings()?.transcripts?.['disclosureWarningText'] ?? DEFAULT_DISCLOSURE_WARNING),\r\n );\r\n\r\n protected readonly agentSwitchDisabled = computed(\r\n () => this.agentLoading() || this.toggling() || this.online() === null,\r\n );\r\n\r\n ngOnInit(): void {\r\n this.agentOnline.refresh();\r\n\r\n if (this.presentation() === 'page') {\r\n const dataTab = this.route.snapshot.data['settingsTab'] as SettingsTab | undefined;\r\n const tabParam = this.route.snapshot.queryParamMap.get('tab');\r\n const navTabs = this.tabs;\r\n if (dataTab && navTabs.some((t) => t.id === dataTab)) {\r\n this.tab.set(dataTab);\r\n } else if (tabParam && navTabs.some((t) => t.id === tabParam)) {\r\n this.tab.set(tabParam as SettingsTab);\r\n }\r\n }\r\n\r\n this.api.getSettings().subscribe({\r\n next: ({ data }) => {\r\n this.originalSettings = structuredClone(data);\r\n this.settings.set(structuredClone(data));\r\n this.loading.set(false);\r\n },\r\n error: () => {\r\n this.loading.set(false);\r\n this.toast.show('Failed to load agent settings', 'error');\r\n },\r\n });\r\n\r\n this.api.getLocations().subscribe({\r\n next: ({ data }) => this.locations.set(data ?? []),\r\n error: () => this.locations.set([]),\r\n });\r\n\r\n this.loadBookingMode();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopVoicePreview();\r\n }\r\n\r\n protected fieldIsReadOnly(section: SettingsTab, key: string): boolean {\r\n return isFieldReadOnly(section, key);\r\n }\r\n\r\n protected sectionIsReadOnly(section: SettingsTab): boolean {\r\n return READ_ONLY_SECTIONS.has(section);\r\n }\r\n\r\n protected isTabDisabled(id: SettingsTab): boolean {\r\n return DISABLED_SETTINGS_TABS.has(id);\r\n }\r\n\r\n protected setTab(id: SettingsTab): void {\r\n if (this.isTabDisabled(id)) return;\r\n this.locationsMenuOpen.set(false);\r\n this.tab.set(id);\r\n }\r\n\r\n /** Restore last loaded/saved settings (used when Cancel/close drawer without saving). */\r\n discardChanges(): void {\r\n if (!this.originalSettings) return;\r\n this.settings.set(structuredClone(this.originalSettings));\r\n if (this.originalBookingMode) this.bookingMode.set(this.originalBookingMode);\r\n this.bookingModeError.set(null);\r\n this.locationsMenuOpen.set(false);\r\n this.stopVoicePreview();\r\n }\r\n\r\n private loadBookingMode(): void {\r\n this.bookingModeLoading.set(true);\r\n this.bookingModeError.set(null);\r\n this.api.getBookingMode().subscribe({\r\n next: ({ data }) => {\r\n this.bookingMode.set(data.bookingMode);\r\n this.originalBookingMode = data.bookingMode;\r\n this.bookingModeOptions.set(data.options);\r\n this.bookingModeLoading.set(false);\r\n },\r\n error: (err: unknown) => {\r\n this.bookingModeLoading.set(false);\r\n if (!this.bookingModeOptions().length) {\r\n this.bookingModeOptions.set([\r\n {\r\n value: 'confirmed',\r\n label: 'Confirm appointment',\r\n description:\r\n 'Creates a live appointment in the EHR (create-new-appointment). The caller hears that they are booked.',\r\n },\r\n {\r\n value: 'pending',\r\n label: 'Pending appointment',\r\n description:\r\n 'Submits an Online Request for staff review. Do not tell the caller the visit is confirmed.',\r\n },\r\n ]);\r\n }\r\n this.bookingModeError.set(\r\n this.asErrorText(err, 'Could not load booking mode for this practice.'),\r\n );\r\n },\r\n });\r\n }\r\n\r\n protected selectBookingMode(mode: BookingMode): void {\r\n if (this.saving() || this.bookingMode() === mode) return;\r\n this.bookingMode.set(mode);\r\n this.bookingModeError.set(null);\r\n }\r\n\r\n private asErrorText(err: unknown, fallback: string): string {\r\n if (err instanceof Error && err.message && err.message !== '[object Object]') {\r\n return err.message;\r\n }\r\n if (typeof err === 'string' && err.trim()) return err.trim();\r\n if (err && typeof err === 'object') {\r\n const o = err as { message?: unknown; error?: unknown };\r\n const fromMessage = this.coerceUnknownMessage(o.message);\r\n if (fromMessage) return fromMessage;\r\n const fromError = this.coerceUnknownMessage(o.error);\r\n if (fromError) return fromError;\r\n }\r\n return fallback;\r\n }\r\n\r\n private coerceUnknownMessage(value: unknown): string | null {\r\n if (typeof value === 'string' && value.trim() && value !== '[object Object]') {\r\n return value.trim();\r\n }\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => this.coerceUnknownMessage(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length ? parts.join('; ') : null;\r\n }\r\n if (value && typeof value === 'object' && 'message' in value) {\r\n return this.coerceUnknownMessage((value as { message: unknown }).message);\r\n }\r\n return null;\r\n }\r\n\r\n protected updateField(section: SettingsTab, key: string, value: string | boolean | number): void {\r\n const current = this.settings();\r\n if (!current || isFieldReadOnly(section, key)) return;\r\n const sectionData = { ...(current[section] as Record<string, string | boolean | number>) };\r\n sectionData[key] = value;\r\n this.settings.set({ ...current, [section]: sectionData });\r\n }\r\n\r\n protected updateWelcomeMessage(value: string): void {\r\n this.updateField('general', 'welcomeMessage', value.slice(0, WELCOME_MESSAGE_MAX));\r\n }\r\n\r\n protected insertGreetingVariable(token: string): void {\r\n const current = this.welcomeMessage();\r\n const next = `${current}${current && !/\\s$/.test(current) ? ' ' : ''}${token}`;\r\n this.updateWelcomeMessage(next);\r\n }\r\n\r\n protected updateKnowledgeField(key: 'whatToSay' | 'whatNotToSay', value: string): void {\r\n this.updateField('knowledge', key, value.slice(0, KNOWLEDGE_MAX));\r\n }\r\n\r\n protected setTone(tone: string): void {\r\n this.updateField('general', 'tone', tone);\r\n }\r\n\r\n protected toggleLocationsMenu(): void {\r\n if (!this.locations().length) return;\r\n this.locationsMenuOpen.update((open) => !open);\r\n }\r\n\r\n protected onLocationsDocClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement | null;\r\n if (!target?.closest('[data-locations-dd]')) {\r\n this.locationsMenuOpen.set(false);\r\n }\r\n }\r\n\r\n protected toggleLocation(id: string): void {\r\n const current = this.selectedLocationIds();\r\n const next = current.includes(id) ? current.filter((x) => x !== id) : [...current, id];\r\n this.updateField('phone', 'locationIds', toCsvList(next));\r\n }\r\n\r\n protected selectNumberField(\r\n section: 'phone' | 'transcripts',\r\n key: string,\r\n value: string,\r\n ): void {\r\n this.updateField(section, key, Number(value));\r\n }\r\n\r\n protected numberFieldAsString(section: 'phone' | 'transcripts', key: string): string {\r\n return String(this.fieldValue(section, key) ?? '');\r\n }\r\n\r\n protected setDisclosureEnabled(enabled: boolean): void {\r\n this.updateField('transcripts', 'disclosureWarningEnabled', enabled);\r\n if (enabled && !String(this.settings()?.transcripts?.['disclosureWarningText'] ?? '').trim()) {\r\n this.updateField('transcripts', 'disclosureWarningText', DEFAULT_DISCLOSURE_WARNING);\r\n }\r\n }\r\n\r\n protected updateDisclosureText(value: string): void {\r\n this.updateField('transcripts', 'disclosureWarningText', value.slice(0, DISCLOSURE_MAX));\r\n }\r\n\r\n protected openTestCall(): void {\r\n const whatToSay = this.whatToSay().trim();\r\n const whatNotToSay = this.whatNotToSay().trim();\r\n if (!whatToSay || !whatNotToSay) {\r\n this.toast.show(\r\n 'Fill in both “What to say” and “What not to say” before testing.',\r\n 'error',\r\n );\r\n return;\r\n }\r\n this.knowledgeTestOpen.set(true);\r\n }\r\n\r\n protected closeTestCall(): void {\r\n this.knowledgeTestOpen.set(false);\r\n }\r\n\r\n protected readonly selectedVoiceId = computed(() =>\r\n String(this.settings()?.general?.['ttsVoiceId'] ?? '').trim() || DEFAULT_TTS_VOICE_ID,\r\n );\r\n\r\n protected onVoiceChange(voiceId: string): void {\r\n this.stopVoicePreview();\r\n this.updateField('general', 'ttsVoiceId', voiceId);\r\n }\r\n\r\n protected toggleVoicePreview(): void {\r\n if (this.voicePreviewPlaying()) {\r\n this.stopVoicePreview();\r\n return;\r\n }\r\n const voiceId = this.selectedVoiceId();\r\n if (!voiceId || this.voicePreviewBusy()) return;\r\n\r\n this.voicePreviewBusy.set(true);\r\n this.api.previewVoice(voiceId).subscribe({\r\n next: (blob) => {\r\n this.voicePreviewBusy.set(false);\r\n if (!blob || blob.size < 64 || (blob.type || '').includes('json')) {\r\n this.playVoiceFallback(voiceId);\r\n return;\r\n }\r\n this.playVoiceBlob(blob);\r\n },\r\n error: () => {\r\n this.voicePreviewBusy.set(false);\r\n this.playVoiceFallback(voiceId);\r\n },\r\n });\r\n }\r\n\r\n private playVoiceFallback(voiceId: string): void {\r\n if (typeof speechSynthesis === 'undefined') {\r\n this.toast.show('Voice preview is unavailable.', 'error');\r\n return;\r\n }\r\n this.stopVoicePreview();\r\n const preset = TTS_VOICE_PRESETS.find((v) => v.id === voiceId);\r\n const name = (preset?.label.split(/[–-]/)[0] || 'your AI receptionist').trim();\r\n const utter = new SpeechSynthesisUtterance(\r\n `Hi, this is ${name}. Thanks for calling. How can I help you today?`,\r\n );\r\n utter.onend = () => this.voicePreviewPlaying.set(false);\r\n utter.onerror = () => {\r\n this.voicePreviewPlaying.set(false);\r\n this.toast.show('Voice preview is unavailable.', 'error');\r\n };\r\n this.voicePreviewPlaying.set(true);\r\n speechSynthesis.cancel();\r\n speechSynthesis.speak(utter);\r\n }\r\n\r\n private playVoiceBlob(blob: Blob): void {\r\n this.stopVoicePreview();\r\n this.voiceObjectUrl = URL.createObjectURL(blob);\r\n const audio = new Audio(this.voiceObjectUrl);\r\n this.voiceAudio = audio;\r\n this.voicePreviewPlaying.set(true);\r\n audio.onended = () => this.stopVoicePreview();\r\n audio.onerror = () => {\r\n this.stopVoicePreview();\r\n this.toast.show('Failed to play voice preview.', 'error');\r\n };\r\n void audio.play().catch(() => {\r\n this.stopVoicePreview();\r\n this.toast.show('Failed to play voice preview.', 'error');\r\n });\r\n }\r\n\r\n private stopVoicePreview(): void {\r\n if (typeof speechSynthesis !== 'undefined') {\r\n speechSynthesis.cancel();\r\n }\r\n if (this.voiceAudio) {\r\n this.voiceAudio.pause();\r\n this.voiceAudio.onended = null;\r\n this.voiceAudio.onerror = null;\r\n this.voiceAudio = null;\r\n }\r\n if (this.voiceObjectUrl) {\r\n URL.revokeObjectURL(this.voiceObjectUrl);\r\n this.voiceObjectUrl = null;\r\n }\r\n this.voicePreviewPlaying.set(false);\r\n }\r\n\r\n protected onAgentToggleClick(): void {\r\n if (this.agentSwitchDisabled()) return;\r\n if (this.online()) {\r\n this.confirmOffOpen.set(true);\r\n return;\r\n }\r\n this.applyOnline(true);\r\n }\r\n\r\n protected cancelConfirmOff(): void {\r\n this.confirmOffOpen.set(false);\r\n }\r\n\r\n protected confirmTurnOff(): void {\r\n this.confirmOffOpen.set(false);\r\n this.applyOnline(false);\r\n }\r\n\r\n private applyOnline(enabled: boolean): void {\r\n this.agentOnline.setOnline(enabled).subscribe({\r\n next: () => {\r\n this.toast.show(\r\n enabled\r\n ? 'AI receptionist is online — it will answer inbound calls.'\r\n : 'AI receptionist is offline — calls go to the front desk.',\r\n 'success',\r\n );\r\n },\r\n error: (err: { message?: string }) => {\r\n this.toast.show(err.message ?? 'Failed to update agent status.', 'error');\r\n this.agentOnline.refresh();\r\n },\r\n });\r\n }\r\n\r\n protected fieldValue(section: SettingsTab, key: string): string | boolean | number {\r\n const s = this.settings();\r\n if (!s) return '';\r\n return (s[section] as Record<string, string | boolean | number>)[key];\r\n }\r\n\r\n save(): void {\r\n const s = this.settings();\r\n const orig = this.originalSettings;\r\n if (!s || !orig || this.saving()) return;\r\n\r\n const payload = structuredClone(s);\r\n payload.general['welcomeMessage'] = String(payload.general['welcomeMessage'] ?? '').trim();\r\n payload.general['agentName'] = String(payload.general['agentName'] ?? '').trim();\r\n\r\n if (!String(payload.general['agentName'] ?? '').trim()) {\r\n this.tab.set('general');\r\n this.toast.show('Agent name is required.', 'error');\r\n return;\r\n }\r\n if (!String(payload.general['welcomeMessage'] ?? '').trim()) {\r\n this.tab.set('general');\r\n this.toast.show('Inbound greeting is required.', 'error');\r\n return;\r\n }\r\n if (!String(payload.general['ttsVoiceId'] ?? '').trim()) {\r\n payload.general['ttsVoiceId'] = DEFAULT_TTS_VOICE_ID;\r\n }\r\n\r\n if (this.locations().length && !parseCsvList(payload.phone?.['locationIds']).length) {\r\n this.tab.set('phone');\r\n this.toast.show('Select at least one location.', 'error');\r\n return;\r\n }\r\n\r\n const whatToSay = String(payload.knowledge?.['whatToSay'] ?? '').trim();\r\n const whatNotToSay = String(payload.knowledge?.['whatNotToSay'] ?? '').trim();\r\n if (!whatToSay || !whatNotToSay) {\r\n this.tab.set('knowledge');\r\n this.toast.show('Knowledge Base requires both “What to say” and “What not to say”.', 'error');\r\n return;\r\n }\r\n payload.knowledge = { whatToSay, whatNotToSay };\r\n\r\n // Keep legacy retainDays in sync for older BE consumers.\r\n const recDays = Number(payload.transcripts['recordingRetainDays'] ?? 30);\r\n const txDays = Number(payload.transcripts['transcriptRetainDays'] ?? 30);\r\n payload.transcripts['retainDays'] = Math.max(recDays, txDays);\r\n\r\n this.restoreReadOnlyFields(payload, orig);\r\n\r\n this.saving.set(true);\r\n this.bookingModeError.set(null);\r\n const nextBookingMode = this.bookingMode();\r\n const bookingModeDirty =\r\n this.originalBookingMode != null && nextBookingMode !== this.originalBookingMode;\r\n\r\n this.api.putSettings(payload).subscribe({\r\n next: ({ data }) => {\r\n this.originalSettings = structuredClone(data);\r\n this.settings.set(structuredClone(data));\r\n\r\n if (!bookingModeDirty) {\r\n this.finishSaveSuccess();\r\n return;\r\n }\r\n\r\n this.api.putBookingMode(nextBookingMode).subscribe({\r\n next: ({ data: booking }) => {\r\n this.bookingMode.set(booking.bookingMode);\r\n this.originalBookingMode = booking.bookingMode;\r\n if (booking.options?.length) this.bookingModeOptions.set(booking.options);\r\n this.finishSaveSuccess();\r\n },\r\n error: (err: unknown) => {\r\n this.saving.set(false);\r\n const text = this.asErrorText(err, 'Failed to save booking mode');\r\n this.bookingModeError.set(text);\r\n this.tab.set('phone');\r\n this.toast.show(`Agent settings saved, but booking mode failed: ${text}`, 'error');\r\n },\r\n });\r\n },\r\n error: (err: unknown) => {\r\n this.saving.set(false);\r\n const message = this.asErrorText(err, 'Failed to save agent settings');\r\n this.toast.show(message, 'error');\r\n },\r\n });\r\n }\r\n\r\n private finishSaveSuccess(): void {\r\n this.saving.set(false);\r\n this.saved.set(true);\r\n this.toast.show('Agent settings saved', 'success');\r\n setTimeout(() => this.saved.set(false), 2000);\r\n this.savedSuccessfully.emit();\r\n }\r\n\r\n private restoreReadOnlyFields(payload: AgentSettings, orig: AgentSettings): void {\r\n const editableSections: SettingsSection[] = [\r\n 'general',\r\n 'phone',\r\n 'tasks',\r\n 'scheduling',\r\n 'refill',\r\n 'verify',\r\n 'escalation',\r\n 'outbound',\r\n 'knowledge',\r\n 'transcripts',\r\n 'advanced',\r\n ];\r\n\r\n for (const sectionKey of editableSections) {\r\n if (READ_ONLY_SECTIONS.has(sectionKey)) {\r\n payload[sectionKey] = structuredClone(orig[sectionKey]);\r\n continue;\r\n }\r\n\r\n const payloadSection = payload[sectionKey] as Record<string, string | boolean | number>;\r\n const origSection = orig[sectionKey] as Record<string, string | boolean | number>;\r\n for (const key of Object.keys(payloadSection)) {\r\n if (isFieldReadOnly(sectionKey, key)) {\r\n payloadSection[key] = origSection[key];\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"settings-page\"\r\n [class.p-base]=\"presentation() === 'page'\"\r\n [class.bg-lighter]=\"presentation() === 'page'\"\r\n [class.min-h-full]=\"presentation() === 'page'\"\r\n [class.h-full]=\"presentation() === 'page'\"\r\n [class.min-h-0]=\"presentation() === 'page'\"\r\n [class.overflow-auto]=\"presentation() === 'page'\"\r\n [class.flex]=\"presentation() === 'drawer'\"\r\n [class.h-full]=\"presentation() === 'drawer'\"\r\n [class.min-h-0]=\"presentation() === 'drawer'\"\r\n [class.flex-col]=\"presentation() === 'drawer'\"\r\n>\r\n @if (presentation() === 'page') {\r\n <header class=\"mb-6 flex items-start justify-between gap-4\">\r\n <div>\r\n <h4>Agent settings</h4>\r\n <p class=\"mt-2 text-base leading-normal text-zinc-500\">Configure AI receptionist behavior and safety</p>\r\n </div>\r\n <div class=\"flex shrink-0 items-center gap-3\">\r\n @if (saved()) {\r\n <span class=\"text-sm font-medium text-green-500\">Saved</span>\r\n }\r\n <ed-button variant=\"primary\" fill size=\"sm\" [disabled]=\"saving()\" (click$)=\"save()\">\r\n <ed-icon slot=\"prefix\" name=\"save\" [size]=\"16\" />\r\n {{ saving() ? 'Saving…' : 'Save changes' }}\r\n </ed-button>\r\n </div>\r\n </header>\r\n }\r\n\r\n @if (loading()) {\r\n @if (presentation() === 'drawer') {\r\n <div class=\"flex min-h-0 flex-1\" aria-busy=\"true\">\r\n <nav class=\"w-[220px] h-full shrink-0 overflow-y-auto p-base bg-lighter-2\" aria-label=\"Settings sections\">\r\n <ul role=\"presentation\">\r\n @for (_ of navSkeletonRows; track _) {\r\n <li class=\"mb-1\">\r\n <ed-skeleton class=\"h-8 w-full !rounded-md\"></ed-skeleton>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n <article class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-md overflow-y-auto bg-white p-base\">\r\n <header class=\"grid gap-2xs\">\r\n <ed-skeleton class=\"h-5 w-40\"></ed-skeleton>\r\n <ed-skeleton class=\"h-3 w-72\"></ed-skeleton>\r\n </header>\r\n @for (_ of fieldSkeletonRows; track _) {\r\n <div class=\"grid gap-2xs\">\r\n <ed-skeleton class=\"h-3 w-24\"></ed-skeleton>\r\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\r\n </div>\r\n }\r\n </article>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"grid grid-cols-[240px_minmax(0,1fr)] max-[960px]:grid-cols-1 items-start gap-5\"\r\n aria-busy=\"true\"\r\n >\r\n <nav class=\"flex flex-col gap-1 rounded-lg border border-base bg-white p-2 shadow-sm\" aria-label=\"Settings sections\">\r\n @for (_ of navSkeletonRows; track _) {\r\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\r\n }\r\n </nav>\r\n <article class=\"flex min-h-96 flex-col gap-md overflow-hidden rounded-lg border border-light bg-white p-base\">\r\n <header class=\"grid gap-2xs\">\r\n <ed-skeleton class=\"h-5 w-40\"></ed-skeleton>\r\n <ed-skeleton class=\"h-3 w-72\"></ed-skeleton>\r\n </header>\r\n @for (_ of fieldSkeletonRows; track _) {\r\n <div class=\"grid gap-2xs\">\r\n <ed-skeleton class=\"h-3 w-24\"></ed-skeleton>\r\n <ed-skeleton class=\"h-10 w-full !rounded-md\"></ed-skeleton>\r\n </div>\r\n }\r\n </article>\r\n </div>\r\n }\r\n } @else if (settings()) {\r\n @if (presentation() === 'drawer') {\r\n <div class=\"flex min-h-0 flex-1\">\r\n <nav class=\"w-[220px] h-full shrink-0 overflow-y-auto p-base bg-lighter-2\" aria-label=\"Settings sections\">\r\n <ul role=\"tablist\" aria-label=\"Settings sections\">\r\n @for (t of tabs; track t.id) {\r\n <li\r\n role=\"presentation\"\r\n [class.cursor-pointer]=\"!isTabDisabled(t.id)\"\r\n [class.cursor-not-allowed]=\"isTabDisabled(t.id)\"\r\n >\r\n <div\r\n class=\"kpi-menu\"\r\n role=\"tab\"\r\n [attr.id]=\"'agent-settings-tab-' + t.id\"\r\n [attr.aria-selected]=\"tab() === t.id\"\r\n [attr.aria-disabled]=\"isTabDisabled(t.id)\"\r\n [attr.tabindex]=\"tab() === t.id ? 0 : -1\"\r\n [attr.title]=\"isTabDisabled(t.id) ? 'This section is currently disabled' : null\"\r\n [class.kpi-menu-active]=\"tab() === t.id\"\r\n [class.opacity-45]=\"isTabDisabled(t.id)\"\r\n (click)=\"setTab(t.id)\"\r\n (keydown.enter)=\"setTab(t.id)\"\r\n (keydown.space)=\"$event.preventDefault(); setTab(t.id)\"\r\n >\r\n <div class=\"flex items-center gap-xs w-full\">\r\n <span class=\"whitespace-nowrap flex-1 truncate\">{{ t.label }}</span>\r\n @if (isTabDisabled(t.id)) {\r\n <span class=\"shrink-0 fs-2xs font-medium uppercase tracking-wide text-lighter\">Off</span>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n\r\n <article\r\n class=\"flex min-h-0 min-w-0 flex-1 flex-col gap-md bg-white p-base\"\r\n [class.overflow-y-auto]=\"!locationsMenuOpen()\"\r\n [class.overflow-visible]=\"locationsMenuOpen()\"\r\n >\r\n <header class=\"flex shrink-0 items-start justify-between gap-base\">\r\n <div class=\"min-w-0\">\r\n <h5 class=\"m-0\">{{ sectionMeta().title }}</h5>\r\n @if (tab() !== 'knowledge' && tab() !== 'general' && tab() !== 'phone' && tab() !== 'transcripts') {\r\n <p class=\"m-0 mt-2xs max-w-2xl fs-sm text-light\">{{ sectionMeta().description }}</p>\r\n }\r\n </div>\r\n @if (tab() === 'knowledge') {\r\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"openTestCall()\">\r\n <ed-icon slot=\"prefix\" name=\"phone_call\" [size]=\"16\" />\r\n Test Call\r\n </ed-button>\r\n }\r\n </header>\r\n\r\n @if (sectionIsReadOnly(tab())) {\r\n <p class=\"flex items-center gap-sm rounded-md border border-light bg-lighter px-base py-sm fs-sm text-light\">\r\n <ed-icon name=\"lock\" [size]=\"18\" />\r\n These settings are managed by Edvak. Contact support to request changes.\r\n </p>\r\n }\r\n\r\n <ng-container [ngTemplateOutlet]=\"settingsPanels\" />\r\n </article>\r\n </div>\r\n } @else {\r\n <div class=\"grid grid-cols-[240px_minmax(0,1fr)] max-[960px]:grid-cols-1 items-start gap-5\">\r\n <nav\r\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\"\r\n aria-label=\"Settings sections\"\r\n >\r\n @for (t of tabs; track t.id) {\r\n <button\r\n type=\"button\"\r\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\"\r\n [class.settings-page__nav-item--active]=\"tab() === t.id\"\r\n [class.settings-page__nav-item--disabled]=\"isTabDisabled(t.id)\"\r\n [disabled]=\"isTabDisabled(t.id)\"\r\n [attr.title]=\"isTabDisabled(t.id) ? 'This section is currently disabled' : null\"\r\n (click)=\"setTab(t.id)\"\r\n >\r\n {{ t.label }}\r\n @if (isTabDisabled(t.id)) {\r\n <span class=\"ml-auto text-xs font-medium uppercase tracking-wide text-zinc-400\">Disabled</span>\r\n }\r\n </button>\r\n }\r\n </nav>\r\n\r\n <article class=\"flex min-h-96 flex-col gap-md overflow-hidden rounded-lg border border-light bg-white p-base\">\r\n <header class=\"flex items-start justify-between gap-base\">\r\n <div class=\"min-w-0\">\r\n <h5 class=\"m-0\">{{ sectionMeta().title }}</h5>\r\n @if (tab() !== 'knowledge' && tab() !== 'general' && tab() !== 'phone' && tab() !== 'transcripts') {\r\n <p class=\"m-0 mt-2xs max-w-2xl fs-sm text-light\">{{ sectionMeta().description }}</p>\r\n }\r\n </div>\r\n @if (tab() === 'knowledge') {\r\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"openTestCall()\">\r\n <ed-icon slot=\"prefix\" name=\"phone_call\" [size]=\"16\" />\r\n Test Call\r\n </ed-button>\r\n }\r\n </header>\r\n\r\n @if (sectionIsReadOnly(tab())) {\r\n <p class=\"flex items-center gap-sm rounded-md border border-light bg-lighter px-base py-sm fs-sm text-light\">\r\n <ed-icon name=\"lock\" [size]=\"18\" />\r\n These settings are managed by Edvak. Contact support to request changes.\r\n </p>\r\n }\r\n\r\n <ng-container [ngTemplateOutlet]=\"settingsPanels\" />\r\n </article>\r\n </div>\r\n }\r\n }\r\n</div>\r\n\r\n<ng-template #settingsPanels>\r\n @if (tab() === 'knowledge') {\r\n <div class=\"flex w-full max-w-4xl flex-col gap-md\">\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>What to say</span></label>\r\n <textarea\r\n class=\"form-textarea min-h-56\"\r\n rows=\"10\"\r\n [maxlength]=\"knowledgeMax\"\r\n [ngModel]=\"whatToSay()\"\r\n (ngModelChange)=\"updateKnowledgeField('whatToSay', $event)\"\r\n placeholder=\"Hours, parking, payment options, arrival instructions, emergencies…\"\r\n autocomplete=\"off\"\r\n ></textarea>\r\n <span class=\"block text-right fs-xs text-light\">{{ whatToSay().length }}/{{ knowledgeMax }}</span>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>What not to say</span></label>\r\n <textarea\r\n class=\"form-textarea min-h-56\"\r\n rows=\"10\"\r\n [maxlength]=\"knowledgeMax\"\r\n [ngModel]=\"whatNotToSay()\"\r\n (ngModelChange)=\"updateKnowledgeField('whatNotToSay', $event)\"\r\n placeholder=\"Clinical advice, unverified prices, PHI, promises the practice cannot keep…\"\r\n autocomplete=\"off\"\r\n ></textarea>\r\n <span class=\"block text-right fs-xs text-light\">{{ whatNotToSay().length }}/{{ knowledgeMax }}</span>\r\n </div>\r\n </div>\r\n } @else if (tab() === 'general') {\r\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\r\n <div class=\"flex flex-col gap-xs\">\r\n <div class=\"flex items-center justify-between gap-xs\">\r\n <label class=\"m-0\">\r\n <span required>Name</span>\r\n </label>\r\n <ed-icon\r\n name=\"info\"\r\n [size]=\"16\"\r\n class=\"text-light\"\r\n title=\"How the AI introduces itself on calls\"\r\n />\r\n </div>\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"text\"\r\n [ngModel]=\"fieldValue('general', 'agentName')\"\r\n (ngModelChange)=\"updateField('general', 'agentName', $event)\"\r\n autocomplete=\"off\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex items-end gap-sm\">\r\n <div class=\"flex min-w-0 flex-1 flex-col gap-xs\">\r\n <label><span required>Voice</span></label>\r\n <select\r\n class=\"form-select is-sm settings-page__select\"\r\n [ngModel]=\"selectedVoiceId()\"\r\n (ngModelChange)=\"onVoiceChange($event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (v of voicePresets; track v.id) {\r\n <option [ngValue]=\"v.id\">{{ v.gender }} · {{ v.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n <button\r\n type=\"button\"\r\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\"\r\n [disabled]=\"!selectedVoiceId() || voicePreviewBusy()\"\r\n [attr.aria-label]=\"voicePreviewPlaying() ? 'Stop voice preview' : 'Play voice preview'\"\r\n [title]=\"voicePreviewPlaying() ? 'Stop preview' : 'Play sample'\"\r\n (click)=\"toggleVoicePreview()\"\r\n >\r\n <ed-icon [name]=\"voicePreviewPlaying() ? 'stop' : 'play_arrow'\" [size]=\"20\" />\r\n </button>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label>Tone</label>\r\n <div class=\"flex flex-wrap gap-xs\" role=\"radiogroup\" aria-label=\"Tone\">\r\n @for (tone of toneOptions; track tone.value) {\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__tone cursor-pointer rounded-full border border-transparent bg-lighter px-sm py-2xs fs-xs font-medium text-body\"\r\n [class.settings-page__tone--active]=\"selectedTone() === tone.value\"\r\n [class.font-semibold]=\"selectedTone() === tone.value\"\r\n [attr.aria-checked]=\"selectedTone() === tone.value\"\r\n role=\"radio\"\r\n (click)=\"setTone(tone.value)\"\r\n >\r\n {{ tone.label }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Inbound Greetings</span></label>\r\n <textarea\r\n class=\"form-textarea min-h-24\"\r\n rows=\"4\"\r\n spellcheck=\"false\"\r\n [maxlength]=\"welcomeMax\"\r\n [placeholder]=\"welcomePlaceholder()\"\r\n [ngModel]=\"welcomeMessage()\"\r\n (ngModelChange)=\"updateWelcomeMessage($event)\"\r\n autocomplete=\"off\"\r\n ></textarea>\r\n <span class=\"block text-right fs-xs text-light\">{{ welcomeMessage().length }}/{{ welcomeMax }}</span>\r\n <div class=\"flex flex-wrap items-center gap-xs\">\r\n <span class=\"fs-xs font-medium text-dark\">Variables:</span>\r\n @for (v of greetingVariables; track v.key) {\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"insertGreetingVariable(v.token)\"\r\n [title]=\"'Insert ' + v.token\"\r\n >\r\n {{ v.label }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n } @else if (tab() === 'phone') {\r\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\r\n <div class=\"flex flex-col gap-xs\">\r\n <div class=\"flex items-center justify-between gap-xs\">\r\n <label class=\"m-0\"><span required>AI Answer Mode</span></label>\r\n <ed-icon name=\"info\" [size]=\"16\" class=\"text-light\" title=\"When the AI picks up inbound calls\" />\r\n </div>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"fieldValue('phone', 'answerMode')\"\r\n (ngModelChange)=\"updateField('phone', 'answerMode', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of answerModeOptions; track opt.value) {\r\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>AI Phone Number</span></label>\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"text\"\r\n [disabled]=\"isFieldReadOnly('phone', 'mainNumber')\"\r\n [ngModel]=\"fieldValue('phone', 'mainNumber')\"\r\n (ngModelChange)=\"updateField('phone', 'mainNumber', $event)\"\r\n autocomplete=\"off\"\r\n />\r\n <span class=\"fs-xs text-light\">Number patients dial for the AI receptionist. Locked (managed by platform).</span>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Transfer Number</span></label>\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"text\"\r\n [disabled]=\"isFieldReadOnly('phone', 'transferNumber')\"\r\n [ngModel]=\"fieldValue('phone', 'transferNumber')\"\r\n (ngModelChange)=\"updateField('phone', 'transferNumber', $event)\"\r\n autocomplete=\"off\"\r\n />\r\n <span class=\"fs-xs text-light\">Staff / front-desk handoff number. Locked.</span>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Ringing Time Wait</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"numberFieldAsString('phone', 'ringTimeout')\"\r\n (ngModelChange)=\"selectNumberField('phone', 'ringTimeout', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of ringTimeoutOptions; track opt.value) {\r\n <option [value]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\r\n <ed-icon name=\"event_available\" [size]=\"20\" class=\"shrink-0 text-primary\" />\r\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\r\n <span class=\"fs-sm text-dark\">Create Follow-up Task</span>\r\n <span class=\"fs-xs text-light\">\r\n If no one answers in time, the agent auto-creates a high priority task.\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__switch shrink-0\"\r\n [class.settings-page__switch--on]=\"!!fieldValue('phone', 'createFollowUpTask')\"\r\n [attr.aria-pressed]=\"!!fieldValue('phone', 'createFollowUpTask')\"\r\n aria-label=\"Create Follow-up Task\"\r\n (click)=\"updateField('phone', 'createFollowUpTask', !fieldValue('phone', 'createFollowUpTask'))\"\r\n >\r\n <span class=\"settings-page__switch-thumb\"></span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Location Handled</span></label>\r\n <div class=\"relative\" data-locations-dd (document:click)=\"onLocationsDocClick($event)\">\r\n <div\r\n class=\"form-input flex h-auto w-full cursor-pointer items-center justify-between gap-xs py-2xs text-left\"\r\n role=\"combobox\"\r\n tabindex=\"0\"\r\n [class.opacity-55]=\"locations().length === 0\"\r\n [attr.aria-expanded]=\"locationsMenuOpen()\"\r\n [attr.aria-disabled]=\"locations().length === 0\"\r\n [attr.title]=\"locationSummary()\"\r\n aria-haspopup=\"listbox\"\r\n aria-label=\"Locations handled\"\r\n (click)=\"$event.stopPropagation(); locations().length && toggleLocationsMenu()\"\r\n (keydown.enter)=\"$event.preventDefault(); locations().length && toggleLocationsMenu()\"\r\n (keydown.space)=\"$event.preventDefault(); locations().length && toggleLocationsMenu()\"\r\n >\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-2xs overflow-hidden\">\r\n @if (locations().length === 0) {\r\n <span class=\"fs-sm text-light\">No locations available.</span>\r\n } @else if (selectedLocations().length === 0) {\r\n <span class=\"fs-sm text-light\">Select locations</span>\r\n } @else {\r\n @for (loc of visibleSelectedLocations(); track loc.id) {\r\n <span class=\"inline-flex h-5 items-center gap-2xs rounded bg-primary-50 px-2xs text-primary\">\r\n <span class=\"fs-xs font-medium\">{{ loc.name }}</span>\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex h-3 w-3 shrink-0 cursor-pointer items-center justify-center border-none bg-transparent p-0 text-primary\"\r\n [attr.aria-label]=\"'Remove ' + loc.name\"\r\n (click)=\"$event.stopPropagation(); toggleLocation(loc.id)\"\r\n >\r\n <ed-icon name=\"close\" [size]=\"12\" color=\"currentColor\" />\r\n </button>\r\n </span>\r\n }\r\n @if (hiddenLocationCount() > 0) {\r\n <span class=\"inline-flex h-5 items-center rounded bg-primary-50 px-2xs fs-xs font-medium text-primary\">\r\n +{{ hiddenLocationCount() }}\r\n </span>\r\n }\r\n }\r\n </span>\r\n <ed-icon name=\"expand_more\" [size]=\"16\" class=\"shrink-0 text-light\" />\r\n </div>\r\n @if (locationsMenuOpen()) {\r\n <ul\r\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\"\r\n role=\"listbox\"\r\n aria-multiselectable=\"true\"\r\n >\r\n @for (loc of locations(); track loc.id) {\r\n <li role=\"option\" [attr.aria-selected]=\"selectedLocationIds().includes(loc.id)\">\r\n <label class=\"flex cursor-pointer items-center gap-xs rounded px-xs py-2xs fs-sm text-dark hover:bg-lighter\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"h-4 w-4 accent-blue-600\"\r\n [checked]=\"selectedLocationIds().includes(loc.id)\"\r\n (change)=\"toggleLocation(loc.id)\"\r\n />\r\n <span class=\"min-w-0 truncate\">{{ loc.name }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n @if (locations().length === 0) {\r\n <p class=\"m-0 fs-sm text-light\">No locations available.</p>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Max AI Call Duration</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"numberFieldAsString('phone', 'maxCallDurationMin')\"\r\n (ngModelChange)=\"selectNumberField('phone', 'maxCallDurationMin', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of maxCallDurationOptions; track opt.value) {\r\n <option [value]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Silence Timeout</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"numberFieldAsString('phone', 'silenceTimeoutSec')\"\r\n (ngModelChange)=\"selectNumberField('phone', 'silenceTimeoutSec', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of silenceTimeoutOptions; track opt.value) {\r\n <option [value]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>After-Hours Behaviour</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"fieldValue('phone', 'afterHoursBehavior')\"\r\n (ngModelChange)=\"updateField('phone', 'afterHoursBehavior', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of afterHoursOptions; track opt.value) {\r\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-md border-t border-light pt-md\">\r\n <div class=\"settings-page__booking-mode flex flex-col gap-sm\">\r\n <div class=\"flex flex-col gap-2xs\">\r\n <span class=\"fs-sm font-medium text-dark\">Appointment booking mode</span>\r\n <span class=\"fs-xs text-light\">\r\n Controls how the voice agent writes bookings to the EHR for this practice.\r\n Applied when you click Save changes.\r\n </span>\r\n </div>\r\n\r\n @if (bookingModeLoading()) {\r\n <p class=\"m-0 fs-sm text-light\">Loading booking mode…</p>\r\n } @else {\r\n <div class=\"flex flex-col gap-xs\" role=\"radiogroup\" aria-label=\"Appointment booking mode\">\r\n @for (opt of bookingModeOptions(); track opt.value) {\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__booking-option flex w-full cursor-pointer items-start gap-sm rounded-md border border-base bg-white p-sm text-left\"\r\n [class.settings-page__booking-option--active]=\"bookingMode() === opt.value\"\r\n [disabled]=\"saving()\"\r\n role=\"radio\"\r\n [attr.aria-checked]=\"bookingMode() === opt.value\"\r\n (click)=\"selectBookingMode(opt.value)\"\r\n >\r\n <span\r\n class=\"settings-page__booking-radio mt-2xs flex h-4 w-4 shrink-0 items-center justify-center rounded-full border border-zinc-300\"\r\n [class.settings-page__booking-radio--on]=\"bookingMode() === opt.value\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\r\n <span class=\"fs-sm font-medium text-dark\">{{ opt.label }}</span>\r\n @if (opt.description) {\r\n <span class=\"fs-xs text-light\">{{ opt.description }}</span>\r\n }\r\n </span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (bookingModeError(); as err) {\r\n <p class=\"m-0 rounded-md border border-red-200 bg-red-50 px-sm py-xs fs-sm text-red-600\" role=\"alert\">\r\n {{ err }}\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label>Minimum lead time (hours)</label>\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"number\"\r\n min=\"0\"\r\n [ngModel]=\"fieldValue('scheduling', 'leadTimeHours')\"\r\n (ngModelChange)=\"updateField('scheduling', 'leadTimeHours', +$event)\"\r\n autocomplete=\"off\"\r\n />\r\n <span class=\"fs-xs text-light\">Earliest bookable slot from now.</span>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\r\n <ed-icon name=\"calendar_month\" [size]=\"20\" class=\"shrink-0 text-primary\" />\r\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\r\n <span class=\"fs-sm text-dark\">Allow same-day booking</span>\r\n <span class=\"fs-xs text-light\">\r\n Let patients book appointments today.\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__switch shrink-0\"\r\n [class.settings-page__switch--on]=\"!!fieldValue('scheduling', 'allowSameDay')\"\r\n [attr.aria-pressed]=\"!!fieldValue('scheduling', 'allowSameDay')\"\r\n aria-label=\"Allow same-day booking\"\r\n (click)=\"updateField('scheduling', 'allowSameDay', !fieldValue('scheduling', 'allowSameDay'))\"\r\n >\r\n <span class=\"settings-page__switch-thumb\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n } @else if (tab() === 'transcripts') {\r\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Keep Call Recordings</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"numberFieldAsString('transcripts', 'recordingRetainDays')\"\r\n (ngModelChange)=\"selectNumberField('transcripts', 'recordingRetainDays', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of retentionOptions; track opt.value) {\r\n <option [value]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label><span required>Keep Transcripts</span></label>\r\n <select\r\n class=\"form-select is-sm\"\r\n [ngModel]=\"numberFieldAsString('transcripts', 'transcriptRetainDays')\"\r\n (ngModelChange)=\"selectNumberField('transcripts', 'transcriptRetainDays', $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of retentionOptions; track opt.value) {\r\n <option [value]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <div class=\"flex items-center gap-xs\">\r\n <label class=\"m-0\">Disclosure Warning</label>\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__switch shrink-0\"\r\n [class.settings-page__switch--on]=\"disclosureEnabled()\"\r\n [attr.aria-pressed]=\"disclosureEnabled()\"\r\n aria-label=\"Disclosure Warning\"\r\n (click)=\"setDisclosureEnabled(!disclosureEnabled())\"\r\n >\r\n <span class=\"settings-page__switch-thumb\"></span>\r\n </button>\r\n </div>\r\n @if (disclosureEnabled()) {\r\n <textarea\r\n class=\"form-textarea min-h-24\"\r\n rows=\"4\"\r\n [maxlength]=\"disclosureMax\"\r\n [ngModel]=\"disclosureText()\"\r\n (ngModelChange)=\"updateDisclosureText($event)\"\r\n autocomplete=\"off\"\r\n ></textarea>\r\n }\r\n </div>\r\n </div>\r\n } @else if (tab() === 'advanced') {\r\n <div class=\"flex w-full max-w-3xl flex-col gap-md\">\r\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-white p-sm\">\r\n <span class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-md bg-primary-50 text-primary\" aria-hidden=\"true\">\r\n <ed-icon name=\"sparkle\" [size]=\"20\" />\r\n </span>\r\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\r\n <span class=\"fs-sm text-dark\">\r\n @if (toggling()) {\r\n Updating…\r\n } @else if (online() === true) {\r\n Agent online\r\n } @else if (online() === false) {\r\n Agent offline\r\n } @else {\r\n Status unknown\r\n }\r\n </span>\r\n <span class=\"fs-xs text-light\">\r\n @if (online() === true) {\r\n AI receptionist is answering inbound calls.\r\n } @else if (online() === false) {\r\n AI is offline — calls go to the front desk.\r\n } @else {\r\n Checking agent status…\r\n }\r\n </span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__switch shrink-0\"\r\n [class.settings-page__switch--on]=\"online() === true\"\r\n [disabled]=\"agentSwitchDisabled()\"\r\n [attr.aria-pressed]=\"online() === true\"\r\n aria-label=\"Agent online\"\r\n (click)=\"onAgentToggleClick()\"\r\n >\r\n <span class=\"settings-page__switch-thumb\"></span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-xs\">\r\n <label>Model version</label>\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"text\"\r\n [ngModel]=\"fieldValue('advanced', 'modelVersion')\"\r\n disabled\r\n autocomplete=\"off\"\r\n />\r\n <span class=\"fs-xs text-light\">Set by Edvak support.</span>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-sm rounded-md border border-base bg-lighter px-base py-sm opacity-90\">\r\n <div class=\"flex min-w-0 flex-1 flex-col gap-2xs\">\r\n <span class=\"fs-sm text-dark\">Debug mode</span>\r\n <span class=\"fs-xs text-light\">Verbose logging — contact Edvak to change.</span>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"settings-page__switch shrink-0\"\r\n [class.settings-page__switch--on]=\"!!fieldValue('advanced', 'debugMode')\"\r\n disabled\r\n [attr.aria-pressed]=\"!!fieldValue('advanced', 'debugMode')\"\r\n aria-label=\"Debug mode\"\r\n >\r\n <span class=\"settings-page__switch-thumb\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"grid grid-cols-2 gap-x-md gap-y-md below-md:grid-cols-1\">\r\n @for (field of fieldsForTab(); track field.key) {\r\n @if (field.type === 'boolean') {\r\n <label\r\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\"\r\n [class.cursor-default]=\"fieldIsReadOnly(tab(), field.key)\"\r\n [class.opacity-90]=\"fieldIsReadOnly(tab(), field.key)\"\r\n >\r\n <div class=\"flex min-w-0 flex-col gap-2xs\">\r\n <span class=\"fs-sm text-dark\">{{ field.label }}</span>\r\n @if (field.description) {\r\n <span\r\n class=\"fs-sm text-light\"\r\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\r\n >{{ field.description }}</span>\r\n }\r\n </div>\r\n <input\r\n type=\"checkbox\"\r\n class=\"h-4 w-4 shrink-0 accent-blue-600 disabled:cursor-not-allowed\"\r\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\r\n [ngModel]=\"fieldValue(tab(), field.key)\"\r\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\r\n autocomplete=\"off\"\r\n />\r\n </label>\r\n } @else if (field.type === 'select' && field.options?.length) {\r\n <div class=\"flex flex-col gap-xs\">\r\n <label>{{ field.label }}</label>\r\n @if (field.description) {\r\n <span\r\n class=\"fs-sm text-light\"\r\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\r\n >{{ field.description }}</span>\r\n }\r\n <select\r\n class=\"form-select is-sm\"\r\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\r\n [ngModel]=\"fieldValue(tab(), field.key)\"\r\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\r\n autocomplete=\"off\"\r\n >\r\n @for (opt of field.options; track opt.value) {\r\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\r\n }\r\n </select>\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-col gap-xs\">\r\n <label>{{ field.label }}</label>\r\n @if (field.description) {\r\n <span\r\n class=\"fs-sm text-light\"\r\n [class.text-lighter]=\"fieldIsReadOnly(tab(), field.key)\"\r\n >{{ field.description }}</span>\r\n }\r\n @if (field.type === 'number') {\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"number\"\r\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\r\n [ngModel]=\"fieldValue(tab(), field.key)\"\r\n (ngModelChange)=\"updateField(tab(), field.key, +$event)\"\r\n autocomplete=\"off\"\r\n />\r\n } @else {\r\n <input\r\n class=\"form-input is-sm\"\r\n type=\"text\"\r\n [disabled]=\"fieldIsReadOnly(tab(), field.key)\"\r\n [ngModel]=\"fieldValue(tab(), field.key)\"\r\n (ngModelChange)=\"updateField(tab(), field.key, $event)\"\r\n autocomplete=\"off\"\r\n />\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<eds-knowledge-test-modal\r\n [open]=\"knowledgeTestOpen()\"\r\n [whatToSay]=\"whatToSay()\"\r\n [whatNotToSay]=\"whatNotToSay()\"\r\n [voiceId]=\"selectedVoiceId()\"\r\n (closed)=\"closeTestCall()\"\r\n/>\r\n\r\n@if (confirmOffOpen()) {\r\n <app-modal\r\n title=\"Turn off AI receptionist?\"\r\n subtitle=\"Inbound callers will be transferred to the front desk instead of the AI.\"\r\n maxWidth=\"480px\"\r\n (closed)=\"cancelConfirmOff()\"\r\n >\r\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>\r\n <div class=\"flex justify-end gap-2\">\r\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"cancelConfirmOff()\">Cancel</ed-button>\r\n <ed-button variant=\"danger\" fill size=\"sm\" [disabled]=\"toggling()\" (click$)=\"confirmTurnOff()\">\r\n Turn off AI receptionist\r\n </ed-button>\r\n </div>\r\n </app-modal>\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n/** Single shared open state for the Agent Settings ed-drawer. */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AgentSettingsDrawerService {\r\n readonly open = signal(false);\r\n\r\n show(): void {\r\n this.open.set(true);\r\n }\r\n\r\n hide(): void {\r\n this.open.set(false);\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n OnDestroy,\r\n Renderer2,\r\n inject,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Moves the host element to `document.body` so `position: fixed` overlays\r\n * cover the full browser viewport (escapes `#content-area` / `.eds-content`\r\n * overflow and stacking contexts), matching `app-modal` behavior.\r\n */\r\n@Directive({\r\n selector: '[edsViewportPortal]',\r\n standalone: true,\r\n})\r\nexport class ViewportPortalDirective implements AfterViewInit, OnDestroy {\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n private movedToBody = false;\r\n\r\n ngAfterViewInit(): void {\r\n const node = this.el.nativeElement;\r\n if (!node || node.parentElement === document.body) return;\r\n this.renderer.appendChild(document.body, node);\r\n this.movedToBody = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const node = this.el.nativeElement;\r\n if (this.movedToBody && node?.parentElement) {\r\n this.renderer.removeChild(node.parentElement, node);\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\n\r\nimport { IconComponent } from './ed-icon.component';\r\n\r\ntype Size = 'xs' | 'sm' | 'base' | 'md' | 'lg';\r\ntype Variant = 'default' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'accent' | 'info';\r\ntype Shape = 'circle' | 'square';\r\ntype BtnType = 'button' | 'submit' | 'reset';\r\ntype IconPixelSize = 14 | 16 | 18 | 20 | 24 | 28 | 32;\r\n\r\nconst SIZE_MAP: Record<Size, { btn: number; spinner: number; radius: number; icon: IconPixelSize }> = {\r\n xs: { btn: 24, spinner: 14, radius: 4, icon: 14 },\r\n sm: { btn: 28, spinner: 16, radius: 6, icon: 16 },\r\n base: { btn: 32, spinner: 18, radius: 6, icon: 20 },\r\n md: { btn: 36, spinner: 20, radius: 8, icon: 24 },\r\n lg: { btn: 40, spinner: 22, radius: 10, icon: 28 },\r\n};\r\n\r\n@Component({\r\n selector: 'ed-icon-button',\r\n standalone: true,\r\n imports: [IconComponent],\r\n templateUrl: './ed-icon-button.component.html',\r\n styleUrl: './ed-icon-button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdIconButtonComponent {\r\n @Input({ required: true }) label!: string;\r\n @Input({ required: true }) name!: string;\r\n\r\n @Input() size: Size = 'base';\r\n @Input() variant: Variant = 'default';\r\n @Input({ transform: booleanAttribute }) allowBubble = false;\r\n @Input({ transform: booleanAttribute }) ghost = false;\r\n @Input({ transform: booleanAttribute }) outline = false;\r\n @Input({ transform: booleanAttribute }) solid = false;\r\n @Input({ transform: booleanAttribute }) subtle = false;\r\n @Input() shape: Shape = 'square';\r\n\r\n private readonly btnTypes = new Set<BtnType>(['button', 'submit', 'reset']);\r\n private typeValue: BtnType = 'button';\r\n @Input() set type(v: BtnType) {\r\n this.typeValue = this.btnTypes.has(v) ? v : 'button';\r\n }\r\n get type(): BtnType {\r\n return this.typeValue;\r\n }\r\n\r\n @Input({ transform: booleanAttribute }) disabled = false;\r\n @Input({ transform: booleanAttribute }) loading = false;\r\n @Input({ transform: booleanAttribute }) toggle = false;\r\n @Input({ transform: booleanAttribute }) pressed = false;\r\n\r\n @Input() id?: string;\r\n @Input() title?: string;\r\n @Input() nameAttr?: string;\r\n @Input() value?: string;\r\n @Input({ transform: booleanAttribute }) autofocus = false;\r\n @Input() tabIndex?: number;\r\n\r\n @Output() readonly click = new EventEmitter<MouseEvent>();\r\n @Output() readonly focus = new EventEmitter<FocusEvent>();\r\n @Output() readonly blur = new EventEmitter<FocusEvent>();\r\n @Output() readonly click$ = new EventEmitter<MouseEvent>();\r\n @Output() readonly focus$ = new EventEmitter<FocusEvent>();\r\n @Output() readonly blur$ = new EventEmitter<FocusEvent>();\r\n\r\n get isDisabled(): boolean {\r\n return this.disabled || this.loading;\r\n }\r\n\r\n get ariaBusy(): 'true' | null {\r\n return this.loading ? 'true' : null;\r\n }\r\n\r\n get iconSize(): IconPixelSize {\r\n return (SIZE_MAP[this.size] ?? SIZE_MAP.base).icon;\r\n }\r\n\r\n @HostBinding('style.--btn-size')\r\n get btnSizeVar(): string {\r\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).btn}px`;\r\n }\r\n\r\n @HostBinding('style.--ib-spinner')\r\n get spinnerSizeVar(): string {\r\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).spinner}px`;\r\n }\r\n\r\n @HostBinding('style.--btn-radius')\r\n get btnRadiusVar(): string {\r\n return `${(SIZE_MAP[this.size] ?? SIZE_MAP.base).radius}px`;\r\n }\r\n\r\n get effectiveStyle(): 'ghost' | 'outline' | 'subtle' | 'solid' {\r\n if (this.solid) return 'solid';\r\n if (this.outline) return 'outline';\r\n if (this.subtle) return 'subtle';\r\n return 'ghost';\r\n }\r\n\r\n onClick(ev: MouseEvent): void {\r\n if (this.isDisabled) {\r\n ev.preventDefault();\r\n ev.stopImmediatePropagation();\r\n return;\r\n }\r\n this.click.emit(ev);\r\n this.click$.emit(ev);\r\n }\r\n\r\n onFocus(ev: FocusEvent): void {\r\n this.focus.emit(ev);\r\n this.focus$.emit(ev);\r\n }\r\n\r\n onBlur(ev: FocusEvent): void {\r\n this.blur.emit(ev);\r\n this.blur$.emit(ev);\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n stopClickBubble(e: Event): void {\r\n if (!this.allowBubble) e.stopPropagation();\r\n }\r\n\r\n @HostListener('pointerdown', ['$event'])\r\n stopPointerDownBubble(e: Event): void {\r\n if (!this.allowBubble) e.stopPropagation();\r\n }\r\n\r\n @HostListener('pointerup', ['$event'])\r\n stopPointerUpBubble(e: Event): void {\r\n if (!this.allowBubble) e.stopPropagation();\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n stopMouseDownBubble(e: Event): void {\r\n if (!this.allowBubble) e.stopPropagation();\r\n }\r\n\r\n @HostListener('mouseup', ['$event'])\r\n stopMouseUpBubble(e: Event): void {\r\n if (!this.allowBubble) e.stopPropagation();\r\n }\r\n}\r\n","<button\r\n class=\"icon-btn\"\r\n [attr.id]=\"id || null\"\r\n [attr.title]=\"title || null\"\r\n [type]=\"type\"\r\n [disabled]=\"isDisabled\"\r\n [attr.autofocus]=\"autofocus ? '' : null\"\r\n [attr.tabindex]=\"tabIndex ?? null\"\r\n [attr.name]=\"nameAttr || null\"\r\n [attr.value]=\"value || null\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-busy]=\"ariaBusy\"\r\n [attr.aria-disabled]=\"isDisabled ? 'true' : null\"\r\n [attr.aria-pressed]=\"toggle ? (pressed ? 'true' : 'false') : null\"\r\n [attr.variant]=\"variant\"\r\n [attr.shape]=\"shape\"\r\n [attr.size]=\"size\"\r\n [attr.ghost]=\"effectiveStyle === 'ghost' ? '' : null\"\r\n [attr.outline]=\"effectiveStyle === 'outline' ? '' : null\"\r\n [attr.solid]=\"effectiveStyle === 'solid' ? '' : null\"\r\n [attr.subtle]=\"effectiveStyle === 'subtle' ? '' : null\"\r\n (click)=\"onClick($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n>\r\n <span class=\"icon-slot\" aria-hidden=\"true\">\r\n <ed-icon [name]=\"name\" [size]=\"iconSize\" color=\"currentColor\" />\r\n </span>\r\n\r\n @if (loading) {\r\n <span aria-live=\"polite\" class=\"sr-only\">Loading…</span>\r\n <span class=\"spinner\" aria-hidden=\"true\"></span>\r\n }\r\n</button>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n CUSTOM_ELEMENTS_SCHEMA,\r\n inject,\r\n viewChild,\r\n} from '@angular/core';\r\n\r\nimport { EdButtonComponent } from '../../ui/ed-button.component';\r\n\r\nimport { SettingsPageComponent } from '../../pages/settings-page/settings-page.component';\r\nimport { AgentSettingsDrawerService } from '../../services/agent-settings-drawer.service';\r\nimport { ViewportPortalDirective } from '../../shared/viewport-portal.directive';\r\nimport { EdIconButtonComponent } from '../../ui/ed-icon-button.component';\r\n\r\n@Component({\r\n selector: 'eds-agent-settings-drawer',\r\n imports: [\r\n SettingsPageComponent,\r\n EdButtonComponent,\r\n EdIconButtonComponent,\r\n ViewportPortalDirective,\r\n ],\r\n templateUrl: './agent-settings-drawer.component.html',\r\n styleUrl: './agent-settings-drawer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n})\r\nexport class AgentSettingsDrawerComponent {\r\n private readonly drawer = inject(AgentSettingsDrawerService);\r\n private readonly settingsForm = viewChild<SettingsPageComponent>('settingsForm');\r\n\r\n protected readonly open = this.drawer.open;\r\n\r\n protected close(): void {\r\n this.settingsForm()?.discardChanges();\r\n this.drawer.hide();\r\n }\r\n\r\n protected onBackdropClick(event: MouseEvent): void {\r\n if (event.target === event.currentTarget) {\r\n this.close();\r\n }\r\n }\r\n}\r\n","@if (open()) {\r\n <div\r\n edsViewportPortal\r\n class=\"eds-drawer-backdrop fixed left-0 top-0 z-[100100] flex h-[100vh] w-[100vw] justify-end\"\r\n (click)=\"onBackdropClick($event)\"\r\n role=\"presentation\"\r\n >\r\n <ed-drawer\r\n size=\"xl\"\r\n class=\"slide-in-rtl ed-main-sidepanel h-full\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label=\"Agent Setting\"\r\n >\r\n <ed-drawer-header class=\"shrink-0 border-b border-zinc-200 bg-white shadow-none\">\r\n <h6 data-new-heading=\"true\">Agent Setting</h6>\r\n <ed-icon-button\r\n name=\"close\"\r\n label=\"Close\"\r\n size=\"sm\"\r\n ghost\r\n (click$)=\"close()\"\r\n />\r\n </ed-drawer-header>\r\n\r\n <ed-drawer-body class=\"min-h-0 flex-1 overflow-hidden p-0\">\r\n <eds-settings-page\r\n #settingsForm\r\n presentation=\"drawer\"\r\n />\r\n </ed-drawer-body>\r\n\r\n <ed-drawer-footer class=\"shrink-0 flex-row-reverse bg-lighter\">\r\n <ed-button\r\n variant=\"primary\"\r\n fill\r\n size=\"sm\"\r\n [disabled]=\"settingsForm.saving()\"\r\n (click$)=\"settingsForm.save()\"\r\n >\r\n {{ settingsForm.saving() ? 'Saving…' : 'Save' }}\r\n </ed-button>\r\n <ed-button\r\n variant=\"default\"\r\n outline\r\n size=\"sm\"\r\n (click$)=\"close()\"\r\n >\r\n Cancel\r\n </ed-button>\r\n @if (settingsForm.saved()) {\r\n <span class=\"mr-auto fs-sm font-medium text-green-500\">Saved</span>\r\n }\r\n </ed-drawer-footer>\r\n </ed-drawer>\r\n </div>\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n CUSTOM_ELEMENTS_SCHEMA,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\n\r\nimport { EdButtonComponent } from '../ui/ed-button.component';\r\n\r\nimport { AgentSettingsDrawerComponent } from '../components/agent-settings-drawer/agent-settings-drawer.component';\r\nimport {\r\n VOICE_RECEPTIONIST_CONFIG,\r\n VOICE_RECEPTIONIST_SESSION,\r\n} from '../config';\r\nimport { AgentOnlineService } from '../services/agent-online.service';\r\nimport { AgentSettingsDrawerService } from '../services/agent-settings-drawer.service';\r\nimport { ModalComponent } from '../shared/modal.component';\r\nimport { ToastService } from '../shared/toast.service';\r\nimport { IconComponent } from '../ui/ed-icon.component';\r\n\r\ninterface NavItem {\r\n id: string;\r\n label: string;\r\n icon: string;\r\n route: string;\r\n badge?: number;\r\n pulse?: boolean;\r\n adminOnly?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'eds-module-nav',\r\n imports: [\r\n RouterLink,\r\n RouterLinkActive,\r\n IconComponent,\r\n ModalComponent,\r\n AgentSettingsDrawerComponent,\r\n EdButtonComponent,\r\n ],\r\n templateUrl: './eds-module-nav.component.html',\r\n styleUrl: './eds-module-nav.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n host: { class: 'block shrink-0' },\r\n})\r\nexport class EdsModuleNavComponent {\r\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\r\n private readonly session = inject(VOICE_RECEPTIONIST_SESSION);\r\n private readonly agentOnline = inject(AgentOnlineService);\r\n private readonly toast = inject(ToastService);\r\n private readonly settingsDrawer = inject(AgentSettingsDrawerService);\r\n\r\n protected readonly includePracticeNav = !!this.config.includePracticeNav;\r\n\r\n\r\n /** Standalone Voice Hub only — never show logout in EHR embed (no module nav there). */\r\n protected readonly showLogout = computed(() => !!this.session);\r\n protected readonly userEmail = computed(() => this.session?.email() ?? null);\r\n\r\n protected readonly online = this.agentOnline.online;\r\n protected readonly agentLoading = this.agentOnline.loading;\r\n protected readonly toggling = this.agentOnline.toggling;\r\n\r\n /** Menu open or agent live → Figma Selected / Call answering solid chip. */\r\n protected readonly brandIconActive = computed(\r\n () => this.headerMenuOpen() || this.online() === true,\r\n );\r\n\r\n /** Hover tracked so ed-icon [color] can switch (SVG is outside emulated encapsulation). */\r\n protected readonly brandIconHovered = signal(false);\r\n\r\n /** Explicit fill — currentColor does not reliably tint injected SVG paths. */\r\n protected readonly brandIconColor = computed(() =>\r\n this.brandIconActive() || this.brandIconHovered() ? '#ffffff' : '#9810fa',\r\n );\r\n\r\n protected readonly headerAriaLabel = computed(() => {\r\n if (this.online() === true) return 'AI Receptionist menu, live';\r\n if (this.online() === false) return 'AI Receptionist menu, offline';\r\n if (this.agentLoading()) return 'AI Receptionist menu, checking status';\r\n return 'AI Receptionist menu';\r\n });\r\n protected readonly confirmOffOpen = signal(false);\r\n protected readonly headerMenuOpen = signal(false);\r\n\r\n protected readonly agentSwitchDisabled = computed(\r\n () => this.agentLoading() || this.toggling() || this.online() === null,\r\n );\r\n\r\n protected readonly receptionistNav: NavItem[] = [\r\n { id: 'dashboard', label: 'Home', icon: 'home', route: 'dashboard' },\r\n { id: 'live', label: 'Live Calls', icon: 'phone_call', route: 'live' },\r\n { id: 'history', label: 'Call History', icon: 'history', route: 'history' },\r\n { id: 'activities', label: 'Activities', icon: 'format_list_bulleted', route: 'activities' },\r\n { id: 'analytics', label: 'Analytics', icon: 'chartline', route: 'analytics' },\r\n ];\r\n\r\n protected readonly practiceNav: NavItem[] = [\r\n { id: 'patients', label: 'Patients', icon: 'groups', route: 'patients' },\r\n { id: 'providers', label: 'Providers', icon: 'stethoscope', route: 'providers' },\r\n { id: 'appointments', label: 'Appointments', icon: 'calendar_month', route: 'appointments' },\r\n { id: 'admin', label: 'Admin', icon: 'admin_panel_settings', route: 'admin', adminOnly: true },\r\n ];\r\n\r\n constructor() {\r\n this.agentOnline.refresh();\r\n }\r\n\r\n protected showNavItem(item: NavItem): boolean {\r\n if (!item.adminOnly) return true;\r\n return !!this.session?.isAdmin() || !!this.session?.isSuperAdmin?.();\r\n }\r\n\r\n protected toggleHeaderMenu(): void {\r\n this.headerMenuOpen.update((open) => !open);\r\n }\r\n\r\n protected closeHeaderMenu(): void {\r\n this.headerMenuOpen.set(false);\r\n }\r\n\r\n protected onHeaderMenuDocClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement | null;\r\n if (!target?.closest('[data-header-menu]')) {\r\n this.headerMenuOpen.set(false);\r\n }\r\n }\r\n\r\n protected onAgentToggleClick(): void {\r\n if (this.agentSwitchDisabled()) return;\r\n if (this.online()) {\r\n this.confirmOffOpen.set(true);\r\n return;\r\n }\r\n this.applyOnline(true);\r\n }\r\n\r\n protected cancelConfirmOff(): void {\r\n this.confirmOffOpen.set(false);\r\n }\r\n\r\n protected confirmTurnOff(): void {\r\n this.confirmOffOpen.set(false);\r\n this.applyOnline(false);\r\n }\r\n\r\n protected logout(): void {\r\n this.session?.logout();\r\n }\r\n\r\n protected openSettingsDrawer(): void {\r\n this.closeHeaderMenu();\r\n this.settingsDrawer.show();\r\n }\r\n\r\n private applyOnline(enabled: boolean): void {\r\n this.agentOnline.setOnline(enabled).subscribe({\r\n next: () => {\r\n this.toast.show(\r\n enabled\r\n ? 'AI receptionist is online — it will answer inbound calls.'\r\n : 'AI receptionist is offline — calls go to the front desk.',\r\n 'success',\r\n );\r\n },\r\n error: (err: { message?: string }) => {\r\n this.toast.show(err.message ?? 'Failed to update agent status.', 'error');\r\n this.agentOnline.refresh();\r\n },\r\n });\r\n }\r\n}\r\n","<nav\r\n class=\"sticky top-0 flex h-screen min-h-screen w-52 flex-col overflow-y-auto border-r border-base bg-white \"\r\n aria-label=\"AI Receptionist\"\r\n>\r\n <div class=\"flex min-h-0 flex-1 flex-col \">\r\n <div\r\n class=\"relative shrink-0 p-sm\"\r\n data-header-menu\r\n (document:click)=\"onHeaderMenuDocClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"ai-receptionist-nav-item flex w-full cursor-pointer items-center justify-between gap-xs rounded-md border-0 bg-transparent p-2xs text-left\"\r\n [class.active]=\"brandIconActive()\"\r\n [attr.aria-label]=\"headerAriaLabel()\"\r\n [attr.aria-expanded]=\"headerMenuOpen()\"\r\n aria-haspopup=\"menu\"\r\n (mouseenter)=\"brandIconHovered.set(true)\"\r\n (mouseleave)=\"brandIconHovered.set(false)\"\r\n (click)=\"$event.stopPropagation(); toggleHeaderMenu()\"\r\n >\r\n <div class=\"flex min-w-0 flex-1 items-center gap-xs\">\r\n <span\r\n class=\"menu-item-icon relative flex h-9 w-9 shrink-0 items-center justify-center\"\r\n aria-hidden=\"true\"\r\n >\r\n <ed-icon\r\n name=\"ai_headset\"\r\n [size]=\"20\"\r\n [color]=\"brandIconColor()\"\r\n />\r\n @if (online() === true) {\r\n <span class=\"ai-receptionist-live-dot\"></span>\r\n } @else if (online() === false) {\r\n <span class=\"ai-receptionist-live-dot is-offline\"></span>\r\n }\r\n </span>\r\n <span class=\"min-w-0 truncate fs-base font-semibold text-dark\">AI Receptionist</span>\r\n </div>\r\n <ed-icon\r\n name=\"caret_down\"\r\n [size]=\"16\"\r\n color=\"currentColor\"\r\n class=\"shrink-0 text-light\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n @if (headerMenuOpen()) {\r\n <div\r\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\"\r\n role=\"menu\"\r\n aria-label=\"AI Receptionist menu\"\r\n >\r\n <a\r\n class=\"flex w-full items-center rounded-sm px-sm py-xs fs-sm text-dark no-underline transition-colors hover:bg-lighter\"\r\n routerLink=\"audit\"\r\n routerLinkActive=\"bg-lighter\"\r\n role=\"menuitem\"\r\n (click)=\"closeHeaderMenu()\"\r\n >\r\n Audit Logs\r\n </a>\r\n <button\r\n type=\"button\"\r\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\"\r\n role=\"menuitem\"\r\n (click)=\"openSettingsDrawer()\"\r\n >\r\n Settings\r\n </button>\r\n <div class=\"w-full border-b border-light\" role=\"presentation\"></div>\r\n <div class=\"flex w-full items-center gap-2xs px-sm py-xs\" role=\"menuitem\">\r\n <span class=\"min-w-0 flex-1 fs-sm text-dark\">\r\n @if (online() === true) {\r\n Agent is Live\r\n } @else if (online() === false) {\r\n Agent is Offline\r\n } @else {\r\n Agent status\r\n }\r\n </span>\r\n <button\r\n type=\"button\"\r\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\"\r\n [class.bg-primary]=\"online() === true\"\r\n [class.justify-end]=\"online() === true\"\r\n [class.bg-lighter]=\"online() !== true\"\r\n [class.justify-start]=\"online() !== true\"\r\n [disabled]=\"agentSwitchDisabled()\"\r\n [attr.aria-pressed]=\"online() === true\"\r\n [attr.aria-label]=\"online() === true ? 'Turn off AI receptionist' : 'Turn on AI receptionist'\"\r\n (click)=\"$event.stopPropagation(); onAgentToggleClick()\"\r\n >\r\n <span class=\"block h-3 w-3 rounded-full bg-white\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"w-full border-b border-light\" role=\"presentation\"></div>\r\n\r\n <ul role=\"menu\" class=\"m-0 list-none p-0\">\r\n @for (item of receptionistNav; track item.id) {\r\n <li\r\n tabindex=\"0\"\r\n role=\"menuitem\"\r\n class=\"cursor-pointer px-base py-xs text-left fs-base leading-[1.8] hover:bg-lighter active:bg-base\"\r\n [attr.data-value]=\"item.label\"\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"bg-light\"\r\n [routerLinkActiveOptions]=\"{ exact: item.route === 'dashboard' }\"\r\n (keydown.enter)=\"$any($event.target)?.click()\"\r\n >{{ item.label }}</li>\r\n }\r\n </ul>\r\n\r\n @if (includePracticeNav) {\r\n <p class=\"mb-0 mt-0 fs-sm font-semibold text-light\">Practice</p>\r\n <ul role=\"menu\" class=\"m-0 list-none p-0\">\r\n @for (item of practiceNav; track item.id) {\r\n @if (showNavItem(item)) {\r\n <li\r\n tabindex=\"0\"\r\n role=\"menuitem\"\r\n class=\"cursor-pointer px-base py-xs text-left fs-base leading-[1.8] hover:bg-lighter active:bg-base\"\r\n [attr.data-value]=\"item.label\"\r\n [routerLink]=\"item.route\"\r\n routerLinkActive=\"bg-light\"\r\n (keydown.enter)=\"$any($event.target)?.click()\"\r\n >{{ item.label }}</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n\r\n @if (showLogout()) {\r\n <div class=\"mt-auto border-t border-light pt-sm\">\r\n @if (userEmail(); as email) {\r\n <p class=\"mb-xs truncate px-xs fs-xs text-light\" [title]=\"email\">{{ email }}</p>\r\n }\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"logout()\"\r\n aria-label=\"Log out\"\r\n title=\"Log out\"\r\n >\r\n <ed-icon class=\"shrink-0\" name=\"logout\" [size]=\"24\" color=\"currentColor\" />\r\n <span class=\"min-w-0 flex-1\">Log out</span>\r\n </button>\r\n </div>\r\n }\r\n</nav>\r\n\r\n@if (confirmOffOpen()) {\r\n <app-modal\r\n title=\"Turn off AI receptionist?\"\r\n subtitle=\"Inbound callers will be transferred to the front desk instead of the AI.\"\r\n maxWidth=\"480px\"\r\n (closed)=\"cancelConfirmOff()\"\r\n >\r\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>\r\n <div class=\"flex justify-end gap-2\">\r\n <ed-button variant=\"secondary\" outline size=\"sm\" (click$)=\"cancelConfirmOff()\">Cancel</ed-button>\r\n <ed-button variant=\"danger\" fill size=\"sm\" [disabled]=\"toggling()\" (click$)=\"confirmTurnOff()\">\r\n Turn off AI receptionist\r\n </ed-button>\r\n </div>\r\n </app-modal>\r\n}\r\n\r\n<eds-agent-settings-drawer />\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n NavigationCancel,\r\n NavigationEnd,\r\n NavigationError,\r\n NavigationStart,\r\n Router,\r\n} from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n/**\r\n * Thin top progress bar + soft content veil while Angular navigates\r\n * (lazy chunks, guards). Use once at the host root or app shell.\r\n */\r\n@Component({\r\n selector: 'eds-route-progress',\r\n standalone: true,\r\n template: `\r\n @if (active()) {\r\n <div class=\"eds-route-progress\" role=\"progressbar\" aria-busy=\"true\" aria-label=\"Loading page\">\r\n <div class=\"eds-route-progress__bar\"></div>\r\n </div>\r\n <div class=\"eds-route-progress__veil\" aria-hidden=\"true\">\r\n <div class=\"eds-route-progress__panel\">\r\n <span class=\"eds-route-progress__spinner\"></span>\r\n <span class=\"eds-route-progress__label\">Loading…</span>\r\n </div>\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n display: contents;\r\n }\r\n\r\n .eds-route-progress {\r\n position: fixed;\r\n inset: 0 0 auto;\r\n z-index: 9999;\r\n height: 3px;\r\n overflow: hidden;\r\n pointer-events: none;\r\n background: transparent;\r\n }\r\n\r\n .eds-route-progress__bar {\r\n height: 100%;\r\n width: 40%;\r\n border-radius: 0 2px 2px 0;\r\n background: linear-gradient(90deg, #2162f0, #8e51ff);\r\n animation: eds-route-progress-slide 1.05s ease-in-out infinite;\r\n }\r\n\r\n .eds-route-progress__veil {\r\n position: fixed;\r\n inset: 0;\r\n z-index: 9998;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: all;\r\n background: rgba(247, 250, 255, 0.55);\r\n backdrop-filter: blur(1px);\r\n }\r\n\r\n .eds-route-progress__panel {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.75rem;\r\n padding: 0.75rem 1.1rem;\r\n border: 1px solid #e2e8f0;\r\n border-radius: 0.75rem;\r\n background: #fff;\r\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);\r\n color: #334155;\r\n font-family: Inter, system-ui, sans-serif;\r\n font-size: 0.875rem;\r\n font-weight: 500;\r\n }\r\n\r\n .eds-route-progress__spinner {\r\n width: 1.1rem;\r\n height: 1.1rem;\r\n border: 2px solid #dbeafe;\r\n border-top-color: #2162f0;\r\n border-radius: 999px;\r\n animation: eds-route-progress-spin 0.7s linear infinite;\r\n }\r\n\r\n .eds-route-progress__label {\r\n letter-spacing: -0.01em;\r\n }\r\n\r\n @keyframes eds-route-progress-slide {\r\n 0% {\r\n transform: translateX(-120%);\r\n }\r\n 100% {\r\n transform: translateX(320%);\r\n }\r\n }\r\n\r\n @keyframes eds-route-progress-spin {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n `,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdsRouteProgressComponent {\r\n private readonly router = inject(Router);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n protected readonly active = signal(false);\r\n\r\n constructor() {\r\n this.router.events\r\n .pipe(\r\n filter(\r\n (e) =>\r\n e instanceof NavigationStart ||\r\n e instanceof NavigationEnd ||\r\n e instanceof NavigationCancel ||\r\n e instanceof NavigationError,\r\n ),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe((e) => {\r\n if (e instanceof NavigationStart) {\r\n this.clearHideTimer();\r\n this.active.set(true);\r\n return;\r\n }\r\n // Keep visible briefly so fast navigations still feel intentional.\r\n this.clearHideTimer();\r\n this.hideTimer = setTimeout(() => this.active.set(false), 180);\r\n });\r\n\r\n this.destroyRef.onDestroy(() => this.clearHideTimer());\r\n }\r\n\r\n private clearHideTimer(): void {\r\n if (this.hideTimer) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = null;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n HostBinding,\r\n Input,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\nexport type EdAvatarTone = 'gray' | 'brand' | 'warm' | 'green' | 'amber' | 'violet' | 'rose';\r\nexport type EdAvatarShape = 'circle' | 'box';\r\nexport type EdAvatarSize = 'xs' | 'sm' | 'base' | 'md' | 'lg';\r\n\r\n@Component({\r\n selector: 'ed-avatar',\r\n standalone: true,\r\n template: `<span class=\"ed-avatar\">{{ initials }}</span>`,\r\n styleUrl: './ed-avatar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'inline-flex shrink-0',\r\n },\r\n})\r\nexport class EdAvatarComponent {\r\n @Input() initials = '?';\r\n @Input() tone: EdAvatarTone | string = 'gray';\r\n @Input() shape: EdAvatarShape = 'circle';\r\n @Input() size: EdAvatarSize = 'base';\r\n @Input({ transform: booleanAttribute }) gradient = false;\r\n\r\n @HostBinding('attr.shape')\r\n get shapeAttr(): EdAvatarShape {\r\n return this.shape;\r\n }\r\n\r\n @HostBinding('attr.size')\r\n get sizeAttr(): EdAvatarSize {\r\n return this.size;\r\n }\r\n\r\n @HostBinding('attr.data-tone')\r\n get toneAttr(): string {\r\n return this.tone;\r\n }\r\n\r\n @HostBinding('class.ed-avatar--gradient')\r\n get gradientClass(): boolean {\r\n return this.gradient;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nimport { EdButtonComponent } from '../ui/ed-button.component';\r\n\r\nimport { VOICE_RECEPTIONIST_CONFIG, VOICE_RECEPTIONIST_SESSION } from '../config';\r\nimport { AgentOnlineService } from '../services/agent-online.service';\r\nimport { EdAvatarComponent } from '../ui/ed-avatar.component';\r\nimport { EdIconButtonComponent } from '../ui/ed-icon-button.component';\r\nimport { IconComponent } from '../ui/ed-icon.component';\r\n\r\nconst PAGE_TITLES: Record<string, string> = {\r\n dashboard: 'Home',\r\n live: 'Live Calls',\r\n history: 'Call History',\r\n activities: 'Activities',\r\n tasks: 'Tasks & Follow-ups',\r\n analytics: 'Analytics',\r\n audit: 'Audit Logs',\r\n settings: 'Agent settings',\r\n knowledge: 'Knowledge Base',\r\n wizard: 'Setup Wizard',\r\n patients: 'Patients',\r\n providers: 'Providers',\r\n appointments: 'Appointments',\r\n admin: 'Admin',\r\n};\r\n\r\n@Component({\r\n selector: 'eds-topbar',\r\n imports: [IconComponent, EdButtonComponent, EdIconButtonComponent, EdAvatarComponent],\r\n templateUrl: './eds-topbar.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdsTopbarComponent {\r\n private readonly router = inject(Router);\r\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\r\n private readonly sessionAdapter = inject(VOICE_RECEPTIONIST_SESSION);\r\n private readonly agentOnline = inject(AgentOnlineService);\r\n\r\n protected readonly pageTitle = signal('Home');\r\n protected readonly online = this.agentOnline.online;\r\n protected readonly loading = this.agentOnline.loading;\r\n\r\n protected readonly userEmail = computed(() => this.sessionAdapter?.email() ?? null);\r\n protected readonly showUser = computed(() => !!this.userEmail());\r\n /** Standalone only — hide logout when embedded in EHR (`showModuleNav` false). */\r\n protected readonly showLogout = computed(\r\n () => !!this.config.showModuleNav && !!this.sessionAdapter,\r\n );\r\n\r\n protected readonly userInitials = computed(() => {\r\n const email = this.userEmail()?.trim() ?? '';\r\n if (!email) return '?';\r\n const local = email.split('@')[0] ?? '';\r\n const parts = local.split(/[._-]+/).filter(Boolean);\r\n if (parts.length >= 2) {\r\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase();\r\n }\r\n return local.slice(0, 2).toUpperCase() || '?';\r\n });\r\n\r\n protected readonly statusLabel = computed(() => {\r\n if (this.loading() && this.online() === null) return 'Checking status…';\r\n if (this.online() === null) return 'Status unknown';\r\n return this.online()\r\n ? 'AI receptionist is answering calls'\r\n : 'AI is offline — calls go to front desk';\r\n });\r\n\r\n constructor() {\r\n this.agentOnline.refresh();\r\n this.updateTitle(this.router.url);\r\n this.router.events\r\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\r\n .subscribe((e) => this.updateTitle(e.urlAfterRedirects));\r\n }\r\n\r\n protected logout(): void {\r\n this.sessionAdapter?.logout();\r\n }\r\n\r\n private updateTitle(url: string): void {\r\n const base = url.split('?')[0].split(';')[0];\r\n const segments = base.split('/').filter(Boolean);\r\n const last = segments[segments.length - 1] ?? '';\r\n const prev = segments[segments.length - 2] ?? '';\r\n\r\n if (prev === 'settings' && last === 'outbound-purposes') {\r\n this.pageTitle.set('Outbound Purposes');\r\n return;\r\n }\r\n if (prev === 'live' && last && last !== 'live') {\r\n this.pageTitle.set('Live Monitor');\r\n return;\r\n }\r\n if (prev === 'history' && last && last !== 'history') {\r\n this.pageTitle.set('Call Details');\r\n return;\r\n }\r\n this.pageTitle.set(PAGE_TITLES[last] ?? 'AI Receptionist');\r\n }\r\n}\r\n","<header class=\"sticky top-0 z-10 flex items-center justify-between gap-base border-b border-base bg-white p-sm hidden\">\r\n <div class=\"flex shrink-0 items-center gap-base\">\r\n <ed-icon name=\"reorder\" [size]=\"24\" color=\"currentColor\" class=\"text-dark\" aria-hidden=\"true\" />\r\n <nav class=\"inline-flex items-center gap-2xs fs-base text-light\" aria-label=\"Breadcrumb\">\r\n <span>AI Receptionist</span>\r\n <ed-icon name=\"chevron_right\" [size]=\"16\" color=\"currentColor\" />\r\n <span class=\"font-semibold text-dark\">{{ pageTitle() }}</span>\r\n </nav>\r\n </div>\r\n\r\n <div class=\"flex items-center gap-xs\">\r\n <div class=\"flex items-center gap-xs\">\r\n <ed-button variant=\"primary\" fill size=\"sm\">\r\n <ed-icon slot=\"prefix\" name=\"add\" [size]=\"16\" />\r\n Create\r\n </ed-button>\r\n\r\n <div class=\"relative w-72\">\r\n <input\r\n type=\"search\"\r\n class=\"form-input h-9 w-full\"\r\n placeholder=\"Search Patient...\"\r\n aria-label=\"Search Patient\"\r\n autocomplete=\"off\"\r\n />\r\n <span class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-sm text-light\" aria-hidden=\"true\">\r\n <ed-icon name=\"search\" [size]=\"20\" color=\"currentColor\" />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"inline-flex h-9 items-center gap-xs rounded-md border border-dark bg-white px-sm\"\r\n [title]=\"statusLabel()\"\r\n >\r\n <span\r\n class=\"h-xs w-xs shrink-0 rounded-full\"\r\n [class.bg-success]=\"online() === true\"\r\n [class.bg-danger]=\"online() === false\"\r\n [class.bg-dark]=\"online() === null\"\r\n aria-hidden=\"true\"\r\n ></span>\r\n <span class=\"whitespace-nowrap fs-base font-semibold text-dark\">\r\n @if (loading() && online() === null) {\r\n Checking…\r\n } @else if (online() === true) {\r\n Agent online\r\n } @else if (online() === false) {\r\n Agent offline\r\n } @else {\r\n Status unknown\r\n }\r\n </span>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex h-9 items-center gap-2xs rounded-md border border-dark bg-white px-sm text-light\"\r\n aria-label=\"Location\"\r\n >\r\n <ed-icon name=\"location_on\" [size]=\"20\" color=\"currentColor\" />\r\n <span class=\"fs-base font-medium text-light\">Venus Healthcare</span>\r\n <ed-icon name=\"caret_down\" [size]=\"20\" color=\"currentColor\" />\r\n </button>\r\n\r\n <ed-icon-button name=\"notifications\" label=\"Notifications\" size=\"md\" outline />\r\n <ed-icon-button name=\"help\" label=\"Help\" size=\"md\" outline />\r\n\r\n @if (showUser()) {\r\n <div class=\"inline-flex max-w-52 items-center gap-xs\" [title]=\"userEmail()!\">\r\n <ed-avatar shape=\"circle\" size=\"md\" tone=\"brand\" [initials]=\"userInitials()\" />\r\n <span class=\"truncate fs-sm text-light max-[1100px]:hidden\">{{ userEmail() }}</span>\r\n </div>\r\n }\r\n\r\n @if (showLogout()) {\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"logout()\"\r\n aria-label=\"Sign out\"\r\n title=\"Sign out\"\r\n >\r\n <ed-icon name=\"logout\" [size]=\"18\" color=\"currentColor\" />\r\n <span class=\"fs-base\">Log out</span>\r\n </button>\r\n }\r\n </div>\r\n</header>\r\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\r\nimport { AgentOnlineService } from '../services/agent-online.service';\r\nimport { ToastContainerComponent } from '../shared/toast-container.component';\r\nimport { EdsModuleNavComponent } from './eds-module-nav.component';\r\nimport { EdsRouteProgressComponent } from './eds-route-progress.component';\r\nimport { EdsTopbarComponent } from './eds-topbar.component';\r\n\r\n@Component({\r\n selector: 'eds-app-shell',\r\n imports: [\r\n RouterOutlet,\r\n EdsModuleNavComponent,\r\n EdsTopbarComponent,\r\n ToastContainerComponent,\r\n EdsRouteProgressComponent,\r\n ],\r\n templateUrl: './eds-app-shell.component.html',\r\n styleUrl: './eds-app-shell.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdsAppShellComponent {\r\n /** EHR embed: false (default). Standalone Voice Hub: set showModuleNav: true. */\r\n protected readonly showModuleNav = !!inject(VOICE_RECEPTIONIST_CONFIG).showModuleNav;\r\n /**\r\n * Standalone Voice Hub mounts progress on app-root. EHR embeds that only use\r\n * this shell still need a nav loader — enable when host nav is hidden.\r\n */\r\n protected readonly showRouteProgress = !this.showModuleNav;\r\n\r\n constructor() {\r\n inject(AgentOnlineService).refresh();\r\n }\r\n}\r\n","<div class=\"eds-layout flex h-screen overflow-hidden\">\r\n @if (showRouteProgress) {\r\n <eds-route-progress />\r\n }\r\n @if (showModuleNav) {\r\n <eds-module-nav />\r\n }\r\n <div class=\"eds-main flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\r\n @if (showModuleNav) {\r\n <eds-topbar />\r\n }\r\n <div class=\"eds-content flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto\">\r\n <router-outlet />\r\n </div>\r\n </div>\r\n <app-toast-container />\r\n</div>\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\n\r\nimport { createVoiceReceptionistPaths } from '../api-paths';\r\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\r\n\r\ntype SocketHandler = (...args: unknown[]) => void;\r\n\r\n/**\r\n * Single shared Socket.io connection to the `/dashboard` namespace.\r\n * Used by live calls list + per-call transcript stream.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DashboardSocketService {\r\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\r\n private readonly paths = createVoiceReceptionistPaths(this.config);\r\n\r\n readonly connected = signal(false);\r\n\r\n private socket: Socket | null = null;\r\n private refCount = 0;\r\n private readonly handlers = new Map<string, Map<SocketHandler, SocketHandler>>();\r\n private readonly connectCallbacks = new Set<() => void>();\r\n\r\n acquire(): void {\r\n this.refCount++;\r\n if (this.refCount === 1) {\r\n this.connect();\r\n }\r\n }\r\n\r\n release(): void {\r\n this.refCount = Math.max(0, this.refCount - 1);\r\n if (this.refCount === 0) {\r\n this.disconnect();\r\n }\r\n }\r\n\r\n onConnect(callback: () => void): void {\r\n this.connectCallbacks.add(callback);\r\n if (this.connected()) {\r\n callback();\r\n }\r\n }\r\n\r\n offConnect(callback: () => void): void {\r\n this.connectCallbacks.delete(callback);\r\n }\r\n\r\n on<T>(event: string, handler: (payload: T) => void): void {\r\n const wrapped: SocketHandler = (payload) => handler(payload as T);\r\n if (!this.handlers.has(event)) {\r\n this.handlers.set(event, new Map());\r\n }\r\n this.handlers.get(event)!.set(handler as SocketHandler, wrapped);\r\n\r\n if (this.socket) {\r\n this.socket.on(event, wrapped);\r\n }\r\n }\r\n\r\n off<T>(event: string, handler: (payload: T) => void): void {\r\n const eventHandlers = this.handlers.get(event);\r\n const wrapped = eventHandlers?.get(handler as SocketHandler);\r\n if (wrapped) {\r\n this.socket?.off(event, wrapped);\r\n eventHandlers!.delete(handler as SocketHandler);\r\n }\r\n }\r\n\r\n emit(event: string, payload?: unknown): void {\r\n this.socket?.emit(event, payload);\r\n }\r\n\r\n private connect(): void {\r\n if (this.config.useMockApi) {\r\n this.connected.set(true);\r\n this.fireConnectCallbacks();\r\n return;\r\n }\r\n\r\n this.socket = io(`${this.paths.apiRoot()}/dashboard`, {\r\n path: '/socket.io',\r\n transports: ['websocket'],\r\n autoConnect: false,\r\n });\r\n\r\n this.socket.on('connect', () => {\r\n this.connected.set(true);\r\n this.fireConnectCallbacks();\r\n });\r\n\r\n this.socket.on('disconnect', () => {\r\n this.connected.set(false);\r\n });\r\n\r\n this.socket.io.on('reconnect', () => {\r\n this.fireConnectCallbacks();\r\n });\r\n\r\n for (const [event, handlerMap] of this.handlers) {\r\n for (const wrapped of handlerMap.values()) {\r\n this.socket.on(event, wrapped);\r\n }\r\n }\r\n\r\n this.socket.connect();\r\n }\r\n\r\n private disconnect(): void {\r\n if (!this.socket) {\r\n this.connected.set(false);\r\n return;\r\n }\r\n\r\n for (const [event, handlerMap] of this.handlers) {\r\n for (const wrapped of handlerMap.values()) {\r\n this.socket.off(event, wrapped);\r\n }\r\n }\r\n\r\n this.socket.removeAllListeners();\r\n this.socket.disconnect();\r\n this.socket = null;\r\n this.connected.set(false);\r\n }\r\n\r\n private fireConnectCallbacks(): void {\r\n for (const cb of this.connectCallbacks) {\r\n cb();\r\n }\r\n }\r\n}\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { Subscription, filter, interval } from 'rxjs';\r\n\r\nimport { VOICE_RECEPTIONIST_CONFIG } from '../config';\r\nimport { LiveCall } from '../models/ai-receptionist.types';\r\nimport { AiReceptionistApiService } from './ai-receptionist-api.service';\r\nimport { DashboardSocketService } from './dashboard-socket.service';\r\n\r\nconst DEFAULT_POLL_MS = 12_000;\r\n\r\n/**\r\n * Shared live calls list — REST + `live_calls_updated` socket + fallback poll.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class LiveCallsListService {\r\n private readonly api = inject(AiReceptionistApiService);\r\n private readonly socket = inject(DashboardSocketService);\r\n private readonly config = inject(VOICE_RECEPTIONIST_CONFIG);\r\n\r\n readonly calls = signal<LiveCall[]>([]);\r\n readonly loading = signal(false);\r\n readonly error = signal<string | null>(null);\r\n readonly lastUpdated = signal<number | null>(null);\r\n\r\n private subscriberCount = 0;\r\n private pollSub?: Subscription;\r\n private refreshSub?: Subscription;\r\n private refreshId = 0;\r\n private visibilityHandler?: () => void;\r\n private mockPollTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n private readonly onLiveCallsUpdated = () => this.refresh(false);\r\n private readonly onSocketConnect = () => this.refresh(false);\r\n\r\n start(): void {\r\n this.subscriberCount++;\r\n if (this.subscriberCount > 1) {\r\n this.refresh(false);\r\n return;\r\n }\r\n\r\n this.socket.acquire();\r\n this.socket.on('live_calls_updated', this.onLiveCallsUpdated);\r\n this.socket.onConnect(this.onSocketConnect);\r\n this.bindVisibility();\r\n this.refresh(true);\r\n this.startFallbackPoll();\r\n }\r\n\r\n stop(): void {\r\n this.subscriberCount = Math.max(0, this.subscriberCount - 1);\r\n if (this.subscriberCount > 0) {\r\n return;\r\n }\r\n\r\n this.refreshId++;\r\n this.refreshSub?.unsubscribe();\r\n this.refreshSub = undefined;\r\n this.stopFallbackPoll();\r\n this.unbindVisibility();\r\n this.socket.off('live_calls_updated', this.onLiveCallsUpdated);\r\n this.socket.offConnect(this.onSocketConnect);\r\n this.socket.release();\r\n }\r\n\r\n refresh(showLoading = true): void {\r\n const requestId = ++this.refreshId;\r\n if (showLoading && this.calls().length === 0) {\r\n this.loading.set(true);\r\n }\r\n\r\n this.refreshSub?.unsubscribe();\r\n this.refreshSub = this.api.getLiveCalls().subscribe({\r\n next: ({ data }) => {\r\n if (requestId !== this.refreshId) return;\r\n this.calls.set(data);\r\n this.lastUpdated.set(Date.now());\r\n this.loading.set(false);\r\n this.error.set(null);\r\n },\r\n error: (err: unknown) => {\r\n if (requestId !== this.refreshId) return;\r\n this.loading.set(false);\r\n const message =\r\n err instanceof Error ? err.message : 'Could not load live calls.';\r\n this.error.set(message);\r\n },\r\n });\r\n }\r\n\r\n private startFallbackPoll(): void {\r\n const pollMs = this.config.liveCallsPollIntervalMs ?? DEFAULT_POLL_MS;\r\n\r\n if (this.config.useMockApi) {\r\n this.mockPollTimer = setInterval(() => {\r\n if (!document.hidden) {\r\n this.refresh(false);\r\n }\r\n }, pollMs);\r\n return;\r\n }\r\n\r\n this.pollSub = interval(pollMs)\r\n .pipe(filter(() => !document.hidden))\r\n .subscribe(() => this.refresh(false));\r\n }\r\n\r\n private stopFallbackPoll(): void {\r\n this.pollSub?.unsubscribe();\r\n this.pollSub = undefined;\r\n if (this.mockPollTimer) {\r\n clearInterval(this.mockPollTimer);\r\n this.mockPollTimer = null;\r\n }\r\n }\r\n\r\n private bindVisibility(): void {\r\n this.visibilityHandler = () => {\r\n if (!document.hidden) {\r\n this.refresh(false);\r\n }\r\n };\r\n document.addEventListener('visibilitychange', this.visibilityHandler);\r\n }\r\n\r\n private unbindVisibility(): void {\r\n if (this.visibilityHandler) {\r\n document.removeEventListener('visibilitychange', this.visibilityHandler);\r\n this.visibilityHandler = undefined;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\nimport { LiveCallsListService } from '../../services/live-calls-list.service';\r\n\r\n/**\r\n * Owns live-calls polling/socket for both the list and the per-call monitor\r\n * so navigating list → detail → back does not tear down the shared list.\r\n */\r\n@Component({\r\n selector: 'eds-live-calls-shell',\r\n imports: [RouterOutlet],\r\n template: '<router-outlet />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styles: `\r\n :host {\r\n display: contents;\r\n }\r\n `,\r\n})\r\nexport class LiveCallsShellComponent implements OnInit, OnDestroy {\r\n private readonly liveCallsList = inject(LiveCallsListService);\r\n\r\n ngOnInit(): void {\r\n this.liveCallsList.start();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.liveCallsList.stop();\r\n }\r\n}\r\n","import { Routes } from '@angular/router';\r\n\r\nimport { EdsAppShellComponent } from './layout/eds-app-shell.component';\r\nimport { LiveCallsShellComponent } from './pages/live-calls-page/live-calls-shell.component';\r\n\r\n/** Feature child routes (under the embed shell). */\r\nexport const VOICE_RECEPTIONIST_FEATURE_ROUTES: Routes = [\r\n { path: '', pathMatch: 'full', redirectTo: 'dashboard' },\r\n {\r\n path: 'dashboard',\r\n loadComponent: () =>\r\n import('./pages/dashboard-page/dashboard-page.component').then(\r\n (m) => m.DashboardPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'live',\r\n component: LiveCallsShellComponent,\r\n children: [\r\n {\r\n path: '',\r\n pathMatch: 'full',\r\n loadComponent: () =>\r\n import('./pages/live-calls-page/live-calls-page.component').then(\r\n (m) => m.LiveCallsPageComponent,\r\n ),\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () =>\r\n import('./pages/live-monitor-page/live-monitor-page.component').then(\r\n (m) => m.LiveMonitorPageComponent,\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n path: 'history',\r\n loadComponent: () =>\r\n import('./pages/call-history-page/call-history-page.component').then(\r\n (m) => m.CallHistoryPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'history/:id',\r\n loadComponent: () =>\r\n import('./pages/call-history-detail-page/call-history-detail-page.component').then(\r\n (m) => m.CallHistoryDetailPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'activities',\r\n loadComponent: () =>\r\n import('./pages/activities-page/activities-page.component').then(\r\n (m) => m.ActivitiesPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'tasks',\r\n loadComponent: () =>\r\n import('./pages/tasks-page/tasks-page.component').then((m) => m.TasksPageComponent),\r\n },\r\n {\r\n path: 'analytics',\r\n loadComponent: () =>\r\n import('./pages/analytics-page/analytics-page.component').then(\r\n (m) => m.AnalyticsPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'audit',\r\n loadComponent: () =>\r\n import('./pages/audit-page/audit-page.component').then(\r\n (m) => m.AuditPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'settings',\r\n loadComponent: () =>\r\n import('./pages/settings-page/settings-page.component').then(\r\n (m) => m.SettingsPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'settings/outbound-purposes',\r\n loadComponent: () =>\r\n import('./pages/outbound-purposes-page/outbound-purposes-page.component').then(\r\n (m) => m.OutboundPurposesPageComponent,\r\n ),\r\n },\r\n {\r\n path: 'knowledge',\r\n loadComponent: () =>\r\n import('./pages/settings-page/settings-page.component').then(\r\n (m) => m.SettingsPageComponent,\r\n ),\r\n data: { settingsTab: 'knowledge' },\r\n },\r\n {\r\n path: 'wizard',\r\n loadComponent: () =>\r\n import('./pages/wizard-page/wizard-page.component').then((m) => m.WizardPageComponent),\r\n },\r\n];\r\n\r\n/**\r\n * Lazy-loadable routes for EHR (and standalone hosts).\r\n * Mount under a host path, e.g. `{ path: 'ai-receptionist', children: VOICE_RECEPTIONIST_ROUTES }`.\r\n */\r\nexport const VOICE_RECEPTIONIST_ROUTES: Routes = [\r\n {\r\n path: '',\r\n component: EdsAppShellComponent,\r\n children: VOICE_RECEPTIONIST_FEATURE_ROUTES,\r\n },\r\n];\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\n/** Maps to `ed-badge-2` variant attribute values in `_badge.scss`. */\r\nexport type BadgeTone =\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'warning2'\r\n | 'danger'\r\n | 'opened'\r\n | 'light'\r\n | 'info'\r\n | 'dark'\r\n | 'muted';\r\n\r\n@Component({\r\n selector: 'eds-badge',\r\n standalone: true,\r\n template: `<span class=\"eds-badge inline-flex items-center gap-2 py-1 px-2\" [attr.data-tone]=\"tone()\"><ng-content /></span>`,\r\n styleUrl: './eds-badge.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdsBadgeComponent {\r\n readonly tone = input<BadgeTone>('light');\r\n}\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'positive';\r\n\r\n@Component({\r\n selector: 'eds-button',\r\n standalone: true,\r\n template: `\r\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\">\r\n <ng-content />\r\n </button>\r\n `,\r\n styleUrl: './eds-button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EdsButtonComponent {\r\n readonly variant = input<ButtonVariant>('secondary');\r\n readonly type = input<'button' | 'submit'>('button');\r\n readonly disabled = input(false);\r\n}\r\n","/*\r\n * Public API Surface of @edvak99/voice-receptionist-widget\r\n *\r\n * Only export host-facing symbols here. Internal pages/services stay private\r\n * and are reached via VOICE_RECEPTIONIST_ROUTES / FEATURE_ROUTES.\r\n */\r\n\r\n// Config & DI\r\nexport {\r\n VOICE_RECEPTIONIST_CONFIG,\r\n VOICE_RECEPTIONIST_SESSION,\r\n type VoiceReceptionistConfig,\r\n type VoiceReceptionistSession,\r\n} from './lib/config';\r\nexport {\r\n provideVoiceReceptionist,\r\n type ProvideVoiceReceptionistOptions,\r\n} from './lib/provide-voice-receptionist';\r\n\r\n// Routes (lazy or eager mount in host router)\r\nexport {\r\n VOICE_RECEPTIONIST_ROUTES,\r\n VOICE_RECEPTIONIST_FEATURE_ROUTES,\r\n} from './lib/routes';\r\n\r\n// Shell layout (standalone host / Voice Hub)\r\nexport { EdsAppShellComponent } from './lib/layout/eds-app-shell.component';\r\nexport { EdsRouteProgressComponent } from './lib/layout/eds-route-progress.component';\r\n\r\n// Shared UI / services hosts may reuse outside routed pages\r\nexport { ToastService, type ToastMessage } from './lib/shared/toast.service';\r\nexport { ToastContainerComponent } from './lib/shared/toast-container.component';\r\nexport { EdsBadgeComponent, type BadgeTone } from './lib/ui/eds-badge.component';\r\nexport { EdsButtonComponent } from './lib/ui/eds-button.component';\r\nexport { IconComponent as EdIconComponent, IconComponent } from './lib/ui/ed-icon.component';\r\nexport { EdAvatarComponent, type EdAvatarTone, type EdAvatarShape, type EdAvatarSize } from './lib/ui/ed-avatar.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["strOrNull","now","filter"],"mappings":"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"}
|